aboutsummaryrefslogtreecommitdiff
path: root/bin/otb1get.js
diff options
context:
space:
mode:
Diffstat (limited to 'bin/otb1get.js')
-rw-r--r--bin/otb1get.js706
1 files changed, 706 insertions, 0 deletions
diff --git a/bin/otb1get.js b/bin/otb1get.js
new file mode 100644
index 000000000000..b4a058316cdb
--- /dev/null
+++ b/bin/otb1get.js
@@ -0,0 +1,706 @@
+/*
+ Copyright (C) 2018-2020 Dimitar Toshkov Zhekov <dimitar.zhekov@gmail.com>
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+'use strict';
+
+const fnutil = require('./fnutil.js');
+
+// -- xAvgCharWidth --
+const WEIGHT_FACTORS = [
+ [ 'a', 64 ],
+ [ 'b', 14 ],
+ [ 'c', 27 ],
+ [ 'd', 35 ],
+ [ 'e', 100 ],
+ [ 'f', 20 ],
+ [ 'g', 14 ],
+ [ 'h', 42 ],
+ [ 'i', 63 ],
+ [ 'j', 3 ],
+ [ 'k', 6 ],
+ [ 'l', 35 ],
+ [ 'm', 20 ],
+ [ 'n', 56 ],
+ [ 'o', 56 ],
+ [ 'p', 17 ],
+ [ 'q', 4 ],
+ [ 'r', 49 ],
+ [ 's', 56 ],
+ [ 't', 71 ],
+ [ 'u', 31 ],
+ [ 'v', 10 ],
+ [ 'w', 18 ],
+ [ 'x', 3 ],
+ [ 'y', 18 ],
+ [ 'z', 2 ],
+ [ ' ', 166 ]
+];
+
+function xAvgCharWidth(font) {
+ let xAvgTotalWidth = 0;
+
+ for (let factor of WEIGHT_FACTORS) {
+ const char = font.chars.find(_char => _char.code === factor[0].charCodeAt(0));
+
+ if (char == null) {
+ return 0;
+ }
+ xAvgTotalWidth += font.scaleWidth(char) * factor[1];
+ }
+
+ return fnutil.round(xAvgTotalWidth / 1000);
+}
+
+// -- ulCharRanges --
+const CHAR_RANGES = [
+ [ 0, 0x0000, 0x007F ],
+ [ 1, 0x0080, 0x00FF ],
+ [ 2, 0x0100, 0x017F ],
+ [ 3, 0x0180, 0x024F ],
+ [ 4, 0x0250, 0x02AF ],
+ [ 4, 0x1D00, 0x1D7F ],
+ [ 4, 0x1D80, 0x1DBF ],
+ [ 5, 0x02B0, 0x02FF ],
+ [ 5, 0xA700, 0xA71F ],
+ [ 6, 0x0300, 0x036F ],
+ [ 6, 0x1DC0, 0x1DFF ],
+ [ 7, 0x0370, 0x03FF ],
+ [ 8, 0x2C80, 0x2CFF ],
+ [ 9, 0x0400, 0x04FF ],
+ [ 9, 0x0500, 0x052F ],
+ [ 9, 0x2DE0, 0x2DFF ],
+ [ 9, 0xA640, 0xA69F ],
+ [ 10, 0x0530, 0x058F ],
+ [ 11, 0x0590, 0x05FF ],
+ [ 12, 0xA500, 0xA63F ],
+ [ 13, 0x0600, 0x06FF ],
+ [ 13, 0x0750, 0x077F ],
+ [ 14, 0x07C0, 0x07FF ],
+ [ 15, 0x0900, 0x097F ],
+ [ 16, 0x0980, 0x09FF ],
+ [ 17, 0x0A00, 0x0A7F ],
+ [ 18, 0x0A80, 0x0AFF ],
+ [ 19, 0x0B00, 0x0B7F ],
+ [ 20, 0x0B80, 0x0BFF ],
+ [ 21, 0x0C00, 0x0C7F ],
+ [ 22, 0x0C80, 0x0CFF ],
+ [ 23, 0x0D00, 0x0D7F ],
+ [ 24, 0x0E00, 0x0E7F ],
+ [ 25, 0x0E80, 0x0EFF ],
+ [ 26, 0x10A0, 0x10FF ],
+ [ 26, 0x2D00, 0x2D2F ],
+ [ 27, 0x1B00, 0x1B7F ],
+ [ 28, 0x1100, 0x11FF ],
+ [ 29, 0x1E00, 0x1EFF ],
+ [ 29, 0x2C60, 0x2C7F ],
+ [ 29, 0xA720, 0xA7FF ],
+ [ 30, 0x1F00, 0x1FFF ],
+ [ 31, 0x2000, 0x206F ],
+ [ 31, 0x2E00, 0x2E7F ],
+ [ 32, 0x2070, 0x209F ],
+ [ 33, 0x20A0, 0x20CF ],
+ [ 34, 0x20D0, 0x20FF ],
+ [ 35, 0x2100, 0x214F ],
+ [ 36, 0x2150, 0x218F ],
+ [ 37, 0x2190, 0x21FF ],
+ [ 37, 0x27F0, 0x27FF ],
+ [ 37, 0x2900, 0x297F ],
+ [ 37, 0x2B00, 0x2BFF ],
+ [ 38, 0x2200, 0x22FF ],
+ [ 38, 0x2A00, 0x2AFF ],
+ [ 38, 0x27C0, 0x27EF ],
+ [ 38, 0x2980, 0x29FF ],
+ [ 39, 0x2300, 0x23FF ],
+ [ 40, 0x2400, 0x243F ],
+ [ 41, 0x2440, 0x245F ],
+ [ 42, 0x2460, 0x24FF ],
+ [ 43, 0x2500, 0x257F ],
+ [ 44, 0x2580, 0x259F ],
+ [ 45, 0x25A0, 0x25FF ],
+ [ 46, 0x2600, 0x26FF ],
+ [ 47, 0x2700, 0x27BF ],
+ [ 48, 0x3000, 0x303F ],
+ [ 49, 0x3040, 0x309F ],
+ [ 50, 0x30A0, 0x30FF ],
+ [ 50, 0x31F0, 0x31FF ],
+ [ 51, 0x3100, 0x312F ],
+ [ 51, 0x31A0, 0x31BF ],
+ [ 52, 0x3130, 0x318F ],
+ [ 53, 0xA840, 0xA87F ],
+ [ 54, 0x3200, 0x32FF ],
+ [ 55, 0x3300, 0x33FF ],
+ [ 56, 0xAC00, 0xD7AF ],
+ [ 57, 0xD800, 0xDFFF ],
+ [ 58, 0x10900, 0x1091F ],
+ [ 59, 0x4E00, 0x9FFF ],
+ [ 59, 0x2E80, 0x2EFF ],
+ [ 59, 0x2F00, 0x2FDF ],
+ [ 59, 0x2FF0, 0x2FFF ],
+ [ 59, 0x3400, 0x4DBF ],
+ [ 59, 0x20000, 0x2A6DF ],
+ [ 59, 0x3190, 0x319F ],
+ [ 60, 0xE000, 0xF8FF ],
+ [ 61, 0x31C0, 0x31EF ],
+ [ 61, 0xF900, 0xFAFF ],
+ [ 61, 0x2F800, 0x2FA1F ],
+ [ 62, 0xFB00, 0xFB4F ],
+ [ 63, 0xFB50, 0xFDFF ],
+ [ 64, 0xFE20, 0xFE2F ],
+ [ 65, 0xFE10, 0xFE1F ],
+ [ 65, 0xFE30, 0xFE4F ],
+ [ 66, 0xFE50, 0xFE6F ],
+ [ 67, 0xFE70, 0xFEFF ],
+ [ 68, 0xFF00, 0xFFEF ],
+ [ 69, 0xFFF0, 0xFFFF ],
+ [ 70, 0x0F00, 0x0FFF ],
+ [ 71, 0x0700, 0x074F ],
+ [ 72, 0x0780, 0x07BF ],
+ [ 73, 0x0D80, 0x0DFF ],
+ [ 74, 0x1000, 0x109F ],
+ [ 75, 0x1200, 0x137F ],
+ [ 75, 0x1380, 0x139F ],
+ [ 75, 0x2D80, 0x2DDF ],
+ [ 76, 0x13A0, 0x13FF ],
+ [ 77, 0x1400, 0x167F ],
+ [ 78, 0x1680, 0x169F ],
+ [ 79, 0x16A0, 0x16FF ],
+ [ 80, 0x1780, 0x17FF ],
+ [ 80, 0x19E0, 0x19FF ],
+ [ 81, 0x1800, 0x18AF ],
+ [ 82, 0x2800, 0x28FF ],
+ [ 83, 0xA000, 0xA48F ],
+ [ 83, 0xA490, 0xA4CF ],
+ [ 84, 0x1700, 0x171F ],
+ [ 84, 0x1720, 0x173F ],
+ [ 84, 0x1740, 0x175F ],
+ [ 84, 0x1760, 0x177F ],
+ [ 85, 0x10300, 0x1032F ],
+ [ 86, 0x10330, 0x1034F ],
+ [ 87, 0x10400, 0x1044F ],
+ [ 88, 0x1D000, 0x1D0FF ],
+ [ 88, 0x1D100, 0x1D1FF ],
+ [ 88, 0x1D200, 0x1D24F ],
+ [ 89, 0x1D400, 0x1D7FF ],
+ [ 90, 0xF0000, 0xFFFFD ],
+ [ 90, 0x100000, 0x10FFFD ],
+ [ 91, 0xFE00, 0xFE0F ],
+ [ 91, 0xE0100, 0xE01EF ],
+ [ 92, 0xE0000, 0xE007F ],
+ [ 93, 0x1900, 0x194F ],
+ [ 94, 0x1950, 0x197F ],
+ [ 95, 0x1980, 0x19DF ],
+ [ 96, 0x1A00, 0x1A1F ],
+ [ 97, 0x2C00, 0x2C5F ],
+ [ 98, 0x2D30, 0x2D7F ],
+ [ 99, 0x4DC0, 0x4DFF ],
+ [ 100, 0xA800, 0xA82F ],
+ [ 101, 0x10000, 0x1007F ],
+ [ 101, 0x10080, 0x100FF ],
+ [ 101, 0x10100, 0x1013F ],
+ [ 102, 0x10140, 0x1018F ],
+ [ 103, 0x10380, 0x1039F ],
+ [ 104, 0x103A0, 0x103DF ],
+ [ 105, 0x10450, 0x1047F ],
+ [ 106, 0x10480, 0x104AF ],
+ [ 107, 0x10800, 0x1083F ],
+ [ 108, 0x10A00, 0x10A5F ],
+ [ 109, 0x1D300, 0x1D35F ],
+ [ 110, 0x12000, 0x123FF ],
+ [ 110, 0x12400, 0x1247F ],
+ [ 111, 0x1D360, 0x1D37F ],
+ [ 112, 0x1B80, 0x1BBF ],
+ [ 113, 0x1C00, 0x1C4F ],
+ [ 114, 0x1C50, 0x1C7F ],
+ [ 115, 0xA880, 0xA8DF ],
+ [ 116, 0xA900, 0xA92F ],
+ [ 117, 0xA930, 0xA95F ],
+ [ 118, 0xAA00, 0xAA5F ],
+ [ 119, 0x10190, 0x101CF ],
+ [ 120, 0x101D0, 0x101FF ],
+ [ 121, 0x102A0, 0x102DF ],
+ [ 121, 0x10280, 0x1029F ],
+ [ 121, 0x10920, 0x1093F ],
+ [ 122, 0x1F030, 0x1F09F ],
+ [ 122, 0x1F000, 0x1F02F ]
+];
+
+function ulCharRanges(font) {
+ let charRanges = [0, 0, 0, 0];
+
+ font.chars.forEach(char => {
+ const unicode = char.code;
+ const range = CHAR_RANGES.find(_range => unicode >= _range[1] && unicode <= _range[2]);
+
+ if (range != null) {
+ charRanges[range[0] >> 5] |= 1 << (range[0] & 0x1F);
+ }
+ });
+
+ if (font.maxCode >= 0x10000) {
+ charRanges[57 >> 5] |= 1 << (57 & 0x1F);
+ }
+ return [ charRanges[0] >>> 0, charRanges[1] >>> 0, charRanges[2] >>> 0, charRanges[3] >>> 0 ];
+}
+
+// -- ulCodePages --
+function ulCodePages(font) {
+ const spaceIndex = font.chars.findIndex(char => char.code === 0x20);
+ const ascii = Number(spaceIndex !== -1 && font.chars[spaceIndex + 0x5E].code === 0x7E);
+ const findf = (unicode) => Number(font.chars.findIndex(char => char.code === unicode) !== -1);
+ const graph = findf(0x2524);
+ const radic = findf(0x221A);
+ let codePages = [0, 0];
+
+ // conditions from FontForge
+ font.chars.forEach(char => {
+ switch (char.code) {
+ case 0x00DE:
+ codePages[0] |= (ascii) << 0; // 1252 Latin1
+ break;
+ case 0x255A:
+ codePages[1] |= (ascii) << 30; // 850 WE/Latin1
+ codePages[1] |= (ascii) << 31; // 437 US
+ break;
+ case 0x013D:
+ codePages[0] |= (ascii) << 1; // 1250 Latin 2: Eastern Europe
+ codePages[1] |= (ascii & graph) << 26; // 852 Latin 2
+ break;
+ case 0x0411:
+ codePages[0] |= 1 << 2; // 1251 Cyrillic
+ codePages[1] |= (findf(0x255C) & graph) << 17; // 866 MS-DOS Russian
+ codePages[1] |= (findf(0x0405) & graph) << 25; // 855 IBM Cyrillic
+ break;
+ case 0x0386:
+ codePages[0] |= 1 << 3; // 1253 Greek
+ codePages[1] |= (findf(0x00BD) & graph) << 16; // 869 IBM Greek
+ codePages[1] |= (graph & radic) << 28; // 737 Greek; former 437 G
+ break;
+ case 0x0130:
+ codePages[0] |= (ascii) << 4; // 1254 Turkish
+ codePages[1] |= (ascii & graph) << 24; // 857 IBM Turkish
+ break;
+ case 0x05D0:
+ codePages[0] |= 1 << 5; // 1255 Hebrew
+ codePages[1] |= (graph & radic) << 21; // 862 Hebrew
+ break;
+ case 0x0631:
+ codePages[0] |= 1 << 6; // 1256 Arabic
+ codePages[1] |= (radic) << 19; // 864 Arabic
+ codePages[1] |= (graph) << 29; // 708 Arabic; ASMO 708
+ break;
+ case 0x0157:
+ codePages[0] |= (ascii) << 7; // 1257 Windows Baltic
+ codePages[1] |= (ascii & graph) << 27; // 775 MS-DOS Baltic
+ break;
+ case 0x20AB:
+ codePages[0] |= 1 << 8; // 1258 Vietnamese
+ break;
+ case 0x0E45:
+ codePages[0] |= 1 << 16; // 874 Thai
+ break;
+ case 0x30A8:
+ codePages[0] |= 1 << 17; // 932 JIS/Japan
+ break;
+ case 0x3105:
+ codePages[0] |= 1 << 18; // 936 Chinese: Simplified chars
+ break;
+ case 0x3131:
+ codePages[0] |= 1 << 19; // 949 Korean Wansung
+ break;
+ case 0x592E:
+ codePages[0] |= 1 << 20; // 950 Chinese: Traditional chars
+ break;
+ case 0xACF4:
+ codePages[0] |= 1 << 21; // 1361 Korean Johab
+ break;
+ case 0x2030:
+ codePages[0] |= (findf(0x2211) & ascii) << 29; // Macintosh Character Set (Roman)
+ break;
+ case 0x2665:
+ codePages[0] |= (ascii) << 30; // OEM Character Set
+ break;
+ case 0x00C5:
+ codePages[1] |= (ascii & graph & radic) << 18; // 865 MS-DOS Nordic
+ break;
+ case 0x00E9:
+ codePages[1] |= (ascii & graph & radic) << 20; // 863 MS-DOS Canadian French
+ break;
+ case 0x00F5:
+ codePages[1] |= (ascii & graph & radic) << 23; // 860 MS-DOS Portuguese
+ break;
+ case 0x00FE:
+ codePages[1] |= (ascii & graph) << 22; // 861 MS-DOS Icelandic
+ break;
+ default :
+ if (char.code >= 0xF000 && char.code <= 0xF0FF) {
+ codePages[0] |= 1 << 31; // Symbol Character Set
+ }
+ break;
+ }
+ });
+
+ return [ codePages[0] >>> 0, codePages[1] >>> 0 ];
+}
+
+// -- containsRTL --
+const RTL_RANGES = [
+ [ 0x05BE, 0x05BE ],
+ [ 0x05C0, 0x05C0 ],
+ [ 0x05C3, 0x05C3 ],
+ [ 0x05C6, 0x05C6 ],
+ [ 0x05D0, 0x05EA ],
+ [ 0x05EF, 0x05F4 ],
+ [ 0x0608, 0x0608 ],
+ [ 0x060B, 0x060B ],
+ [ 0x060D, 0x060D ],
+ [ 0x061B, 0x061C ],
+ [ 0x061E, 0x064A ],
+ [ 0x066D, 0x066F ],
+ [ 0x0671, 0x06D5 ],
+ [ 0x06E5, 0x06E6 ],
+ [ 0x06EE, 0x06EF ],
+ [ 0x06FA, 0x070D ],
+ [ 0x070F, 0x0710 ],
+ [ 0x0712, 0x072F ],
+ [ 0x074D, 0x07A5 ],
+ [ 0x07B1, 0x07B1 ],
+ [ 0x07C0, 0x07EA ],
+ [ 0x07F4, 0x07F5 ],
+ [ 0x07FA, 0x07FA ],
+ [ 0x07FE, 0x0815 ],
+ [ 0x081A, 0x081A ],
+ [ 0x0824, 0x0824 ],
+ [ 0x0828, 0x0828 ],
+ [ 0x0830, 0x083E ],
+ [ 0x0840, 0x0858 ],
+ [ 0x085E, 0x085E ],
+ [ 0x0860, 0x086A ],
+ [ 0x08A0, 0x08B4 ],
+ [ 0x08B6, 0x08BD ],
+ [ 0x200F, 0x200F ],
+ [ 0x202B, 0x202B ],
+ [ 0x202E, 0x202E ],
+ [ 0xFB1D, 0xFB1D ],
+ [ 0xFB1F, 0xFB28 ],
+ [ 0xFB2A, 0xFB36 ],
+ [ 0xFB38, 0xFB3C ],
+ [ 0xFB3E, 0xFB3E ],
+ [ 0xFB40, 0xFB41 ],
+ [ 0xFB43, 0xFB44 ],
+ [ 0xFB46, 0xFBC1 ],
+ [ 0xFBD3, 0xFD3D ],
+ [ 0xFD50, 0xFD8F ],
+ [ 0xFD92, 0xFDC7 ],
+ [ 0xFDF0, 0xFDFC ],
+ [ 0xFE70, 0xFE74 ],
+ [ 0xFE76, 0xFEFC ],
+ [ 0x10800, 0x10FFF ],
+ [ 0x1E800, 0x1EFFF ],
+ [ -1, 0 ]
+];
+
+function containsRTL(font) {
+ let index = 0;
+
+ for (let char of font.chars) {
+ while (char.code > RTL_RANGES[index][1]) {
+ if (RTL_RANGES[++index][0] === -1) {
+ break;
+ }
+ }
+ if (char.code >= RTL_RANGES[index][0]) {
+ return 0x200;
+ }
+ }
+ return 0x000;
+}
+
+// -- postMacIndex --
+const POST_MAC_NAMES = [
+ '.notdef',
+ '.null',
+ 'nonmarkingreturn',
+ 'space',
+ 'exclam',
+ 'quotedbl',
+ 'numbersign',
+ 'dollar',
+ 'percent',
+ 'ampersand',
+ 'quotesingle',
+ 'parenleft',
+ 'parenright',
+ 'asterisk',
+ 'plus',
+ 'comma',
+ 'hyphen',
+ 'period',
+ 'slash',
+ 'zero',
+ 'one',
+ 'two',
+ 'three',
+ 'four',
+ 'five',
+ 'six',
+ 'seven',
+ 'eight',
+ 'nine',
+ 'colon',
+ 'semicolon',
+ 'less',
+ 'equal',
+ 'greater',
+ 'question',
+ 'at',
+ 'A',
+ 'B',
+ 'C',
+ 'D',
+ 'E',
+ 'F',
+ 'G',
+ 'H',
+ 'I',
+ 'J',
+ 'K',
+ 'L',
+ 'M',
+ 'N',
+ 'O',
+ 'P',
+ 'Q',
+ 'R',
+ 'S',
+ 'T',
+ 'U',
+ 'V',
+ 'W',
+ 'X',
+ 'Y',
+ 'Z',
+ 'bracketleft',
+ 'backslash',
+ 'bracketright',
+ 'asciicircum',
+ 'underscore',
+ 'grave',
+ 'a',
+ 'b',
+ 'c',
+ 'd',
+ 'e',
+ 'f',
+ 'g',
+ 'h',
+ 'i',
+ 'j',
+ 'k',
+ 'l',
+ 'm',
+ 'n',
+ 'o',
+ 'p',
+ 'q',
+ 'r',
+ 's',
+ 't',
+ 'u',
+ 'v',
+ 'w',
+ 'x',
+ 'y',
+ 'z',
+ 'braceleft',
+ 'bar',
+ 'braceright',
+ 'asciitilde',
+ 'Adieresis',
+ 'Aring',
+ 'Ccedilla',
+ 'Eacute',
+ 'Ntilde',
+ 'Odieresis',
+ 'Udieresis',
+ 'aacute',
+ 'agrave',
+ 'acircumflex',
+ 'adieresis',
+ 'atilde',
+ 'aring',
+ 'ccedilla',
+ 'eacute',
+ 'egrave',
+ 'ecircumflex',
+ 'edieresis',
+ 'iacute',
+ 'igrave',
+ 'icircumflex',
+ 'idieresis',
+ 'ntilde',
+ 'oacute',
+ 'ograve',
+ 'ocircumflex',
+ 'odieresis',
+ 'otilde',
+ 'uacute',
+ 'ugrave',
+ 'ucircumflex',
+ 'udieresis',
+ 'dagger',
+ 'degree',
+ 'cent',
+ 'sterling',
+ 'section',
+ 'bullet',
+ 'paragraph',
+ 'germandbls',
+ 'registered',
+ 'copyright',
+ 'trademark',
+ 'acute',
+ 'dieresis',
+ 'notequal',
+ 'AE',
+ 'Oslash',
+ 'infinity',
+ 'plusminus',
+ 'lessequal',
+ 'greaterequal',
+ 'yen',
+ 'mu',
+ 'partialdiff',
+ 'summation',
+ 'product',
+ 'pi',
+ 'integral',
+ 'ordfeminine',
+ 'ordmasculine',
+ 'Omega',
+ 'ae',
+ 'oslash',
+ 'questiondown',
+ 'exclamdown',
+ 'logicalnot',
+ 'radical',
+ 'florin',
+ 'approxequal',
+ 'Delta',
+ 'guillemotleft',
+ 'guillemotright',
+ 'ellipsis',
+ 'nonbreakingspace',
+ 'Agrave',
+ 'Atilde',
+ 'Otilde',
+ 'OE',
+ 'oe',
+ 'endash',
+ 'emdash',
+ 'quotedblleft',
+ 'quotedblright',
+ 'quoteleft',
+ 'quoteright',
+ 'divide',
+ 'lozenge',
+ 'ydieresis',
+ 'Ydieresis',
+ 'fraction',
+ 'currency',
+ 'guilsinglleft',
+ 'guilsinglright',
+ 'fi',
+ 'fl',
+ 'daggerdbl',
+ 'periodcentered',
+ 'quotesinglbase',
+ 'quotedblbase',
+ 'perthousand',
+ 'Acircumflex',
+ 'Ecircumflex',
+ 'Aacute',
+ 'Edieresis',
+ 'Egrave',
+ 'Iacute',
+ 'Icircumflex',
+ 'Idieresis',
+ 'Igrave',
+ 'Oacute',
+ 'Ocircumflex',
+ 'apple',
+ 'Ograve',
+ 'Uacute',
+ 'Ucircumflex',
+ 'Ugrave',
+ 'dotlessi',
+ 'circumflex',
+ 'tilde',
+ 'macron',
+ 'breve',
+ 'dotaccent',
+ 'ring',
+ 'cedilla',
+ 'hungarumlaut',
+ 'ogonek',
+ 'caron',
+ 'Lslash',
+ 'lslash',
+ 'Scaron',
+ 'scaron',
+ 'Zcaron',
+ 'zcaron',
+ 'brokenbar',
+ 'Eth',
+ 'eth',
+ 'Yacute',
+ 'yacute',
+ 'Thorn',
+ 'thorn',
+ 'minus',
+ 'multiply',
+ 'onesuperior',
+ 'twosuperior',
+ 'threesuperior',
+ 'onehalf',
+ 'onequarter',
+ 'threequarters',
+ 'franc',
+ 'Gbreve',
+ 'gbreve',
+ 'Idotaccent',
+ 'Scedilla',
+ 'scedilla',
+ 'Cacute',
+ 'cacute',
+ 'Ccaron',
+ 'ccaron',
+ 'dcroat'
+];
+
+function postMacNames() {
+ return POST_MAC_NAMES.slice();
+}
+
+// -- Export --
+module.exports = Object.freeze({
+ xAvgCharWidth,
+ ulCharRanges,
+ ulCodePages,
+ containsRTL,
+ postMacNames
+});