Files
ALC27/mathjax-fira-font/def/mathjax-fira.ts
2025-12-22 12:20:15 +08:00

625 lines
23 KiB
TypeScript

import {CHARSET, CHARS} from '@mathjax/font-tools/js/CharMap.js';
import {Font, FontData, GlyphNames} from '@mathjax/font-tools/js/Font.js';
import {Variants} from '@mathjax/font-tools/js/Variant.js';
import {Delimiters} from '@mathjax/font-tools/js/Delimiters.js';
import {CommonFont, FontDef} from '@mathjax/font-tools/js/CommonFont.js';
import {RANGES, Ranges} from '@mathjax/font-tools/js/Ranges.js';
import {SVGFont} from '@mathjax/font-tools/js/SVGFont.js';
import {CHTMLFont} from '@mathjax/font-tools/js/CHTMLFont.js';
import {Components} from '@mathjax/font-tools/js/Components.js';
/***********************************************************************************/
try {
//
// Name-to-Unicode mapping needed for text fonts
//
const charNames: GlyphNames = [
['f_f', 0xFB00], ['f_f_i', 0xFB03], ['f_f_l', 0xFB04]
];
const charOptions: FontData = {
charNames,
ignore: /^\.notdef$|\.(?:sc|locl|case|tf|tosf|dnom|numr)|_short$|^f_[il]$/,
autoPUA: 0xE100
};
Font.load({
'FIRA-M': ['fonts/FiraMath-Regular.otf', {}],
'FIRA-R': ['fonts/FiraSans-Regular.otf', charOptions],
'FIRA-B': ['fonts/FiraSans-Bold.otf', charOptions],
'FIRA-I': ['fonts/FiraSans-Italic.otf', charOptions],
'FIRA-BI': ['fonts/FiraSans-BoldItalic.otf', charOptions],
'FIRA-T': ['fonts/FiraMono-Regular.otf', charOptions],
'CAL-R': ['../subsets/CM-Calligraphic-Regular.otf', {}],
'CAL-B': ['../subsets/CM-Calligraphic-Bold.otf', {}],
'SCR-R': ['../subsets/Asana-Script-Regular.otf', {}],
'SCR-B': ['../subsets/Asana-Script-Bold.otf', {}],
'FRK-R': ['../subsets/Euler-Fraktur-Regular.otf', {}],
'FRK-B': ['../subsets/Euler-Fraktur-Bold.otf', {}],
'MM-D': ['../subsets/Modern-Delimiters-Regular.otf', {}],
});
Font.get('FIRA-M')
.addGlyph(Font.buildV('FIRA-M', [0x23AD, 0x23A7], 0x23B0, 'lmoustache', -500))
.addGlyph(Font.buildV('FIRA-M', [0x23A9, 0x23AB], 0x23B1, 'rmoustache', -500))
.addGlyph(Font.buildH('FIRA-M', [0x2190], 0x2190, 'uni2190.left', -120, 0, -120))
.addGlyph(Font.buildV('FIRA-R', [0x23FD], 0x2191, 'uni2191.ext', -10, 185, 185))
.addGlyph(Font.buildH('FIRA-M', [0x2192], 0x2192, 'uni2192.right', -120, 0, -120))
.addGlyph(Font.buildH('FIRA-M', [0x219E], 0x219E, 'uni219E.left', -120, 0, -120))
.addGlyph(Font.buildH('FIRA-M', [0x21A0], 0x21A0, 'uni21A0.right', -120, 0, -120))
.addGlyph(Font.buildH('FIRA-M', [0x21BC], 0x21BC, 'uni21BC.left', -110, 0, -120))
.addGlyph(Font.buildH('FIRA-M', [0x21BD], 0x21BD, 'uni21BD.left', -110, 0, -120))
.addGlyph(Font.buildH('FIRA-M', [0x21C0], 0x21C0, 'uni21C0.right', -120, 0, -110))
.addGlyph(Font.buildH('FIRA-M', [0x21C1], 0x21C1, 'uni21C1.right', -120, 0, -110))
.addGlyph(Font.buildV('FIRA-R', [0x23FD], 0x21A4, 'uni21A4.left', -10, -100, -100))
.addGlyph(Font.buildH('FIRA-M', [0x21D0], 0x21D0, 'uni21D0.left', -120, 0, -120))
.addGlyph(Font.buildH('FIRA-M', [0x003D], 0x21D0, 'uni21D0.ext', -62, 0, -62))
.addGlyph(Font.buildH('FIRA-M', [0x21D2], 0x21D2, 'uni21D2.right', -120, 0, -120))
.addGlyph(Font.buildH('FIRA-M', [0x21DA], 0x21DA, 'uni21DA.left', -120, 0, -120))
.addGlyph(Font.buildH('FIRA-M', [0x2261], 0x2261, 'uni2261.ext', -62, 0, -62))
.addGlyph(Font.buildH('FIRA-M', [0x21DB], 0x21DB, 'uni21DB.right', -120, 0, -120))
.addGlyph(Font.buildV('FIRA-M', [0x21BE], 0x294C, 'uni294C.top', 0, 172, 2))
.addGlyph(Font.buildV('FIRA-M', [0x21BF], 0x294D, 'uni294D.top', 0, 2, 172))
.addGlyph(Font.buildV('FIRA-M', [0x21C3], 0x294C, 'uni294C.bot', 0, 2, 172))
.addGlyph(Font.buildV('FIRA-M', [0x21C2], 0x294D, 'uni294D.bot', 0, 172, 2))
;
/***********************************************************************************/
const FiraVariants = Variants.define({
normal: [
['FIRA-M', [
CHARS.InRange(0x20, 0x2FFF, 'FIRA-M').minus(CHARS.Range(0x200C, 0x200F), CHARS.At(0x210A)),
CHARS.Range(0xFB00, 0xFB04),
CHARS.InRange(0x1D400, 0x1D7FF, 'FIRA-M'),
CHARS.At(0x1F784),
CHARS.Map({0x2C9: 0xAF}),
CHARS.MapFrom(0x41, CHARSET.MathSansSerifUC),
CHARS.MapFrom(0x61, CHARSET.MathSansSerifLC),
CHARS.MapFrom(0x1D400, CHARSET.MathBoldSansSerifUC),
CHARS.MapFrom(0x1D41A, CHARSET.MathBoldSansSerifLC),
CHARS.MapFrom(0x1D434, CHARSET.MathSansSerifItalicUC),
CHARS.MapFrom(0x1D44E, CHARS.Range(0x1D622, 0x1D628)).plus(
CHARS.Map({0x1D629: 0x210E}),
CHARS.MapFrom(0x1D456, CHARS.Range(0x1D62A, 0x1D63B))
),
CHARS.MapFrom(0x1D468, CHARSET.MathSansSerifBoldItalicUC),
CHARS.MapFrom(0x1D482, CHARSET.MathSansSerifBoldItalicLC),
CHARS.MapFrom(0x0391, CHARS.Range(0x1D756, 0x1D76E)).minus(CHARS.At(0x1D767)).plus(
CHARS.Map({0x1D767: 0x03F4, 0x1D76F: 0x2207, 0x1D789: 0x2202, 0x1D78A: 0x03F5,
0x1D78B: 0x03D1, 0x1D78C: 0x03F0, 0x1D78D: 0x03D5, 0x1D78E: 0x03F1, 0x1D78F: 0x03D6}),
CHARS.MapFrom(0x3B1, CHARS.Range(0x1D770, 0x1D788))
),
CHARS.MapFrom(0x1D6E2, CHARSET.MathGreekSansSerifItalic),
CHARS.MapFrom(0x30, CHARSET.MathNumbersSansSerif),
CHARS.MapFrom(0x1D7CE, CHARSET.MathNumbersSansSerifBold)
]], ['FIRA-R', [
CHARS.InRange(0xA780, 0xAB6F, 'FIRA-R'),
CHARS.Range(0xE100, 0xE103),
CHARS.InRange(0x20, 0x2FFF, 'FIRA-R').minus(CHARS.InRange(0x20, 0x2FFF, 'FIRA-M'))
]], ['FIRA-T', [
CHARS.MapFrom(0x30, CHARSET.MathNumbersMonospace)
]], ['SCR-R', [
CHARSET.MathScript
]], ['SCR-B', [
CHARSET.MathBoldScript
]], ['FRK-R', [
CHARSET.MathFraktur,
]], ['FRK-B', [
CHARSET.MathBoldFraktur,
]],
],
bold: ['FIRA-B', [
CHARS.InRange(0x20, 0x25FF, 'FIRA-B').minus(
CHARSET.Alpha, CHARSET.Numbers, CHARSET.Greek,
CHARS.Range(0x21E6, 0x21EA),
CHARS.At(0x210A, 0x2202, 0x2326, 0x2327, 0x2328, 0x232B, 0x23CE),
CHARS.Range(0x23FB, 0x23FF)
),
CHARS.At(0x2981),
CHARS.InRange(0x2C60, 0x2C7F, 'FIRA-B'),
CHARS.Range(0xE100, 0xE103),
CHARS.Range(0xFB00, 0xFB04),
]],
italic: ['FIRA-I', [
CHARS.InRange(0x20, 0x22EF, 'FIRA-I').minus(
CHARSET.Alpha, CHARSET.Greek,
CHARS.At(0x210A, 0x2202),
CHARS.Range(0x21E6, 0x21EA)
),
CHARS.At(0x25CA),
CHARS.InRange(0x2C60, 0x2C7F, 'FIRA-I'),
CHARS.Range(0xE100, 0xE103),
CHARS.Range(0xFB00, 0xFB04),
]],
'bold-italic': ['FIRA-BI', [
CHARS.InRange(0x20, 0x22EF, 'FIRA-BI').minus(
CHARSET.Alpha, CHARSET.Greek,
CHARS.At(0x210A, 0x2202),
CHARS.Range(0x21E6, 0x21EA)
),
CHARS.At(0x25CA),
CHARS.InRange(0x2C60, 0x2C7F, 'FIRA-BI'),
CHARS.Range(0xE100, 0xE103),
CHARS.Range(0xFB00, 0xFB04),
]],
'sans-serif-italic': ['FIRA-I', [
CHARSET.Numbers
]],
'sans-serif-bold-italic': ['FIRA-BI', [
CHARSET.Numbers
]],
monospace: ['FIRA-T', [
CHARS.InRange(0x20, 0x22EF, 'FIRA-T').minus(
CHARSET.Alpha, CHARSET.Numbers,
CHARS.At(0x210A, 0x2202),
CHARS.Range(0x21E6, 0x21EA)
),
CHARS.At(0x25CA, 0xFB01, 0xFB02),
CHARS.InRange(0x2C60, 0x2C7F, 'FIRA-T')
]],
'-smallop': [
['FIRA-M', [
CHARS.ForFeature('size1', 'FIRA-M'),
]],
['MM-D', [
CHARS.Map({0x2F: 0xE001, 0x5C: 0xE011, 0x302: 0xE021, 0x303: 0xE031})
]]
],
'-largeop': [
['FIRA-M', [
CHARS.ForFeature('size2', 'FIRA-M'),
CHARS.ForFeature('display', 'FIRA-M')
]],
['MM-D', [
CHARS.Map({0x2F: 0xE002, 0x5C: 0xE012, 0x302: 0xE022, 0x303: 0xE032})
]]
],
'-size3': [
['FIRA-M', [
CHARS.ForFeature('size3', 'FIRA-M')
]],
['MM-D', [
CHARS.Map({0x2F: 0xE003, 0x5C: 0xE013, 0x302: 0xE023, 0x303: 0xE033})
]]
],
'-size4': [
['FIRA-M', [
CHARS.ForFeature('size4', 'FIRA-M')
]],
['MM-D', [
CHARS.Map({0x2F: 0xE004, 0x5C: 0xE014, 0x302: 0xE024, 0x303: 0xE034})
]]
],
'-size5': [
['FIRA-M', [
CHARS.ForFeature('size5', 'FIRA-M')
]],
['MM-D', [
CHARS.Map({0x2F: 0xE005, 0x5C: 0xE015, 0x302: 0xE025, 0x303: 0xE035})
]]
],
'-size6': [
['FIRA-M', [
CHARS.ForFeature('size6', 'FIRA-M')
]],
['MM-D', [
CHARS.Map({0x2F: 0xE006, 0x5C: 0xE016, 0x302: 0xE026, 0x303: 0xE036})
]]
],
'-size7': [
['FIRA-M', [
CHARS.ForFeature('size7', 'FIRA-M')
]],
['MM-D', [
CHARS.Map({0x2F: 0xE007, 0x5C: 0xE017, 0x302: 0xE027, 0x303: 0xE037})
]]
],
'-size8': ['FIRA-M', [
CHARS.ForFeature('size8', 'FIRA-M')
]],
'-size9': ['FIRA-M', [
CHARS.ForFeature('size9', 'FIRA-M')
]],
'-size10': ['FIRA-M', [
CHARS.ForFeature('size10', 'FIRA-M')
]],
'-size11': ['FIRA-M', [
CHARS.ForFeature('size11', 'FIRA-M')
]],
'-size12': ['FIRA-M', [
CHARS.ForFeature('size12', 'FIRA-M')
]],
'-size13': ['FIRA-M', [
CHARS.ForFeature('size13', 'FIRA-M')
]],
'-size14': ['FIRA-M', [
CHARS.ForFeature('size14', 'FIRA-M')
]],
'-size15': ['FIRA-M', [
CHARS.ForFeature('size15', 'FIRA-M')
]],
'-tex-variant': ['FIRA-M', [
CHARS.Range(0x200C, 0x200F),
CHARS.ForFeature('ss02', 'FIRA-M'),
CHARS.ForFeature('ss03', 'FIRA-M'),
CHARS.ForFeature('ssty1', 'FIRA-M'),
CHARS.ForFeature('pnum', 'FIRA-M'),
CHARSET.PseudoScriptsMain,
CHARSET.PseudoScriptQuotes.feature('ssty1'),
]],
'-tex-mathit': ['FIRA-I', [
CHARSET.Alpha
]],
'-tex-oldstyle': ['FIRA-R', [
CHARSET.Numbers.feature('osf')
]],
'-tex-bold-oldstyle': ['FIRA-B', [
CHARSET.Numbers.feature('osf')
]],
'-tex-calligraphic': ['CAL-R', [
CHARSET.AlphaUC,
]],
'-tex-bold-calligraphic': ['CAL-B', [
CHARSET.AlphaUC,
]],
'-lf-tp': ['FIRA-M', [
CHARS.ForFeature('left', 'FIRA-M'),
CHARS.ForFeature('top', 'FIRA-M')
]],
'-rt-bt': ['FIRA-M', [
CHARS.ForFeature('right', 'FIRA-M'),
CHARS.ForFeature('bot', 'FIRA-M')
]],
'-ext': [
['FIRA-M', [
CHARS.ForFeature('ext', 'FIRA-M'),
CHARS.Map({0x2190: 0x2212, 0x21A4: 0x2212})
]]
],
'-mid': ['FIRA-M', [
CHARS.ForFeature('mid', 'FIRA-M')
]],
'-up': ['FIRA-M', [
CHARS.ForFeature('up', 'FIRA-M')
]],
'-dup': ['FIRA-M', [
CHARS.ForFeature('display.up', 'FIRA-M')
]]
}, {
spaces: {
normal: {
0x2000: .5,
0x2001: 1,
0x2002: .5,
0x2003: 1,
0x2004: .3333,
0x2005: .25,
0x2006: .1667,
0x2009: .2,
0x200A: .1,
0x200C: 0,
0x200D: 0,
0x202F: .2,
0x205F: .222,
0x2060: 0,
0x2061: 0,
0x2062: 0,
0x2063: 0,
0x2064: 0,
}
},
transferHD: [
[0x2212, 0x002B] // make minus the same height/depth as plus
],
fixIC: [
['-largeop', .3, CHARS.At(0x222B, 0x222C, 0x222D, 0x2A0C)], // adjust integral italic correction
['-largeop', .15, CHARS.At(0x222E, 0x222F, 0x2230)],
['normal', .11, CHARS.At(0x222B, 0x222C, 0x222D)]
]
});
/***********************************************************************************/
const FiraDelimiters = Delimiters.define({
font: 'FIRA-M',
variants: FiraVariants,
sizeVariants: ['normal'],
stretchVariants: ['normal'],
readMathTable: true,
add: {
0x002F: {dir: 'V', sizes: 7},
0x003D: {dir: 'H', sizes: 1, parts: [0, 0x003D]},
0x005C: {dir: 'V', sizes: 7},
0x005F: {dir: 'H', sizes: 1, parts: [0, 0x005F]},
0x00AF: {dir: 'H', sizes: 1, parts: [0, 0x00AF]},
0x0302: {dir: 'H', sizes: 7},
0x0303: {dir: 'H', sizes: 7},
0x0305: {dir: 'H', sizes: 1, parts: [0, 0x0305]},
0x0332: {dir: 'H', sizes: 1, parts: [0, 0x0332]},
0x2013: {dir: 'H', parts: [0, 0x2013]},
0x2014: {dir: 'H', parts: [0, 0x2014]},
0x2015: {dir: 'H', parts: [0, 0x2015]},
0x2017: {dir: 'H', parts: [0, 0x2015]},
0x2190: {dir: 'H', sizes: 1, parts: [[0x2190, '-lf-tp'], 0x2212]},
0x2191: {dir: 'V', sizes: 1, parts: [0x2191, [0x2191, '-ext']]},
0x2192: {dir: 'H', sizes: 1, parts: [0, 0x2212, [0x2192, '-rt-bt']]},
0x2193: {dir: 'V', sizes: 1, parts: [0, [0x2191, '-ext'], 0x2193]},
0x2194: {dir: 'H', sizes: 1, parts: [[0x2190, '-lf-tp'], 0x2212, [0x2192, '-rt-bt']]},
0x2195: {dir: 'V', sizes: 1, parts: [0x2191, [0x2191, '-ext'], 0x2193]},
0x219E: {dir: 'H', sizes: 1, parts: [[0x219E, '-lf-tp'], [0x2190, '-ext']]},
0x21A0: {dir: 'H', sizes: 1, parts: [0, [0x2190, '-ext'], [0x21A0, '-rt-bt']]},
0x21A4: {dir: 'H', sizes: 1, parts: [[0x2190, '-lf-tp'], [0x21A4, '-ext'], [0x21A4, '-lf-tp']]},
0x21A5: {dir: 'V', sizes: 1, parts: [0x2191, [0x2191, '-ext'], 0x005F]},
0x21A6: {dir: 'H', sizes: 1, parts: [[0x21A4, '-lf-tp'], [0x21A4, '-ext'], [0x2192, '-rt-bt']]},
0x21A7: {dir: 'V', sizes: 1, parts: [0x005F, [0x2191, '-ext'], 0x2193]},
0x21BC: {dir: 'H', sizes: 1, parts: [[0x21BC, '-lf-tp'], [0x2190, '-ext']]},
0x21BD: {dir: 'H', sizes: 1, parts: [[0x21BD, '-lf-tp'], [0x2190, '-ext']]},
0x21BE: {dir: 'V', sizes: 1, parts: [[0x294C, '-lf-tp'], [0x2191, '-ext']]},
0x21BF: {dir: 'V', sizes: 1, parts: [[0x294D, '-lf-tp'], [0x2191, '-ext']]},
0x21C0: {dir: 'H', sizes: 1, parts: [0, [0x2190, '-ext'], [0x21C0, '-rt-bt']]},
0x21C1: {dir: 'H', sizes: 1, parts: [0, [0x2190, '-ext'], [0x21C1, '-rt-bt']]},
0x21C2: {dir: 'V', sizes: 1, parts: [0, [0x2191, '-ext'], [0x294D, '-rt-bt']]},
0x21C3: {dir: 'V', sizes: 1, parts: [0, [0x2191, '-ext'], [0x294C, '-rt-bt']]},
0x21D0: {dir: 'H', sizes: 1, parts: [[0x21D0, '-lf-tp'], [0x21D0, '-ext']]},
0x21D1: {dir: 'V', sizes: 1, parts: [0x21D1, 0x2016]},
0x21D2: {dir: 'H', sizes: 1, parts: [0, [0x21D0, '-ext'], [0x21D2, '-rt-bt']]},
0x21D3: {dir: 'V', sizes: 1, parts: [0, 0x2016, 0x21D3]},
0x21D4: {dir: 'H', sizes: 1, parts: [[0x21D0, '-lf-tp'], [0x21D0, '-ext'], [0x21D2, '-rt-bt']]},
0x21D5: {dir: 'V', sizes: 1, parts: [0x21D1, 0x2016, 0x21D3]},
0x21DA: {dir: 'H', sizes: 1, parts: [[0x21DA, '-lf-tp'], [0x2261, '-ext']]},
0x21DB: {dir: 'H', sizes: 1, parts: [0, [0x2261, '-ext'], [0x21DB, '-rt-bt']]},
0x2212: {dir: 'H', parts: [0, 0x2212]},
0x2223: {dir: 'V', sizes: 1, parts: [0, 0x2223]},
0x2225: {dir: 'V', sizes: 1, parts: [0, 0x2225]},
0x2261: {dir: 'H', parts: [0, 0x2261]},
0x2263: {dir: 'H', parts: [0, 0x2263]},
0x23AA: {dir: 'V', sizes: 1, parts: [0, 0x23AA, 0]},
0x23AF: {dir: 'H', parts: [0, 0x2013]},
0x23B0: {dir: 'V', sizes: 1, parts: [0x23A7, 0x23AA, 0x23AD]},
0x23B1: {dir: 'V', sizes: 1, parts: [0x23AB, 0x23AA, 0x23A9]},
0x23D0: {dir: 'V', sizes: 1, parts: [0, 0x2223], schar: [0x2223]},
0x23E0: {dir: 'H', sizes: 1, parts: [0x2CA, 0x2C9, 0x2CB]},
0x23E1: {dir: 'H', sizes: 1, parts: [0x2CB, 0x2C9, 0x2CA]},
0x2500: {dir: 'H', parts: [0, 0x2013]},
0x2758: {dir: 'V', sizes: 1, parts: [0, 0x2223], schar: [0x2223]},
0x27FB: {dir: 'H', sizes: 1, parts: [[0x2190, '-lf-tp'], [0x21A4, '-ext'], [0x21A4, '-lf-tp']]},
0x27FC: {dir: 'H', sizes: 1, parts: [[0x21A4, '-lf-tp'], [0x21A4, '-ext'], [0x2192, '-rt-bt']]},
0x27FD: {dir: 'H', sizes: 1, parts: [[0x21D0, '-lf-tp'], [0x21D0, '-ext'], [0x21A4, '-lf-tp']]},
0x27FE: {dir: 'H', sizes: 1, parts: [[0x21A4, '-lf-tp'], [0x21D0, '-ext'], [0x21D2, '-rt-bt']]},
0x2906: {dir: 'H', sizes: 1, parts: [[0x21D0, '-lf-tp'], [0x21D0, '-ext'], [0x21A4, '-lf-tp']]},
0x2907: {dir: 'H', sizes: 1, parts: [[0x21A4, '-lf-tp'], [0x21D0, '-ext'], [0x21D2, '-rt-bt']]},
0x294A: {dir: 'H', sizes: 1, parts: [[0x21BC, '-lf-tp'], [0x2190, '-ext'], [0x21C1, '-rt-bt']]},
0x294B: {dir: 'H', sizes: 1, parts: [[0x21BD, '-lf-tp'], [0x2190, '-ext'], [0x21C0, '-rt-bt']]},
0x294C: {dir: 'V', sizes: 1, parts: [[0x294C, '-lf-tp'], [0x2191, '-ext'], [0x294C, '-rt-bt']]},
0x294D: {dir: 'V', sizes: 1, parts: [[0x294D, '-lf-tp'], [0x2191, '-ext'], [0x294D, '-rt-bt']]},
0x294E: {dir: 'H', sizes: 1, parts: [[0x21BC, '-lf-tp'], [0x2190, '-ext'], [0x21C0, '-rt-bt']]},
0x294F: {dir: 'V', sizes: 1, parts: [[0x294C, '-lf-tp'], [0x2191, '-ext'], [0x294D, '-rt-bt']]},
0x2950: {dir: 'H', sizes: 1, parts: [[0x21BD, '-lf-tp'], [0x2190, '-ext'], [0x21C1, '-rt-bt']]},
0x2951: {dir: 'V', sizes: 1, parts: [[0x294D, '-lf-tp'], [0x2191, '-ext'], [0x294C, '-rt-bt']]},
0x295A: {dir: 'H', sizes: 1, parts: [[0x21BC, '-lf-tp'], [0x2190, '-ext'], [0x21A4, '-lf-tp']]},
0x295B: {dir: 'H', sizes: 1, parts: [[0x21A4, '-lf-tp'], [0x2190, '-ext'], [0x21C0, '-rt-bt']]},
0x295C: {dir: 'V', sizes: 1, parts: [[0x294C, '-lf-tp'], [0x2191, '-ext'], 0x005F]},
0x295D: {dir: 'V', sizes: 1, parts: [0x005F, [0x2191, '-ext'], [0x294D, '-rt-bt']]},
0x295E: {dir: 'H', sizes: 1, parts: [[0x21BD, '-lf-tp'], [0x2190, '-ext'], [0x21A4, '-lf-tp']]},
0x295F: {dir: 'H', sizes: 1, parts: [[0x21A4, '-lf-tp'], [0x2190, '-ext'], [0x21C1, '-rt-bt']]},
0x2960: {dir: 'V', sizes: 1, parts: [[0x294D, '-lf-tp'], [0x2191, '-ext'], 0x005F]},
0x2961: {dir: 'V', sizes: 1, parts: [0x005F, [0x2191, '-ext'], [0x294C, '-rt-bt']]},
},
alias: {
0x002D: 0x2212,
0x005E: 0x0302,
0x007E: 0x0303,
0x02C6: 0x0302,
0x02C9: 0x00AF,
0x02DC: 0x0303,
0x203E: 0x00AF,
0x20D7: 0x2192,
0x2215: 0x002F,
0x2312: 0x23DC,
0x2322: 0x23DC,
0x2323: 0x23DD,
0x2329: 0x27E8,
0x232A: 0x27E9,
0x27F5: 0x2190,
0x27F6: 0x2192,
0x27F7: 0x2194,
0x27F8: 0x21D0,
0x27F9: 0x21D2,
0x27FA: 0x21D4,
0x3008: 0x27E8,
0x3009: 0x27E9,
0xFE37: 0x23DE,
0xFE38: 0x23DF
}
});
/***********************************************************************************/
/***********************************************************************************/
/*
* Ranges to use for dynamically loaded files
*/
/**
* The monospace characters other than the ones in the AlphaNumerics block.
*/
const MONOSPACE: Ranges = [
[0x20, 0x2F], [0x3A, 0x40], [0x5B, 0x60], [0x7B, 0x7E],
0xA0, 0xA8, 0xB0, 0xB4, 0x131, 0x237,
[0x2C6, 0x2DC],
[0x300, 0x30C], [0x391, 0x3A9], [0x3B1, 0x3C9],
0x3D1, 0x3D2, 0x3D5, 0x3D6, 0x3F0, 0x3F1, 0x3F4, 0x3F5,
[0x2190, 0x2199], [0x2200, 0x2265], 0x23DE, 0x23DF, 0x25CA
];
/**
* Lesser-used symbols
*/
const MORE_SYMBOLS: Ranges = [
...RANGES.MORE_SYMBOLS, [0xE100, 0xE103]
];
/**
* Lesser-used geometric shapes
*/
const SHAPES: Ranges = [
...RANGES.SHAPES, 0x1F784
];
/**
* Math characters in bold and italic variants
*/
const MATH: Ranges = [
[0x2190, 0x2199],
0x2205, 0x2206, [0x220F, 0x22EF],
[0x25B0, 0x25C4], 0x25CA, 0x25CF, 0x2981
];
/***********************************************************************************/
const FiraData: FontDef = {
name: 'MathJaxFira',
prefix: 'FIRA',
variants: FiraVariants,
delimiters: FiraDelimiters,
variantFallbacks: {
'-tex-calligraphic': 'script',
'-tex-bold-calligraphic': 'bold-script'
},
parameters: {
surd_height: .075,
rule_thickness: .075
},
ranges: [
['latin', {LR: {normal: RANGES.LATIN}}],
['latin-b', {LB: {bold: RANGES.LATIN}}],
['latin-i', {LI: {italic: RANGES.LATIN}}],
['latin-bi', {LIB: {'bold-italic': RANGES.LATIN}}],
['latin-m', {LM: {monospace: RANGES.LATIN}}],
['greek', {
GR: {normal: RANGES.GREEK},
GRB: {bold: RANGES.GREEK},
GRI: {italic: RANGES.GREEK},
GRBI: {'bold-italic': RANGES.GREEK},
GRM: {monospace: RANGES.GREEK}
}],
['cyrillic', {
CY: {normal: RANGES.CYRILLIC},
CYB: {bold: RANGES.CYRILLIC},
CYI: {italic: RANGES.CYRILLIC},
CYBI: {'bold-italic': RANGES.CYRILLIC},
CYM: {monospace: RANGES.CYRILLIC}
}],
['phonetics', {
PH: {normal: RANGES.PHONETICS},
PHB: {bold: RANGES.PHONETICS},
PHI: {italic: RANGES.PHONETICS},
PHBI: {'bold-italic': RANGES.PHONETICS}
}],
['double-struck', {DS: {normal: RANGES.DOUBLESTRUCK}}, [0x2140]],
['fraktur', {F: {normal: RANGES.FRAKTUR_NORMAL}}],
['script', {S: {normal: RANGES.SCRIPT_NORMAL}}],
['sans-serif', {SS: {normal: RANGES.SANSSERIF}}],
['monospace', {
M: {
normal: RANGES.MONOSPACE,
monospace: MONOSPACE
}
}],
['calligraphic', {
C: {'-tex-calligraphic': RANGES.ALPHAUC},
CB: {'-tex-bold-calligraphic': RANGES.ALPHAUC}
}],
['symbols', {
SY: {normal: [...RANGES.SYMBOLS, [0xE100, 0xE103]]}
}],
['symbols-other', {
SYB: {bold: MORE_SYMBOLS},
SYI: {italic: MORE_SYMBOLS},
SYBI: {'bold-italic': MORE_SYMBOLS},
SYM: {monospace: MORE_SYMBOLS}
}],
['arrows', {
AR: {normal: RANGES.ARROWS}
}, [
0x21A5, 0x21A7, 0x2906, 0x2907, 0x294C, 0x294D, 0x294F,
0x2951, 0x295C, 0x295D, 0x2960, 0x2961
]],
['up-int', {
UP: {'-up': RANGES.INTEGRALS},
DUP: {'-dup': RANGES.INTEGRALS}
}],
['accents', {'': {normal: RANGES.ACCENTS}}, [0x332]],
['accents-other', {
'': {
bold: RANGES.ACCENTS,
italic: RANGES.ACCENTS,
'bold-italic': RANGES.ACCENTS,
monospace: RANGES.ACCENTS,
}
}],
['shapes', {
SH: {normal: SHAPES},
SHB: {bold: SHAPES},
SHI: {italic: SHAPES},
SHBI: {'bold-italic': SHAPES}
}],
['math-other', {
MXB: {bold: MATH},
MXI: {italic: MATH},
MXBI: {'bold-italic': MATH}
}],
['stretchy', {
'': {
normal: RANGES.PARTS,
'-smallop': RANGES.PARTS,
'-largeop': RANGES.PARTS,
'-size3': RANGES.PARTS,
'-size4': RANGES.PARTS,
'-size5': RANGES.PARTS,
'-size6': RANGES.PARTS,
'-size7': RANGES.PARTS,
'-size8': RANGES.PARTS,
'-size9': RANGES.PARTS,
'-size10': RANGES.PARTS,
'-size11': RANGES.PARTS,
'-size12': RANGES.PARTS,
'-size13': RANGES.PARTS,
'-size14': RANGES.PARTS,
'-size15': RANGES.PARTS,
'-lf-tp': RANGES.PARTS,
'-rt-bt': RANGES.PARTS,
'-ext': RANGES.PARTS
}
}, [
0x221B, 0x221C
]],
['variants', {
VX: {'-tex-variant': [[0x20, 0xFF], [0x200C, 0x200F], [0x2070, 0x209F]]}
}]
],
legal: {
addCopyright: 'Copyright (c) 2022 MathJax, Inc. (www.mathjax.org)'
}
};
/***********************************************************************************/
CommonFont.define(FiraData).writeFont();
Components.define('svg', FiraData).writeFont().writeComponent();
SVGFont.define(FiraData).writeFont();
Components.define('chtml', FiraData).writeFont().writeComponent();
CHTMLFont.define(FiraData).writeFont().makeWoffFonts('FIRA-M');
} catch(err) {
console.error(err);
process.exit(1);
}