summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorGraeme Geldenhuys <graemeg@gmail.com>2014-08-20 02:11:13 +0100
committerGraeme Geldenhuys <graemeg@gmail.com>2014-08-20 02:11:13 +0100
commitc8acc2c1666015daeb3038c838e5018c0ecd8903 (patch)
tree5ad2edaf0e5fb6be146491226dca4d915333d80d /tools
parentc45010b6370b50f8e6192ddb7dc3d7762c8c29f7 (diff)
parentd0d8573b046e5020d05c86a970d303084de19b7d (diff)
downloadfpGUI-c8acc2c1666015daeb3038c838e5018c0ecd8903.tar.xz
Merge branch 'release-1.2' into master
Diffstat (limited to 'tools')
-rw-r--r--tools/imageconvert/extrafpc.cfg9
-rw-r--r--tools/makefont/makefonts.lpi70
-rw-r--r--tools/makefont/makefonts.lpr26
-rw-r--r--tools/makefont/readme.txt43
-rw-r--r--tools/makefont/u_data.pas2053
-rw-r--r--tools/makefont/u_main.pas120
-rw-r--r--tools/makefont/u_parsettf.pas708
7 files changed, 3029 insertions, 0 deletions
diff --git a/tools/imageconvert/extrafpc.cfg b/tools/imageconvert/extrafpc.cfg
new file mode 100644
index 00000000..7e5a5fd8
--- /dev/null
+++ b/tools/imageconvert/extrafpc.cfg
@@ -0,0 +1,9 @@
+-FUunits
+-Fu../../lib/$fpctarget
+-Xs
+-XX
+-CX
+#ifdef mswindows
+-WG
+#endif
+
diff --git a/tools/makefont/makefonts.lpi b/tools/makefont/makefonts.lpi
new file mode 100644
index 00000000..1e365c4d
--- /dev/null
+++ b/tools/makefont/makefonts.lpi
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+ <ProjectOptions>
+ <Version Value="9"/>
+ <General>
+ <SessionStorage Value="InProjectDir"/>
+ <MainUnit Value="0"/>
+ <Title Value="makefonts"/>
+ <UseAppBundle Value="False"/>
+ <ResourceType Value="res"/>
+ </General>
+ <i18n>
+ <EnableI18N LFM="False"/>
+ </i18n>
+ <VersionInfo>
+ <StringTable ProductVersion=""/>
+ </VersionInfo>
+ <BuildModes Count="1">
+ <Item1 Name="default" Default="True"/>
+ </BuildModes>
+ <PublishOptions>
+ <Version Value="2"/>
+ </PublishOptions>
+ <RunParams>
+ <local>
+ <FormatVersion Value="1"/>
+ </local>
+ </RunParams>
+ <RequiredPackages Count="1">
+ <Item1>
+ <PackageName Value="fpgui_toolkit"/>
+ </Item1>
+ </RequiredPackages>
+ <Units Count="1">
+ <Unit0>
+ <Filename Value="makefonts.lpr"/>
+ <IsPartOfProject Value="True"/>
+ </Unit0>
+ </Units>
+ </ProjectOptions>
+ <CompilerOptions>
+ <Version Value="11"/>
+ <SearchPaths>
+ <IncludeFiles Value="$(ProjOutDir)"/>
+ <OtherUnitFiles Value="."/>
+ <UnitOutputDirectory Value="units/$(TargetCPU)-$(TargetOS)"/>
+ </SearchPaths>
+ <Parsing>
+ <SyntaxOptions>
+ <AllowLabel Value="False"/>
+ </SyntaxOptions>
+ </Parsing>
+ <Other>
+ <CompilerPath Value="$(CompPath)"/>
+ </Other>
+ </CompilerOptions>
+ <Debugging>
+ <Exceptions Count="3">
+ <Item1>
+ <Name Value="EAbort"/>
+ </Item1>
+ <Item2>
+ <Name Value="ECodetoolError"/>
+ </Item2>
+ <Item3>
+ <Name Value="EFOpenError"/>
+ </Item3>
+ </Exceptions>
+ </Debugging>
+</CONFIG>
diff --git a/tools/makefont/makefonts.lpr b/tools/makefont/makefonts.lpr
new file mode 100644
index 00000000..c54918ea
--- /dev/null
+++ b/tools/makefont/makefonts.lpr
@@ -0,0 +1,26 @@
+program makefonts;
+
+{$mode objfpc}{$H+}
+
+uses
+ Classes,
+ fpg_main, u_main, u_parsettf, u_data ;
+
+{.$R *.res}
+
+procedure MainProc;
+begin
+fpgApplication.Initialize;
+F_MainForm:= TF_MainForm.Create(nil);
+try
+ F_MainForm.Show;
+ fpgApplication.Run;
+finally
+ F_MainForm.Free;
+ end;
+end;
+
+begin
+MainProc;
+end.
+
diff --git a/tools/makefont/readme.txt b/tools/makefont/readme.txt
new file mode 100644
index 00000000..ccb25d4e
--- /dev/null
+++ b/tools/makefont/readme.txt
@@ -0,0 +1,43 @@
+------[Forwarded message from Jean-Marc Levecque]------
+
+Hi,
+
+Here is a first step in embedding true type fonts in the report tool.
+
+Attached is a set of patches for u_pdf and u_demo to show how it works.
+
+In addition, I wrote a utility to create the definition file for any ttf
+file, called makefonts. I gave the *.fnt extension to the generated font
+definition file.
+
+A major problem is to compress the ttf file.
+From the site fpdf.org, I found a way to get this compressed file done
+by use of the zlib library.
+If anybody knows how to do the equivalent compression using fpc, that
+would be really great.
+For now, on this site, going to Tutorials>Tutorial 7, then down to see
+the link to "on line", one can select a ttf file, choose the encoding
+and download the *.z file which is the compressed embeddable file for pdf.
+
+To simplify the tests, I have attached the *.fnt and *.z files for all
+DejaVu and Liberation fonts I have on my distribution. These files can
+be put anywhere, as the demo requires to select the directoy containing
+them.
+They are all encoded with cp1252 which is a Microsoft extension of
+ISO-8859-1, and it would be easy to get any other encoding.
+
+I also tried to use Microsoft Comic font, but despite they are installed
+on my PC, they do not show up correctly in the preview, while due to the
+embedding, they display correctly in pdf.
+
+Trying to embed uncompressed ttf files does not seem to work, but as per
+pdf specification, it should. I must have missed something :(
+
+Another tool may be used if one wants to use a font from a different
+format: from the site freeconverter.com, it is possible to convert a
+font file from a format to another one, with a large choice of formats.
+
+Remember that font licence may not allow embedding.
+
+Best regards
+Jean-Marc
diff --git a/tools/makefont/u_data.pas b/tools/makefont/u_data.pas
new file mode 100644
index 00000000..bb2ae980
--- /dev/null
+++ b/tools/makefont/u_data.pas
@@ -0,0 +1,2053 @@
+unit u_data;
+
+{$mode objfpc}
+
+interface
+
+uses
+ Classes, SysUtils;
+
+const
+ cp874_n: array[0..255] of string =
+ ('.notdef', '.notdef', '.notdef', '.notdef', // 00 to 03
+ '.notdef', '.notdef', '.notdef', '.notdef', // 04 to 07
+ '.notdef', '.notdef', '.notdef', '.notdef', // 08 to 0B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 0C to 0F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 10 to 13
+ '.notdef', '.notdef', '.notdef', '.notdef', // 14 to 17
+ '.notdef', '.notdef', '.notdef', '.notdef', // 18 to 1B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 1C to 1F
+ 'space', 'exclam', 'quotedbl', 'numbersign', // 20 to 23
+ 'dollar', 'percent', 'ampersand', 'quotesingle', // 24 to 27
+ 'parenleft', 'parenright', 'asterisk', 'plus', // 28 to 2B
+ 'comma', 'hyphen', 'period', 'slash', // 2C to 2F
+ 'zero', 'one', 'two', 'three', // 30 to 33
+ 'four', 'five', 'six', 'seven', // 34 to 37
+ 'eight', 'nine', 'colon', 'semicolon', // 38 to 3B
+ 'less', 'equal', 'greater', 'question', // 3C to 3F
+ 'at', 'A', 'B', 'C', // 40 to 43
+ 'D', 'E', 'F', 'G', // 44 to 47
+ 'H', 'I', 'J', 'K', // 48 to 4B
+ 'L', 'M', 'N', 'O', // 4C to 4F
+ 'P', 'Q', 'R', 'S', // 50 to 53
+ 'T', 'U', 'V', 'W', // 54 to 57
+ 'X', 'Y', 'Z', 'bracketleft', // 58 to 5B
+ 'backslash', 'bracketright', 'asciicircum', 'underscore', // 5C to 5F
+ 'grave', 'a', 'b', 'c', // 60 to 63
+ 'd', 'e', 'f', 'g', // 64 to 67
+ 'h', 'i', 'j', 'k', // 68 to 6B
+ 'l', 'm', 'n', 'o', // 6C to 6F
+ 'p', 'q', 'r', 's', // 70 to 73
+ 't', 'u', 'v', 'w', // 74 to 77
+ 'x', 'y', 'z', 'braceleft', // 78 to 7B
+ 'bar', 'braceright', 'asciitilde', '.notdef', // 7C to 7F
+ 'Euro', '.notdef', '.notdef', '.notdef', // 80 to 83
+ '.notdef', 'ellipsis', '.notdef', '.notdef', // 84 to 87
+ '.notdef', '.notdef', '.notdef', '.notdef', // 88 to 8B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 8C to 8F
+ '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', // 90 to 93
+ 'quotedblright', 'bullet', 'endash', 'emdash', // 94 to 97
+ '.notdef', '.notdef', '.notdef', '.notdef', // 98 to 9B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 9C to 9F
+ 'space', 'kokaithai', 'khokhaithai', 'khokhuatthai', // A0 to A3
+ 'khokhwaithai', 'khokhonthai', 'khorakhangthai', 'ngonguthai', // A4 to A7
+ 'chochanthai', 'chochingthai', 'chochangthai', 'sosothai', // A8 to AB
+ 'chochoethai', 'yoyingthai', 'dochadathai', 'topatakthai', // AC to AF
+ 'thothanthai', 'thonangmonthothai','thophuthaothai', 'nonenthai', // B0 to B3
+ 'dodekthai', 'totaothai', 'thothungthai', 'thothahanthai', // B4 to B7
+ 'thothongthai', 'nonuthai', 'bobaimaithai', 'poplathai', // B8 to BB
+ 'phophungthai', 'fofathai', 'phophanthai', 'fofanthai', // BC to BF
+ 'phosamphaothai', 'momathai', 'yoyakthai', 'roruathai', // C0 to C3
+ 'ruthai', 'lolingthai', 'luthai', 'wowaenthai', // C4 to C7
+ 'sosalathai', 'sorusithai', 'sosuathai', 'hohipthai', // C8 to CB
+ 'lochulathai', 'oangthai', 'honokhukthai', 'paiyannoithai', // CC to CF
+ 'saraathai', 'maihanakatthai', 'saraaathai', 'saraamthai', // D0 to D3
+ 'saraithai', 'saraiithai', 'sarauethai', 'saraueethai', // D4 to D7
+ 'sarauthai', 'sarauuthai', 'phinthuthai', '.notdef', // D8 to DB
+ '.notdef', '.notdef', '.notdef', 'bahtthai', // DC to DF
+ 'saraethai', 'saraaethai', 'saraothai', 'saraaimaimuanthai', // E0 to E3
+ 'saraaimaimalaithai','lakkhangyaothai', 'maiyamokthai', 'maitaikhuthai', // E4 to E7
+ 'maiekthai', 'maithothai', 'maitrithai', 'maichattawathai', // E8 to EB
+ 'thanthakhatthai', 'nikhahitthai', 'yamakkanthai', 'fongmanthai', // EC to EF
+ 'zerothai', 'onethai', 'twothai', 'threethai', // F0 to F3
+ 'fourthai', 'fivethai', 'sixthai', 'seventhai', // F4 to F7
+ 'eightthai', 'ninethai', 'angkhankhuthai', 'khomutthai', // F8 to FB
+ '.notdef', '.notdef', '.notdef', '.notdef'); // FC to FF
+
+const
+ cp874_v: array[0..255] of Word =
+ (0, 1, 2, 3, 4, 5, 6, 7, // 00 to 07
+ 8, 9, 10, 11, 12, 13, 14, 15, // 08 to 0F
+ 16, 17, 18, 19, 20, 21, 22, 23, // 10 to 17
+ 24, 25, 26, 27, 28, 29, 30, 31, // 18 to 1F
+ 32, 33, 34, 35, 36, 37, 38, 39, // 20 to 27
+ 40, 41, 42, 43, 44, 45, 46, 47, // 28 to 2F
+ 48, 49, 50, 51, 52, 53, 54, 55, // 30 to 37
+ 56, 57, 58, 59, 60, 61, 62, 63, // 38 to 3F
+ 64, 65, 66, 67, 68, 69, 70, 71, // 40 to 47
+ 72, 73, 74, 75, 76, 77, 78, 79, // 48 to 4F
+ 80, 81, 82, 83, 84, 85, 86, 87, // 50 to 57
+ 88, 89, 90, 91, 92, 93, 94, 95, // 58 to 5F
+ 96, 97, 98, 99, 100, 101, 102, 103, // 60 to 67
+ 104, 105, 106, 107, 108, 109, 110, 111, // 68 to 6F
+ 112, 113, 114, 115, 116, 117, 118, 119, // 70 to 77
+ 120, 121, 122, 123, 124, 125, 126, 127, // 78 to 7F
+ 8364, -1, -1, -1, -1, 8230, -1, -1, // 80 to 87
+ -1, -1, -1, -1, -1, -1, -1, -1, // 88 to 8F
+ -1, 8216, 8217, 8220, 8221, 8226, 8211, 8212, // 90 to 97
+ -1, -1, -1, -1, -1, -1, -1, -1, // 98 to 9F
+ 160, 3585, 3586, 3587, 3588, 3589, 3590, 3591, // A0 to A7
+ 3592, 3593, 3594, 3595, 3596, 3597, 3598, 3599, // A8 to AF
+ 3600, 3601, 3602, 3603, 3604, 3605, 3606, 3607, // B0 to B7
+ 3608, 3609, 3610, 3611, 3612, 3613, 3614, 3615, // B8 to BF
+ 3616, 3617, 3618, 3619, 3620, 3621, 3622, 3623, // C0 to C7
+ 3624, 3625, 3626, 3627, 3628, 3629, 3630, 3631, // C8 to CF
+ 3632, 3633, 3634, 3635, 3636, 3637, 3638, 3639, // D0 to D7
+ 3640, 3641, 3642, -1, -1, -1, -1, 3647, // D8 to DF
+ 3648, 3649, 3650, 3651, 3652, 3653, 3654, 3655, // E0 to E7
+ 3656, 3657, 3658, 3659, 3660, 3661, 3662, 3663, // E8 to EF
+ 3664, 3665, 3666, 3667, 3668, 3669, 3670, 3671, // F0 to F7
+ 3672, 3673, 3674, 3675, -1, -1, -1, -1); // F8 to FF
+
+const
+ cp1250_n: array[0..255] of string =
+ ('.notdef', '.notdef', '.notdef', '.notdef', // 00 to 03
+ '.notdef', '.notdef', '.notdef', '.notdef', // 04 to 07
+ '.notdef', '.notdef', '.notdef', '.notdef', // 08 to 0B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 0C to 0F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 10 to 13
+ '.notdef', '.notdef', '.notdef', '.notdef', // 14 to 17
+ '.notdef', '.notdef', '.notdef', '.notdef', // 18 to 1B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 1C to 1F
+ 'space', 'exclam', 'quotedbl', 'numbersign', // 20 to 23
+ 'dollar', 'percent', 'ampersand', 'quotesingle', // 24 to 27
+ 'parenleft', 'parenright', 'asterisk', 'plus', // 28 to 2B
+ 'comma', 'hyphen', 'period', 'slash', // 2C to 2F
+ 'zero', 'one', 'two', 'three', // 30 to 33
+ 'four', 'five', 'six', 'seven', // 34 to 37
+ 'eight', 'nine', 'colon', 'semicolon', // 38 to 3B
+ 'less', 'equal', 'greater', 'question', // 3C to 3F
+ 'at', 'A', 'B', 'C', // 40 to 43
+ 'D', 'E', 'F', 'G', // 44 to 47
+ 'H', 'I', 'J', 'K', // 48 to 4B
+ 'L', 'M', 'N', 'O', // 4C to 4F
+ 'P', 'Q', 'R', 'S', // 50 to 53
+ 'T', 'U', 'V', 'W', // 54 to 57
+ 'X', 'Y', 'Z', 'bracketleft', // 58 to 5B
+ 'backslash', 'bracketright', 'asciicircum', 'underscore', // 5C to 5F
+ 'grave', 'a', 'b', 'c', // 60 to 63
+ 'd', 'e', 'f', 'g', // 64 to 67
+ 'h', 'i', 'j', 'k', // 68 to 6B
+ 'l', 'm', 'n', 'o', // 6C to 6F
+ 'p', 'q', 'r', 's', // 70 to 73
+ 't', 'u', 'v', 'w', // 74 to 77
+ 'x', 'y', 'z', 'braceleft', // 78 to 7B
+ 'bar', 'braceright', 'asciitilde', '.notdef', // 7C to 7F
+ 'Euro', '.notdef', 'quotesinglbase', '.notdef', // 80 to 83
+ 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', // 84 to 87
+ '.notdef', 'perthousand', 'Scaron', 'guilsinglleft', // 88 to 8B
+ 'Sacute', 'Tcaron', 'Zcaron', 'Zacute', // 8C to 8F
+ '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', // 90 to 93
+ 'quotedblright', 'bullet', 'endash', 'emdash', // 94 to 97
+ '.notdef', 'trademark', 'scaron', 'guilsinglright', // 98 to 9B
+ 'sacute', 'tcaron', 'zcaron', 'zacute', // 9C to 9F
+ 'space', 'caron', 'breve', 'Lslash', // A0 to A3
+ 'currency', 'Aogonek', 'brokenbar', 'section', // A4 to A7
+ 'dieresis', 'copyright', 'Scedilla', 'guillemotleft', // A8 to AB
+ 'logicalnot', 'hyphen', 'registered', 'Zdotaccent', // AC to AF
+ 'degree', 'plusminus', 'ogonek', 'lslash', // B0 to B3
+ 'acute', 'mu', 'paragraph', 'periodcentered', // B4 to B7
+ 'cedilla', 'aogonek', 'scedilla', 'guillemotright', // B8 to BB
+ 'Lcaron', 'hungarumlaut', 'lcaron', 'zdotaccent', // BC to BF
+ 'Racute', 'Aacute', 'Acircumflex', 'Abreve', // C0 to C3
+ 'Adieresis', 'Lacute', 'Cacute', 'Ccedilla', // C4 to C7
+ 'Ccaron', 'Eacute', 'Eogonek', 'Edieresis', // C8 to CB
+ 'Ecaron', 'Iacute', 'Icircumflex', 'Dcaron', // CC to CF
+ 'Dcroat', 'Nacute', 'Ncaron', 'Oacute', // D0 to D3
+ 'Ocircumflex', 'Ohungarumlaut','Odieresis', 'multiply', // D4 to D7
+ 'Rcaron', 'Uring', 'Uacute', 'Uhungarumlaut', // D8 to DB
+ 'Udieresis', 'Yacute', 'Tcommaaccent', 'germandbls', // DC to DF
+ 'racute', 'aacute', 'acircumflex', 'abreve', // E0 to E3
+ 'adieresis', 'lacute', 'cacute', 'ccedilla', // E4 to E7
+ 'ccaron', 'eacute', 'eogonek', 'edieresis', // E8 to EB
+ 'ecaron', 'iacute', 'icircumflex', 'dcaron', // EC to EF
+ 'dcroat', 'nacute', 'ncaron', 'oacute', // F0 to F3
+ 'ocircumflex', 'ohungarumlaut','odieresis', 'divide', // F4 to F7
+ 'rcaron', 'uring', 'uacute', 'uhungarumlaut', // F8 to FB
+ 'udieresis', 'yacute', 'tcommaaccent', 'dotaccent'); // FC to FF
+
+const
+ cp1250_v: array[0..255] of Word =
+ (0, 1, 2, 3, 4, 5, 6, 7, // 00 to 07
+ 8, 9, 10, 11, 12, 13, 14, 15, // 08 to 0F
+ 16, 17, 18, 19, 20, 21, 22, 23, // 10 to 17
+ 24, 25, 26, 27, 28, 29, 30, 31, // 18 to 1F
+ 32, 33, 34, 35, 36, 37, 38, 39, // 20 to 27
+ 40, 41, 42, 43, 44, 45, 46, 47, // 28 to 2F
+ 48, 49, 50, 51, 52, 53, 54, 55, // 30 to 37
+ 56, 57, 58, 59, 60, 61, 62, 63, // 38 to 3F
+ 64, 65, 66, 67, 68, 69, 70, 71, // 40 to 47
+ 72, 73, 74, 75, 76, 77, 78, 79, // 48 to 4F
+ 80, 81, 82, 83, 84, 85, 86, 87, // 50 to 57
+ 88, 89, 90, 91, 92, 93, 94, 95, // 58 to 5F
+ 96, 97, 98, 99, 100, 101, 102, 103, // 60 to 67
+ 104, 105, 106, 107, 108, 109, 110, 111, // 68 to 6F
+ 112, 113, 114, 115, 116, 117, 118, 119, // 70 to 77
+ 120, 121, 122, 123, 124, 125, 126, 127, // 78 to 7F
+ 8364, -1, 8218, -1, 8222, 8230, 8224, 8225, // 80 to 87
+ -1, 8240, 352, 8249, 346, 356, 381, 377, // 88 to 8F
+ -1, 8216, 8217, 8220, 8221, 8226, 8211, 8212, // 90 to 97
+ -1, 8482, 353, 8250, 347, 357, 382, 378, // 98 to 9F
+ 160, 711, 728, 321, 164, 260, 166, 167, // A0 to A7
+ 168, 169, 350, 171, 172, 173, 174, 379, // A8 to AF
+ 176, 177, 731, 322, 180, 181, 182, 183, // B0 to B7
+ 184, 261, 351, 187, 317, 733, 318, 380, // B8 to BF
+ 340, 193, 194, 258, 196, 313, 262, 199, // C0 to C7
+ 268, 201, 280, 203, 282, 205, 206, 270, // C8 to CF
+ 272, 323, 327, 211, 212, 336, 214, 215, // D0 to D7
+ 344, 366, 218, 368, 220, 221, 354, 354, // D8 to DF
+ 341, 225, 226, 259, 228, 314, 263, 231, // E0 to E7
+ 269, 233, 281, 235, 283, 237, 238, 271, // E8 to EF
+ 273, 324, 328, 243, 244, 337, 246, 247, // F0 to F7
+ 345, 367, 250, 369, 252, 253, 355, 729); // F8 to FF
+
+const
+ cp1251_n: array[0..255] of string =
+ ('.notdef', '.notdef', '.notdef', '.notdef', // 00 to 03
+ '.notdef', '.notdef', '.notdef', '.notdef', // 04 to 07
+ '.notdef', '.notdef', '.notdef', '.notdef', // 08 to 0B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 0C to 0F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 10 to 13
+ '.notdef', '.notdef', '.notdef', '.notdef', // 14 to 17
+ '.notdef', '.notdef', '.notdef', '.notdef', // 18 to 1B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 1C to 1F
+ 'space', 'exclam', 'quotedbl', 'numbersign', // 20 to 23
+ 'dollar', 'percent', 'ampersand', 'quotesingle', // 24 to 27
+ 'parenleft', 'parenright', 'asterisk', 'plus', // 28 to 2B
+ 'comma', 'hyphen', 'period', 'slash', // 2C to 2F
+ 'zero', 'one', 'two', 'three', // 30 to 33
+ 'four', 'five', 'six', 'seven', // 34 to 37
+ 'eight', 'nine', 'colon', 'semicolon', // 38 to 3B
+ 'less', 'equal', 'greater', 'question', // 3C to 3F
+ 'at', 'A', 'B', 'C', // 40 to 43
+ 'D', 'E', 'F', 'G', // 44 to 47
+ 'H', 'I', 'J', 'K', // 48 to 4B
+ 'L', 'M', 'N', 'O', // 4C to 4F
+ 'P', 'Q', 'R', 'S', // 50 to 53
+ 'T', 'U', 'V', 'W', // 54 to 57
+ 'X', 'Y', 'Z', 'bracketleft', // 58 to 5B
+ 'backslash', 'bracketright', 'asciicircum', 'underscore', // 5C to 5F
+ 'grave', 'a', 'b', 'c', // 60 to 63
+ 'd', 'e', 'f', 'g', // 64 to 67
+ 'h', 'i', 'j', 'k', // 68 to 6B
+ 'l', 'm', 'n', 'o', // 6C to 6F
+ 'p', 'q', 'r', 's', // 70 to 73
+ 't', 'u', 'v', 'w', // 74 to 77
+ 'x', 'y', 'z', 'braceleft', // 78 to 7B
+ 'bar', 'braceright', 'asciitilde', '.notdef', // 7C to 7F
+ 'afii10051', 'afii10052', 'quotesinglbase', 'afii10100', // 80 to 83
+ 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', // 84 to 87
+ 'Euro', 'perthousand', 'afii10058', 'guilsinglleft', // 88 to 8B
+ 'afii10059', 'afii10061', 'afii10060', 'afii10145', // 8C to 8F
+ 'afii10099', 'quoteleft', 'quoteright', 'quotedblleft', // 90 to 93
+ 'quotedblright', 'bullet', 'endash', 'emdash', // 94 to 97
+ '.notdef', 'trademark', 'afii10106', 'guilsinglright', // 98 to 9B
+ 'afii10107', 'afii10109', 'afii10108', 'afii10193', // 9C to 9F
+ 'space', 'afii10062', 'afii10110', 'afii10057', // A0 to A3
+ 'currency', 'afii10050', 'brokenbar', 'section', // A4 to A7
+ 'afii10023', 'copyright', 'afii10053', 'guillemotleft', // A8 to AB
+ 'logicalnot', 'hyphen', 'registered', 'afii10056', // AC to AF
+ 'degree', 'plusminus', 'afii10055', 'afii10103', // B0 to B3
+ 'afii10098', 'mu', 'paragraph', 'periodcentered', // B4 to B7
+ 'afii10071', 'afii61352', 'afii10101', 'guillemotright', // B8 to BB
+ 'afii10105', 'afii10054', 'afii10102', 'afii10104', // BC to BF
+ 'afii10017', 'afii10018', 'afii10019', 'afii10020', // C0 to C3
+ 'afii10021', 'afii10022', 'afii10024', 'afii10025', // C4 to C7
+ 'afii10026', 'afii10027', 'afii10028', 'afii10029', // C8 to CB
+ 'afii10030', 'afii10031', 'afii10032', 'afii10033', // CC to CF
+ 'afii10034', 'afii10035', 'afii10036', 'afii10037', // D0 to D3
+ 'afii10038', 'afii10039', 'afii10040', 'afii10041', // D4 to D7
+ 'afii10042', 'afii10043', 'afii10044', 'afii10045', // D8 to DB
+ 'afii10046', 'afii10047', 'afii10048', 'afii10049', // DC to DF
+ 'afii10065', 'afii10066', 'afii10067', 'afii10068', // E0 to E3
+ 'afii10069', 'afii10070', 'afii10072', 'afii10073', // E4 to E7
+ 'afii10074', 'afii10075', 'afii10076', 'afii10077', // E8 to EB
+ 'afii10078', 'afii10079', 'afii10080', 'afii10081', // EC to EF
+ 'afii10082', 'afii10083', 'afii10084', 'afii10085', // F0 to F3
+ 'afii10086', 'afii10087', 'afii10088', 'afii10089', // F4 to F7
+ 'afii10090', 'afii10091', 'afii10092', 'afii10093', // F8 to FB
+ 'afii10094', 'afii10095', 'afii10095', 'afii10097'); // FC to FF
+
+const
+ cp1251_v: array[0..255] of Word =
+ (0, 1, 2, 3, 4, 5, 6, 7, // 00 to 07
+ 8, 9, 10, 11, 12, 13, 14, 15, // 08 to 0F
+ 16, 17, 18, 19, 20, 21, 22, 23, // 10 to 17
+ 24, 25, 26, 27, 28, 29, 30, 31, // 18 to 1F
+ 32, 33, 34, 35, 36, 37, 38, 39, // 20 to 27
+ 40, 41, 42, 43, 44, 45, 46, 47, // 28 to 2F
+ 48, 49, 50, 51, 52, 53, 54, 55, // 30 to 37
+ 56, 57, 58, 59, 60, 61, 62, 63, // 38 to 3F
+ 64, 65, 66, 67, 68, 69, 70, 71, // 40 to 47
+ 72, 73, 74, 75, 76, 77, 78, 79, // 48 to 4F
+ 80, 81, 82, 83, 84, 85, 86, 87, // 50 to 57
+ 88, 89, 90, 91, 92, 93, 94, 95, // 58 to 5F
+ 96, 97, 98, 99, 100, 101, 102, 103, // 60 to 67
+ 104, 105, 106, 107, 108, 109, 110, 111, // 68 to 6F
+ 112, 113, 114, 115, 116, 117, 118, 119, // 70 to 77
+ 120, 121, 122, 123, 124, 125, 126, 127, // 78 to 7F
+ 1026, 1027, 8218, 1107, 8222, 8230, 8224, 8225, // 80 to 87
+ 8364, 8240, 1033, 8249, 1034, 1036, 1035, 1039, // 88 to 8F
+ 1106, 8216, 8217, 8220, 8221, 8226, 8211, 8212, // 90 to 97
+ -1, 8482, 1113, 8250, 1114, 1116, 1115, 1119, // 98 to 9F
+ 160, 1038, 1118, 1032, 164, 1168, 166, 167, // A0 to A7
+ 1025, 169, 1028, 171, 172, 173, 174, 1031, // A8 to AF
+ 176, 177, 1030, 1110, 1169, 181, 182, 183, // B0 to B7
+ 1105, 8470, 1108, 187, 1112, 1029, 1109, 1111, // B8 to BF
+ 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, // C0 to C7
+ 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, // C8 to CF
+ 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, // D8 to D7
+ 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, // D8 to DF
+ 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, // E0 to E7
+ 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, // E8 to EF
+ 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, // F0 to F7
+ 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103); // F8 to FF
+
+const
+ cp1252_n: array[0..255] of string =
+ ('.notdef', '.notdef', '.notdef', '.notdef', // 00 to 03
+ '.notdef', '.notdef', '.notdef', '.notdef', // 04 to 07
+ '.notdef', '.notdef', '.notdef', '.notdef', // 08 to 0B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 0C to 0F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 10 to 13
+ '.notdef', '.notdef', '.notdef', '.notdef', // 14 to 17
+ '.notdef', '.notdef', '.notdef', '.notdef', // 18 to 1B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 1C to 1F
+ 'space', 'exclam', 'quotedbl', 'numbersign', // 20 to 23
+ 'dollar', 'percent', 'ampersand', 'quotesingle', // 24 to 27
+ 'parenleft', 'parenright', 'asterisk', 'plus', // 28 to 2B
+ 'comma', 'hyphen', 'period', 'slash', // 2C to 2F
+ 'zero', 'one', 'two', 'three', // 30 to 33
+ 'four', 'five', 'six', 'seven', // 34 to 37
+ 'eight', 'nine', 'colon', 'semicolon', // 38 to 3B
+ 'less', 'equal', 'greater', 'question', // 3C to 3F
+ 'at', 'A', 'B', 'C', // 40 to 43
+ 'D', 'E', 'F', 'G', // 44 to 47
+ 'H', 'I', 'J', 'K', // 48 to 4B
+ 'L', 'M', 'N', 'O', // 4C to 4F
+ 'P', 'Q', 'R', 'S', // 50 to 53
+ 'T', 'U', 'V', 'W', // 54 to 57
+ 'X', 'Y', 'Z', 'bracketleft', // 58 to 5B
+ 'backslash', 'bracketright', 'asciicircum', 'underscore', // 5C to 5F
+ 'grave', 'a', 'b', 'c', // 60 to 63
+ 'd', 'e', 'f', 'g', // 64 to 67
+ 'h', 'i', 'j', 'k', // 68 to 6B
+ 'l', 'm', 'n', 'o', // 6C to 6F
+ 'p', 'q', 'r', 's', // 70 to 73
+ 't', 'u', 'v', 'w', // 74 to 77
+ 'x', 'y', 'z', 'braceleft', // 78 to 7B
+ 'bar', 'braceright', 'asciitilde', '.notdef', // 7C to 7F
+ 'Euro', '.notdef', 'quotesinglbase', 'florin', // 80 to 83
+ 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', // 84 to 87
+ 'circumflex', 'perthousand', 'Scaron', 'guilsinglleft', // 88 to 8B
+ 'OE', '.notdef', 'Zcaron', '.notdef', // 8C to 8F
+ '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', // 90 to 93
+ 'quotedblright', 'bullet', 'endash', 'emdash', // 94 to 97
+ 'tilde', 'trademark', 'scaron', 'guilsinglright', // 98 to 9B
+ 'oe', '.notdef', 'zcaron', 'Ydieresis', // 9C to 9F
+ 'space', 'exclamdown', 'cent', 'sterling', // A0 to A3
+ 'currency', 'yen', 'brokenbar', 'section', // A4 to A7
+ 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft', // A8 to AB
+ 'logicalnot', 'hyphen', 'registered', 'macron', // AC to AF
+ 'degree', 'plusminus', 'twosuperior', 'threesuperior', // B0 to B3
+ 'acute', 'mu', 'paragraph', 'periodcentered', // B4 to B7
+ 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright', // B8 to BB
+ 'onequarter', 'onehalf', 'threequarters', 'questiondown', // BC to BF
+ 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', // C0 to C3
+ 'Adieresis', 'Aring', 'AE', 'Ccedilla', // C4 to C7
+ 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', // C8 to CB
+ 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', // CC to CF
+ 'Eth', 'Ntilde', 'Ograve', 'Oacute', // D0 to D3
+ 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', // D4 to D7
+ 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', // D8 to DB
+ 'Udieresis', 'Yacute', 'Thorn', 'germandbls', // DC to DF
+ 'agrave', 'aacute', 'acircumflex', 'atilde', // E0 to E3
+ 'adieresis', 'aring', 'ae', 'ccedilla', // E4 to E7
+ 'egrave', 'eacute', 'ecircumflex', 'edieresis', // E8 to EB
+ 'igrave', 'iacute', 'icircumflex', 'idieresis', // EC to EF
+ 'eth', 'ntilde', 'ograve', 'oacute', // F0 to F3
+ 'ocircumflex', 'otilde', 'odieresis', 'divide', // F4 to F7
+ 'oslash', 'ugrave', 'uacute', 'ucircumflex', // F8 to FB
+ 'udieresis', 'yacute', 'thorn', 'ydieresis'); // FC to FF
+
+const
+ cp1252_v: array[0..255] of Word =
+ (0, 1, 2, 3, 4, 5, 6, 7, // 00 to 07
+ 8, 9, 10, 11, 12, 13, 14, 15, // 08 to 0F
+ 16, 17, 18, 19, 20, 21, 22, 23, // 10 to 17
+ 24, 25, 26, 27, 28, 29, 30, 31, // 18 to 1F
+ 32, 33, 34, 35, 36, 37, 38, 39, // 20 to 27
+ 40, 41, 42, 43, 44, 45, 46, 47, // 28 to 2F
+ 48, 49, 50, 51, 52, 53, 54, 55, // 30 to 37
+ 56, 57, 58, 59, 60, 61, 62, 63, // 38 to 3F
+ 64, 65, 66, 67, 68, 69, 70, 71, // 40 to 47
+ 72, 73, 74, 75, 76, 77, 78, 79, // 48 to 4F
+ 80, 81, 82, 83, 84, 85, 86, 87, // 50 to 57
+ 88, 89, 90, 91, 92, 93, 94, 95, // 58 to 5F
+ 96, 97, 98, 99, 100, 101, 102, 103, // 60 to 67
+ 104, 105, 106, 107, 108, 109, 110, 111, // 68 to 6F
+ 112, 113, 114, 115, 116, 117, 118, 119, // 70 to 77
+ 120, 121, 122, 123, 124, 125, 126, 127, // 78 to 7F
+ 8364, -1, 8218, 402, 8222, 8230, 8224, 8225, // 80 to 87
+ 710, 8240, 352, 8249, 338, -1, 381, -1, // 88 to 8F
+ -1, 8216, 8217, 8220, 8221, 8226, 8211, 8212, // 90 to 97
+ 732, 8482, 353, 8250, 339, -1, 382, 376, // 98 to 9F
+ 160, 161, 162, 163, 164, 165, 166, 167, // A0 to A7
+ 168, 169, 170, 171, 172, 173, 174, 175, // A8 to AF
+ 176, 177, 178, 179, 180, 181, 182, 183, // B0 to B7
+ 184, 185, 186, 187, 188, 189, 190, 191, // B8 to BF
+ 192, 193, 194, 195, 196, 197, 198, 199, // C0 to C7
+ 200, 201, 202, 203, 204, 205, 206, 207, // C8 to CF
+ 208, 209, 210, 211, 212, 213, 214, 215, // D0 to D7
+ 216, 217, 218, 219, 220, 221, 222, 223, // D8 to DF
+ 224, 225, 226, 227, 228, 229, 230, 231, // E0 to E7
+ 232, 233, 234, 235, 236, 237, 238, 239, // E8 to EF
+ 240, 241, 242, 243, 244, 245, 246, 247, // F0 to F7
+ 248, 249, 250, 251, 252, 253, 254, 255); // F8 to FF
+
+const
+ cp1253_n: array[0..255] of string =
+ ('.notdef', '.notdef', '.notdef', '.notdef', // 00 to 03
+ '.notdef', '.notdef', '.notdef', '.notdef', // 04 to 07
+ '.notdef', '.notdef', '.notdef', '.notdef', // 08 to 0B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 0C to 0F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 10 to 13
+ '.notdef', '.notdef', '.notdef', '.notdef', // 14 to 17
+ '.notdef', '.notdef', '.notdef', '.notdef', // 18 to 1B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 1C to 1F
+ 'space', 'exclam', 'quotedbl', 'numbersign', // 20 to 23
+ 'dollar', 'percent', 'ampersand', 'quotesingle', // 24 to 27
+ 'parenleft', 'parenright', 'asterisk', 'plus', // 28 to 2B
+ 'comma', 'hyphen', 'period', 'slash', // 2C to 2F
+ 'zero', 'one', 'two', 'three', // 30 to 33
+ 'four', 'five', 'six', 'seven', // 34 to 37
+ 'eight', 'nine', 'colon', 'semicolon', // 38 to 3B
+ 'less', 'equal', 'greater', 'question', // 3C to 3F
+ 'at', 'A', 'B', 'C', // 40 to 43
+ 'D', 'E', 'F', 'G', // 44 to 47
+ 'H', 'I', 'J', 'K', // 48 to 4B
+ 'L', 'M', 'N', 'O', // 4C to 4F
+ 'P', 'Q', 'R', 'S', // 50 to 53
+ 'T', 'U', 'V', 'W', // 54 to 57
+ 'X', 'Y', 'Z', 'bracketleft', // 58 to 5B
+ 'backslash', 'bracketright', 'asciicircum', 'underscore', // 5C to 5F
+ 'grave', 'a', 'b', 'c', // 60 to 63
+ 'd', 'e', 'f', 'g', // 64 to 67
+ 'h', 'i', 'j', 'k', // 68 to 6B
+ 'l', 'm', 'n', 'o', // 6C to 6F
+ 'p', 'q', 'r', 's', // 70 to 73
+ 't', 'u', 'v', 'w', // 74 to 77
+ 'x', 'y', 'z', 'braceleft', // 78 to 7B
+ 'bar', 'braceright', 'asciitilde', '.notdef', // 7C to 7F
+ 'Euro', '.notdef', 'quotesinglbase', 'florin', // 80 to 83
+ 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', // 84 to 87
+ '.notdef', 'perthousand', '.notdef', 'guilsinglleft', // 88 to 8B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 8C to 8F
+ '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', // 90 to 93
+ 'quotedblright', 'bullet', 'endash', 'emdash', // 94 to 97
+ '.notdef', 'trademark', '.notdef', 'guilsinglright', // 98 to 9B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 9C to 9F
+ 'space', 'dieresistonos','Alphatonos', 'sterling', // A0 to A3
+ 'currency', 'yen', 'brokenbar', 'section', // A4 to A7
+ 'dieresis', 'copyright', '.notdef', 'guillemotleft', // A8 to AB
+ 'logicalnot', 'hyphen', 'registered', 'afii00208', // AC to AF
+ 'degree', 'plusminus', 'twosuperior', 'threesuperior', // B0 to B3
+ 'tonos', 'mu', 'paragraph', 'periodcentered', // B4 to B7
+ 'Epsilontonos', 'Etatonos', 'Iotatonos', 'guillemotright', // B8 to BB
+ 'Omicrontonos', 'onehalf', 'Upsilontonos', 'Omegatonos', // BC to BF
+ 'iotadieresistonos', 'Alpha', 'Beta', 'Gamma', // C0 to C3
+ 'Delta', 'Epsilon', 'Zeta', 'Eta', // C4 to C7
+ 'Theta', 'Iota', 'Kappa', 'Lambda', // C8 to CB
+ 'Mu', 'Nu', 'Xi', 'Omicron', // CC to CF
+ 'Pi', 'Rho', '.notdef', 'Sigma', // D0 to D3
+ 'Tau', 'Upsilon', 'Phi', 'Chi', // D4 to D7
+ 'Psi', 'Omega', 'Iotadieresis', 'Upsilondieresis', // D8 to DB
+ 'alphatonos', 'epsilontonos', 'etatonos', 'iotatonos', // DC to DF
+ 'upsilondieresistonos','alpha', 'beta', 'gamma', // E0 to E3
+ 'delta', 'epsilon', 'zeta', 'eta', // E4 to E7
+ 'theta', 'iota', 'kappa', 'lambda', // E8 to EB
+ 'mu', 'nu', 'xi', 'omicron', // EC to EF
+ 'pi', 'rho', 'sigma1', 'sigma', // F0 to F3
+ 'tau', 'upsilon', 'phi', 'chi', // F4 to F7
+ 'psi', 'omega', 'iotadieresis', 'upsilondieresis', // F8 to FB
+ 'omicrontonos', 'upsilontonos', 'omegatonos', '.notdef'); // FC to FF
+
+const
+ cp1253_v: array[0..255] of Word =
+ (0, 1, 2, 3, 4, 5, 6, 7, // 00 to 07
+ 8, 9, 10, 11, 12, 13, 14, 15, // 08 to 0F
+ 16, 17, 18, 19, 20, 21, 22, 23, // 10 to 17
+ 24, 25, 26, 27, 28, 29, 30, 31, // 18 to 1F
+ 32, 33, 34, 35, 36, 37, 38, 39, // 20 to 27
+ 40, 41, 42, 43, 44, 45, 46, 47, // 28 to 2F
+ 48, 49, 50, 51, 52, 53, 54, 55, // 30 to 37
+ 56, 57, 58, 59, 60, 61, 62, 63, // 38 to 3F
+ 64, 65, 66, 67, 68, 69, 70, 71, // 40 to 47
+ 72, 73, 74, 75, 76, 77, 78, 79, // 48 to 4F
+ 80, 81, 82, 83, 84, 85, 86, 87, // 50 to 57
+ 88, 89, 90, 91, 92, 93, 94, 95, // 58 to 5F
+ 96, 97, 98, 99, 100, 101, 102, 103, // 60 to 67
+ 104, 105, 106, 107, 108, 109, 110, 111, // 68 to 6F
+ 112, 113, 114, 115, 116, 117, 118, 119, // 70 to 77
+ 120, 121, 122, 123, 124, 125, 126, 127, // 78 to 7F
+ 8364, -1, 8218, 402, 8222, 8230, 8224, 8225, // 80 to 87
+ -1, 8240, -1, 8249, -1, -1, -1, -1, // 88 to 8F
+ -1, 8216, 8217, 8220, 8221, 8226, 8211, 8212, // 90 to 97
+ -1, 8482, -1, 8250, -1, -1, -1, -1, // 98 to 9F
+ 160, 901, 902, 163, 164, 165, 166, 167, // A0 to A7
+ 168, 169, -1, 171, 172, 173, 174, 8213, // A8 to AF
+ 176, 177, 178, 179, 900, 181, 182, 183, // B0 to B7
+ 904, 905, 906, 187, 908, 189, 910, 911, // B8 to BF
+ 912, 913, 914, 915, 916, 917, 918, 919, // C0 to C7
+ 920, 921, 922, 923, 924, 925, 926, 927, // C8 to CF
+ 928, 929, -1, 931, 932, 933, 934, 935, // D0 to D7
+ 936, 937, 938, 939, 940, 941, 942, 943, // D8 to DF
+ 944, 945, 946, 947, 948, 949, 950, 951, // E0 to E7
+ 952, 953, 954, 955, 956, 957, 958, 959, // E8 to EF
+ 960, 961, 962, 963, 964, 965, 966, 967, // F0 to F7
+ 968, 969, 970, 971, 972, 973, 974, -1); // F8 to FF
+
+const
+ cp1254_n: array[0..255] of string =
+ ('.notdef', '.notdef', '.notdef', '.notdef', // 00 to 03
+ '.notdef', '.notdef', '.notdef', '.notdef', // 04 to 07
+ '.notdef', '.notdef', '.notdef', '.notdef', // 08 to 0B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 0C to 0F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 10 to 13
+ '.notdef', '.notdef', '.notdef', '.notdef', // 14 to 17
+ '.notdef', '.notdef', '.notdef', '.notdef', // 18 to 1B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 1C to 1F
+ 'space', 'exclam', 'quotedbl', 'numbersign', // 20 to 23
+ 'dollar', 'percent', 'ampersand', 'quotesingle', // 24 to 27
+ 'parenleft', 'parenright', 'asterisk', 'plus', // 28 to 2B
+ 'comma', 'hyphen', 'period', 'slash', // 2C to 2F
+ 'zero', 'one', 'two', 'three', // 30 to 33
+ 'four', 'five', 'six', 'seven', // 34 to 37
+ 'eight', 'nine', 'colon', 'semicolon', // 38 to 3B
+ 'less', 'equal', 'greater', 'question', // 3C to 3F
+ 'at', 'A', 'B', 'C', // 40 to 43
+ 'D', 'E', 'F', 'G', // 44 to 47
+ 'H', 'I', 'J', 'K', // 48 to 4B
+ 'L', 'M', 'N', 'O', // 4C to 4F
+ 'P', 'Q', 'R', 'S', // 50 to 53
+ 'T', 'U', 'V', 'W', // 54 to 57
+ 'X', 'Y', 'Z', 'bracketleft', // 58 to 5B
+ 'backslash', 'bracketright', 'asciicircum', 'underscore', // 5C to 5F
+ 'grave', 'a', 'b', 'c', // 60 to 63
+ 'd', 'e', 'f', 'g', // 64 to 67
+ 'h', 'i', 'j', 'k', // 68 to 6B
+ 'l', 'm', 'n', 'o', // 6C to 6F
+ 'p', 'q', 'r', 's', // 70 to 73
+ 't', 'u', 'v', 'w', // 74 to 77
+ 'x', 'y', 'z', 'braceleft', // 78 to 7B
+ 'bar', 'braceright', 'asciitilde', '.notdef', // 7C to 7F
+ 'Euro', '.notdef', 'quotesinglbase', 'florin', // 80 to 83
+ 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', // 84 to 87
+ 'circumflex', 'perthousand', 'Scaron', 'guilsinglleft', // 88 to 8B
+ 'OE', '.notdef', '.notdef', '.notdef', // 8C to 8F
+ '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', // 90 to 93
+ 'quotedblright', 'bullet', 'endash', 'emdash', // 94 to 97
+ 'tilde', 'trademark', 'scaron', 'guilsinglright', // 98 to 9B
+ 'oe', '.notdef', '.notdef', 'Ydieresis', // 9C to 9F
+ 'space', 'exclamdown', 'cent', 'sterling', // A0 to A3
+ 'currency', 'yen', 'brokenbar', 'section', // A4 to A7
+ 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft', // A8 to AB
+ 'logicalnot', 'hyphen', 'registered', 'macron', // AC to AF
+ 'degree', 'plusminus', 'twosuperior', 'threesuperior', // B0 to B3
+ 'acute', 'mu', 'paragraph', 'periodcentered', // B4 to B7
+ 'cedilla', 'onesuperior','ordmasculine', 'guillemotright', // B8 to BB
+ 'onequarter', 'onehalf', 'threequarters', 'questiondown', // BC to BF
+ 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', // C0 to C3
+ 'Adieresis', 'Aring', 'AE', 'Ccedilla', // C4 to C7
+ 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', // C8 to CB
+ 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', // CC to CF
+ 'Gbreve', 'Ntilde', 'Ograve', 'Oacute', // D0 to D3
+ 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', // D4 to D7
+ 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', // D8 to DB
+ 'Udieresis', 'Idotaccent', 'Scedilla', 'germandbls', // DC to DF
+ 'agrave', 'aacute', 'acircumflex', 'atilde', // E0 to E3
+ 'adieresis', 'aring', 'ae', 'ccedilla', // E4 to E7
+ 'egrave', 'eacute', 'ecircumflex', 'edieresis', // E8 to EB
+ 'igrave', 'iacute', 'icircumflex', 'idieresis', // EC to EF
+ 'gbreve', 'ntilde', 'ograve', 'oacute', // F0 to F3
+ 'ocircumflex', 'otilde', 'odieresis', 'divide', // F4 to F7
+ 'oslash', 'ugrave', 'uacute', 'ucircumflex', // F8 to FB
+ 'udieresis', 'dotlessi', 'scedilla', 'ydieresis'); // FC to FF
+
+const
+ cp1254_v: array[0..255] of Word =
+ (0, 1, 2, 3, 4, 5, 6, 7, // 00 to 07
+ 8, 9, 10, 11, 12, 13, 14, 15, // 08 to 0F
+ 16, 17, 18, 19, 20, 21, 22, 23, // 10 to 17
+ 24, 25, 26, 27, 28, 29, 30, 31, // 18 to 1F
+ 32, 33, 34, 35, 36, 37, 38, 39, // 20 to 27
+ 40, 41, 42, 43, 44, 45, 46, 47, // 28 to 2F
+ 48, 49, 50, 51, 52, 53, 54, 55, // 30 to 37
+ 56, 57, 58, 59, 60, 61, 62, 63, // 38 to 3F
+ 64, 65, 66, 67, 68, 69, 70, 71, // 40 to 47
+ 72, 73, 74, 75, 76, 77, 78, 79, // 48 to 4F
+ 80, 81, 82, 83, 84, 85, 86, 87, // 50 to 57
+ 88, 89, 90, 91, 92, 93, 94, 95, // 58 to 5F
+ 96, 97, 98, 99, 100, 101, 102, 103, // 60 to 67
+ 104, 105, 106, 107, 108, 109, 110, 111, // 68 to 6F
+ 112, 113, 114, 115, 116, 117, 118, 119, // 70 to 77
+ 120, 121, 122, 123, 124, 125, 126, 127, // 78 to 7F
+ 8364, -1, 8218, 402, 8222, 8230, 8224, 8225, // 80 to 87
+ 710, 8240, 352, 8249, 338, -1, -1, -1, // 88 to 8F
+ -1, 8216, 8217, 8220, 8221, 8226, 8211, 8212, // 90 to 97
+ 732, 8482, 353, 8250, 339, -1, -1, 376, // 98 to 9F
+ 160, 161, 162, 163, 164, 165, 166, 167, // A0 to A7
+ 168, 169, 170, 171, 172, 173, 174, 175, // A8 to AF
+ 176, 177, 178, 179, 180, 181, 182, 183, // B0 to B7
+ 184, 185, 186, 187, 188, 189, 190, 191, // B8 to BF
+ 192, 193, 194, 195, 196, 197, 198, 199, // C0 to C7
+ 200, 201, 202, 203, 204, 205, 206, 207, // C8 to CF
+ 286, 209, 210, 211, 212, 213, 214, 215, // D0 to D7
+ 216, 217, 218, 219, 220, 304, 350, 223, // D8 to DF
+ 224, 225, 226, 227, 228, 229, 230, 231, // E0 to E7
+ 232, 233, 234, 235, 236, 237, 238, 239, // E8 to EF
+ 287, 241, 242, 243, 244, 245, 246, 247, // F0 to F7
+ 248, 249, 250, 251, 252, 305, 351, 255); // F8 to FF
+
+const
+ cp1255_n: array[0..255] of string =
+ ('.notdef', '.notdef', '.notdef', '.notdef', // 00 to 03
+ '.notdef', '.notdef', '.notdef', '.notdef', // 04 to 07
+ '.notdef', '.notdef', '.notdef', '.notdef', // 08 to 0B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 0C to 0F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 10 to 13
+ '.notdef', '.notdef', '.notdef', '.notdef', // 14 to 17
+ '.notdef', '.notdef', '.notdef', '.notdef', // 18 to 1B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 1C to 1F
+ 'space', 'exclam', 'quotedbl', 'numbersign', // 20 to 23
+ 'dollar', 'percent', 'ampersand', 'quotesingle', // 24 to 27
+ 'parenleft', 'parenright', 'asterisk', 'plus', // 28 to 2B
+ 'comma', 'hyphen', 'period', 'slash', // 2C to 2F
+ 'zero', 'one', 'two', 'three', // 30 to 33
+ 'four', 'five', 'six', 'seven', // 34 to 37
+ 'eight', 'nine', 'colon', 'semicolon', // 38 to 3B
+ 'less', 'equal', 'greater', 'question', // 3C to 3F
+ 'at', 'A', 'B', 'C', // 40 to 43
+ 'D', 'E', 'F', 'G', // 44 to 47
+ 'H', 'I', 'J', 'K', // 48 to 4B
+ 'L', 'M', 'N', 'O', // 4C to 4F
+ 'P', 'Q', 'R', 'S', // 50 to 53
+ 'T', 'U', 'V', 'W', // 54 to 57
+ 'X', 'Y', 'Z', 'bracketleft', // 58 to 5B
+ 'backslash', 'bracketright', 'asciicircum', 'underscore', // 5C to 5F
+ 'grave', 'a', 'b', 'c', // 60 to 63
+ 'd', 'e', 'f', 'g', // 64 to 67
+ 'h', 'i', 'j', 'k', // 68 to 6B
+ 'l', 'm', 'n', 'o', // 6C to 6F
+ 'p', 'q', 'r', 's', // 70 to 73
+ 't', 'u', 'v', 'w', // 74 to 77
+ 'x', 'y', 'z', 'braceleft', // 78 to 7B
+ 'bar', 'braceright', 'asciitilde', '.notdef', // 7C to 7F
+ 'Euro', '.notdef', 'quotesinglbase', 'florin', // 80 to 83
+ 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', // 84 to 87
+ 'circumflex', 'perthousand', '.notdef', 'guilsinglleft', // 88 to 8B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 8C to 8F
+ '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', // 90 to 93
+ 'quotedblright', 'bullet', 'endash', 'emdash', // 94 to 97
+ 'tilde', 'trademark', '.notdef', 'guilsinglright', // 98 to 9B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 9C to 9F
+ 'space', 'exclamdown', 'cent', 'sterling', // A0 to A3
+ 'afii57636', 'yen', 'brokenbar', 'section', // A4 to A7
+ 'dieresis', 'copyright', 'multiply', 'guillemotleft', // A8 to AB
+ 'logicalnot', 'sfthyphen', 'registered', 'macron', // AC to AF
+ 'degree', 'plusminus', 'twosuperior', 'threesuperior', // B0 to B3
+ 'acute', 'mu', 'paragraph', 'middot', // B4 to B7
+ 'cedilla', 'onesuperior', 'divide', 'guillemotright', // B8 to BB
+ 'onequarter', 'onehalf', 'threequarters', 'questiondown', // BC to BF
+ 'afii57799', 'afii57801', 'afii57800', 'afii57802', // C0 to C3
+ 'afii57793', 'afii57794', 'afii57795', 'afii57798', // C4 to C7
+ 'afii57797', 'afii57806', '.notdef', 'afii57796', // C8 to CB
+ 'afii57807', 'afii57839', 'afii57645', 'afii57841', // CC to CF
+ 'afii57842', 'afii57804', 'afii57803', 'afii57658', // D0 to D3
+ 'afii57716', 'afii57717', 'afii57718', 'gereshhebrew', // D4 to D7
+ 'gershayimhebrew', '.notdef', '.notdef', '.notdef', // D8 to DB
+ '.notdef', '.notdef', '.notdef', '.notdef', // DC to DF
+ 'afii57664', 'afii57665', 'afii57666', 'afii57667', // E0 to E3
+ 'afii57668', 'afii57669', 'afii57670', 'afii57671', // E4 to E7
+ 'afii57672', 'afii57673', 'afii57674', 'afii57675', // E8 to EB
+ 'afii57676', 'afii57677', 'afii57678', 'afii57679', // EC to EF
+ 'afii57680', 'afii57681', 'afii57682', 'afii57683', // F0 to F3
+ 'afii57684', 'afii57685', 'afii57686', 'afii57687', // F4 to F7
+ 'afii57688', 'afii57689', 'afii57690', '.notdef', // F8 to FB
+ '.notdef', 'afii299', 'afii300', '.notdef'); // FC to FF
+
+const
+ cp1255_v: array[0..255] of Word =
+ (0, 1, 2, 3, 4, 5, 6, 7, // 00 to 07
+ 8, 9, 10, 11, 12, 13, 14, 15, // 08 to 0F
+ 16, 17, 18, 19, 20, 21, 22, 23, // 10 to 17
+ 24, 25, 26, 27, 28, 29, 30, 31, // 18 to 1F
+ 32, 33, 34, 35, 36, 37, 38, 39, // 20 to 27
+ 40, 41, 42, 43, 44, 45, 46, 47, // 28 to 2F
+ 48, 49, 50, 51, 52, 53, 54, 55, // 30 to 37
+ 56, 57, 58, 59, 60, 61, 62, 63, // 38 to 3F
+ 64, 65, 66, 67, 68, 69, 70, 71, // 40 to 47
+ 72, 73, 74, 75, 76, 77, 78, 79, // 48 to 4F
+ 80, 81, 82, 83, 84, 85, 86, 87, // 50 to 57
+ 88, 89, 90, 91, 92, 93, 94, 95, // 58 to 5F
+ 96, 97, 98, 99, 100, 101, 102, 103, // 60 to 67
+ 104, 105, 106, 107, 108, 109, 110, 111, // 68 to 6F
+ 112, 113, 114, 115, 116, 117, 118, 119, // 70 to 77
+ 120, 121, 122, 123, 124, 125, 126, 127, // 78 to 7F
+ 8364, -1, 8218, 402, 8222, 8230, 8224, 8225, // 80 to 87
+ 710, 8240, -1, 8249, -1, -1, -1, -1, // 88 to 8F
+ -1, 8216, 8217, 8220, 8221, 8226, 8211, 8212, // 90 to 97
+ 732, 8482, -1, 8250, -1, -1, -1, -1, // 98 to 9F
+ 160, 161, 162, 163, 8362, 165, 166, 167, // A0 to A7
+ 168, 169, 215, 171, 172, 173, 174, 175, // A8 to AF
+ 176, 177, 178, 179, 180, 181, 182, 183, // B0 to B7
+ 184, 185, 247, 187, 188, 189, 190, 191, // B8 to BF
+ 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, // C0 to C7
+ 1464, 1465, -1, 1467, 1468, 1469, 1470, 1471, // C8 to CF
+ 1472, 1473, 1474, 1475, 1520, 1521, 1522, 1523, // D0 to D7
+ 1524, -1, -1, -1, -1, -1, -1, -1, // D8 to DF
+ 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, // E0 to E7
+ 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, // E8 to EF
+ 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, // F0 to F7
+ 1512, 1513, 1514, -1, -1, 8206, 8207, -1); // F8 to FF
+
+const
+ cp1257_n: array[0..255] of string =
+ ('.notdef', '.notdef', '.notdef', '.notdef', // 00 to 03
+ '.notdef', '.notdef', '.notdef', '.notdef', // 04 to 07
+ '.notdef', '.notdef', '.notdef', '.notdef', // 08 to 0B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 0C to 0F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 10 to 13
+ '.notdef', '.notdef', '.notdef', '.notdef', // 14 to 17
+ '.notdef', '.notdef', '.notdef', '.notdef', // 18 to 1B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 1C to 1F
+ 'space', 'exclam', 'quotedbl', 'numbersign', // 20 to 23
+ 'dollar', 'percent', 'ampersand', 'quotesingle', // 24 to 27
+ 'parenleft', 'parenright', 'asterisk', 'plus', // 28 to 2B
+ 'comma', 'hyphen', 'period', 'slash', // 2C to 2F
+ 'zero', 'one', 'two', 'three', // 30 to 33
+ 'four', 'five', 'six', 'seven', // 34 to 37
+ 'eight', 'nine', 'colon', 'semicolon', // 38 to 3B
+ 'less', 'equal', 'greater', 'question', // 3C to 3F
+ 'at', 'A', 'B', 'C', // 40 to 43
+ 'D', 'E', 'F', 'G', // 44 to 47
+ 'H', 'I', 'J', 'K', // 48 to 4B
+ 'L', 'M', 'N', 'O', // 4C to 4F
+ 'P', 'Q', 'R', 'S', // 50 to 53
+ 'T', 'U', 'V', 'W', // 54 to 57
+ 'X', 'Y', 'Z', 'bracketleft', // 58 to 5B
+ 'backslash', 'bracketright', 'asciicircum', 'underscore', // 5C to 5F
+ 'grave', 'a', 'b', 'c', // 60 to 63
+ 'd', 'e', 'f', 'g', // 64 to 67
+ 'h', 'i', 'j', 'k', // 68 to 6B
+ 'l', 'm', 'n', 'o', // 6C to 6F
+ 'p', 'q', 'r', 's', // 70 to 73
+ 't', 'u', 'v', 'w', // 74 to 77
+ 'x', 'y', 'z', 'braceleft', // 78 to 7B
+ 'bar', 'braceright', 'asciitilde', '.notdef', // 7C to 7F
+ 'Euro', '.notdef', 'quotesinglbase', '.notdef', // 80 to 83
+ 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', // 84 to 87
+ '.notdef', 'perthousand', '.notdef', 'guilsinglleft', // 88 to 8B
+ '.notdef', 'dieresis', 'caron', 'cedilla', // 8C to 8F
+ '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', // 90 to 93
+ 'quotedblright', 'bullet', 'endash', 'emdash', // 94 to 97
+ '.notdef', 'trademark', '.notdef', 'guilsinglright', // 98 to 9B
+ '.notdef', 'macron', 'ogonek', '.notdef', // 9C to 9F
+ 'space', '.notdef', 'cent', 'sterling', // A0 to A3
+ 'currency', '.notdef', 'brokenbar', 'section', // A4 to A7
+ 'Oslash', 'copyright', 'Rcommaaccent', 'guillemotleft', // A8 to AB
+ 'logicalnot', 'hyphen', 'registered', 'AE', // AC to AF
+ 'degree', 'plusminus', 'twosuperior', 'threesuperior', // B0 to B3
+ 'acute', 'mu', 'paragraph', 'periodcentered', // B4 to B7
+ 'oslash', 'onesuperior', 'rcommaaccent', 'guillemotright', // B8 to BB
+ 'onequarter', 'onehalf', 'threequarters', 'ae', // BC to BF
+ 'Aogonek', 'Iogonek', 'Amacron', 'Cacute', // C0 to C3
+ 'Adieresis', 'Aring', 'Eogonek', 'Emacron', // C4 to C7
+ 'Ccaron', 'Eacute', 'Zacute', 'Edotaccent', // C8 to CB
+ 'Gcommaaccent', 'Kcommaaccent', 'Imacron', 'Lcommaaccent', // CC to CF
+ 'Scaron', 'Nacute', 'Ncommaaccent', 'Oacute', // D0 to D3
+ 'Omacron', 'Otilde', 'Odieresis', 'multiply', // D4 to D7
+ 'Uogonek', 'Lslash', 'Sacute', 'Umacron', // D8 to DB
+ 'Udieresis', 'Zdotaccent', 'Zcaron', 'germandbls', // DC to DF
+ 'aogonek', 'iogonek', 'amacron', 'cacute', // E0 to E3
+ 'adieresis', 'aring', 'eogonek', 'emacron', // E4 to E7
+ 'ccaron', 'eacute', 'zacute', 'edotaccent', // E8 to EB
+ 'gcommaaccent', 'kcommaaccent', 'imacron', 'lcommaaccent', // EC to EF
+ 'scaron', 'nacute', 'ncommaaccent', 'oacute', // F0 to F3
+ 'omacron', 'otilde', 'odieresis', 'divide', // F4 to F7
+ 'uogonek', 'lslash', 'sacute', 'umacron', // F8 to FB
+ 'udieresis', 'zdotaccent', 'zcaron', 'dotaccent'); // FC to FF
+
+const
+ cp1257_v: array[0..255] of Word =
+ (0, 1, 2, 3, 4, 5, 6, 7, // 00 to 07
+ 8, 9, 10, 11, 12, 13, 14, 15, // 08 to 0F
+ 16, 17, 18, 19, 20, 21, 22, 23, // 10 to 17
+ 24, 25, 26, 27, 28, 29, 30, 31, // 18 to 1F
+ 32, 33, 34, 35, 36, 37, 38, 39, // 20 to 27
+ 40, 41, 42, 43, 44, 45, 46, 47, // 28 to 2F
+ 48, 49, 50, 51, 52, 53, 54, 55, // 30 to 37
+ 56, 57, 58, 59, 60, 61, 62, 63, // 38 to 3F
+ 64, 65, 66, 67, 68, 69, 70, 71, // 40 to 47
+ 72, 73, 74, 75, 76, 77, 78, 79, // 48 to 4F
+ 80, 81, 82, 83, 84, 85, 86, 87, // 50 to 57
+ 88, 89, 90, 91, 92, 93, 94, 95, // 58 to 5F
+ 96, 97, 98, 99, 100, 101, 102, 103, // 60 to 67
+ 104, 105, 106, 107, 108, 109, 110, 111, // 68 to 6F
+ 112, 113, 114, 115, 116, 117, 118, 119, // 70 to 77
+ 120, 121, 122, 123, 124, 125, 126, 127, // 78 to 7F
+ 8364, -1, 8218, -1, 8222, 8230, 8224, 8225, // 80 to 87
+ -1, 8240, -1, 8249, -1, 168, 711, 184, // 88 to 8F
+ -1, 8216, 8217, 8220, 8221, 8226, 8211, 8212, // 90 to 97
+ -1, 8482, -1, 8250, -1, 175, 731, -1, // 98 to 9F
+ 160, -1, 162, 163, 164, -1, 166, 167, // A0 to A7
+ 216, 169, 342, 171, 172, 173, 174, 198, // A0 to AF
+ 176, 177, 178, 179, 180, 181, 182, 183, // B0 to B7
+ 248, 185, 343, 187, 188, 189, 190, 230, // B8 to BF
+ 260, 302, 256, 262, 196, 197, 280, 274, // C0 to C7
+ 268, 201, 377, 278, 290, 310, 298, 315, // C8 to CF
+ 352, 323, 325, 211, 332, 213, 214, 215, // D0 to D7
+ 370, 321, 346, 362, 220, 379, 381, 223, // D8 to DF
+ 261, 303, 257, 263, 228, 229, 281, 275, // E0 to E7
+ 269, 233, 378, 279, 291, 311, 299, 316, // E8 to EF
+ 353, 324, 326, 243, 333, 245, 246, 247, // F0 to F7
+ 371, 322, 347, 363, 252, 380, 382, 729); // F8 to FF
+
+const
+ cp1258_n: array[0..255] of string =
+ ('.notdef', '.notdef', '.notdef', '.notdef', // 00 to 03
+ '.notdef', '.notdef', '.notdef', '.notdef', // 04 to 07
+ '.notdef', '.notdef', '.notdef', '.notdef', // 08 to 0B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 0C to 0F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 10 to 13
+ '.notdef', '.notdef', '.notdef', '.notdef', // 14 to 17
+ '.notdef', '.notdef', '.notdef', '.notdef', // 18 to 1B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 1C to 1F
+ 'space', 'exclam', 'quotedbl', 'numbersign', // 20 to 23
+ 'dollar', 'percent', 'ampersand', 'quotesingle', // 24 to 27
+ 'parenleft', 'parenright', 'asterisk', 'plus', // 28 to 2B
+ 'comma', 'hyphen', 'period', 'slash', // 2C to 2F
+ 'zero', 'one', 'two', 'three', // 30 to 33
+ 'four', 'five', 'six', 'seven', // 34 to 37
+ 'eight', 'nine', 'colon', 'semicolon', // 38 to 3B
+ 'less', 'equal', 'greater', 'question', // 3C to 3F
+ 'at', 'A', 'B', 'C', // 40 to 43
+ 'D', 'E', 'F', 'G', // 44 to 47
+ 'H', 'I', 'J', 'K', // 48 to 4B
+ 'L', 'M', 'N', 'O', // 4C to 4F
+ 'P', 'Q', 'R', 'S', // 50 to 53
+ 'T', 'U', 'V', 'W', // 54 to 57
+ 'X', 'Y', 'Z', 'bracketleft', // 58 to 5B
+ 'backslash', 'bracketright', 'asciicircum', 'underscore', // 5C to 5F
+ 'grave', 'a', 'b', 'c', // 60 to 63
+ 'd', 'e', 'f', 'g', // 64 to 67
+ 'h', 'i', 'j', 'k', // 68 to 6B
+ 'l', 'm', 'n', 'o', // 6C to 6F
+ 'p', 'q', 'r', 's', // 70 to 73
+ 't', 'u', 'v', 'w', // 74 to 77
+ 'x', 'y', 'z', 'braceleft', // 78 to 7B
+ 'bar', 'braceright', 'asciitilde', '.notdef', // 7C to 7F
+ 'Euro', '.notdef', 'quotesinglbase', 'florin', // 80 to 83
+ 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', // 84 to 87
+ 'circumflex', 'perthousand', '.notdef', 'guilsinglleft', // 88 to 8B
+ 'OE', '.notdef', '.notdef', '.notdef', // 8C to 8F
+ '.notdef', 'quoteleft', 'quoteright', 'quotedblleft', // 90 to 93
+ 'quotedblright', 'bullet', 'endash', 'emdash', // 94 to 97
+ 'tilde', 'trademark', '.notdef', 'guilsinglright', // 98 to 9B
+ 'oe', '.notdef', '.notdef', 'Ydieresis', // 9C to 9F
+ 'space', 'exclamdown', 'cent', 'sterling', // A0 to A3
+ 'currency', 'yen', 'brokenbar', 'section', // A4 to A7
+ 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft', // A8 to AB
+ 'logicalnot', 'hyphen', 'registered', 'macron', // AC to AF
+ 'degree', 'plusminus', 'twosuperior', 'threesuperior', // B0 to B3
+ 'acute', 'mu', 'paragraph', 'periodcentered', // B4 to B7
+ 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright', // B8 to BB
+ 'onequarter', 'onehalf', 'threequarters', 'questiondown', // BC to BF
+ 'Agrave', 'Aacute', 'Acircumflex', 'Abreve', // C0 to C3
+ 'Adieresis', 'Aring', 'AE', 'Ccedilla', // C4 to C7
+ 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', // C8 to CB
+ 'gravecomb', 'Iacute', 'Icircumflex', 'Idieresis', // CC to CF
+ 'Dcroat', 'Ntilde', 'hookabovecomb', 'Oacute', // D0 to D3
+ 'Ocircumflex', 'Ohorn', 'Odieresis', 'multiply', // D4 to D7
+ 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', // D8 to DB
+ 'Udieresis', 'Uhorn', 'tildecomb', 'germandbls', // DC to DF
+ 'agrave', 'aacute', 'acircumflex', 'abreve', // E0 to E3
+ 'adieresis', 'aring', 'ae', 'ccedilla', // E4 to E7
+ 'egrave', 'eacute', 'ecircumflex', 'edieresis', // E8 to EB
+ 'acutecomb', 'iacute', 'icircumflex', 'idieresis', // EC to EF
+ 'dcroat', 'ntilde', 'dotbelowcomb', 'oacute', // F0 to F3
+ 'ocircumflex', 'ohorn', 'odieresis', 'divide', // F4 to F7
+ 'oslash', 'ugrave', 'uacute', 'ucircumflex', // F8 to FB
+ 'udieresis', 'uhorn', 'dong', 'ydieresis'); // FC to FF
+
+const
+ cp1258_v: array[0..255] of Word =
+ (0, 1, 2, 3, 4, 5, 6, 7, // 00 to 07
+ 8, 9, 10, 11, 12, 13, 14, 15, // 08 to 0F
+ 16, 17, 18, 19, 20, 21, 22, 23, // 10 to 17
+ 24, 25, 26, 27, 28, 29, 30, 31, // 18 to 1F
+ 32, 33, 34, 35, 36, 37, 38, 39, // 20 to 27
+ 40, 41, 42, 43, 44, 45, 46, 47, // 28 to 2F
+ 48, 49, 50, 51, 52, 53, 54, 55, // 30 to 37
+ 56, 57, 58, 59, 60, 61, 62, 63, // 38 to 3F
+ 64, 65, 66, 67, 68, 69, 70, 71, // 40 to 47
+ 72, 73, 74, 75, 76, 77, 78, 79, // 48 to 4F
+ 80, 81, 82, 83, 84, 85, 86, 87, // 50 to 57
+ 88, 89, 90, 91, 92, 93, 94, 95, // 58 to 5F
+ 96, 97, 98, 99, 100, 101, 102, 103, // 60 to 67
+ 104, 105, 106, 107, 108, 109, 110, 111, // 68 to 6F
+ 112, 113, 114, 115, 116, 117, 118, 119, // 70 to 77
+ 120, 121, 122, 123, 124, 125, 126, 127, // 78 to 7F
+ 8264, -1, 8218, 402, 8222, 8230, 8224, 8225, // 80 to 87
+ 710, 8240, -1, 8249, 338, -1, -1, -1, // 88 to 8F
+ -1, 8216, 8217, 8220, 8221, 8226, 8211, 8212, // 90 to 97
+ 732, 8482, -1, 8250, 339, -1, -1, 376, // 98 to 9F
+ 160, 161, 162, 163, 164, 165, 166, 167, // A0 to A7
+ 168, 169, 170, 171, 172, 173, 174, 175, // A8 to AF
+ 176, 177, 178, 179, 180, 181, 182, 183, // B0 to B7
+ 184, 185, 186, 187, 188, 189, 190, 191, // B8 to BF
+ 192, 193, 194, 258, 196, 197, 198, 199, // C0 to C7
+ 200, 201, 202, 203, 768, 205, 206, 207, // C8 to CF
+ 272, 209, 777, 211, 212, 416, 214, 215, // D0 to D7
+ 216, 217, 218, 219, 220, 431, 771, 223, // D8 to DF
+ 224, 225, 226, 259, 228, 229, 230, 231, // E0 to E7
+ 232, 233, 234, 235, 769, 237, 238, 239, // E8 to EF
+ 273, 241, 803, 243, 244, 417, 246, 247, // F0 to F7
+ 248, 249, 250, 251, 252, 432, 8363, 255); // F8 to FF
+
+const
+ iso_8859_1_n: array[0..255] of string =
+ ('.notdef', '.notdef', '.notdef', '.notdef', // 00 to 03
+ '.notdef', '.notdef', '.notdef', '.notdef', // 04 to 07
+ '.notdef', '.notdef', '.notdef', '.notdef', // 08 to 0B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 0C to 0F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 10 to 13
+ '.notdef', '.notdef', '.notdef', '.notdef', // 14 to 17
+ '.notdef', '.notdef', '.notdef', '.notdef', // 18 to 1B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 1C to 1F
+ 'space', 'exclam', 'quotedbl', 'numbersign', // 20 to 23
+ 'dollar', 'percent', 'ampersand', 'quotesingle', // 24 to 27
+ 'parenleft', 'parenright', 'asterisk', 'plus', // 28 to 2B
+ 'comma', 'hyphen', 'period', 'slash', // 2C to 2F
+ 'zero', 'one', 'two', 'three', // 30 to 33
+ 'four', 'five', 'six', 'seven', // 34 to 37
+ 'eight', 'nine', 'colon', 'semicolon', // 38 to 3B
+ 'less', 'equal', 'greater', 'question', // 3C to 3F
+ 'at', 'A', 'B', 'C', // 40 to 43
+ 'D', 'E', 'F', 'G', // 44 to 47
+ 'H', 'I', 'J', 'K', // 48 to 4B
+ 'L', 'M', 'N', 'O', // 4C to 4F
+ 'P', 'Q', 'R', 'S', // 50 to 53
+ 'T', 'U', 'V', 'W', // 54 to 57
+ 'X', 'Y', 'Z', 'bracketleft', // 58 to 5B
+ 'backslash', 'bracketright', 'asciicircum', 'underscore', // 5C to 5F
+ 'grave', 'a', 'b', 'c', // 60 to 63
+ 'd', 'e', 'f', 'g', // 64 to 67
+ 'h', 'i', 'j', 'k', // 68 to 6B
+ 'l', 'm', 'n', 'o', // 6C to 6F
+ 'p', 'q', 'r', 's', // 70 to 73
+ 't', 'u', 'v', 'w', // 74 to 77
+ 'x', 'y', 'z', 'braceleft', // 78 to 7B
+ 'bar', 'braceright', 'asciitilde', '.notdef', // 7C to 7F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 80 to 83
+ '.notdef', '.notdef', '.notdef', '.notdef', // 84 to 87
+ '.notdef', '.notdef', '.notdef', '.notdef', // 88 to 8B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 8C to 8F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 90 to 93
+ '.notdef', '.notdef', '.notdef', '.notdef', // 94 to 97
+ '.notdef', '.notdef', '.notdef', '.notdef', // 98 to 9B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 9C to 9F
+ 'space', 'exclamdown', 'cent', 'sterling', // A0 to A3
+ 'currency', 'yen', 'brokenbar', 'section', // A4 to A7
+ 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft', // A8 to AB
+ 'logicalnot', 'hyphen', 'registered', 'macron', // AC to AF
+ 'degree', 'plusminus', 'twosuperior', 'threesuperior', // B0 to B3
+ 'acute', 'mu', 'paragraph', 'periodcentered', // B4 to B7
+ 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright', // B8 to BB
+ 'onequarter', 'onehalf', 'threequarters','questiondown', // BC to BF
+ 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', // C0 to C3
+ 'Adieresis', 'Aring', 'AE', 'Ccedilla', // C4 to C7
+ 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', // C8 to CB
+ 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', // CC to CF
+ 'Eth', 'Ntilde', 'Ograve', 'Oacute', // D0 to D3
+ 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', // D4 to D7
+ 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', // D8 to DB
+ 'Udieresis', 'Yacute', 'Thorn', 'germandbls', // DC to DF
+ 'agrave', 'aacute', 'acircumflex', 'atilde', // E0 to E3
+ 'adieresis', 'aring', 'ae', 'ccedilla', // E4 to E7
+ 'egrave', 'eacute', 'ecircumflex', 'edieresis', // E8 to EB
+ 'igrave', 'iacute', 'icircumflex', 'idieresis', // EC to EF
+ 'eth', 'ntilde', 'ograve', 'oacute', // F0 to F3
+ 'ocircumflex', 'otilde', 'odieresis', 'divide', // F4 to F7
+ 'oslash', 'ugrave', 'uacute', 'ucircumflex', // F8 to FB
+ 'udieresis', 'yacute', 'thorn', 'ydieresis'); // FC to FF
+
+const
+ iso_8859_1_v: array[0..255] of Word =
+ (0, 1, 2, 3, 4, 5, 6, 7, // 00 to 07
+ 8, 9, 10, 11, 12, 13, 14, 15, // 08 to 0F
+ 16, 17, 18, 19, 20, 21, 22, 23, // 10 to 17
+ 24, 25, 26, 27, 28, 29, 30, 31, // 18 to 1F
+ 32, 33, 34, 35, 36, 37, 38, 39, // 20 to 27
+ 40, 41, 42, 43, 44, 45, 46, 47, // 28 to 2F
+ 48, 49, 50, 51, 52, 53, 54, 55, // 30 to 37
+ 56, 57, 58, 59, 60, 61, 62, 63, // 38 to 3F
+ 64, 65, 66, 67, 68, 69, 70, 71, // 40 to 47
+ 72, 73, 74, 75, 76, 77, 78, 79, // 48 to 4F
+ 80, 81, 82, 83, 84, 85, 86, 87, // 50 to 57
+ 88, 89, 90, 91, 92, 93, 94, 95, // 58 to 5F
+ 96, 97, 98, 99, 100, 101, 102, 103, // 60 to 67
+ 104, 105, 106, 107, 108, 109, 110, 111, // 68 to 6F
+ 112, 113, 114, 115, 116, 117, 118, 119, // 70 to 77
+ 120, 121, 122, 123, 124, 125, 126, 127, // 78 to 7F
+ -1, -1, -1, -1, -1, -1, -1, -1, // 80 to 87
+ -1, -1, -1, -1, -1, -1, -1, -1, // 88 to 8F
+ -1, -1, -1, -1, -1, -1, -1, -1, // 90 to 97
+ -1, -1, -1, -1, -1, -1, -1, -1, // 98 to 9F
+ 160, 161, 162, 163, 164, 165, 166, 167, // A0 to A7
+ 168, 169, 170, 171, 172, 173, 174, 175, // A8 to AF
+ 176, 177, 178, 179, 180, 181, 182, 183, // B0 to B7
+ 184, 185, 186, 187, 188, 189, 190, 191, // B8 to BF
+ 192, 193, 194, 195, 196, 197, 198, 199, // C0 to C7
+ 200, 201, 202, 203, 204, 205, 206, 207, // C8 to CF
+ 208, 209, 210, 211, 212, 213, 214, 215, // D0 to D7
+ 216, 217, 218, 219, 220, 221, 222, 223, // D8 to DF
+ 224, 225, 226, 227, 228, 229, 230, 231, // E0 to E7
+ 232, 233, 234, 235, 236, 237, 238, 239, // E8 to EF
+ 240, 241, 242, 243, 244, 245, 246, 247, // F0 to F7
+ 248, 249, 250, 251, 252, 253, 254, 255); // F8 to FF
+
+const
+ iso_8859_2_n: array[0..255] of string =
+ ('.notdef', '.notdef', '.notdef', '.notdef', // 00 to 03
+ '.notdef', '.notdef', '.notdef', '.notdef', // 04 to 07
+ '.notdef', '.notdef', '.notdef', '.notdef', // 08 to 0B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 0C to 0F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 10 to 13
+ '.notdef', '.notdef', '.notdef', '.notdef', // 14 to 17
+ '.notdef', '.notdef', '.notdef', '.notdef', // 18 to 1B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 1C to 1F
+ 'space', 'exclam', 'quotedbl', 'numbersign', // 20 to 23
+ 'dollar', 'percent', 'ampersand', 'quotesingle', // 24 to 27
+ 'parenleft', 'parenright', 'asterisk', 'plus', // 28 to 2B
+ 'comma', 'hyphen', 'period', 'slash', // 2C to 2F
+ 'zero', 'one', 'two', 'three', // 30 to 33
+ 'four', 'five', 'six', 'seven', // 34 to 37
+ 'eight', 'nine', 'colon', 'semicolon', // 38 to 3B
+ 'less', 'equal', 'greater', 'question', // 3C to 3F
+ 'at', 'A', 'B', 'C', // 40 to 43
+ 'D', 'E', 'F', 'G', // 44 to 47
+ 'H', 'I', 'J', 'K', // 48 to 4B
+ 'L', 'M', 'N', 'O', // 4C to 4F
+ 'P', 'Q', 'R', 'S', // 50 to 53
+ 'T', 'U', 'V', 'W', // 54 to 57
+ 'X', 'Y', 'Z', 'bracketleft', // 58 to 5B
+ 'backslash', 'bracketright', 'asciicircum', 'underscore', // 5C to 5F
+ 'grave', 'a', 'b', 'c', // 60 to 63
+ 'd', 'e', 'f', 'g', // 64 to 67
+ 'h', 'i', 'j', 'k', // 68 to 6B
+ 'l', 'm', 'n', 'o', // 6C to 6F
+ 'p', 'q', 'r', 's', // 70 to 73
+ 't', 'u', 'v', 'w', // 74 to 77
+ 'x', 'y', 'z', 'braceleft', // 78 to 7B
+ 'bar', 'braceright', 'asciitilde', '.notdef', // 7C to 7F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 80 to 83
+ '.notdef', '.notdef', '.notdef', '.notdef', // 84 to 87
+ '.notdef', '.notdef', '.notdef', '.notdef', // 88 to 8B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 8C to 8F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 90 to 93
+ '.notdef', '.notdef', '.notdef', '.notdef', // 94 to 97
+ '.notdef', '.notdef', '.notdef', '.notdef', // 98 to 9B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 9C to 9F
+ 'space', 'Aogonek', 'breve', 'Lslash', // A0 to A3
+ 'currency', 'Lcaron', 'Sacute', 'section', // A4 to A7
+ 'dieresis', 'Scaron', 'Scedilla', 'Tcaron', // A8 to AB
+ 'Zacute', 'hyphen', 'Zcaron', 'Zdotaccent', // AC to AF
+ 'degree', 'aogonek', 'ogonek', 'lslash', // B0 to B3
+ 'acute', 'lcaron', 'sacute', 'caron', // B4 to B7
+ 'cedilla', 'scaron', 'scedilla', 'tcaron', // B8 to BB
+ 'zacute', 'hungarumlaut', 'zcaron', 'zdotaccent', // BC to BF
+ 'Racute', 'Aacute', 'Acircumflex', 'Abreve', // C0 to C3
+ 'Adieresis', 'Lacute', 'Cacute', 'Ccedilla', // C4 to C7
+ 'Ccaron', 'Eacute', 'Eogonek', 'Edieresis', // C8 to CB
+ 'Ecaron', 'Iacute', 'Icircumflex', 'Dcaron', // CC to CF
+ 'Dcroat', 'Nacute', 'Ncaron', 'Oacute', // D0 to D3
+ 'Ocircumflex', 'Ohungarumlaut','Odieresis', 'multiply', // D4 to D7
+ 'Rcaron', 'Uring', 'Uacute', 'Uhungarumlaut', // D8 to DB
+ 'Udieresis', 'Yacute', 'Tcommaaccent', 'germandbls', // DC to DF
+ 'racute', 'aacute', 'acircumflex', 'abreve', // E0 to E3
+ 'adieresis', 'lacute', 'cacute', 'ccedilla', // E4 to E7
+ 'ccaron', 'eacute', 'eogonek', 'edieresis', // E8 to EB
+ 'ecaron', 'iacute', 'icircumflex', 'dcaron', // EC to EF
+ 'dcroat', 'nacute', 'ncaron', 'oacute', // F0 to F3
+ 'ocircumflex', 'ohungarumlaut','odieresis', 'divide', // F4 to F7
+ 'rcaron', 'uring', 'uacute', 'uhungarumlaut', // F8 to FB
+ 'udieresis', 'yacute', 'tcommaaccent', 'dotaccent'); // FC to FF
+
+const
+ iso_8859_2_v: array[0..255] of Word =
+ (0, 1, 2, 3, 4, 5, 6, 7, // 00 to 07
+ 8, 9, 10, 11, 12, 13, 14, 15, // 08 to 0F
+ 16, 17, 18, 19, 20, 21, 22, 23, // 10 to 17
+ 24, 25, 26, 27, 28, 29, 30, 31, // 18 to 1F
+ 32, 33, 34, 35, 36, 37, 38, 39, // 20 to 27
+ 40, 41, 42, 43, 44, 45, 46, 47, // 28 to 2F
+ 48, 49, 50, 51, 52, 53, 54, 55, // 30 to 37
+ 56, 57, 58, 59, 60, 61, 62, 63, // 38 to 3F
+ 64, 65, 66, 67, 68, 69, 70, 71, // 40 to 47
+ 72, 73, 74, 75, 76, 77, 78, 79, // 48 to 4F
+ 80, 81, 82, 83, 84, 85, 86, 87, // 50 to 57
+ 88, 89, 90, 91, 92, 93, 94, 95, // 58 to 5F
+ 96, 97, 98, 99, 100, 101, 102, 103, // 60 to 67
+ 104, 105, 106, 107, 108, 109, 110, 111, // 68 to 6F
+ 112, 113, 114, 115, 116, 117, 118, 119, // 70 to 77
+ 120, 121, 122, 123, 124, 125, 126, 127, // 78 to 7F
+ -1, -1, -1, -1, -1, -1, -1, -1, // 80 to 87
+ -1, -1, -1, -1, -1, -1, -1, -1, // 88 to 8F
+ -1, -1, -1, -1, -1, -1, -1, -1, // 90 to 97
+ -1, -1, -1, -1, -1, -1, -1, -1, // 98 to 9F
+ 160, 260, 728, 321, 164, 317, 346, 167, // A0 to A7
+ 168, 352, 350, 356, 377, 173, 381, 379, // A8 to AF
+ 176, 261, 731, 322, 180, 318, 347, 711, // B0 to B7
+ 184, 353, 351, 357, 378, 733, 382, 380, // B8 to BF
+ 340, 193, 194, 258, 196, 313, 262, 199, // C0 to C7
+ 268, 201, 280, 203, 282, 205, 206, 270, // C8 to CF
+ 272, 323, 327, 211, 212, 336, 214, 215, // D0 to D7
+ 344, 366, 218, 368, 220, 221, 354, 223, // D8 to DF
+ 341, 225, 226, 259, 228, 314, 263, 231, // E0 to E7
+ 269, 233, 281, 235, 283, 237, 238, 271, // E8 to EF
+ 273, 324, 328, 243, 244, 337, 246, 247, // F0 to F7
+ 345, 367, 250, 369, 252, 253, 355, 729); // F8 to FF
+
+const
+ iso_8859_4_n: array[0..255] of string =
+ ('.notdef', '.notdef', '.notdef', '.notdef', // 00 to 03
+ '.notdef', '.notdef', '.notdef', '.notdef', // 04 to 07
+ '.notdef', '.notdef', '.notdef', '.notdef', // 08 to 0B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 0C to 0F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 10 to 13
+ '.notdef', '.notdef', '.notdef', '.notdef', // 14 to 17
+ '.notdef', '.notdef', '.notdef', '.notdef', // 18 to 1B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 1C to 1F
+ 'space', 'exclam', 'quotedbl', 'numbersign', // 20 to 23
+ 'dollar', 'percent', 'ampersand', 'quotesingle', // 24 to 27
+ 'parenleft', 'parenright', 'asterisk', 'plus', // 28 to 2B
+ 'comma', 'hyphen', 'period', 'slash', // 2C to 2F
+ 'zero', 'one', 'two', 'three', // 30 to 33
+ 'four', 'five', 'six', 'seven', // 34 to 37
+ 'eight', 'nine', 'colon', 'semicolon', // 38 to 3B
+ 'less', 'equal', 'greater', 'question', // 3C to 3F
+ 'at', 'A', 'B', 'C', // 40 to 43
+ 'D', 'E', 'F', 'G', // 44 to 47
+ 'H', 'I', 'J', 'K', // 48 to 4B
+ 'L', 'M', 'N', 'O', // 4C to 4F
+ 'P', 'Q', 'R', 'S', // 50 to 53
+ 'T', 'U', 'V', 'W', // 54 to 57
+ 'X', 'Y', 'Z', 'bracketleft', // 58 to 5B
+ 'backslash', 'bracketright', 'asciicircum', 'underscore', // 5C to 5F
+ 'grave', 'a', 'b', 'c', // 60 to 63
+ 'd', 'e', 'f', 'g', // 64 to 67
+ 'h', 'i', 'j', 'k', // 68 to 6B
+ 'l', 'm', 'n', 'o', // 6C to 6F
+ 'p', 'q', 'r', 's', // 70 to 73
+ 't', 'u', 'v', 'w', // 74 to 77
+ 'x', 'y', 'z', 'braceleft', // 78 to 7B
+ 'bar', 'braceright', 'asciitilde', '.notdef', // 7C to 7F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 80 to 83
+ '.notdef', '.notdef', '.notdef', '.notdef', // 84 to 87
+ '.notdef', '.notdef', '.notdef', '.notdef', // 88 to 8B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 8C to 8F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 90 to 93
+ '.notdef', '.notdef', '.notdef', '.notdef', // 94 to 97
+ '.notdef', '.notdef', '.notdef', '.notdef', // 98 to 9B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 9C to 9F
+ 'space', 'Aogonek', 'kgreenlandic', 'Rcommaaccent', // A0 to A3
+ 'currency', 'Itilde', 'Lcommaaccent', 'section', // A4 to A7
+ 'dieresis', 'Scaron', 'Emacron', 'Gcommaaccent', // A8 to AB
+ 'Tbar', 'hyphen', 'Zcaron', 'macron', // AC to AF
+ 'degree', 'aogonek', 'ogonek', 'rcommaaccent', // B0 to B3
+ 'acute', 'itilde', 'lcommaaccent', 'caron', // B4 to B7
+ 'cedilla', 'scaron', 'emacron', 'gcommaaccent', // B8 to BB
+ 'tbar', 'Eng', 'zcaron', 'eng', // BC to BF
+ 'Amacron', 'Aacute', 'Acircumflex', 'Atilde', // C0 to C3
+ 'Adieresis', 'Aring', 'AE', 'Iogonek', // C4 to C7
+ 'Ccaron', 'Eacute', 'Eogonek', 'Edieresis', // C8 to CB
+ 'Edotaccent', 'Iacute', 'Icircumflex', 'Imacron', // CC to CF
+ 'Dcroat', 'Ncommaaccent', 'Omacron', 'Kcommaaccent', // D0 to D3
+ 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', // D4 to D7
+ 'Oslash', 'Uogonek', 'Uacute', 'Ucircumflex', // D8 to DB
+ 'Udieresis', 'Utilde', 'Umacron', 'germandbls', // DC to DF
+ 'amacron', 'aacute', 'acircumflex', 'atilde', // E0 to E3
+ 'adieresis', 'aring', 'ae', 'iogonek', // E4 to E7
+ 'ccaron', 'eacute', 'eogonek', 'edieresis', // E8 to EB
+ 'edotaccent', 'iacute', 'icircumflex', 'imacron', // EC to EF
+ 'dcroat', 'ncommaaccent', 'omacron', 'kcommaaccent', // F0 to F3
+ 'ocircumflex', 'otilde', 'odieresis', 'divide', // F4 to F7
+ 'oslash', 'uogonek', 'uacute', 'ucircumflex', // F8 to FB
+ 'udieresis', 'utilde', 'umacron', 'dotaccent'); // FC to FF
+
+const
+ iso_8859_4_v: array[0..255] of Word =
+ (0, 1, 2, 3, 4, 5, 6, 7, // 00 to 07
+ 8, 9, 10, 11, 12, 13, 14, 15, // 08 to 0F
+ 16, 17, 18, 19, 20, 21, 22, 23, // 10 to 17
+ 24, 25, 26, 27, 28, 29, 30, 31, // 18 to 1F
+ 32, 33, 34, 35, 36, 37, 38, 39, // 20 to 27
+ 40, 41, 42, 43, 44, 45, 46, 47, // 28 to 2F
+ 48, 49, 50, 51, 52, 53, 54, 55, // 30 to 37
+ 56, 57, 58, 59, 60, 61, 62, 63, // 38 to 3F
+ 64, 65, 66, 67, 68, 69, 70, 71, // 40 to 47
+ 72, 73, 74, 75, 76, 77, 78, 79, // 48 to 4F
+ 80, 81, 82, 83, 84, 85, 86, 87, // 50 to 57
+ 88, 89, 90, 91, 92, 93, 94, 95, // 58 to 5F
+ 96, 97, 98, 99, 100, 101, 102, 103, // 60 to 67
+ 104, 105, 106, 107, 108, 109, 110, 111, // 68 to 6F
+ 112, 113, 114, 115, 116, 117, 118, 119, // 70 to 77
+ 120, 121, 122, 123, 124, 125, 126, 127, // 78 to 7F
+ -1, -1, -1, -1, -1, -1, -1, -1, // 80 to 87
+ -1, -1, -1, -1, -1, -1, -1, -1, // 88 to 8F
+ -1, -1, -1, -1, -1, -1, -1, -1, // 90 to 97
+ -1, -1, -1, -1, -1, -1, -1, -1, // 98 to 9F
+ 160, 260, 312, 342, 164, 296, 315, 167, // A4 to A7
+ 168, 352, 274, 290, 358, 173, 381, 175, // AC to AF
+ 176, 261, 731, 343, 180, 297, 316, 711, // B4 to B7
+ 184, 353, 275, 291, 359, 330, 382, 331, // BC to BF
+ 256, 193, 194, 195, 196, 197, 198, 302, // C4 to C7
+ 268, 201, 280, 203, 278, 205, 206, 298, // CC to CF
+ 272, 325, 332, 310, 212, 213, 214, 215, // D4 to D7
+ 216, 370, 218, 219, 220, 360, 362, 223, // DC to DF
+ 257, 225, 226, 227, 228, 229, 230, 303, // E4 to E7
+ 269, 233, 281, 235, 279, 237, 238, 299, // EC to EF
+ 273, 326, 333, 311, 244, 245, 246, 247, // F4 to F7
+ 248, 371, 250, 251, 252, 361, 363, 729); // FC to FF
+
+const
+ iso_8859_5_n: array[0..255] of string =
+ ('.notdef', '.notdef', '.notdef', '.notdef', // 00 to 03
+ '.notdef', '.notdef', '.notdef', '.notdef', // 04 to 07
+ '.notdef', '.notdef', '.notdef', '.notdef', // 08 to 0B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 0C to 0F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 10 to 13
+ '.notdef', '.notdef', '.notdef', '.notdef', // 14 to 17
+ '.notdef', '.notdef', '.notdef', '.notdef', // 18 to 1B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 1C to 1F
+ 'space', 'exclam', 'quotedbl', 'numbersign', // 20 to 23
+ 'dollar', 'percent', 'ampersand', 'quotesingle', // 24 to 27
+ 'parenleft', 'parenright', 'asterisk', 'plus', // 28 to 2B
+ 'comma', 'hyphen', 'period', 'slash', // 2C to 2F
+ 'zero', 'one', 'two', 'three', // 30 to 33
+ 'four', 'five', 'six', 'seven', // 34 to 37
+ 'eight', 'nine', 'colon', 'semicolon', // 38 to 3B
+ 'less', 'equal', 'greater', 'question', // 3C to 3F
+ 'at', 'A', 'B', 'C', // 40 to 43
+ 'D', 'E', 'F', 'G', // 44 to 47
+ 'H', 'I', 'J', 'K', // 48 to 4B
+ 'L', 'M', 'N', 'O', // 4C to 4F
+ 'P', 'Q', 'R', 'S', // 50 to 53
+ 'T', 'U', 'V', 'W', // 54 to 57
+ 'X', 'Y', 'Z', 'bracketleft', // 58 to 5B
+ 'backslash', 'bracketright', 'asciicircum','underscore', // 5C to 5F
+ 'grave', 'a', 'b', 'c', // 60 to 63
+ 'd', 'e', 'f', 'g', // 64 to 67
+ 'h', 'i', 'j', 'k', // 68 to 6B
+ 'l', 'm', 'n', 'o', // 6C to 6F
+ 'p', 'q', 'r', 's', // 70 to 73
+ 't', 'u', 'v', 'w', // 74 to 77
+ 'x', 'y', 'z', 'braceleft', // 78 to 7B
+ 'bar', 'braceright', 'asciitilde', '.notdef', // 7C to 7F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 80 to 83
+ '.notdef', '.notdef', '.notdef', '.notdef', // 84 to 87
+ '.notdef', '.notdef', '.notdef', '.notdef', // 88 to 8B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 8C to 8F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 90 to 93
+ '.notdef', '.notdef', '.notdef', '.notdef', // 94 to 97
+ '.notdef', '.notdef', '.notdef', '.notdef', // 98 to 9B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 9C to 9F
+ 'space', 'afii10023', 'afii10051', 'afii10052', // A0 to A3
+ 'afii10053', 'afii10054', 'afii10055', 'afii10056', // A4 to A7
+ 'afii10057', 'afii10058', 'afii10059', 'afii10060', // A8 to AB
+ 'afii10061', 'hyphen', 'afii10062', 'afii10145', // AC to AF
+ 'afii10017', 'afii10018', 'afii10019', 'afii10020', // B0 to B3
+ 'afii10021', 'afii10022', 'afii10024', 'afii10025', // B4 to B7
+ 'afii10026', 'afii10027', 'afii10028', 'afii10029', // B8 to BB
+ 'afii10030', 'afii10031', 'afii10032', 'afii10033', // BC to BF
+ 'afii10034', 'afii10035', 'afii10036', 'afii10037', // C0 to C3
+ 'afii10038', 'afii10039', 'afii10040', 'afii10041', // C4 to C7
+ 'afii10042', 'afii10043', 'afii10044', 'afii10045', // C8 to CB
+ 'afii10046', 'afii10047', 'afii10048', 'afii10049', // CC to CF
+ 'afii10065', 'afii10065', 'afii10067', 'afii10068', // D0 to D3
+ 'afii10069', 'afii10070', 'afii10072', 'afii10073', // D4 to D7
+ 'afii10074', 'afii10075', 'afii10076', 'afii10077', // D8 to DB
+ 'afii10078', 'afii10079', 'afii10080', 'afii10081', // DC to DF
+ 'afii10082', 'afii10083', 'afii10084', 'afii10085', // E0 to E3
+ 'afii10086', 'afii10087', 'afii10088', 'afii10089', // E4 to E7
+ 'afii10090', 'afii10091', 'afii10092', 'afii10093', // E8 to EB
+ 'afii10094', 'afii10095', 'afii10096', 'afii10097', // EC to EF
+ 'afii61352', 'afii10071', 'afii10099', 'afii10100', // F0 to F3
+ 'afii10101', 'afii10102', 'afii10103', 'afii10104', // F4 to F7
+ 'afii10105', 'afii10106', 'afii10107', 'afii10108', // F8 to FB
+ 'afii10109', 'section', 'afii10110', 'afii10193'); // FC to FF
+
+const
+ iso_8859_5_v: array[0..255] of Word =
+ (0, 1, 2, 3, 4, 5, 6, 7, // 00 to 07
+ 8, 9, 10, 11, 12, 13, 14, 15, // 08 to 0F
+ 16, 17, 18, 19, 20, 21, 22, 23, // 10 to 17
+ 24, 25, 26, 27, 28, 29, 30, 31, // 18 to 1F
+ 32, 33, 34, 35, 36, 37, 38, 39, // 20 to 27
+ 40, 41, 42, 43, 44, 45, 46, 47, // 28 to 2F
+ 48, 49, 50, 51, 52, 53, 54, 55, // 30 to 37
+ 56, 57, 58, 59, 60, 61, 62, 63, // 38 to 3F
+ 64, 65, 66, 67, 68, 69, 70, 71, // 40 to 47
+ 72, 73, 74, 75, 76, 77, 78, 79, // 48 to 4F
+ 80, 81, 82, 83, 84, 85, 86, 87, // 50 to 57
+ 88, 89, 90, 91, 92, 93, 94, 95, // 58 to 5F
+ 96, 97, 98, 99, 100, 101, 102, 103, // 60 to 67
+ 104, 105, 106, 107, 108, 109, 110, 111, // 68 to 6F
+ 112, 113, 114, 115, 116, 117, 118, 119, // 70 to 77
+ 120, 121, 122, 123, 124, 125, 126, 127, // 78 to 7F
+ -1, -1, -1, -1, -1, -1, -1, -1, // 80 to 87
+ -1, -1, -1, -1, -1, -1, -1, -1, // 88 to 8F
+ -1, -1, -1, -1, -1, -1, -1, -1, // 90 to 97
+ -1, -1, -1, -1, -1, -1, -1, -1, // 98 to 9F
+ 160, 1025, 1026, 1027, 1028, 1029, 1030, 1031, // A0 to A7
+ 1032, 1033, 1034, 1035, 1036, 173, 1038, 1039, // A8 to AF
+ 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, // B0 to B7
+ 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, // B8 to BF
+ 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, // C0 to C7
+ 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, // C8 to CF
+ 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, // D0 to D7
+ 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, // D8 to DF
+ 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, // E0 to E7
+ 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, // E8 to EF
+ 8470, 1105, 1106, 1107, 1108, 1109, 1110, 1111, // F0 to F7
+ 1112, 1113, 1114, 1115, 1116, 167, 1118, 1119); // F8 to FF
+
+const
+ iso_8859_7_n: array[0..255] of string =
+ ('.notdef', '.notdef', '.notdef', '.notdef', // 00 to 03
+ '.notdef', '.notdef', '.notdef', '.notdef', // 04 to 07
+ '.notdef', '.notdef', '.notdef', '.notdef', // 08 to 0B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 0C to 0F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 10 to 13
+ '.notdef', '.notdef', '.notdef', '.notdef', // 14 to 17
+ '.notdef', '.notdef', '.notdef', '.notdef', // 18 to 1B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 1C to 1F
+ 'space', 'exclam', 'quotedbl', 'numbersign', // 20 to 23
+ 'dollar', 'percent', 'ampersand', 'quotesingle', // 24 to 27
+ 'parenleft', 'parenright', 'asterisk', 'plus', // 28 to 2B
+ 'comma', 'hyphen', 'period', 'slash', // 2C to 2F
+ 'zero', 'one', 'two', 'three', // 30 to 33
+ 'four', 'five', 'six', 'seven', // 34 to 37
+ 'eight', 'nine', 'colon', 'semicolon', // 38 to 3B
+ 'less', 'equal', 'greater', 'question', // 3C to 3F
+ 'at', 'A', 'B', 'C', // 40 to 43
+ 'D', 'E', 'F', 'G', // 44 to 47
+ 'H', 'I', 'J', 'K', // 48 to 4B
+ 'L', 'M', 'N', 'O', // 4C to 4F
+ 'P', 'Q', 'R', 'S', // 50 to 53
+ 'T', 'U', 'V', 'W', // 54 to 57
+ 'X', 'Y', 'Z', 'bracketleft', // 58 to 5B
+ 'backslash', 'bracketright', 'asciicircum', 'underscore', // 5C to 5F
+ 'grave', 'a', 'b', 'c', // 60 to 63
+ 'd', 'e', 'f', 'g', // 64 to 67
+ 'h', 'i', 'j', 'k', // 68 to 6B
+ 'l', 'm', 'n', 'o', // 6C to 6F
+ 'p', 'q', 'r', 's', // 70 to 73
+ 't', 'u', 'v', 'w', // 74 to 77
+ 'x', 'y', 'z', 'braceleft', // 78 to 7B
+ 'bar', 'braceright', 'asciitilde', '.notdef', // 7C to 7F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 80 to 83
+ '.notdef', '.notdef', '.notdef', '.notdef', // 84 to 87
+ '.notdef', '.notdef', '.notdef', '.notdef', // 88 to 8B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 8C to 8F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 90 to 93
+ '.notdef', '.notdef', '.notdef', '.notdef', // 94 to 97
+ '.notdef', '.notdef', '.notdef', '.notdef', // 98 to 9B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 9C to 9F
+ 'space', 'quoteleft', 'quoteright', 'sterling', // A0 to A3
+ 'brokenbar', 'section', 'dieresis', 'copyright', // A4 to A7
+ 'guillemotleft', 'logicalnot', 'hyphen', 'afii00208', // A8 to AB
+ 'degree', 'plusminus', 'twosuperior', 'threesuperior', // AC to AF
+ 'tonos', 'dieresistonos','Alphatonos', 'periodcentered', // B0 to B3
+ 'Epsilontonos', 'Etatonos', 'Iotatonos', 'guillemotright', // B4 to B7
+ 'Omicrontonos', 'onehalf', 'Upsilontonos', 'Omegatonos', // B8 to BB
+ 'iotadieresistonos', 'Alpha', 'Beta', 'Gamma', // BC to BF
+ 'Delta', 'Epsilon', 'Zeta', 'Eta', // C0 to C3
+ 'Theta', 'Iota', 'Kappa', 'Lambda', // C4 to C7
+ 'Mu', 'Nu', 'Xi', 'Omicron', // C8 to CB
+ 'Pi', 'Rho', 'Sigma', 'Tau', // CC to CF
+ 'Upsilon', 'Phi', 'Chi', 'Psi', // D0 to D3
+ 'Omega', 'Iotadieresis', 'Upsilondieresis','alphatonos', // D4 to D7
+ 'epsilontonos', 'etatonos', 'iotatonos', 'upsilondieresistonos', // D8 to DB
+ 'alpha', 'beta', 'gamma', 'delta', // DC to DF
+ 'epsilon', 'zeta', 'eta', 'theta', // E0 to E3
+ 'iota', 'kappa', 'lambda', 'mu', // E4 to E7
+ 'nu', 'xi', 'omicron', 'pi', // E8 to EB
+ 'rho', 'sigma1', 'sigma', 'tau', // EC to EF
+ 'upsilon', 'phi', 'chi', 'psi', // F0 to F3
+ 'omega', 'iotadieresis', 'upsilondieresis','omicrontonos', // F4 to F7
+ 'upsilontonos', 'omegatonos', '.notdef', '.notdef', // F8 to FB
+ '.notdef', '.notdef', '.notdef', '.notdef'); // FC to FF
+
+const
+ iso_8859_7_v: array[0..255] of Word =
+ (0, 1, 2, 3, 4, 5, 6, 7, // 00 to 07
+ 8, 9, 10, 11, 12, 13, 14, 15, // 08 to 0F
+ 16, 17, 18, 19, 20, 21, 22, 23, // 10 to 17
+ 24, 25, 26, 27, 28, 29, 30, 31, // 18 to 1F
+ 32, 33, 34, 35, 36, 37, 38, 39, // 20 to 27
+ 40, 41, 42, 43, 44, 45, 46, 47, // 28 to 2F
+ 48, 49, 50, 51, 52, 53, 54, 55, // 30 to 37
+ 56, 57, 58, 59, 60, 61, 62, 63, // 38 to 3F
+ 64, 65, 66, 67, 68, 69, 70, 71, // 40 to 47
+ 72, 73, 74, 75, 76, 77, 78, 79, // 48 to 4F
+ 80, 81, 82, 83, 84, 85, 86, 87, // 50 to 57
+ 88, 89, 90, 91, 92, 93, 94, 95, // 58 to 5F
+ 96, 97, 98, 99, 100, 101, 102, 103, // 60 to 67
+ 104, 105, 106, 107, 108, 109, 110, 111, // 68 to 6F
+ 112, 113, 114, 115, 116, 117, 118, 119, // 70 to 77
+ 120, 121, 122, 123, 124, 125, 126, 127, // 78 to 7F
+ -1, -1, -1, -1, -1, -1, -1, -1, // 80 to 87
+ -1, -1, -1, -1, -1, -1, -1, -1, // 88 to 8F
+ -1, -1, -1, -1, -1, -1, -1, -1, // 90 to 97
+ -1, -1, -1, -1, -1, -1, -1, -1, // 98 to 9F
+ 160, 8216, 8217, 163, 166, 167, 168, 169, // A0 to A7
+ 171, 172, 173, 8213, 176, 177, 178, 179, // A8 to AF
+ 900, 901, 902, 183, 904, 905, 906, 187, // B0 to B7
+ 908, 189, 910, 911, 912, 913, 914, 915, // B8 to BF
+ 916, 917, 918, 919, 920, 921, 922, 923, // C0 to C7
+ 924, 925, 926, 927, 928, 929, 931, 932, // C8 to CF
+ 933, 934, 935, 936, 937, 938, 939, 940, // D0 to D7
+ 941, 942, 943, 944, 945, 946, 947, 948, // D8 to DF
+ 949, 950, 951, 952, 953, 954, 955, 956, // E0 to E7
+ 957, 958, 959, 960, 961, 962, 963, 964, // E8 to EF
+ 965, 966, 967, 968, 969, 970, 971, 972, // F0 to F7
+ 973, 974, -1, -1, -1, -1, -1, -1); // F8 to FF
+
+const
+ iso_8859_9_n: array[0..255] of string =
+ ('.notdef', '.notdef', '.notdef', '.notdef', // 00 to 03
+ '.notdef', '.notdef', '.notdef', '.notdef', // 04 to 07
+ '.notdef', '.notdef', '.notdef', '.notdef', // 08 to 0B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 0C to 0F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 10 to 13
+ '.notdef', '.notdef', '.notdef', '.notdef', // 14 to 17
+ '.notdef', '.notdef', '.notdef', '.notdef', // 18 to 1B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 1C to 1F
+ 'space', 'exclam', 'quotedbl', 'numbersign', // 20 to 23
+ 'dollar', 'percent', 'ampersand', 'quotesingle', // 24 to 27
+ 'parenleft', 'parenright', 'asterisk', 'plus', // 28 to 2B
+ 'comma', 'hyphen', 'period', 'slash', // 2C to 2F
+ 'zero', 'one', 'two', 'three', // 30 to 33
+ 'four', 'five', 'six', 'seven', // 34 to 37
+ 'eight', 'nine', 'colon', 'semicolon', // 38 to 3B
+ 'less', 'equal', 'greater', 'question', // 3C to 3F
+ 'at', 'A', 'B', 'C', // 40 to 43
+ 'D', 'E', 'F', 'G', // 44 to 47
+ 'H', 'I', 'J', 'K', // 48 to 4B
+ 'L', 'M', 'N', 'O', // 4C to 4F
+ 'P', 'Q', 'R', 'S', // 50 to 53
+ 'T', 'U', 'V', 'W', // 54 to 57
+ 'X', 'Y', 'Z', 'bracketleft', // 58 to 5B
+ 'backslash', 'bracketright', 'asciicircum', 'underscore', // 5C to 5F
+ 'grave', 'a', 'b', 'c', // 60 to 63
+ 'd', 'e', 'f', 'g', // 64 to 67
+ 'h', 'i', 'j', 'k', // 68 to 6B
+ 'l', 'm', 'n', 'o', // 6C to 6F
+ 'p', 'q', 'r', 's', // 70 to 73
+ 't', 'u', 'v', 'w', // 74 to 77
+ 'x', 'y', 'z', 'braceleft', // 78 to 7B
+ 'bar', 'braceright', 'asciitilde', '.notdef', // 7C to 7F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 80 to 83
+ '.notdef', '.notdef', '.notdef', '.notdef', // 84 to 87
+ '.notdef', '.notdef', '.notdef', '.notdef', // 88 to 8B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 8C to 8F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 90 to 93
+ '.notdef', '.notdef', '.notdef', '.notdef', // 94 to 97
+ '.notdef', '.notdef', '.notdef', '.notdef', // 98 to 9B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 9C to 9F
+ 'space', 'exclamdown', 'cent', 'sterling', // A0 to A3
+ 'currency', 'yen', 'brokenbar', 'section', // A4 to A7
+ 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft', // A8 to AB
+ 'logicalnot', 'hyphen', 'registered', 'macron', // AC to AF
+ 'degree', 'plusminus', 'twosuperior', 'threesuperior', // B0 to B3
+ 'acute', 'mu', 'paragraph', 'periodcentered', // B4 to B7
+ 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright', // B8 to BB
+ 'onequarter', 'onehalf', 'threequarters','questiondown', // BC to BF
+ 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', // C0 to C3
+ 'Adieresis', 'Aring', 'AE', 'Ccedilla', // C4 to C7
+ 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', // C8 to CB
+ 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', // CC to CF
+ 'Gbreve', 'Ntilde', 'Ograve', 'Oacute', // D0 to D3
+ 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', // D4 to D7
+ 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', // D8 to DB
+ 'Udieresis', 'Idotaccent', 'Scedilla', 'germandbls', // DC to DF
+ 'agrave', 'aacute', 'acircumflex', 'atilde', // E0 to E3
+ 'adieresis', 'aring', 'ae', 'ccedilla', // E4 to E7
+ 'egrave', 'eacute', 'ecircumflex', 'edieresis', // E8 to EB
+ 'igrave', 'iacute', 'icircumflex', 'idieresis', // EC to EF
+ 'gbreve', 'ntilde', 'ograve', 'oacute', // F0 to F3
+ 'ocircumflex', 'otilde', 'odieresis', 'divide', // F4 to F7
+ 'oslash', 'ugrave', 'uacute', 'ucircumflex', // F8 to FB
+ 'udieresis', 'dotlessi', 'scedilla', 'ydieresis'); // FC to FF
+
+const
+ iso_8859_9_v: array[0..255] of Word =
+ (0, 1, 2, 3, 4, 5, 6, 7, // 00 to 07
+ 8, 9, 10, 11, 12, 13, 14, 15, // 08 to 0F
+ 16, 17, 18, 19, 20, 21, 22, 23, // 10 to 17
+ 24, 25, 26, 27, 28, 29, 30, 31, // 18 to 1F
+ 32, 33, 34, 35, 36, 37, 38, 39, // 20 to 27
+ 40, 41, 42, 43, 44, 45, 46, 47, // 28 to 2F
+ 48, 49, 50, 51, 52, 53, 54, 55, // 30 to 37
+ 56, 57, 58, 59, 60, 61, 62, 63, // 38 to 3F
+ 64, 65, 66, 67, 68, 69, 70, 71, // 40 to 47
+ 72, 73, 74, 75, 76, 77, 78, 79, // 48 to 4F
+ 80, 81, 82, 83, 84, 85, 86, 87, // 50 to 57
+ 88, 89, 90, 91, 92, 93, 94, 95, // 58 to 5F
+ 96, 97, 98, 99, 100, 101, 102, 103, // 60 to 67
+ 104, 105, 106, 107, 108, 109, 110, 111, // 68 to 6F
+ 112, 113, 114, 115, 116, 117, 118, 119, // 70 to 77
+ 120, 121, 122, 123, 124, 125, 126, 127, // 78 to 7F
+ -1, -1, -1, -1, -1, -1, -1, -1, // 80 to 87
+ -1, -1, -1, -1, -1, -1, -1, -1, // 88 to 8F
+ -1, -1, -1, -1, -1, -1, -1, -1, // 90 to 97
+ -1, -1, -1, -1, -1, -1, -1, -1, // 98 to 9F
+ 160, 161, 162, 163, 164, 165, 166, 167, // A0 to A7
+ 168, 169, 170, 171, 172, 173, 174, 175, // A8 to AF
+ 176, 177, 178, 179, 180, 181, 182, 183, // B0 to B7
+ 184, 185, 186, 187, 188, 189, 190, 191, // B8 to BF
+ 192, 193, 194, 195, 196, 197, 198, 199, // C0 to C7
+ 200, 201, 202, 203, 204, 205, 206, 207, // C8 to CF
+ 286, 209, 210, 211, 212, 213, 214, 215, // D0 to D7
+ 216, 217, 218, 219, 220, 304, 350, 223, // D8 to DF
+ 224, 225, 226, 227, 228, 229, 230, 231, // E0 to E7
+ 232, 233, 234, 235, 236, 237, 238, 239, // E8 to EF
+ 287, 241, 242, 243, 244, 245, 246, 247, // F0 to F7
+ 248, 249, 250, 251, 252, 305, 351, 255); // F8 to FF
+
+const
+ iso_8859_11_n: array[0..255] of string =
+ ('.notdef', '.notdef', '.notdef', '.notdef', // 00 to 03
+ '.notdef', '.notdef', '.notdef', '.notdef', // 04 to 07
+ '.notdef', '.notdef', '.notdef', '.notdef', // 08 to 0B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 0C to 0F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 10 to 13
+ '.notdef', '.notdef', '.notdef', '.notdef', // 14 to 17
+ '.notdef', '.notdef', '.notdef', '.notdef', // 18 to 1B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 1C to 1F
+ 'space', 'exclam', 'quotedbl', 'numbersign', // 20 to 23
+ 'dollar', 'percent', 'ampersand', 'quotesingle', // 24 to 27
+ 'parenleft', 'parenright', 'asterisk', 'plus', // 28 to 2B
+ 'comma', 'hyphen', 'period', 'slash', // 2C to 2F
+ 'zero', 'one', 'two', 'three', // 30 to 33
+ 'four', 'five', 'six', 'seven', // 34 to 37
+ 'eight', 'nine', 'colon', 'semicolon', // 38 to 3B
+ 'less', 'equal', 'greater', 'question', // 3C to 3F
+ 'at', 'A', 'B', 'C', // 40 to 43
+ 'D', 'E', 'F', 'G', // 44 to 47
+ 'H', 'I', 'J', 'K', // 48 to 4B
+ 'L', 'M', 'N', 'O', // 4C to 4F
+ 'P', 'Q', 'R', 'S', // 50 to 53
+ 'T', 'U', 'V', 'W', // 54 to 57
+ 'X', 'Y', 'Z', 'bracketleft', // 58 to 5B
+ 'backslash', 'bracketright', 'asciicircum', 'underscore', // 5C to 5F
+ 'grave', 'a', 'b', 'c', // 60 to 63
+ 'd', 'e', 'f', 'g', // 64 to 67
+ 'h', 'i', 'j', 'k', // 68 to 6B
+ 'l', 'm', 'n', 'o', // 6C to 6F
+ 'p', 'q', 'r', 's', // 70 to 73
+ 't', 'u', 'v', 'w', // 74 to 77
+ 'x', 'y', 'z', 'braceleft', // 78 to 7B
+ 'bar', 'braceright', 'asciitilde', '.notdef', // 7C to 7F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 80 to 83
+ '.notdef', '.notdef', '.notdef', '.notdef', // 84 to 87
+ '.notdef', '.notdef', '.notdef', '.notdef', // 88 to 8B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 8C to 8F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 90 to 93
+ '.notdef', '.notdef', '.notdef', '.notdef', // 94 to 97
+ '.notdef', '.notdef', '.notdef', '.notdef', // 98 to 9B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 9C to 9F
+ 'space', 'kokaithai', 'khokhaithai', 'khokhuatthai', // A0 to A3
+ 'khokhwaithai', 'khokhonthai', 'khorakhangthai', 'ngonguthai', // A4 to A7
+ 'chochanthai', 'chochingthai', 'chochangthai', 'sosothai', // A8 to AB
+ 'chochoethai', 'yoyingthai', 'dochadathai', 'topatakthai', // AC to AF
+ 'thothanthai', 'thonangmonthothai','thophuthaothai', 'nonenthai', // B0 to B3
+ 'dodekthai', 'totaothai', 'thothungthai', 'thothahanthai', // B4 to B7
+ 'thothongthai', 'nonuthai', 'bobaimaithai', 'poplathai', // B8 to BB
+ 'phophungthai', 'fofathai', 'phophanthai', 'fofanthai', // BC to BF
+ 'phosamphaothai', 'momathai', 'yoyakthai', 'roruathai', // C0 to C3
+ 'ruthai', 'lolingthai', 'luthai', 'wowaenthai', // C4 to C7
+ 'sosalathai', 'sorusithai', 'sosuathai', 'hohipthai', // C8 to CB
+ 'lochulathai', 'oangthai', 'honokhukthai', 'paiyannoithai', // CC to CF
+ 'saraathai', 'maihanakatthai', 'saraaathai', 'saraamthai', // D0 to D3
+ 'saraithai', 'saraiithai', 'sarauethai', 'saraueethai', // D4 to D7
+ 'sarauthai', 'sarauuthai', 'phinthuthai', '.notdef', // D8 to DB
+ '.notdef', '.notdef', '.notdef', 'bahtthai', // DC to DF
+ 'saraethai', 'saraaethai', 'saraothai', 'saraaimaimuanthai', // E0 to E3
+ 'saraaimaimalaithai','lakkhangyaothai', 'maiyamokthai', 'maitaikhuthai', // E4 to E7
+ 'maiekthai', 'maithothai', 'maitrithai', 'maichattawathai', // E8 to EB
+ 'thanthakhatthai', 'nikhahitthai', 'yamakkanthai', 'fongmanthai', // EC to EF
+ 'zerothai', 'onethai', 'twothai', 'threethai', // F0 to F3
+ 'fourthai', 'fivethai', 'sixthai', 'seventhai', // F4 to F7
+ 'eightthai', 'ninethai', 'angkhankhuthai', 'khomutthai', // F8 to FB
+ '.notdef', '.notdef', '.notdef', '.notdef'); // FC to FF
+
+const
+ iso_8859_11_v: array[0..255] of Word =
+ (0, 1, 2, 3, 4, 5, 6, 7, // 00 to 07
+ 8, 9, 10, 11, 12, 13, 14, 15, // 08 to 0F
+ 16, 17, 18, 19, 20, 21, 22, 23, // 10 to 17
+ 24, 25, 26, 27, 28, 29, 30, 31, // 18 to 1F
+ 32, 33, 34, 35, 36, 37, 38, 39, // 20 to 27
+ 40, 41, 42, 43, 44, 45, 46, 47, // 28 to 2F
+ 48, 49, 50, 51, 52, 53, 54, 55, // 30 to 37
+ 56, 57, 58, 59, 60, 61, 62, 63, // 38 to 3F
+ 64, 65, 66, 67, 68, 69, 70, 71, // 40 to 47
+ 72, 73, 74, 75, 76, 77, 78, 79, // 48 to 4F
+ 80, 81, 82, 83, 84, 85, 86, 87, // 50 to 57
+ 88, 89, 90, 91, 92, 93, 94, 95, // 58 to 5F
+ 96, 97, 98, 99, 100, 101, 102, 103, // 60 to 67
+ 104, 105, 106, 107, 108, 109, 110, 111, // 68 to 6F
+ 112, 113, 114, 115, 116, 117, 118, 119, // 70 to 77
+ 120, 121, 122, 123, 124, 125, 126, 127, // 78 to 7F
+ -1, -1, -1, -1, -1, -1, -1, -1, // 80 to 87
+ -1, -1, -1, -1, -1, -1, -1, -1, // 88 to 8F
+ -1, -1, -1, -1, -1, -1, -1, -1, // 90 to 97
+ -1, -1, -1, -1, -1, -1, -1, -1, // 98 to 9F
+ 160, 3585, 3586, 3587, 3588, 3589, 3590, 3591, // A0 to A7
+ 3592, 3593, 3594, 3595, 3596, 3597, 3598, 3599, // A8 to AF
+ 3600, 3601, 3602, 3603, 3604, 3605, 3606, 3607, // B0 to B7
+ 3608, 3609, 3610, 3611, 3612, 3613, 3614, 3615, // B8 to BF
+ 3616, 3617, 3618, 3619, 3620, 3621, 3622, 3623, // C0 to C7
+ 3624, 3625, 3626, 3627, 3628, 3629, 3630, 3631, // C8 to CF
+ 3632, 3633, 3634, 3635, 3636, 3637, 3638, 3639, // D0 to D7
+ 3640, 3641, 3642, -1, -1, -1, -1, 3647, // D8 to DF
+ 3648, 3649, 3650, 3651, 3652, 3653, 3654, 3655, // E0 to E7
+ 3656, 3657, 3658, 3659, 3660, 3661, 3662, 3663, // E8 to EF
+ 3664, 3665, 3666, 3667, 3668, 3669, 3670, 3671, // F0 to F7
+ 3672, 3673, 3674, 3675, -1, -1, -1, -1); // F8 to FF
+
+const
+ iso_8859_15_n: array[0..255] of string =
+ ('.notdef', '.notdef', '.notdef', '.notdef', // 00 to 03
+ '.notdef', '.notdef', '.notdef', '.notdef', // 04 to 07
+ '.notdef', '.notdef', '.notdef', '.notdef', // 08 to 0B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 0C to 0F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 10 to 13
+ '.notdef', '.notdef', '.notdef', '.notdef', // 14 to 17
+ '.notdef', '.notdef', '.notdef', '.notdef', // 18 to 1B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 1C to 1F
+ 'space', 'exclam', 'quotedbl', 'numbersign', // 20 to 23
+ 'dollar', 'percent', 'ampersand', 'quotesingle', // 24 to 27
+ 'parenleft', 'parenright', 'asterisk', 'plus', // 28 to 2B
+ 'comma', 'hyphen', 'period', 'slash', // 2C to 2F
+ 'zero', 'one', 'two', 'three', // 30 to 33
+ 'four', 'five', 'six', 'seven', // 34 to 37
+ 'eight', 'nine', 'colon', 'semicolon', // 38 to 3B
+ 'less', 'equal', 'greater', 'question', // 3C to 3F
+ 'at', 'A', 'B', 'C', // 40 to 43
+ 'D', 'E', 'F', 'G', // 44 to 47
+ 'H', 'I', 'J', 'K', // 48 to 4B
+ 'L', 'M', 'N', 'O', // 4C to 4F
+ 'P', 'Q', 'R', 'S', // 50 to 53
+ 'T', 'U', 'V', 'W', // 54 to 57
+ 'X', 'Y', 'Z', 'bracketleft', // 58 to 5B
+ 'backslash', 'bracketright', 'asciicircum', 'underscore', // 5C to 5F
+ 'grave', 'a', 'b', 'c', // 60 to 63
+ 'd', 'e', 'f', 'g', // 64 to 67
+ 'h', 'i', 'j', 'k', // 68 to 6B
+ 'l', 'm', 'n', 'o', // 6C to 6F
+ 'p', 'q', 'r', 's', // 70 to 73
+ 't', 'u', 'v', 'w', // 74 to 77
+ 'x', 'y', 'z', 'braceleft', // 78 to 7B
+ 'bar', 'braceright', 'asciitilde', '.notdef', // 7C to 7F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 80 to 83
+ '.notdef', '.notdef', '.notdef', '.notdef', // 84 to 87
+ '.notdef', '.notdef', '.notdef', '.notdef', // 88 to 8B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 8C to 8F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 90 to 93
+ '.notdef', '.notdef', '.notdef', '.notdef', // 94 to 97
+ '.notdef', '.notdef', '.notdef', '.notdef', // 98 to 9B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 9C to 9F
+ 'space', 'exclamdown', 'cent', 'sterling', // A0 to A3
+ 'Euro', 'yen', 'Scaron', 'section', // A4 to A7
+ 'scaron', 'copyright', 'ordfeminine', 'guillemotleft', // A8 to AB
+ 'logicalnot', 'hyphen', 'registered', 'macron', // AC to AF
+ 'degree', 'plusminus', 'twosuperior', 'threesuperior', // B0 to B3
+ 'Zcaron', 'mu', 'paragraph', 'periodcentered', // B4 to B7
+ 'zcaron', 'onesuperior', 'ordmasculine', 'guillemotright', // B8 to BB
+ 'OE', 'oe', 'Ydieresis', 'questiondown', // BC to BF
+ 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', // C0 to C3
+ 'Adieresis', 'Aring', 'AE', 'Ccedilla', // C4 to C7
+ 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', // C8 to CB
+ 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', // CC to CF
+ 'Eth', 'Ntilde', 'Ograve', 'Oacute', // D0 to D3
+ 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', // D4 to D7
+ 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', // D8 to DB
+ 'Udieresis', 'Yacute', 'Thorn', 'germandbls', // DC to DF
+ 'agrave', 'aacute', 'acircumflex', 'atilde', // E0 to E3
+ 'adieresis', 'aring', 'ae', 'ccedilla', // E4 to E7
+ 'egrave', 'eacute', 'ecircumflex', 'edieresis', // E8 to EB
+ 'igrave', 'iacute', 'icircumflex', 'idieresis', // EC to EF
+ 'eth', 'ntilde', 'ograve', 'oacute', // F0 to F3
+ 'ocircumflex', 'otilde', 'odieresis', 'divide', // F4 to F7
+ 'oslash', 'ugrave', 'uacute', 'ucircumflex', // F8 to FB
+ 'udieresis', 'yacute', 'thorn', 'ydieresis'); // FC to FF
+
+const
+ iso_8859_15_v: array[0..255] of Word =
+ (0, 1, 2, 3, 4, 5, 6, 7, // 00 to 07
+ 8, 9, 10, 11, 12, 13, 14, 15, // 08 to 0F
+ 16, 17, 18, 19, 20, 21, 22, 23, // 10 to 17
+ 24, 25, 26, 27, 28, 29, 30, 31, // 18 to 1F
+ 32, 33, 34, 35, 36, 37, 38, 39, // 20 to 27
+ 40, 41, 42, 43, 44, 45, 46, 47, // 28 to 2F
+ 48, 49, 50, 51, 52, 53, 54, 55, // 30 to 37
+ 56, 57, 58, 59, 60, 61, 62, 63, // 38 to 3F
+ 64, 65, 66, 67, 68, 69, 70, 71, // 40 to 47
+ 72, 73, 74, 75, 76, 77, 78, 79, // 48 to 4F
+ 80, 81, 82, 83, 84, 85, 86, 87, // 50 to 57
+ 88, 89, 90, 91, 92, 93, 94, 95, // 58 to 5F
+ 96, 97, 98, 99, 100, 101, 102, 103, // 60 to 67
+ 104, 105, 106, 107, 108, 109, 110, 111, // 68 to 6F
+ 112, 113, 114, 115, 116, 117, 118, 119, // 70 to 77
+ 120, 121, 122, 123, 124, 125, 126, 127, // 78 to 7F
+ -1, -1, -1, -1, -1, -1, -1, -1, // 80 to 87
+ -1, -1, -1, -1, -1, -1, -1, -1, // 88 to 8F
+ -1, -1, -1, -1, -1, -1, -1, -1, // 90 to 97
+ -1, -1, -1, -1, -1, -1, -1, -1, // 98 to 9F
+ 160, 161, 162, 163, 8364, 165, 352, 167, // A0 to A7
+ 353, 169, 170, 171, 172, 173, 174, 175, // A8 to AF
+ 176, 177, 178, 179, 381, 181, 182, 183, // B0 to B7
+ 382, 185, 186, 187, 338, 339, 376, 191, // B8 to BF
+ 192, 193, 194, 195, 196, 197, 198, 199, // C0 to C7
+ 200, 201, 202, 203, 204, 205, 206, 207, // C8 to CF
+ 208, 209, 210, 211, 212, 213, 214, 215, // D0 to D7
+ 216, 217, 218, 219, 220, 221, 222, 223, // D8 to DF
+ 224, 225, 226, 227, 228, 229, 230, 231, // E0 to E7
+ 232, 233, 234, 235, 236, 237, 238, 239, // E8 to EF
+ 240, 241, 242, 243, 244, 245, 246, 247, // F0 to F7
+ 248, 249, 250, 251, 252, 253, 254, 255); // F8 to FF
+
+const
+ iso_8859_16_n: array[0..255] of string =
+ ('.notdef', '.notdef', '.notdef', '.notdef', // 00 to 03
+ '.notdef', '.notdef', '.notdef', '.notdef', // 04 to 07
+ '.notdef', '.notdef', '.notdef', '.notdef', // 08 to 0B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 0C to 0F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 10 to 13
+ '.notdef', '.notdef', '.notdef', '.notdef', // 14 to 17
+ '.notdef', '.notdef', '.notdef', '.notdef', // 18 to 1B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 1C to 1F
+ 'space', 'exclam', 'quotedbl', 'numbersign', // 20 to 23
+ 'dollar', 'percent', 'ampersand', 'quotesingle', // 24 to 27
+ 'parenleft', 'parenright', 'asterisk', 'plus', // 28 to 2B
+ 'comma', 'hyphen', 'period', 'slash', // 2C to 2F
+ 'zero', 'one', 'two', 'three', // 30 to 33
+ 'four', 'five', 'six', 'seven', // 34 to 37
+ 'eight', 'nine', 'colon', 'semicolon', // 38 to 3B
+ 'less', 'equal', 'greater', 'question', // 3C to 3F
+ 'at', 'A', 'B', 'C', // 40 to 43
+ 'D', 'E', 'F', 'G', // 44 to 47
+ 'H', 'I', 'J', 'K', // 48 to 4B
+ 'L', 'M', 'N', 'O', // 4C to 4F
+ 'P', 'Q', 'R', 'S', // 50 to 53
+ 'T', 'U', 'V', 'W', // 54 to 57
+ 'X', 'Y', 'Z', 'bracketleft', // 58 to 5B
+ 'backslash', 'bracketright', 'asciicircum', 'underscore', // 5C to 5F
+ 'grave', 'a', 'b', 'c', // 60 to 63
+ 'd', 'e', 'f', 'g', // 64 to 67
+ 'h', 'i', 'j', 'k', // 68 to 6B
+ 'l', 'm', 'n', 'o', // 6C to 6F
+ 'p', 'q', 'r', 's', // 70 to 73
+ 't', 'u', 'v', 'w', // 74 to 77
+ 'x', 'y', 'z', 'braceleft', // 78 to 7B
+ 'bar', 'braceright', 'asciitilde', '.notdef', // 7C to 7F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 80 to 83
+ '.notdef', '.notdef', '.notdef', '.notdef', // 84 to 87
+ '.notdef', '.notdef', '.notdef', '.notdef', // 88 to 8B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 8C to 8F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 90 to 93
+ '.notdef', '.notdef', '.notdef', '.notdef', // 94 to 97
+ '.notdef', '.notdef', '.notdef', '.notdef', // 98 to 9B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 9C to 9F
+ 'space', 'Aogonek', 'aogonek', 'Lslash', // A0 to A3
+ 'Euro', 'quotedblbase', 'Scaron', 'section', // A4 to A7
+ 'scaron', 'copyright', 'Scommaaccent', 'guillemotleft', // A8 to AB
+ 'Zacute', 'hyphen', 'zacute', 'Zdotaccent', // AC to AF
+ 'degree', 'plusminus', 'Ccaron', 'lslash', // B0 to B3
+ 'Zcaron', 'quotedblright','paragraph', 'periodcentered', // B4 to B7
+ 'zcaron', 'ccaron', 'scommaaccent', 'guillemotright', // B8 to BB
+ 'OE', 'oe', 'Ydieresis', 'zdotaccent', // BC to BF
+ 'Agrave', 'Aacute', 'Acircumflex', 'Abreve', // C0 to C3
+ 'Adieresis', 'Cacute', 'AE', 'Ccedilla', // C4 to C7
+ 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', // C8 to CB
+ 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', // CC to CF
+ 'Dcroat', 'Nacute', 'Ograve', 'Oacute', // D0 to D3
+ 'Ocircumflex', 'Ohungarumlaut','Odieresis', 'Sacute', // D4 to D7
+ 'Uhungarumlaut', 'Ugrave', 'Uacute', 'Ucircumflex', // D8 to DB
+ 'Udieresis', 'Eogonek', 'Tcommaaccent', 'germandbls', // DC to DF
+ 'agrave', 'aacute', 'acircumflex', 'abreve', // E0 to E3
+ 'adieresis', 'cacute', 'ae', 'ccedilla', // E4 to E7
+ 'egrave', 'eacute', 'ecircumflex', 'edieresis', // E8 to EB
+ 'igrave', 'iacute', 'icircumflex', 'idieresis', // EC to EF
+ 'dcroat', 'nacute', 'ograve', 'oacute', // F0 to F3
+ 'ocircumflex', 'ohungarumlaut','odieresis', 'sacute', // F4 to F7
+ 'uhungarumlaut', 'ugrave', 'uacute', 'ucircumflex', // F8 to FB
+ 'udieresis', 'eogonek', 'tcommaaccent', 'ydieresis'); // FC to FF
+
+const
+ iso_8859_16_v: array[0..255] of Word =
+ (0, 1, 2, 3, 4, 5, 6, 7, // 00 to 07
+ 8, 9, 10, 11, 12, 13, 14, 15, // 08 to 0F
+ 16, 17, 18, 19, 20, 21, 22, 23, // 10 to 17
+ 24, 25, 26, 27, 28, 29, 30, 31, // 18 to 1F
+ 32, 33, 34, 35, 36, 37, 38, 39, // 20 to 27
+ 40, 41, 42, 43, 44, 45, 46, 47, // 28 to 2F
+ 48, 49, 50, 51, 52, 53, 54, 55, // 30 to 37
+ 56, 57, 58, 59, 60, 61, 62, 63, // 38 to 3F
+ 64, 65, 66, 67, 68, 69, 70, 71, // 40 to 47
+ 72, 73, 74, 75, 76, 77, 78, 79, // 48 to 4F
+ 80, 81, 82, 83, 84, 85, 86, 87, // 50 to 57
+ 88, 89, 90, 91, 92, 93, 94, 95, // 58 to 5F
+ 96, 97, 98, 99, 100, 101, 102, 103, // 60 to 67
+ 104, 105, 106, 107, 108, 109, 110, 111, // 68 to 6F
+ 112, 113, 114, 115, 116, 117, 118, 119, // 70 to 77
+ 120, 121, 122, 123, 124, 125, 126, 127, // 78 to 7F
+ -1, -1, -1, -1, -1, -1, -1, -1, // 80 to 87
+ -1, -1, -1, -1, -1, -1, -1, -1, // 88 to 8F
+ -1, -1, -1, -1, -1, -1, -1, -1, // 90 to 97
+ -1, -1, -1, -1, -1, -1, -1, -1, // 98 to 9F
+ 160, 260, 261, 321, 8364, 8222, 352, 167, // A0 to A7
+ 353, 169, 536, 171, 377, 173, 378, 379, // A8 to AF
+ 176, 177, 268, 322, 381, 8221, 182, 183, // B0 to B7
+ 382, 269, 537, 187, 338, 339, 376, 380, // B8 to BF
+ 192, 193, 194, 258, 196, 262, 198, 199, // C0 to C7
+ 200, 201, 202, 203, 204, 205, 206, 207, // C8 to CF
+ 272, 323, 210, 211, 212, 336, 214, 346, // D0 to D7
+ 368, 217, 218, 219, 220, 280, 538, 223, // D8 to DF
+ 224, 225, 226, 259, 228, 263, 230, 231, // E0 to E7
+ 232, 233, 234, 235, 236, 237, 238, 239, // E8 to EF
+ 273, 324, 242, 243, 244, 337, 246, 347, // F0 to F7
+ 369, 249, 250, 251, 252, 281, 539, 255); // F8 to FF
+
+const
+ koi8_r_n: array[0..255] of string =
+ ('.notdef', '.notdef', '.notdef', '.notdef', // 00 to 03
+ '.notdef', '.notdef', '.notdef', '.notdef', // 04 to 07
+ '.notdef', '.notdef', '.notdef', '.notdef', // 08 to 0B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 0C to 0F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 10 to 13
+ '.notdef', '.notdef', '.notdef', '.notdef', // 14 to 17
+ '.notdef', '.notdef', '.notdef', '.notdef', // 18 to 1B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 1C to 1F
+ 'space', 'exclam', 'quotedbl', 'numbersign', // 20 to 23
+ 'dollar', 'percent', 'ampersand', 'quotesingle', // 24 to 27
+ 'parenleft', 'parenright', 'asterisk', 'plus', // 28 to 2B
+ 'comma', 'hyphen', 'period', 'slash', // 2C to 2F
+ 'zero', 'one', 'two', 'three', // 30 to 33
+ 'four', 'five', 'six', 'seven', // 34 to 37
+ 'eight', 'nine', 'colon', 'semicolon', // 38 to 3B
+ 'less', 'equal', 'greater', 'question', // 3C to 3F
+ 'at', 'A', 'B', 'C', // 40 to 43
+ 'D', 'E', 'F', 'G', // 44 to 47
+ 'H', 'I', 'J', 'K', // 48 to 4B
+ 'L', 'M', 'N', 'O', // 4C to 4F
+ 'P', 'Q', 'R', 'S', // 50 to 53
+ 'T', 'U', 'V', 'W', // 54 to 57
+ 'X', 'Y', 'Z', 'bracketleft', // 58 to 5B
+ 'backslash', 'bracketright', 'asciicircum', 'underscore', // 5C to 5F
+ 'grave', 'a', 'b', 'c', // 60 to 63
+ 'd', 'e', 'f', 'g', // 64 to 67
+ 'h', 'i', 'j', 'k', // 68 to 6B
+ 'l', 'm', 'n', 'o', // 6C to 6F
+ 'p', 'q', 'r', 's', // 70 to 73
+ 't', 'u', 'v', 'w', // 74 to 77
+ 'x', 'y', 'z', 'braceleft', // 78 to 7B
+ 'bar', 'braceright', 'asciitilde', '.notdef', // 7C to 7F
+ 'SF100000', 'SF110000', 'SF010000', 'SF030000', // 80 to 83
+ 'SF020000', 'SF040000', 'SF080000', 'SF090000', // 84 to 87
+ 'SF060000', 'SF070000', 'SF050000', 'upblock', // 88 to 8B
+ 'dnblock', 'block', 'lfblock', 'rtblock', // 8C to 8F
+ 'ltshade', 'shade', 'dkshade', 'integraltp', // 90 to 93
+ 'filledbox', 'periodcentered', 'radical', 'approxequal', // 94 to 97
+ 'lessequal', 'greaterequal', 'space', 'integralbt', // 98 to 9B
+ 'degree', 'twosuperior', 'periodcentered', 'divide', // 9C to 9F
+ 'SF430000', 'SF240000', 'SF510000', 'afii10071', // A0 to A3
+ 'SF520000', 'SF390000', 'SF220000', 'SF210000', // A4 to A7
+ 'SF250000', 'SF500000', 'SF490000', 'SF380000', // A8 to AB
+ 'SF280000', 'SF270000', 'SF260000', 'SF360000', // AC to AF
+ 'SF370000', 'SF420000', 'SF190000', 'afii10023', // B0 to B3
+ 'SF200000', 'SF230000', 'SF470000', 'SF480000', // B4 to B7
+ 'SF410000', 'SF450000', 'SF460000', 'SF400000', // B8 to BB
+ 'SF540000', 'SF530000', 'SF440000', 'copyright', // BC to BF
+ 'afii10096', 'afii10065', 'afii10066', 'afii10088', // C0 to C3
+ 'afii10069', 'afii10070', 'afii10086', 'afii10068', // C4 to C7
+ 'afii10087', 'afii10074', 'afii10075', 'afii10076', // C8 to CB
+ 'afii10077', 'afii10078', 'afii10079', 'afii10080', // CC to CF
+ 'afii10081', 'afii10097', 'afii10082', 'afii10083', // D0 to D3
+ 'afii10084', 'afii10085', 'afii10072', 'afii10067', // D4 to D7
+ 'afii10094', 'afii10093', 'afii10073', 'afii10090', // D8 to DB
+ 'afii10095', 'afii10091', 'afii10089', 'afii10092', // DC to DF
+ 'afii10048', 'afii10017', 'afii10018', 'afii10040', // E0 to E3
+ 'afii10021', 'afii10022', 'afii10038', 'afii10020', // E4 to E7
+ 'afii10039', 'afii10026', 'afii10027', 'afii10028', // E8 to EB
+ 'afii10029', 'afii10030', 'afii10031', 'afii10032', // EC to EF
+ 'afii10033', 'afii10049', 'afii10034', 'afii10035', // F0 to F3
+ 'afii10036', 'afii10037', 'afii10024', 'afii10019', // F4 to F7
+ 'afii10046', 'afii10045', 'afii10025', 'afii10042', // F8 to FB
+ 'afii10047', 'afii10043', 'afii10041', 'afii10044'); // FC to FF
+
+const
+ koi8_r_v: array[0..255] of Word =
+ (0, 1, 2, 3, 4, 5, 6, 7, // 00 to 07
+ 8, 9, 10, 11, 12, 13, 14, 15, // 08 to 0F
+ 16, 17, 18, 19, 20, 21, 22, 23, // 10 to 17
+ 24, 25, 26, 27, 28, 29, 30, 31, // 18 to 1F
+ 32, 33, 34, 35, 36, 37, 38, 39, // 20 to 27
+ 40, 41, 42, 43, 44, 45, 46, 47, // 28 to 2F
+ 48, 49, 50, 51, 52, 53, 54, 55, // 30 to 37
+ 56, 57, 58, 59, 60, 61, 62, 63, // 38 to 3F
+ 64, 65, 66, 67, 68, 69, 70, 71, // 40 to 47
+ 72, 73, 74, 75, 76, 77, 78, 79, // 48 to 4F
+ 80, 81, 82, 83, 84, 85, 86, 87, // 50 to 57
+ 88, 89, 90, 91, 92, 93, 94, 95, // 58 to 5F
+ 96, 97, 98, 99, 100, 101, 102, 103, // 60 to 67
+ 104, 105, 106, 107, 108, 109, 110, 111, // 68 to 6F
+ 112, 113, 114, 115, 116, 117, 118, 119, // 70 to 77
+ 120, 121, 122, 123, 124, 125, 126, 127, // 78 to 7F
+ 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, // 80 to 87
+ 9516, 9524, 9532, 9600, 9604, 9608, 9612, 9616, // 88 to 8F
+ 9617, 9618, 9619, 8992, 9632, 8729, 8730, 8776, // 90 to 97
+ 8804, 8805, 160, 8993, 176, 178, 183, 247, // 98 to 9F
+ 9552, 9553, 9554, 1105, 9555, 9556, 9557, 9558, // A0 to A7
+ 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, // A8 to AF
+ 9567, 9568, 9569, 1025, 9570, 9571, 9572, 9573, // B0 to B7
+ 9574, 9575, 9576, 9577, 9578, 9579, 9580, 169, // B8 to BF
+ 1102, 1072, 1073, 1094, 1076, 1077, 1092, 1075, // C0 to C7
+ 1093, 1080, 1081, 1082, 1083, 1084, 1085, 1086, // C8 to CF
+ 1087, 1103, 1088, 1089, 1090, 1091, 1078, 1074, // D0 to D7
+ 100, 1099, 1079, 1096, 1101, 1097, 1095, 1098, // D8 to DF
+ 1070, 1040, 1041, 1062, 1044, 1045, 1060, 1043, // E0 to E7
+ 1061, 1048, 1049, 1050, 1051, 1052, 1053, 1054, // E8 to EF
+ 1055, 1071, 1056, 1057, 1058, 1059, 1046, 1042, // F0 to F7
+ 1068, 1067, 1047, 1064, 1069, 1065, 1063, 1066); // F8 to FF
+
+const
+ koi8_u_n: array[0..255] of string =
+ ('.notdef', '.notdef', '.notdef', '.notdef', // 00 to 03
+ '.notdef', '.notdef', '.notdef', '.notdef', // 04 to 07
+ '.notdef', '.notdef', '.notdef', '.notdef', // 08 to 0B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 0C to 0F
+ '.notdef', '.notdef', '.notdef', '.notdef', // 10 to 13
+ '.notdef', '.notdef', '.notdef', '.notdef', // 14 to 17
+ '.notdef', '.notdef', '.notdef', '.notdef', // 18 to 1B
+ '.notdef', '.notdef', '.notdef', '.notdef', // 1C to 1F
+ 'space', 'exclam', 'quotedbl', 'numbersign', // 20 to 23
+ 'dollar', 'percent', 'ampersand', 'quotesingle', // 24 to 27
+ 'parenleft', 'parenright', 'asterisk', 'plus', // 28 to 2B
+ 'comma', 'hyphen', 'period', 'slash', // 2C to 2F
+ 'zero', 'one', 'two', 'three', // 30 to 33
+ 'four', 'five', 'six', 'seven', // 34 to 37
+ 'eight', 'nine', 'colon', 'semicolon', // 38 to 3B
+ 'less', 'equal', 'greater', 'question', // 3C to 3F
+ 'at', 'A', 'B', 'C', // 40 to 43
+ 'D', 'E', 'F', 'G', // 44 to 47
+ 'H', 'I', 'J', 'K', // 48 to 4B
+ 'L', 'M', 'N', 'O', // 4C to 4F
+ 'P', 'Q', 'R', 'S', // 50 to 53
+ 'T', 'U', 'V', 'W', // 54 to 57
+ 'X', 'Y', 'Z', 'bracketleft', // 58 to 5B
+ 'backslash', 'bracketright', 'asciicircum', 'underscore', // 5C to 5F
+ 'grave', 'a', 'b', 'c', // 60 to 63
+ 'd', 'e', 'f', 'g', // 64 to 67
+ 'h', 'i', 'j', 'k', // 68 to 6B
+ 'l', 'm', 'n', 'o', // 6C to 6F
+ 'p', 'q', 'r', 's', // 70 to 73
+ 't', 'u', 'v', 'w', // 74 to 77
+ 'x', 'y', 'z', 'braceleft', // 78 to 7B
+ 'bar', 'braceright', 'asciitilde', '.notdef', // 7C to 7F
+ 'SF100000', 'SF110000', 'SF010000', 'SF030000', // 80 to 83
+ 'SF020000', 'SF040000', 'SF080000', 'SF090000', // 84 to 87
+ 'SF060000', 'SF070000', 'SF050000', 'upblock', // 88 to 8B
+ 'dnblock', 'block', 'lfblock', 'rtblock', // 8C to 8F
+ 'ltshade', 'shade', 'dkshade', 'integraltp', // 90 to 93
+ 'filledbox', 'bullet', 'radical', 'approxequal', // 94 to 97
+ 'lessequal', 'greaterequal', 'space', 'integralbt', // 98 to 9B
+ 'degree', 'twosuperior', 'periodcentered', 'divide', // 9C to 9F
+ 'SF430000', 'SF240000', 'SF510000', 'afii10071', // A0 to A3
+ 'afii10101', 'SF390000', 'afii10103', 'afii10104', // A4 to A7
+ 'SF250000', 'SF500000', 'SF490000', 'SF380000', // A8 to AB
+ 'SF280000', 'afii10098', 'SF260000', 'SF360000', // AC to AF
+ 'SF370000', 'SF420000', 'SF190000', 'afii10023', // B0 to B3
+ 'afii10053', 'SF230000', 'afii10055', 'afii10056', // B4 to B7
+ 'SF410000', 'SF450000', 'SF460000', 'SF400000', // B8 to BB
+ 'SF540000', 'afii10050', 'SF440000', 'copyright', // BC to BF
+ 'afii10096', 'afii10065', 'afii10066', 'afii10088', // C0 to C3
+ 'afii10069', 'afii10070', 'afii10086', 'afii10068', // C4 to C7
+ 'afii10087', 'afii10074', 'afii10075', 'afii10076', // C8 to CB
+ 'afii10077', 'afii10078', 'afii10079', 'afii10080', // CC to CF
+ 'afii10081', 'afii10097', 'afii10082', 'afii10083', // D0 to D3
+ 'afii10084', 'afii10085', 'afii10072', 'afii10067', // D4 to D7
+ 'afii10094', 'afii10093', 'afii10073', 'afii10090', // D8 to DB
+ 'afii10095', 'afii10091', 'afii10089', 'afii10092', // DC to DF
+ 'afii10048', 'afii10017', 'afii10018', 'afii10040', // E0 to E3
+ 'afii10021', 'afii10022', 'afii10038', 'afii10020', // E4 to E7
+ 'afii10039', 'afii10026', 'afii10027', 'afii10028', // E8 to EB
+ 'afii10029', 'afii10030', 'afii10031', 'afii10032', // EC to EF
+ 'afii10033', 'afii10049', 'afii10034', 'afii10035', // F0 to F3
+ 'afii10036', 'afii10037', 'afii10024', 'afii10019', // F4 to F7
+ 'afii10046', 'afii10045', 'afii10025', 'afii10042', // F8 to FB
+ 'afii10047', 'afii10043', 'afii10041', 'afii10044'); // FC to FF
+
+const
+ koi8_u_v: array[0..255] of Word =
+ (0, 1, 2, 3, 4, 5, 6, 7, // 00 to 07
+ 8, 9, 10, 11, 12, 13, 14, 15, // 08 to 0F
+ 16, 17, 18, 19, 20, 21, 22, 23, // 10 to 17
+ 24, 25, 26, 27, 28, 29, 30, 31, // 18 to 1F
+ 32, 33, 34, 35, 36, 37, 38, 39, // 20 to 27
+ 40, 41, 42, 43, 44, 45, 46, 47, // 28 to 2F
+ 48, 49, 50, 51, 52, 53, 54, 55, // 30 to 37
+ 56, 57, 58, 59, 60, 61, 62, 63, // 38 to 3F
+ 64, 65, 66, 67, 68, 69, 70, 71, // 40 to 47
+ 72, 73, 74, 75, 76, 77, 78, 79, // 48 to 4F
+ 80, 81, 82, 83, 84, 85, 86, 87, // 50 to 57
+ 88, 89, 90, 91, 92, 93, 94, 95, // 58 to 5F
+ 96, 97, 98, 99, 100, 101, 102, 103, // 60 to 67
+ 104, 105, 106, 107, 108, 109, 110, 111, // 68 to 6F
+ 112, 113, 114, 115, 116, 117, 118, 119, // 70 to 77
+ 120, 121, 122, 123, 124, 125, 126, 127, // 78 to 7F
+ 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, // 80 to 87
+ 9516, 9524, 9532, 9600, 9604, 9608, 9612, 9616, // 88 to 8F
+ 9617, 9618, 9619, 8992, 9632, 8226, 8730, 8776, // 90 to 97
+ 8804, 8805, 160, 8993, 176, 178, 183, 247, // 98 to 9F
+ 9552, 9553, 9554, 1105, 1108, 9556, 1110, 1111, // A0 to A7
+ 9559, 9560, 9561, 9562, 9563, 1169, 9565, 9566, // A8 to AF
+ 9567, 9568, 9569, 1025, 1028, 9571, 1030, 1031, // B0 to B7
+ 9574, 9575, 9576, 9577, 9578, 1168, 9580, 169, // B8 to BF
+ 1102, 1072, 1073, 1094, 1076, 1077, 1092, 1075, // C0 to C7
+ 1093, 1080, 1081, 1082, 1083, 1084, 1085, 1086, // C8 to CF
+ 1087, 1103, 1088, 1089, 1090, 1091, 1078, 1074, // D0 to D7
+ 1100, 1099, 1079, 1096, 1101, 1097, 1095, 1098, // D8 to DF
+ 1070, 1040, 1041, 1062, 1044, 1045, 1060, 1043, // E0 to E7
+ 1061, 1048, 1049, 1050, 1051, 1052, 1053, 1054, // E8 to EF
+ 1055, 1071, 1056, 1057, 1058, 1059, 1046, 1042, // F0 to F7
+ 1068, 1067, 1047, 1064, 1069, 1065, 1063, 1066); // F8 to FF
+
+implementation
+
+end.
+
diff --git a/tools/makefont/u_main.pas b/tools/makefont/u_main.pas
new file mode 100644
index 00000000..677173e1
--- /dev/null
+++ b/tools/makefont/u_main.pas
@@ -0,0 +1,120 @@
+unit u_main;
+
+{$mode objfpc}
+
+interface
+
+uses
+ Classes, SysUtils, Dos,
+ fpg_main, fpg_base,
+ fpg_form, fpg_button, fpg_label, fpg_dialogs, fpg_combobox;
+
+type
+ TF_MainForm= class(TfpgForm)
+ private
+ L_SelectMap: Tfpglabel;
+ Cb_SelectMap: TfpgComboBox;
+ Bt_SelectFile: TfpgButton;
+ Bt_Exit: TfpgButton;
+ procedure Bt_SelectFileClick(Sender: TObject);
+ procedure Bt_ExitClick(Sender: TObject);
+ public
+ constructor Create(AOwner: TComponent); override;
+ end;
+
+var
+ F_MainForm: TF_MainForm;
+
+implementation
+
+uses
+ u_Parsettf;
+
+var
+ MapList: TStringList;
+
+procedure TF_MainForm.Bt_SelectFileClick(Sender: TObject);
+var
+ FileDlg: TfpgFileDialog;
+ Fichier,Extension,FontType: string;
+begin
+FileDlg:= TfpgFileDialog.Create(nil);
+//FileDlg.Filter:= 'True type fonts (*.ttf;*.otf)|*.ttf;*.otf|Type1 fonts (*.pfa;*.pfb)|*.pfa;*.pfb';
+FileDlg.Filter:= 'True type fonts (*.ttf;*.otf)|*.ttf;*.otf';
+FileDlg.FontDesc:= 'bitstream vera sans-9';
+{$ifdef linux}
+FileDlg.InitialDir:= GetEnv('GS_LIB');
+{$endif}
+{$ifdef win32}
+//FileDlg.InitialDir:= '/WINDOWS/Fonts';
+{$endif}
+try
+ if FileDlg.RunOpenFile
+ then
+ begin
+ Fichier:= ExtractFileName(FileDlg.FileName);
+ //Extension:= Lowercase(Copy(Fichier,Length(Fichier)-3,3));
+ //if (Extension= 'ttf') or (Extension= 'otf')
+ //then
+ // FontType:= 'TrueType'
+ //else
+ // if Extension= 'pfb'
+ // then
+ // FontType:= 'Type1';
+ Parser:= T_Parser.Create(nil);
+ Parser.MakeFont(Fichier,Cb_SelectMap.Text,True);
+ end;
+finally
+ FileDlg.Free;
+ end;
+end;
+
+procedure TF_MainForm.Bt_ExitClick(Sender: TObject);
+begin
+Parser.Free;
+MapList.Free;
+Close;
+end;
+
+constructor TF_MainForm.Create(AOwner: TComponent);
+begin
+inherited Create(AOwner);
+Name := 'F_MainForm';
+WindowTitle:= 'TTF parser';
+SetPosition(0, 0, 400, 300);
+WindowPosition:= wpScreenCenter;
+Sizeable:= False;
+MapList:= TStringList.Create;
+with MapList do
+ begin
+ Add('cp874');
+ Add('cp1250');
+ Add('cp1251');
+ Add('cp1252');
+ Add('cp1253');
+ Add('cp1254');
+ Add('cp1255');
+ Add('cp1257');
+ Add('cp1258');
+ Add('iso-8859-1');
+ Add('iso-8859-2');
+ Add('iso-8859-4');
+ Add('iso-8859-5');
+ Add('iso-8859-7');
+ Add('iso-8859-9');
+ Add('iso-8859-11');
+ Add('iso-8859-15');
+ Add('iso-8859-16');
+ Add('koi8-r');
+ Add('koi8-u');
+ end;
+L_SelectMap:= CreateLabel(Self,150,30,'Select mapping',100,20,taCenter);
+Cb_SelectMap:= CreateComboBox(Self,150,50,100,MapList,20);
+Cb_SelectMap.FocusItem:= 3;
+Bt_SelectFile:= CreateButton(Self,150,200,100,'Select file',@Bt_SelectFileClick,'');
+Bt_Exit:= CreateButton(Self,160,250,80,'Exit',@Bt_ExitClick,'');
+RepCourant:= ExtractFilePath(Paramstr(0));
+end;
+
+end.
+
diff --git a/tools/makefont/u_parsettf.pas b/tools/makefont/u_parsettf.pas
new file mode 100644
index 00000000..e7a1584c
--- /dev/null
+++ b/tools/makefont/u_parsettf.pas
@@ -0,0 +1,708 @@
+unit u_parsettf;
+
+{$mode objfpc}
+
+interface
+
+uses
+ Classes, SysUtils, StrUtils,
+ fpg_dialogs;
+
+type
+ T_Parser= class(TObject)
+ private
+ OriginalSize: Longint;
+ FEncoding: string;
+ UnitsPerEm: Integer;
+ Coef: Extended;
+ BBox: array[0..3] of Smallint;
+ NumHMetrix: Integer;
+ NumGlyphs: Integer;
+ Widths: array of Smallint;
+ Chars: array of Word;
+ PostScriptName: string;
+ Embeddable: Boolean;
+ Bold: Boolean;
+ StemV: SmallInt;
+ Ascender: SmallInt;
+ Descender: SmallInt;
+ CapHeight: SmallInt;
+ ItalicAngle: Smallint;
+ Flags: Integer;
+ MissingWidth: SmallInt;
+ UnderlinePos: Smallint;
+ UnderlineThick: Smallint;
+ IsFixedPitch: Boolean;
+ CharWidth: array[0..255] of SmallInt;
+ Differences: widestring;
+ procedure ParseHead;
+ procedure ParseHhea;
+ procedure ParseMaxp;
+ procedure ParseHmtx;
+ procedure ParseCmap;
+ procedure ParseName;
+ procedure ParseOS2;
+ procedure ParsePost;
+ procedure ParseTtfFile(const FontFile: string);
+ procedure PrepareEncoding;
+ procedure MakedefinitionFile(FontFile: string);
+ function MakeDifferences: widestring;
+ public
+ procedure MakeFont(const FontFile: string; const Encoding: string; Embed: Boolean);
+ constructor Create(AOwner: TComponent);
+ end;
+
+var
+ Parser: T_Parser;
+ RepCourant: string;
+
+implementation
+
+uses
+ u_data;
+
+var
+ Flux: TFileStream;
+ CharNames: array[0..255] of string;
+ CharCodes: array[0..255] of Word;
+ CharBase: array[0..255] of string;
+
+function Puissance(Base,Exposant: Integer): Integer;
+begin
+if Exposant> 1
+then
+ Puissance:= Base*Puissance(Base,Pred(Exposant))
+else
+ Puissance:= Exposant;
+end;
+
+function ReadULong(AFlux: TFileStream): Longword;
+var
+ ALong: Longword;
+ Chaine: string;
+ Cpt,Coef: Integer;
+ Value: array of Longword;
+begin
+AFlux.Read(ALong,SizeOf(ALong));
+Chaine:= IntToHex(ALong,8);
+Chaine:= Copy(Chaine,7,2)+Copy(Chaine,5,2)+Copy(Chaine,3,2)+Copy(Chaine,1,2);
+SetLength(Value,8);
+for Cpt:= 1 to 8 do
+ begin
+ Coef:= 9-Cpt;
+ case Chaine[Cpt] of
+ '0'..'9':
+ Value[Cpt]:= Puissance(16,Coef)*StrToInt(Chaine[Cpt]);
+ 'A':
+ Value[Cpt]:= Puissance(16,Coef)*10;
+ 'B':
+ Value[Cpt]:= Puissance(16,Coef)*11;
+ 'C':
+ Value[Cpt]:= Puissance(16,Coef)*12;
+ 'D':
+ Value[Cpt]:= Puissance(16,Coef)*13;
+ 'E':
+ Value[Cpt]:= Puissance(16,Coef)*14;
+ 'F':
+ Value[Cpt]:= Puissance(16,Coef)*15;
+ end;
+ end;
+Result:= 0;
+for Cpt:= 1 to 8 do
+ Result:= Result+Value[Cpt];
+end;
+
+function ReadUShort(AFlux: TFileStream): Word;
+var
+ AWord: Word;
+ Chaine: string;
+ Cpt,Coef: Integer;
+ Value: array of Word;
+begin
+AFlux.Read(AWord,SizeOf(AWord));
+Chaine:= IntToHex(AWord,4);
+Chaine:= Copy(Chaine,3,2)+Copy(Chaine,1,2);
+SetLength(Value,4);
+for Cpt:= 1 to 4 do
+ begin
+ Coef:= 5-Cpt;
+ case Chaine[Cpt] of
+ '0'..'9':
+ Value[Cpt]:= Puissance(16,Coef)*StrToInt(Chaine[Cpt]);
+ 'A':
+ Value[Cpt]:= Puissance(16,Coef)*10;
+ 'B':
+ Value[Cpt]:= Puissance(16,Coef)*11;
+ 'C':
+ Value[Cpt]:= Puissance(16,Coef)*12;
+ 'D':
+ Value[Cpt]:= Puissance(16,Coef)*13;
+ 'E':
+ Value[Cpt]:= Puissance(16,Coef)*14;
+ 'F':
+ Value[Cpt]:= Puissance(16,Coef)*15;
+ end;
+ end;
+Result:= 0;
+for Cpt:= 1 to 4 do
+ Result:= Result+Value[Cpt];
+end;
+
+function ReadShort(AFlux: TFileStream): Smallint;
+var
+ AWord: Word;
+ Chaine: string;
+ Cpt,Coef: Integer;
+ Value: array of Word;
+begin
+AFlux.Read(AWord,SizeOf(AWord));
+Chaine:= IntToHex(AWord,4);
+Chaine:= Copy(Chaine,3,2)+Copy(Chaine,1,2);
+SetLength(Value,4);
+for Cpt:= 1 to 4 do
+ begin
+ Coef:= 5-Cpt;
+ case Chaine[Cpt] of
+ '0'..'9':
+ Value[Cpt]:= Puissance(16,Coef)*StrToInt(Chaine[Cpt]);
+ 'A':
+ Value[Cpt]:= Puissance(16,Coef)*10;
+ 'B':
+ Value[Cpt]:= Puissance(16,Coef)*11;
+ 'C':
+ Value[Cpt]:= Puissance(16,Coef)*12;
+ 'D':
+ Value[Cpt]:= Puissance(16,Coef)*13;
+ 'E':
+ Value[Cpt]:= Puissance(16,Coef)*14;
+ 'F':
+ Value[Cpt]:= Puissance(16,Coef)*15;
+ end;
+ end;
+Result:= 0;
+for Cpt:= 1 to 4 do
+ Result:= Result+Value[Cpt];
+end;
+
+procedure T_Parser.ParseHead;
+var
+ AWord: Word;
+ ALong: Longword;
+ MagicNumber: Longword;
+ Cpt: Integer;
+begin
+for Cpt:= 1 to 3 do
+ Flux.Read(ALong,SizeOf(ALong)); // skip 12 bytes - Version, FontRevision, ChecksumAdjustment
+MagicNumber:= ReadULong(Flux); // 4 bytes - MagicNumber
+if IntToHex(MagicNumber,4)<> '5F0F3CF5'
+then
+ begin
+ ShowMessage('Incorrect magic number',True);
+ Exit;
+ end;
+Flux.Read(AWord,SizeOf(AWord)); // skip 2 bytes - Flags
+UnitsPerEm:= ReadUShort(Flux); // 2 bytes - UnitsPerEm
+Coef:= 1000/UnitsPerEm;
+for Cpt:= 1 to 4 do
+ Flux.Read(ALong,SizeOf(ALong)); // skip 16 bytes - Created, Modified
+BBox[0]:= Round(Coef*ReadShort(Flux)); // 2 bytes
+BBox[1]:= Round(Coef*ReadShort(Flux)); // 2 bytes
+BBox[2]:= Round(Coef*ReadShort(Flux)); // 2 bytes
+BBox[3]:= Round(Coef*ReadShort(Flux)); // 2 bytes
+end;
+
+procedure T_Parser.ParseHhea;
+var
+ AWord: Word;
+ ALong: Longword;
+ Cpt: Integer;
+begin
+Flux.Read(ALong,SizeOf(ALong)); // skip 4 bytes
+for Cpt:= 1 to 15 do
+ Flux.Read(AWord,SizeOf(AWord)); // skip 30 bytes
+NumHMetrix:= ReadUShort(Flux); // 2 bytes
+end;
+
+procedure T_Parser.ParseMaxp;
+var
+ ALong: Longword;
+begin
+Flux.Read(ALong,SizeOf(ALong)); // skip 4 bytes
+NumGlyphs:= ReadUShort(Flux); // 2 bytes
+end;
+
+procedure T_Parser.ParseHmtx;
+var
+ AWord: Word;
+ Cpt: Integer;
+begin
+SetLength(Widths,NumGlyphs);
+for Cpt:= 0 to Pred(NumHMetrix) do
+ begin
+ Widths[Cpt]:= ReadUShort(Flux); // 2 bytes
+ Flux.Read(AWord,SizeOf(AWord)); // skip 2 bytes - Lsb
+ end;
+if NumHMetrix< NumGlyphs
+then
+ for Cpt:= NumHMetrix to Pred(NumGlyphs) do
+ Widths[Cpt]:= 0;
+//MissingWidth:= Round(Coef*Widths[0]);
+//for Cpt:= 0 to 255 do
+// CharWidth[Cpt]:= MissingWidth;
+end;
+
+procedure T_Parser.ParseCmap;
+var
+ AWord: Word;
+ ALong: Longword;
+ NumTables: Word;
+ SubTableFormat: Word;
+ SegCount: Word;
+ Gid: Word;
+ EndCount: array of Word;
+ StartCount: array of Word;
+ IDDelta: array of Word;
+ IDRangeOffset: array of Word;
+ Cpt,Cpt2: Integer;
+ PlatformID,EncodingID: Word;
+ Offset,Offset31,TableStartPos,TablePos: LongWord;
+begin
+TableStartPos:= Flux.Position; // memorize Table start position
+Flux.Read(AWord,SizeOf(AWord)); // skip 2 bytes - version
+NumTables:= ReadUShort(Flux); // 2 bytes
+Offset31:= 0;
+for Cpt:= 1 to NumTables do
+ begin
+ PlatformID:= ReadUShort(Flux); // 2 bytes
+ EncodingID:= ReadUShort(Flux); // 2 bytes
+ Offset:= ReadULong(Flux); // 4 bytes - Offset of subtable
+ if (PlatformID= 3) and (EncodingID= 1)
+ then
+ Offset31:= Offset;
+ end;
+if Offset31= 0
+then
+ begin
+ ShowMessage('No unicode encoding found',True);
+ Exit;
+ end;
+Flux.Position:= TableStartPos+Offset31;
+SubTableFormat:= ReadUShort(Flux); // 2 bytes - Format of subtable
+if SubTableFormat<> 4
+then
+ begin
+ ShowMessage('Unexpected subtable format',True);
+ Exit;
+ end;
+Flux.Read(ALong,SizeOf(ALong)); // skip 4 bytes - Length, language
+SegCount:= Round(ReadUShort(Flux)/2); // 2 bytes - Segments count
+for Cpt:= 1 to 3 do
+ Flux.Read(AWord,SizeOf(AWord)); // skip 6 bytes - SearchRange, EntrySelector, RangeShift
+SetLength(EndCount,SegCount);
+for Cpt:= 0 to Pred(SegCount) do
+ EndCount[Cpt]:= ReadUShort(Flux); // 2 bytes * SegCount
+Flux.Read(AWord,SizeOf(AWord)); // skip 2 bytes - ReservedPad
+SetLength(StartCount,SegCount);
+for Cpt:= 0 to Pred(SegCount) do
+ StartCount[Cpt]:= ReadUShort(Flux); // 2 bytes * SegCount
+SetLength(IDDelta,SegCount);
+for Cpt:= 0 to Pred(SegCount) do
+ IDDelta[Cpt]:= ReadUShort(Flux); // 2 bytes * SegCount
+TablePos:= Flux.Position; // set position to Table offset
+SetLength(IDRangeOffset,SegCount);
+for Cpt:= 0 to Pred(SegCount) do
+ IDRangeOffset[Cpt]:= ReadUShort(Flux); // 2 bytes * SegCount
+for Cpt:= 0 to Pred(SegCount) do
+ begin
+ if IDRangeOffset[Cpt]> 0
+ then
+ Flux.Position:= TablePos+2*Cpt+IDRangeOffset[Cpt]; // set position
+ SetLength(Chars,Length(Chars)+EndCount[Cpt]);
+ for Cpt2:= StartCount[Cpt] to EndCount[Cpt] do
+ begin
+ if Cpt2= 65535
+ then
+ Break;
+ if IDRangeOffset[Cpt]> 0
+ then
+ begin
+ Gid:= ReadUShort(Flux);
+ if Gid> 0
+ then
+ Gid:= Gid+IDDelta[Cpt];
+ end
+ else
+ Gid:= Cpt2+IDDelta[Cpt];
+ if Gid>= 65536
+ then
+ Gid:= Gid-65536;
+ if Gid> 0
+ then
+ Chars[Cpt2]:= Gid;
+ end;
+ end;
+end;
+
+procedure T_Parser.ParseName;
+var
+ AWord: Word;
+ NameID: Word;
+ Count: Word;
+ Long: Word;
+ StringOffset: Word;
+ Offset: Word;
+ TableStartPos: LongWord;
+ Cpt,Cpt2: Integer;
+ Chaine: string;
+ CharIdent: Char;
+begin
+TableStartPos:= Flux.Position; // memorize Table start position
+PostScriptName:= '';
+Flux.Read(AWord,SizeOf(AWord)); // skip 2 bytes - Format
+Count:= ReadUShort(Flux); // 2 bytes
+StringOffset:= ReadUShort(Flux); // 2 bytes
+for Cpt:= 0 to Pred(Count) do
+ begin
+ for Cpt2:= 1 to 3 do
+ Flux.Read(AWord,SizeOf(AWord)); // skip 6 bytes - PlatformID, encodingID, languageID
+ NameID:= ReadUShort(Flux); // 2 bytes
+ Long:= ReadUShort(Flux); // 2 bytes
+ Offset:= ReadUShort(Flux); // 2 bytes
+ if NameID= 6
+ then
+ begin
+ Flux.Position:= TableStartPos+StringOffset+Offset; // set position
+ Chaine:= '';
+ for Cpt2:= 1 to Long do
+ begin
+ Flux.Read(CharIdent,SizeOf(CharIdent)); // 1 byte
+ Chaine:= Chaine+CharIdent;
+ end;
+ PostScriptName:= Chaine;
+ Break;
+ end;
+ end;
+end;
+
+procedure T_Parser.ParseOS2;
+var
+ AWord: Word;
+ ALong: Longword;
+ Version: Word;
+ FsType: Word;
+ Cpt: Integer;
+begin
+Version:= ReadUShort(Flux); // 2 bytes
+for Cpt:= 1 to 3 do
+ Flux.Read(AWord,SizeOf(AWord)); // skip 6 bytes - xAvgCharWidth, usWeightClass, usWidthClass
+FsType:= ReadUShort(Flux); // 2 bytes
+Embeddable:= (FsType<> 2) and ((FsType and 512)= 0);
+if not Embeddable
+then
+ begin
+ ShowMessage('Font licence does not allow embedding',True);
+ Exit;
+ end;
+for Cpt:= 1 to 13 do
+ Flux.Read(ALong,SizeOf(ALong)); // skip 52 bytes
+Bold:= (ReadUShort(Flux) and 32)<> 0 ; // 2 bytes
+if Bold
+then
+ StemV:= 120
+else
+ StemV:= 70;
+Flux.Read(ALong,SizeOf(ALong)); // skip 4 bytes - usFirstCharIndex, usLastCharIndex
+Ascender:= Round(Coef*ReadShort(Flux)); // 2 bytes
+Descender:= Round(Coef*ReadShort(Flux)); // 2 bytes
+if Version>= 2
+then
+ begin
+ for Cpt:= 1 to 4 do
+ Flux.Read(ALong,SizeOf(ALong)); // skip 16 bytes
+ CapHeight:= Round(Coef*ReadShort(Flux)); // 2 bytes
+ end
+else
+ CapHeight:= Ascender;
+end;
+
+procedure T_Parser.ParsePost;
+var
+ AWord: Word;
+ ALong: Longint;
+begin
+Flux.Read(ALong,SizeOf(ALong)); // skip 4 bytes - Version
+ItalicAngle:= ReadShort(Flux); // 2 bytes
+Flux.Read(AWord,SizeOf(AWord)); // skip 2 bytes - decimal part
+UnderlinePos:= Round(Coef*ReadShort(Flux)); // 2 bytes
+UnderlineThick:= Round(Coef*ReadShort(Flux)); // 2 bytes
+IsFixedPitch:= ReadULong(Flux)<> 0; // 4 bytes
+Flags:= 32; // non symbolic
+if IsFixedPitch
+then
+ Flags:= Flags+1;
+if ItalicAngle<> 0
+then
+ Flags:= Flags+64;
+end;
+
+procedure T_Parser.ParseTtfFile(const FontFile: string);
+var
+ Version: Longint;
+ NumTables: Word;
+ AWord: Word;
+ ALong: Longword;
+ TableIdent: array of string;
+ TableOffset: array of Longword;
+ Cpt,Cpt2: Integer;
+ CharIdent: Char;
+begin
+Flux:= TFileStream.Create(FontFile,fmOpenRead);
+try
+ OriginalSize:= Flux.Size;
+ Flux.Position:= 0; // Affset Table (starts at byte 0
+ Flux.Read(Version,SizeOf(Version)); // 4 bytes
+ NumTables:= ReadUShort(Flux); // 2 bytes - Number of Tables
+ Flux.Read(ALong,SizeOf(ALong)); // skip 4 bytes
+ Flux.Read(AWord,SizeOf(AWord)); // skip 2 bytes
+ SetLength(TableIdent,NumTables);
+ SetLength(TableOffset,NumTables);
+ for Cpt:= 0 to Pred(NumTables) do // Table Directory (start at byte 12)
+ begin
+ for Cpt2:= 1 to 4 do
+ begin
+ Flux.Read(CharIdent,SizeOf(CharIdent)); // 1 byte
+ TableIdent[Cpt]:= TableIdent[Cpt]+CharIdent;
+ end;
+ Flux.Read(ALong,SizeOf(ALong)); // skip 4 bytes - Checksum
+ TableOffset[Cpt]:= ReadULong(Flux); // 4 bytes - Offset
+ Flux.Read(ALong,SizeOf(ALong)); // skip 4 bytes - Length
+ end;
+ for Cpt:= 0 to Pred(NumTables) do
+ if TableIdent[Cpt]= 'head'
+ then
+ begin
+ Flux.Position:= TableOffset[Cpt];
+ ParseHead; // lecture table "Head"
+ Break;
+ end;
+ for Cpt:= 0 to Pred(NumTables) do
+ if TableIdent[Cpt]= 'hhea'
+ then
+ begin
+ Flux.Position:= TableOffset[Cpt];
+ ParseHhea; // lecture table "Hhea"
+ Break;
+ end;
+ for Cpt:= 0 to Pred(NumTables) do
+ if TableIdent[Cpt]= 'maxp'
+ then
+ begin
+ Flux.Position:= TableOffset[Cpt];
+ ParseMaxp; // lecture table "Maxp"
+ Break;
+ end;
+ for Cpt:= 0 to Pred(NumTables) do
+ if TableIdent[Cpt]= 'hmtx'
+ then
+ begin
+ Flux.Position:= TableOffset[Cpt];
+ ParseHmtx; // lecture table "Hmtx"
+ Break;
+ end;
+ for Cpt:= 0 to Pred(NumTables) do
+ if TableIdent[Cpt]= 'cmap'
+ then
+ begin
+ Flux.Position:= TableOffset[Cpt];
+ ParseCmap; // lecture table "Cmap"
+ Break;
+ end;
+ for Cpt:= 0 to Pred(NumTables) do
+ if TableIdent[Cpt]= 'name'
+ then
+ begin
+ Flux.Position:= TableOffset[Cpt];
+ ParseName; // lecture table "Name"
+ Break;
+ end;
+ for Cpt:= 0 to Pred(NumTables) do
+ if TableIdent[Cpt]= 'OS/2'
+ then
+ begin
+ Flux.Position:= TableOffset[Cpt];
+ ParseOS2; // lecture table "OS/2"
+ Break;
+ end;
+ for Cpt:= 0 to Pred(NumTables) do
+ if TableIdent[Cpt]= 'post'
+ then
+ begin
+ Flux.Position:= TableOffset[Cpt];
+ ParsePost; // lecture table "Post"
+ Break;
+ end;
+finally
+ Flux.Free;
+ end;
+end;
+
+procedure T_Parser.PrepareEncoding;
+var
+ Cpt: Integer;
+begin
+if FEncoding= 'cp874'
+then
+ for Cpt:= 0 to 255 do
+ begin
+ CharNames[Cpt]:= cp874_n[Cpt];
+ CharCodes[Cpt]:= cp874_v[Cpt];
+ end;
+if FEncoding= 'cp1250'
+then
+ for Cpt:= 0 to 255 do
+ begin
+ CharNames[Cpt]:= cp1250_n[Cpt];
+ CharCodes[Cpt]:= cp1250_v[Cpt];
+ end;
+if FEncoding= 'cp1251'
+then
+ for Cpt:= 0 to 255 do
+ begin
+ CharNames[Cpt]:= cp1251_n[Cpt];
+ CharCodes[Cpt]:= cp1251_v[Cpt];
+ end;
+if FEncoding= 'cp1252'
+then
+ for Cpt:= 0 to 255 do
+ begin
+ CharNames[Cpt]:= cp1252_n[Cpt];
+ CharCodes[Cpt]:= cp1252_v[Cpt];
+ end
+else
+ for Cpt:= 0 to 255 do
+ CharBase[Cpt]:= cp1252_n[Cpt];
+if FEncoding= 'cp1253'
+then
+ for Cpt:= 0 to 255 do
+ begin
+ CharNames[Cpt]:= cp1253_n[Cpt];
+ CharCodes[Cpt]:= cp1253_v[Cpt];
+ end;
+end;
+
+procedure T_Parser.MakedefinitionFile(FontFile: string);
+var
+ FileDlg: TfpgFileDialog;
+ DestFile: TStringList;
+ Chaine,Fichier: widestring;
+ Cpt: Integer;
+begin
+DestFile:= TStringList.Create;
+Chaine:= 'FontType=TrueType';
+DestFile.Add(Chaine);
+Chaine:= 'FontName='+PostScriptName;
+DestFile.Add(Chaine);
+Chaine:= 'Ascent='+IntToStr(Ascender);
+DestFile.Add(Chaine);
+Chaine:= 'Descent='+IntToStr(Descender);
+DestFile.Add(Chaine);
+Chaine:= 'CapHeight='+IntToStr(CapHeight);
+DestFile.Add(Chaine);
+Chaine:= 'Flags='+IntToStr(Flags);
+DestFile.Add(Chaine);
+Chaine:= 'FontBBox=';
+for Cpt:= 0 to 3 do
+ Chaine:= Chaine+IntToStr(BBox[Cpt])+' ';
+Chaine:= Chaine+']';
+DestFile.Add(Chaine);
+Chaine:= 'ItalicAngle='+IntToStr(ItalicAngle);
+DestFile.Add(Chaine);
+Chaine:= 'StemV='+IntToStr(StemV);
+DestFile.Add(Chaine);
+Chaine:= 'MissingWidth='+IntToStr(MissingWidth);
+DestFile.Add(Chaine);
+Chaine:= 'FontUp='+IntToStr(UnderlinePos);
+DestFile.Add(Chaine);
+Chaine:= 'FontUt='+IntToStr(UnderlineThick);
+DestFile.Add(Chaine);
+Chaine:= 'Encoding='+FEncoding;
+DestFile.Add(Chaine);
+Chaine:= 'FontFile='+Copy(FontFile,1,Length(FontFile)-4)+'.z';
+//Chaine:= 'FontFile='+FontFile;
+DestFile.Add(Chaine);
+Chaine:= 'OriginalSize='+IntToStr(OriginalSize);
+DestFile.Add(Chaine);
+if Differences> ''
+then
+ begin
+ Chaine:= 'Diffs='+Differences;
+ DestFile.Add(Chaine);
+ end;
+Chaine:= 'CharWidth=';
+for Cpt:= 32 to 255 do
+ Chaine:= Chaine+IntToStr(CharWidth[Cpt])+' ';
+Chaine:= Chaine+']';
+DestFile.Add(Chaine);
+FileDlg:= TfpgFileDialog.Create(nil);
+FileDlg.InitialDir:= RepCourant;
+FileDlg.Filter:= 'Fichiers fnt |*.fnt';
+FontFile:= StringReplace(FontFile,'-Regular','',[rfIgnoreCase]);
+Fichier:= Copy(FontFile,1,Length(FontFile)-3)+'fnt';
+FileDlg.FileName:= Fichier;
+try
+ if FileDlg.RunSaveFile
+ then
+ DestFile.SaveToFile(Fichier);
+finally
+ FileDlg.Free;
+ DestFile.Free;
+ end;
+end;
+
+function T_Parser.MakeDifferences: widestring;
+var
+ Cpt,Last: Integer;
+begin
+Result:= '';
+Last:= 0;
+for Cpt:=32 to 255 do
+ if CharNames[Cpt]<> CharBase[Cpt]
+ then
+ begin
+ if Cpt<> Succ(Cpt)
+ then
+ Result:= Result+IntToStr(Cpt)+' ';
+ Last:= Cpt;
+ Result:= Result+'/'+CharNames[Cpt]+' ';
+ end;
+end;
+
+procedure T_Parser.MakeFont(const FontFile: string; const Encoding:string; Embed: Boolean);
+var
+ Cpt: Integer;
+begin
+FEncoding:= Encoding;
+PrepareEncoding;
+ParseTtfFile(FontFile);
+MissingWidth:= Round(Coef*Widths[Chars[CharCodes[32]]]);
+for Cpt:= 0 to 255 do
+ begin
+ if (Widths[Chars[CharCodes[Cpt]]]> 0) and (CharNames[Cpt]<> '.notdef')
+ then
+ CharWidth[Cpt]:= Round(Coef*Widths[Chars[CharCodes[Cpt]]])
+ else
+ CharWidth[Cpt]:= MissingWidth;
+ end;
+if Encoding<> 'cp1252'
+then
+ Differences:= MakeDifferences;
+MakeDefinitionFile(FontFile);
+end;
+
+constructor T_Parser.Create(AOwner: TComponent);
+begin
+inherited Create;
+end;
+
+end.
+