embedded.go 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559
  1. /*
  2. * Copyright (c) 2014 Kurt Jung (Gmail: kurt.w.jung)
  3. *
  4. * Permission to use, copy, modify, and distribute this software for any
  5. * purpose with or without fee is hereby granted, provided that the above
  6. * copyright notice and this permission notice appear in all copies.
  7. *
  8. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  9. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  10. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  11. * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  12. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  13. * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  14. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  15. */
  16. package gofpdf
  17. // Embedded standard fonts
  18. import (
  19. "strings"
  20. )
  21. var embeddedFontList = map[string]string{
  22. "courierBI": `{"Tp":"Core","Name":"Courier-BoldOblique","Up":-100,"Ut":50,"I":256,"Cw":[600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600]}`,
  23. "courierB": `{"Tp":"Core","Name":"Courier-Bold","Up":-100,"Ut":50,"I":256,"Cw":[600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600]}`,
  24. "courierI": `{"Tp":"Core","Name":"Courier-Oblique","Up":-100,"Ut":50,"I":256,"Cw":[600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600]}`,
  25. "courier": `{"Tp":"Core","Name":"Courier","Up":-100,"Ut":50,"I":256,"Cw":[600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600]}`,
  26. "helveticaBI": `{"Tp":"Core","Name":"Helvetica-BoldOblique","Up":-100,"Ut":50,"Cw":[278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,333,474,556,556,889,722,238,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,333,333,584,584,584,611,975,722,722,722,722,667,611,778,722,278,556,722,611,833,722,778,667,778,722,667,611,722,667,944,667,667,611,333,278,333,584,556,333,556,611,556,611,556,333,611,611,278,278,556,278,889,611,611,611,611,389,556,333,611,556,778,556,556,500,389,280,389,584,350,556,350,278,556,500,1000,556,556,333,1000,667,333,1000,350,611,350,350,278,278,500,500,350,556,1000,333,1000,556,333,944,350,500,667,278,333,556,556,556,556,280,556,333,737,370,556,584,333,737,333,400,584,333,333,333,611,556,278,333,333,365,556,834,834,834,611,722,722,722,722,722,722,1000,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,556,556,556,556,556,278,278,278,278,611,611,611,611,611,611,611,584,611,611,611,611,611,556,611,556]}`,
  27. "helveticaB": `{"Tp":"Core","Name":"Helvetica-Bold","Up":-100,"Ut":50,"Cw":[278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,333,474,556,556,889,722,238,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,333,333,584,584,584,611,975,722,722,722,722,667,611,778,722,278,556,722,611,833,722,778,667,778,722,667,611,722,667,944,667,667,611,333,278,333,584,556,333,556,611,556,611,556,333,611,611,278,278,556,278,889,611,611,611,611,389,556,333,611,556,778,556,556,500,389,280,389,584,350,556,350,278,556,500,1000,556,556,333,1000,667,333,1000,350,611,350,350,278,278,500,500,350,556,1000,333,1000,556,333,944,350,500,667,278,333,556,556,556,556,280,556,333,737,370,556,584,333,737,333,400,584,333,333,333,611,556,278,333,333,365,556,834,834,834,611,722,722,722,722,722,722,1000,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,556,556,556,556,556,278,278,278,278,611,611,611,611,611,611,611,584,611,611,611,611,611,556,611,556]}`,
  28. "helveticaI": `{"Tp":"Core","Name":"Helvetica-Oblique","Up":-100,"Ut":50,"Cw":[278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,355,556,556,889,667,191,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,278,278,584,584,584,556,1015,667,667,722,722,667,611,778,722,278,500,667,556,833,722,778,667,778,722,667,611,722,667,944,667,667,611,278,278,278,469,556,333,556,556,500,556,556,278,556,556,222,222,500,222,833,556,556,556,556,333,500,278,556,500,722,500,500,500,334,260,334,584,350,556,350,222,556,333,1000,556,556,333,1000,667,333,1000,350,611,350,350,222,222,333,333,350,556,1000,333,1000,500,333,944,350,500,667,278,333,556,556,556,556,260,556,333,737,370,556,584,333,737,333,400,584,333,333,333,556,537,278,333,333,365,556,834,834,834,611,667,667,667,667,667,667,1000,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,500,556,556,556,556,278,278,278,278,556,556,556,556,556,556,556,584,611,556,556,556,556,500,556,500]}`,
  29. "helvetica": `{"Tp":"Core","Name":"Helvetica","Up":-100,"Ut":50,"Cw":[278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,355,556,556,889,667,191,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,278,278,584,584,584,556,1015,667,667,722,722,667,611,778,722,278,500,667,556,833,722,778,667,778,722,667,611,722,667,944,667,667,611,278,278,278,469,556,333,556,556,500,556,556,278,556,556,222,222,500,222,833,556,556,556,556,333,500,278,556,500,722,500,500,500,334,260,334,584,350,556,350,222,556,333,1000,556,556,333,1000,667,333,1000,350,611,350,350,222,222,333,333,350,556,1000,333,1000,500,333,944,350,500,667,278,333,556,556,556,556,260,556,333,737,370,556,584,333,737,333,400,584,333,333,333,556,537,278,333,333,365,556,834,834,834,611,667,667,667,667,667,667,1000,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,500,556,556,556,556,278,278,278,278,556,556,556,556,556,556,556,584,611,556,556,556,556,500,556,500]}`,
  30. "timesBI": `{"Tp":"Core","Name":"Times-BoldItalic","Up":-100,"Ut":50,"Cw":[250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,389,555,500,500,833,778,278,333,333,500,570,250,333,250,278,500,500,500,500,500,500,500,500,500,500,333,333,570,570,570,500,832,667,667,667,722,667,667,722,778,389,500,667,611,889,722,722,611,722,667,556,611,722,667,889,667,611,611,333,278,333,570,500,333,500,500,444,500,444,333,500,556,278,278,500,278,778,556,500,500,500,389,389,278,556,444,667,500,444,389,348,220,348,570,350,500,350,333,500,500,1000,500,500,333,1000,556,333,944,350,611,350,350,333,333,500,500,350,500,1000,333,1000,389,333,722,350,389,611,250,389,500,500,500,500,220,500,333,747,266,500,606,333,747,333,400,570,300,300,333,576,500,250,333,300,300,500,750,750,750,500,667,667,667,667,667,667,944,667,667,667,667,667,389,389,389,389,722,722,722,722,722,722,722,570,722,722,722,722,722,611,611,500,500,500,500,500,500,500,722,444,444,444,444,444,278,278,278,278,500,556,500,500,500,500,500,570,500,556,556,556,556,444,500,444]}`,
  31. "timesB": `{"Tp":"Core","Name":"Times-Bold","Up":-100,"Ut":50,"Cw":[250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,333,555,500,500,1000,833,278,333,333,500,570,250,333,250,278,500,500,500,500,500,500,500,500,500,500,333,333,570,570,570,500,930,722,667,722,722,667,611,778,778,389,500,778,667,944,722,778,611,778,722,556,667,722,722,1000,722,722,667,333,278,333,581,500,333,500,556,444,556,444,333,500,556,278,333,556,278,833,556,500,556,556,444,389,333,556,500,722,500,500,444,394,220,394,520,350,500,350,333,500,500,1000,500,500,333,1000,556,333,1000,350,667,350,350,333,333,500,500,350,500,1000,333,1000,389,333,722,350,444,722,250,333,500,500,500,500,220,500,333,747,300,500,570,333,747,333,400,570,300,300,333,556,540,250,333,300,330,500,750,750,750,500,722,722,722,722,722,722,1000,722,667,667,667,667,389,389,389,389,722,722,778,778,778,778,778,570,778,722,722,722,722,722,611,556,500,500,500,500,500,500,722,444,444,444,444,444,278,278,278,278,500,556,500,500,500,500,500,570,500,556,556,556,556,500,556,500]}`,
  32. "timesI": `{"Tp":"Core","Name":"Times-Italic","Up":-100,"Ut":50,"Cw":[250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,333,420,500,500,833,778,214,333,333,500,675,250,333,250,278,500,500,500,500,500,500,500,500,500,500,333,333,675,675,675,500,920,611,611,667,722,611,611,722,722,333,444,667,556,833,667,722,611,722,611,500,556,722,611,833,611,556,556,389,278,389,422,500,333,500,500,444,500,444,278,500,500,278,278,444,278,722,500,500,500,500,389,389,278,500,444,667,444,444,389,400,275,400,541,350,500,350,333,500,556,889,500,500,333,1000,500,333,944,350,556,350,350,333,333,556,556,350,500,889,333,980,389,333,667,350,389,556,250,389,500,500,500,500,275,500,333,760,276,500,675,333,760,333,400,675,300,300,333,500,523,250,333,300,310,500,750,750,750,500,611,611,611,611,611,611,889,667,611,611,611,611,333,333,333,333,722,667,722,722,722,722,722,675,722,722,722,722,722,556,611,500,500,500,500,500,500,500,667,444,444,444,444,444,278,278,278,278,500,500,500,500,500,500,500,675,500,500,500,500,500,444,500,444]}`,
  33. "times": `{"Tp":"Core","Name":"Times-Roman","Up":-100,"Ut":50,"Cw":[250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,333,408,500,500,833,778,180,333,333,500,564,250,333,250,278,500,500,500,500,500,500,500,500,500,500,278,278,564,564,564,444,921,722,667,667,722,611,556,722,722,333,389,722,611,889,722,722,556,722,667,556,611,722,722,944,722,722,611,333,278,333,469,500,333,444,500,444,500,444,333,500,500,278,278,500,278,778,500,500,500,500,333,389,278,500,500,722,500,500,444,480,200,480,541,350,500,350,333,500,444,1000,500,500,333,1000,556,333,889,350,611,350,350,333,333,444,444,350,500,1000,333,980,389,333,722,350,444,722,250,333,500,500,500,500,200,500,333,760,276,500,564,333,760,333,400,564,300,300,333,500,453,250,333,300,310,500,750,750,750,444,722,722,722,722,722,722,889,667,611,611,611,611,333,333,333,333,722,722,722,722,722,722,722,564,722,722,722,722,722,722,556,500,444,444,444,444,444,444,667,444,444,444,444,444,278,278,278,278,500,500,500,500,500,500,500,564,500,500,500,500,500,500,500,500]}`,
  34. "zapfdingbats": `{"Tp":"Core","Name":"ZapfDingbats","Up":-100,"Ut":50,"Cw":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,278,974,961,974,980,719,789,790,791,690,960,939,549,855,911,933,911,945,974,755,846,762,761,571,677,763,760,759,754,494,552,537,577,692,786,788,788,790,793,794,816,823,789,841,823,833,816,831,923,744,723,749,790,792,695,776,768,792,759,707,708,682,701,826,815,789,789,707,687,696,689,786,787,713,791,785,791,873,761,762,762,759,759,892,892,788,784,438,138,277,415,392,392,668,668,0,390,390,317,317,276,276,509,509,410,410,234,234,334,334,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,732,544,544,910,667,760,760,776,595,694,626,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,894,838,1016,458,748,924,748,918,927,928,928,834,873,828,924,924,917,930,931,463,883,836,836,867,867,696,696,874,0,874,760,946,771,865,771,888,967,888,831,873,927,970,918,0]}`,
  35. }
  36. func (f *Fpdf) coreFontReader(familyStr, styleStr string) (r *strings.Reader) {
  37. key := familyStr + styleStr
  38. str, ok := embeddedFontList[key]
  39. if ok {
  40. r = strings.NewReader(str)
  41. } else {
  42. f.SetErrorf("could not locate \"%s\" among embedded core font definition files", key)
  43. }
  44. return
  45. }
  46. var embeddedMapList = map[string]string{
  47. "cp1250": `
  48. !00 U+0000 .notdef
  49. !01 U+0001 .notdef
  50. !02 U+0002 .notdef
  51. !03 U+0003 .notdef
  52. !04 U+0004 .notdef
  53. !05 U+0005 .notdef
  54. !06 U+0006 .notdef
  55. !07 U+0007 .notdef
  56. !08 U+0008 .notdef
  57. !09 U+0009 .notdef
  58. !0A U+000A .notdef
  59. !0B U+000B .notdef
  60. !0C U+000C .notdef
  61. !0D U+000D .notdef
  62. !0E U+000E .notdef
  63. !0F U+000F .notdef
  64. !10 U+0010 .notdef
  65. !11 U+0011 .notdef
  66. !12 U+0012 .notdef
  67. !13 U+0013 .notdef
  68. !14 U+0014 .notdef
  69. !15 U+0015 .notdef
  70. !16 U+0016 .notdef
  71. !17 U+0017 .notdef
  72. !18 U+0018 .notdef
  73. !19 U+0019 .notdef
  74. !1A U+001A .notdef
  75. !1B U+001B .notdef
  76. !1C U+001C .notdef
  77. !1D U+001D .notdef
  78. !1E U+001E .notdef
  79. !1F U+001F .notdef
  80. !20 U+0020 space
  81. !21 U+0021 exclam
  82. !22 U+0022 quotedbl
  83. !23 U+0023 numbersign
  84. !24 U+0024 dollar
  85. !25 U+0025 percent
  86. !26 U+0026 ampersand
  87. !27 U+0027 quotesingle
  88. !28 U+0028 parenleft
  89. !29 U+0029 parenright
  90. !2A U+002A asterisk
  91. !2B U+002B plus
  92. !2C U+002C comma
  93. !2D U+002D hyphen
  94. !2E U+002E period
  95. !2F U+002F slash
  96. !30 U+0030 zero
  97. !31 U+0031 one
  98. !32 U+0032 two
  99. !33 U+0033 three
  100. !34 U+0034 four
  101. !35 U+0035 five
  102. !36 U+0036 six
  103. !37 U+0037 seven
  104. !38 U+0038 eight
  105. !39 U+0039 nine
  106. !3A U+003A colon
  107. !3B U+003B semicolon
  108. !3C U+003C less
  109. !3D U+003D equal
  110. !3E U+003E greater
  111. !3F U+003F question
  112. !40 U+0040 at
  113. !41 U+0041 A
  114. !42 U+0042 B
  115. !43 U+0043 C
  116. !44 U+0044 D
  117. !45 U+0045 E
  118. !46 U+0046 F
  119. !47 U+0047 G
  120. !48 U+0048 H
  121. !49 U+0049 I
  122. !4A U+004A J
  123. !4B U+004B K
  124. !4C U+004C L
  125. !4D U+004D M
  126. !4E U+004E N
  127. !4F U+004F O
  128. !50 U+0050 P
  129. !51 U+0051 Q
  130. !52 U+0052 R
  131. !53 U+0053 S
  132. !54 U+0054 T
  133. !55 U+0055 U
  134. !56 U+0056 V
  135. !57 U+0057 W
  136. !58 U+0058 X
  137. !59 U+0059 Y
  138. !5A U+005A Z
  139. !5B U+005B bracketleft
  140. !5C U+005C backslash
  141. !5D U+005D bracketright
  142. !5E U+005E asciicircum
  143. !5F U+005F underscore
  144. !60 U+0060 grave
  145. !61 U+0061 a
  146. !62 U+0062 b
  147. !63 U+0063 c
  148. !64 U+0064 d
  149. !65 U+0065 e
  150. !66 U+0066 f
  151. !67 U+0067 g
  152. !68 U+0068 h
  153. !69 U+0069 i
  154. !6A U+006A j
  155. !6B U+006B k
  156. !6C U+006C l
  157. !6D U+006D m
  158. !6E U+006E n
  159. !6F U+006F o
  160. !70 U+0070 p
  161. !71 U+0071 q
  162. !72 U+0072 r
  163. !73 U+0073 s
  164. !74 U+0074 t
  165. !75 U+0075 u
  166. !76 U+0076 v
  167. !77 U+0077 w
  168. !78 U+0078 x
  169. !79 U+0079 y
  170. !7A U+007A z
  171. !7B U+007B braceleft
  172. !7C U+007C bar
  173. !7D U+007D braceright
  174. !7E U+007E asciitilde
  175. !7F U+007F .notdef
  176. !80 U+20AC Euro
  177. !82 U+201A quotesinglbase
  178. !84 U+201E quotedblbase
  179. !85 U+2026 ellipsis
  180. !86 U+2020 dagger
  181. !87 U+2021 daggerdbl
  182. !89 U+2030 perthousand
  183. !8A U+0160 Scaron
  184. !8B U+2039 guilsinglleft
  185. !8C U+015A Sacute
  186. !8D U+0164 Tcaron
  187. !8E U+017D Zcaron
  188. !8F U+0179 Zacute
  189. !91 U+2018 quoteleft
  190. !92 U+2019 quoteright
  191. !93 U+201C quotedblleft
  192. !94 U+201D quotedblright
  193. !95 U+2022 bullet
  194. !96 U+2013 endash
  195. !97 U+2014 emdash
  196. !99 U+2122 trademark
  197. !9A U+0161 scaron
  198. !9B U+203A guilsinglright
  199. !9C U+015B sacute
  200. !9D U+0165 tcaron
  201. !9E U+017E zcaron
  202. !9F U+017A zacute
  203. !A0 U+00A0 space
  204. !A1 U+02C7 caron
  205. !A2 U+02D8 breve
  206. !A3 U+0141 Lslash
  207. !A4 U+00A4 currency
  208. !A5 U+0104 Aogonek
  209. !A6 U+00A6 brokenbar
  210. !A7 U+00A7 section
  211. !A8 U+00A8 dieresis
  212. !A9 U+00A9 copyright
  213. !AA U+015E Scedilla
  214. !AB U+00AB guillemotleft
  215. !AC U+00AC logicalnot
  216. !AD U+00AD hyphen
  217. !AE U+00AE registered
  218. !AF U+017B Zdotaccent
  219. !B0 U+00B0 degree
  220. !B1 U+00B1 plusminus
  221. !B2 U+02DB ogonek
  222. !B3 U+0142 lslash
  223. !B4 U+00B4 acute
  224. !B5 U+00B5 mu
  225. !B6 U+00B6 paragraph
  226. !B7 U+00B7 periodcentered
  227. !B8 U+00B8 cedilla
  228. !B9 U+0105 aogonek
  229. !BA U+015F scedilla
  230. !BB U+00BB guillemotright
  231. !BC U+013D Lcaron
  232. !BD U+02DD hungarumlaut
  233. !BE U+013E lcaron
  234. !BF U+017C zdotaccent
  235. !C0 U+0154 Racute
  236. !C1 U+00C1 Aacute
  237. !C2 U+00C2 Acircumflex
  238. !C3 U+0102 Abreve
  239. !C4 U+00C4 Adieresis
  240. !C5 U+0139 Lacute
  241. !C6 U+0106 Cacute
  242. !C7 U+00C7 Ccedilla
  243. !C8 U+010C Ccaron
  244. !C9 U+00C9 Eacute
  245. !CA U+0118 Eogonek
  246. !CB U+00CB Edieresis
  247. !CC U+011A Ecaron
  248. !CD U+00CD Iacute
  249. !CE U+00CE Icircumflex
  250. !CF U+010E Dcaron
  251. !D0 U+0110 Dcroat
  252. !D1 U+0143 Nacute
  253. !D2 U+0147 Ncaron
  254. !D3 U+00D3 Oacute
  255. !D4 U+00D4 Ocircumflex
  256. !D5 U+0150 Ohungarumlaut
  257. !D6 U+00D6 Odieresis
  258. !D7 U+00D7 multiply
  259. !D8 U+0158 Rcaron
  260. !D9 U+016E Uring
  261. !DA U+00DA Uacute
  262. !DB U+0170 Uhungarumlaut
  263. !DC U+00DC Udieresis
  264. !DD U+00DD Yacute
  265. !DE U+0162 Tcommaaccent
  266. !DF U+00DF germandbls
  267. !E0 U+0155 racute
  268. !E1 U+00E1 aacute
  269. !E2 U+00E2 acircumflex
  270. !E3 U+0103 abreve
  271. !E4 U+00E4 adieresis
  272. !E5 U+013A lacute
  273. !E6 U+0107 cacute
  274. !E7 U+00E7 ccedilla
  275. !E8 U+010D ccaron
  276. !E9 U+00E9 eacute
  277. !EA U+0119 eogonek
  278. !EB U+00EB edieresis
  279. !EC U+011B ecaron
  280. !ED U+00ED iacute
  281. !EE U+00EE icircumflex
  282. !EF U+010F dcaron
  283. !F0 U+0111 dcroat
  284. !F1 U+0144 nacute
  285. !F2 U+0148 ncaron
  286. !F3 U+00F3 oacute
  287. !F4 U+00F4 ocircumflex
  288. !F5 U+0151 ohungarumlaut
  289. !F6 U+00F6 odieresis
  290. !F7 U+00F7 divide
  291. !F8 U+0159 rcaron
  292. !F9 U+016F uring
  293. !FA U+00FA uacute
  294. !FB U+0171 uhungarumlaut
  295. !FC U+00FC udieresis
  296. !FD U+00FD yacute
  297. !FE U+0163 tcommaaccent
  298. !FF U+02D9 dotaccent
  299. `,
  300. "cp1252": `
  301. !00 U+0000 .notdef
  302. !01 U+0001 .notdef
  303. !02 U+0002 .notdef
  304. !03 U+0003 .notdef
  305. !04 U+0004 .notdef
  306. !05 U+0005 .notdef
  307. !06 U+0006 .notdef
  308. !07 U+0007 .notdef
  309. !08 U+0008 .notdef
  310. !09 U+0009 .notdef
  311. !0A U+000A .notdef
  312. !0B U+000B .notdef
  313. !0C U+000C .notdef
  314. !0D U+000D .notdef
  315. !0E U+000E .notdef
  316. !0F U+000F .notdef
  317. !10 U+0010 .notdef
  318. !11 U+0011 .notdef
  319. !12 U+0012 .notdef
  320. !13 U+0013 .notdef
  321. !14 U+0014 .notdef
  322. !15 U+0015 .notdef
  323. !16 U+0016 .notdef
  324. !17 U+0017 .notdef
  325. !18 U+0018 .notdef
  326. !19 U+0019 .notdef
  327. !1A U+001A .notdef
  328. !1B U+001B .notdef
  329. !1C U+001C .notdef
  330. !1D U+001D .notdef
  331. !1E U+001E .notdef
  332. !1F U+001F .notdef
  333. !20 U+0020 space
  334. !21 U+0021 exclam
  335. !22 U+0022 quotedbl
  336. !23 U+0023 numbersign
  337. !24 U+0024 dollar
  338. !25 U+0025 percent
  339. !26 U+0026 ampersand
  340. !27 U+0027 quotesingle
  341. !28 U+0028 parenleft
  342. !29 U+0029 parenright
  343. !2A U+002A asterisk
  344. !2B U+002B plus
  345. !2C U+002C comma
  346. !2D U+002D hyphen
  347. !2E U+002E period
  348. !2F U+002F slash
  349. !30 U+0030 zero
  350. !31 U+0031 one
  351. !32 U+0032 two
  352. !33 U+0033 three
  353. !34 U+0034 four
  354. !35 U+0035 five
  355. !36 U+0036 six
  356. !37 U+0037 seven
  357. !38 U+0038 eight
  358. !39 U+0039 nine
  359. !3A U+003A colon
  360. !3B U+003B semicolon
  361. !3C U+003C less
  362. !3D U+003D equal
  363. !3E U+003E greater
  364. !3F U+003F question
  365. !40 U+0040 at
  366. !41 U+0041 A
  367. !42 U+0042 B
  368. !43 U+0043 C
  369. !44 U+0044 D
  370. !45 U+0045 E
  371. !46 U+0046 F
  372. !47 U+0047 G
  373. !48 U+0048 H
  374. !49 U+0049 I
  375. !4A U+004A J
  376. !4B U+004B K
  377. !4C U+004C L
  378. !4D U+004D M
  379. !4E U+004E N
  380. !4F U+004F O
  381. !50 U+0050 P
  382. !51 U+0051 Q
  383. !52 U+0052 R
  384. !53 U+0053 S
  385. !54 U+0054 T
  386. !55 U+0055 U
  387. !56 U+0056 V
  388. !57 U+0057 W
  389. !58 U+0058 X
  390. !59 U+0059 Y
  391. !5A U+005A Z
  392. !5B U+005B bracketleft
  393. !5C U+005C backslash
  394. !5D U+005D bracketright
  395. !5E U+005E asciicircum
  396. !5F U+005F underscore
  397. !60 U+0060 grave
  398. !61 U+0061 a
  399. !62 U+0062 b
  400. !63 U+0063 c
  401. !64 U+0064 d
  402. !65 U+0065 e
  403. !66 U+0066 f
  404. !67 U+0067 g
  405. !68 U+0068 h
  406. !69 U+0069 i
  407. !6A U+006A j
  408. !6B U+006B k
  409. !6C U+006C l
  410. !6D U+006D m
  411. !6E U+006E n
  412. !6F U+006F o
  413. !70 U+0070 p
  414. !71 U+0071 q
  415. !72 U+0072 r
  416. !73 U+0073 s
  417. !74 U+0074 t
  418. !75 U+0075 u
  419. !76 U+0076 v
  420. !77 U+0077 w
  421. !78 U+0078 x
  422. !79 U+0079 y
  423. !7A U+007A z
  424. !7B U+007B braceleft
  425. !7C U+007C bar
  426. !7D U+007D braceright
  427. !7E U+007E asciitilde
  428. !7F U+007F .notdef
  429. !80 U+20AC Euro
  430. !82 U+201A quotesinglbase
  431. !83 U+0192 florin
  432. !84 U+201E quotedblbase
  433. !85 U+2026 ellipsis
  434. !86 U+2020 dagger
  435. !87 U+2021 daggerdbl
  436. !88 U+02C6 circumflex
  437. !89 U+2030 perthousand
  438. !8A U+0160 Scaron
  439. !8B U+2039 guilsinglleft
  440. !8C U+0152 OE
  441. !8E U+017D Zcaron
  442. !91 U+2018 quoteleft
  443. !92 U+2019 quoteright
  444. !93 U+201C quotedblleft
  445. !94 U+201D quotedblright
  446. !95 U+2022 bullet
  447. !96 U+2013 endash
  448. !97 U+2014 emdash
  449. !98 U+02DC tilde
  450. !99 U+2122 trademark
  451. !9A U+0161 scaron
  452. !9B U+203A guilsinglright
  453. !9C U+0153 oe
  454. !9E U+017E zcaron
  455. !9F U+0178 Ydieresis
  456. !A0 U+00A0 space
  457. !A1 U+00A1 exclamdown
  458. !A2 U+00A2 cent
  459. !A3 U+00A3 sterling
  460. !A4 U+00A4 currency
  461. !A5 U+00A5 yen
  462. !A6 U+00A6 brokenbar
  463. !A7 U+00A7 section
  464. !A8 U+00A8 dieresis
  465. !A9 U+00A9 copyright
  466. !AA U+00AA ordfeminine
  467. !AB U+00AB guillemotleft
  468. !AC U+00AC logicalnot
  469. !AD U+00AD hyphen
  470. !AE U+00AE registered
  471. !AF U+00AF macron
  472. !B0 U+00B0 degree
  473. !B1 U+00B1 plusminus
  474. !B2 U+00B2 twosuperior
  475. !B3 U+00B3 threesuperior
  476. !B4 U+00B4 acute
  477. !B5 U+00B5 mu
  478. !B6 U+00B6 paragraph
  479. !B7 U+00B7 periodcentered
  480. !B8 U+00B8 cedilla
  481. !B9 U+00B9 onesuperior
  482. !BA U+00BA ordmasculine
  483. !BB U+00BB guillemotright
  484. !BC U+00BC onequarter
  485. !BD U+00BD onehalf
  486. !BE U+00BE threequarters
  487. !BF U+00BF questiondown
  488. !C0 U+00C0 Agrave
  489. !C1 U+00C1 Aacute
  490. !C2 U+00C2 Acircumflex
  491. !C3 U+00C3 Atilde
  492. !C4 U+00C4 Adieresis
  493. !C5 U+00C5 Aring
  494. !C6 U+00C6 AE
  495. !C7 U+00C7 Ccedilla
  496. !C8 U+00C8 Egrave
  497. !C9 U+00C9 Eacute
  498. !CA U+00CA Ecircumflex
  499. !CB U+00CB Edieresis
  500. !CC U+00CC Igrave
  501. !CD U+00CD Iacute
  502. !CE U+00CE Icircumflex
  503. !CF U+00CF Idieresis
  504. !D0 U+00D0 Eth
  505. !D1 U+00D1 Ntilde
  506. !D2 U+00D2 Ograve
  507. !D3 U+00D3 Oacute
  508. !D4 U+00D4 Ocircumflex
  509. !D5 U+00D5 Otilde
  510. !D6 U+00D6 Odieresis
  511. !D7 U+00D7 multiply
  512. !D8 U+00D8 Oslash
  513. !D9 U+00D9 Ugrave
  514. !DA U+00DA Uacute
  515. !DB U+00DB Ucircumflex
  516. !DC U+00DC Udieresis
  517. !DD U+00DD Yacute
  518. !DE U+00DE Thorn
  519. !DF U+00DF germandbls
  520. !E0 U+00E0 agrave
  521. !E1 U+00E1 aacute
  522. !E2 U+00E2 acircumflex
  523. !E3 U+00E3 atilde
  524. !E4 U+00E4 adieresis
  525. !E5 U+00E5 aring
  526. !E6 U+00E6 ae
  527. !E7 U+00E7 ccedilla
  528. !E8 U+00E8 egrave
  529. !E9 U+00E9 eacute
  530. !EA U+00EA ecircumflex
  531. !EB U+00EB edieresis
  532. !EC U+00EC igrave
  533. !ED U+00ED iacute
  534. !EE U+00EE icircumflex
  535. !EF U+00EF idieresis
  536. !F0 U+00F0 eth
  537. !F1 U+00F1 ntilde
  538. !F2 U+00F2 ograve
  539. !F3 U+00F3 oacute
  540. !F4 U+00F4 ocircumflex
  541. !F5 U+00F5 otilde
  542. !F6 U+00F6 odieresis
  543. !F7 U+00F7 divide
  544. !F8 U+00F8 oslash
  545. !F9 U+00F9 ugrave
  546. !FA U+00FA uacute
  547. !FB U+00FB ucircumflex
  548. !FC U+00FC udieresis
  549. !FD U+00FD yacute
  550. !FE U+00FE thorn
  551. !FF U+00FF ydieresis
  552. `,
  553. }