diff options
-rw-r--r-- | tools/makefont/makefonts.lpi | 70 | ||||
-rw-r--r-- | tools/makefont/makefonts.lpr | 26 | ||||
-rw-r--r-- | tools/makefont/u_data.pas | 2053 | ||||
-rw-r--r-- | tools/makefont/u_main.pas | 120 | ||||
-rw-r--r-- | tools/makefont/u_parsettf.pas | 708 |
5 files changed, 2977 insertions, 0 deletions
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/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. + |