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