334 lines
7.3 KiB
JavaScript
334 lines
7.3 KiB
JavaScript
import { Joining, AnyCv, TieMark, Nwid, Wwid } from "../../support/gr.mjs";
|
|
|
|
const ApplePostNames = new Map([
|
|
/* spell-checker: disable */
|
|
[0xd, "nonmarkingreturn"],
|
|
[0x20, "space"],
|
|
[0x21, "exclam"],
|
|
[0x22, "quotedbl"],
|
|
[0x23, "numbersign"],
|
|
[0x24, "dollar"],
|
|
[0x25, "percent"],
|
|
[0x26, "ampersand"],
|
|
[0x27, "quotesingle"],
|
|
[0x28, "parenleft"],
|
|
[0x29, "parenright"],
|
|
[0x2a, "asterisk"],
|
|
[0x2b, "plus"],
|
|
[0x2c, "comma"],
|
|
[0x2d, "hyphen"],
|
|
[0x2e, "period"],
|
|
[0x2f, "slash"],
|
|
[0x30, "zero"],
|
|
[0x31, "one"],
|
|
[0x32, "two"],
|
|
[0x33, "three"],
|
|
[0x34, "four"],
|
|
[0x35, "five"],
|
|
[0x36, "six"],
|
|
[0x37, "seven"],
|
|
[0x38, "eight"],
|
|
[0x39, "nine"],
|
|
[0x3a, "colon"],
|
|
[0x3b, "semicolon"],
|
|
[0x3c, "less"],
|
|
[0x3d, "equal"],
|
|
[0x3e, "greater"],
|
|
[0x3f, "question"],
|
|
[0x40, "at"],
|
|
[0x41, "A"],
|
|
[0x42, "B"],
|
|
[0x43, "C"],
|
|
[0x44, "D"],
|
|
[0x45, "E"],
|
|
[0x46, "F"],
|
|
[0x47, "G"],
|
|
[0x48, "H"],
|
|
[0x49, "I"],
|
|
[0x4a, "J"],
|
|
[0x4b, "K"],
|
|
[0x4c, "L"],
|
|
[0x4d, "M"],
|
|
[0x4e, "N"],
|
|
[0x4f, "O"],
|
|
[0x50, "P"],
|
|
[0x51, "Q"],
|
|
[0x52, "R"],
|
|
[0x53, "S"],
|
|
[0x54, "T"],
|
|
[0x55, "U"],
|
|
[0x56, "V"],
|
|
[0x57, "W"],
|
|
[0x58, "X"],
|
|
[0x59, "Y"],
|
|
[0x5a, "Z"],
|
|
[0x5b, "bracketleft"],
|
|
[0x5c, "backslash"],
|
|
[0x5d, "bracketright"],
|
|
[0x5e, "asciicircum"],
|
|
[0x5f, "underscore"],
|
|
[0x60, "grave"],
|
|
[0x61, "a"],
|
|
[0x62, "b"],
|
|
[0x63, "c"],
|
|
[0x64, "d"],
|
|
[0x65, "e"],
|
|
[0x66, "f"],
|
|
[0x67, "g"],
|
|
[0x68, "h"],
|
|
[0x69, "i"],
|
|
[0x6a, "j"],
|
|
[0x6b, "k"],
|
|
[0x6c, "l"],
|
|
[0x6d, "m"],
|
|
[0x6e, "n"],
|
|
[0x6f, "o"],
|
|
[0x70, "p"],
|
|
[0x71, "q"],
|
|
[0x72, "r"],
|
|
[0x73, "s"],
|
|
[0x74, "t"],
|
|
[0x75, "u"],
|
|
[0x76, "v"],
|
|
[0x77, "w"],
|
|
[0x78, "x"],
|
|
[0x79, "y"],
|
|
[0x7a, "z"],
|
|
[0x7b, "braceleft"],
|
|
[0x7c, "bar"],
|
|
[0x7d, "braceright"],
|
|
[0x7e, "asciitilde"],
|
|
[0xc4, "Adieresis"],
|
|
[0xc5, "Aring"],
|
|
[0xc7, "Ccedilla"],
|
|
[0xc9, "Eacute"],
|
|
[0xd1, "Ntilde"],
|
|
[0xd6, "Odieresis"],
|
|
[0xdc, "Udieresis"],
|
|
[0xe1, "aacute"],
|
|
[0xe0, "agrave"],
|
|
[0xe2, "acircumflex"],
|
|
[0xe4, "adieresis"],
|
|
[0xe3, "atilde"],
|
|
[0xe5, "aring"],
|
|
[0xe7, "ccedilla"],
|
|
[0xe9, "eacute"],
|
|
[0xe8, "egrave"],
|
|
[0xea, "ecircumflex"],
|
|
[0xeb, "edieresis"],
|
|
[0xed, "iacute"],
|
|
[0xec, "igrave"],
|
|
[0xee, "icircumflex"],
|
|
[0xef, "idieresis"],
|
|
[0xf1, "ntilde"],
|
|
[0xf3, "oacute"],
|
|
[0xf2, "ograve"],
|
|
[0xf4, "ocircumflex"],
|
|
[0xf6, "odieresis"],
|
|
[0xf5, "otilde"],
|
|
[0xfa, "uacute"],
|
|
[0xf9, "ugrave"],
|
|
[0xfb, "ucircumflex"],
|
|
[0xfc, "udieresis"],
|
|
[0x2020, "dagger"],
|
|
[0xb0, "degree"],
|
|
[0xa2, "cent"],
|
|
[0xa3, "sterling"],
|
|
[0xa7, "section"],
|
|
[0x2022, "bullet"],
|
|
[0xb6, "paragraph"],
|
|
[0xdf, "germandbls"],
|
|
[0xae, "registered"],
|
|
[0xa9, "copyright"],
|
|
[0x2122, "trademark"],
|
|
[0xb4, "acute"],
|
|
[0xa8, "dieresis"],
|
|
[0x2260, "notequal"],
|
|
[0xc6, "AE"],
|
|
[0xd8, "Oslash"],
|
|
[0x221e, "infinity"],
|
|
[0xb1, "plusminus"],
|
|
[0x2264, "lessequal"],
|
|
[0x2265, "greaterequal"],
|
|
[0xa5, "yen"],
|
|
[0xb5, "mu"],
|
|
[0x2202, "partialdiff"],
|
|
[0x2211, "summation"],
|
|
[0x220f, "product"],
|
|
[0x3c0, "pi"],
|
|
[0x222b, "integral"],
|
|
[0xaa, "ordfeminine"],
|
|
[0xba, "ordmasculine"],
|
|
[0x2126, "Omega"],
|
|
[0xe6, "ae"],
|
|
[0xf8, "oslash"],
|
|
[0xbf, "questiondown"],
|
|
[0xa1, "exclamdown"],
|
|
[0xac, "logicalnot"],
|
|
[0x221a, "radical"],
|
|
[0x192, "florin"],
|
|
[0x2248, "approxequal"],
|
|
[0x2206, "Delta"],
|
|
[0xab, "guillemotleft"],
|
|
[0xbb, "guillemotright"],
|
|
[0x2026, "ellipsis"],
|
|
[0xa0, "nonbreakingspace"],
|
|
[0xc0, "Agrave"],
|
|
[0xc3, "Atilde"],
|
|
[0xd5, "Otilde"],
|
|
[0x152, "OE"],
|
|
[0x153, "oe"],
|
|
[0x2013, "endash"],
|
|
[0x2014, "emdash"],
|
|
[0x201c, "quotedblleft"],
|
|
[0x201d, "quotedblright"],
|
|
[0x2018, "quoteleft"],
|
|
[0x2019, "quoteright"],
|
|
[0xf7, "divide"],
|
|
[0x25ca, "lozenge"],
|
|
[0xff, "ydieresis"],
|
|
[0x178, "Ydieresis"],
|
|
[0x2044, "fraction"],
|
|
[0xa4, "currency"],
|
|
[0x2039, "guilsinglleft"],
|
|
[0x203a, "guilsinglright"],
|
|
[0xfb01, "fi"],
|
|
[0xfb02, "fl"],
|
|
[0x2021, "daggerdbl"],
|
|
[0xb7, "periodcentered"],
|
|
[0x201a, "quotesinglbase"],
|
|
[0x201e, "quotedblbase"],
|
|
[0x2030, "perthousand"],
|
|
[0xc2, "Acircumflex"],
|
|
[0xca, "Ecircumflex"],
|
|
[0xc1, "Aacute"],
|
|
[0xcb, "Edieresis"],
|
|
[0xc8, "Egrave"],
|
|
[0xcd, "Iacute"],
|
|
[0xce, "Icircumflex"],
|
|
[0xcf, "Idieresis"],
|
|
[0xcc, "Igrave"],
|
|
[0xd3, "Oacute"],
|
|
[0xd4, "Ocircumflex"],
|
|
[0xf8ff, "apple"],
|
|
[0xd2, "Ograve"],
|
|
[0xda, "Uacute"],
|
|
[0xdb, "Ucircumflex"],
|
|
[0xd9, "Ugrave"],
|
|
[0x131, "dotlessi"],
|
|
[0x2c6, "circumflex"],
|
|
[0x2dc, "tilde"],
|
|
[0xaf, "macron"],
|
|
[0x2d8, "breve"],
|
|
[0x2d9, "dotaccent"],
|
|
[0x2da, "ring"],
|
|
[0xb8, "cedilla"],
|
|
[0x2dd, "hungarumlaut"],
|
|
[0x2db, "ogonek"],
|
|
[0x2c7, "caron"],
|
|
[0x141, "Lslash"],
|
|
[0x142, "lslash"],
|
|
[0x160, "Scaron"],
|
|
[0x161, "scaron"],
|
|
[0x17d, "Zcaron"],
|
|
[0x17e, "zcaron"],
|
|
[0xa6, "brokenbar"],
|
|
[0xd0, "Eth"],
|
|
[0xf0, "eth"],
|
|
[0xdd, "Yacute"],
|
|
[0xfd, "yacute"],
|
|
[0xde, "Thorn"],
|
|
[0xfe, "thorn"],
|
|
[0x2212, "minus"],
|
|
[0xd7, "multiply"],
|
|
[0xb9, "onesuperior"],
|
|
[0xb2, "twosuperior"],
|
|
[0xb3, "threesuperior"],
|
|
[0xbd, "onehalf"],
|
|
[0xbc, "onequarter"],
|
|
[0xbe, "threequarters"],
|
|
[0x20a3, "franc"],
|
|
[0x11e, "Gbreve"],
|
|
[0x11f, "gbreve"],
|
|
[0x130, "Idotaccent"],
|
|
[0x15e, "Scedilla"],
|
|
[0x15f, "scedilla"],
|
|
[0x106, "Cacute"],
|
|
[0x107, "cacute"],
|
|
[0x10c, "Ccaron"],
|
|
[0x10d, "ccaron"],
|
|
[0x111, "dcroat"]
|
|
/* spell-checker: enable */
|
|
]);
|
|
function byCode(gSrc, primaryUnicode, conflictSet) {
|
|
if (gSrc.glyphRank === 9999) return ".notdef";
|
|
if (gSrc.glyphRank === 9998) return ".null";
|
|
let preferredName = null;
|
|
if (primaryUnicode) {
|
|
preferredName =
|
|
ApplePostNames.get(primaryUnicode) || `u${formatCodePointHex(primaryUnicode)}`;
|
|
}
|
|
if (preferredName && !conflictSet.has(preferredName)) {
|
|
conflictSet.add(preferredName);
|
|
}
|
|
return preferredName;
|
|
}
|
|
function formatCodePointHex(u) {
|
|
return u.toString(16).padStart(4, "0").toUpperCase();
|
|
}
|
|
function bySpacing(gSrcBase, gOtBase, internalNameMap, conflictSet) {
|
|
if (!gOtBase.name) return 0;
|
|
let n = 0;
|
|
n += nameByPairGr(Nwid, Wwid, "NWID", "WWID", gSrcBase, gOtBase, internalNameMap, conflictSet);
|
|
n += nameByPairGr(Wwid, Nwid, "WWID", "NWID", gSrcBase, gOtBase, internalNameMap, conflictSet);
|
|
return n;
|
|
}
|
|
function byGr(gSrcBase, gOtBase, internalNameMap, conflictSet) {
|
|
if (!gOtBase.name) return 0;
|
|
let n = 0;
|
|
for (const cv of AnyCv.query(gSrcBase)) {
|
|
n += nameByGr(cv, gSrcBase, gOtBase, internalNameMap, conflictSet);
|
|
}
|
|
if (TieMark.get(gSrcBase)) {
|
|
n += nameByGr(TieMark, gSrcBase, gOtBase, internalNameMap, conflictSet);
|
|
}
|
|
return n;
|
|
}
|
|
function nameByPairGr(grCis, grTrans, tagCis, tagTrans, gSrcBase, gOtBase, nm, conflictSet) {
|
|
const gnDst = grCis.get(gSrcBase);
|
|
if (!gnDst) return 0;
|
|
const gOtDst = nm.get(gnDst);
|
|
if (!gOtDst || gOtDst.name) return 0;
|
|
const nameS = gOtBase.name + "." + tagTrans;
|
|
const nameT = gOtBase.name + "." + tagCis;
|
|
if (!conflictSet.has(nameS) && !conflictSet.has(nameT)) {
|
|
conflictSet.add(nameS);
|
|
conflictSet.add(nameT);
|
|
gOtBase.name = nameS;
|
|
gOtDst.name = nameT;
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
function nameByGr(gr, gSrcBase, gOtBase, internalNameMap, conflictSet) {
|
|
const gnDst = gr.get(gSrcBase);
|
|
if (!gnDst) return 0;
|
|
const gOtDst = internalNameMap.get(gnDst);
|
|
if (!gOtDst || gOtDst.name) return 0;
|
|
const nameT = gr.amendOtName(gOtBase.name);
|
|
if (!conflictSet.has(nameT)) {
|
|
conflictSet.add(nameT);
|
|
gOtDst.name = nameT;
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
function byBuildOrder(rank, gSrc, gnOrig) {
|
|
if (!gnOrig) gnOrig = `.g${rank}`;
|
|
gnOrig = Joining.amendOtName(gnOrig, Joining.get(gSrc));
|
|
return gnOrig;
|
|
}
|
|
export { byCode };
|
|
export { bySpacing };
|
|
export { byGr };
|
|
export { byBuildOrder };
|