import {CHARSET, CHARS} from '@mathjax/font-tools/js/CharMap.js'; import {Font} 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 {FontDef} from '@mathjax/font-tools/js/CommonFont.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'; import {FontData, SmpData} from '@mathjax/src/mjs/output/common/FontData.js'; import {GenericFont as GenericSVGFont} from '@mathjax/fonts/generic/mjs/svg.js'; import {GenericFont as GenericCHTMLFont} from '@mathjax/fonts/generic/mjs/chtml.js'; /***********************************************************************************/ try { const charNames = [['langle', 0x2329], ['rangle', 0x232A]] as [string, number][]; Font.load({ 'MB-bbx': ['fonts/BBOLDX-Regular.otf', {charNames}], 'MB-bbx-bold': ['fonts/BBOLDX-Bold.otf', {charNames}], 'MB-bbx-thin': ['fonts/BBOLDX-Thin.otf', {charNames}] }); /***********************************************************************************/ const MathJaxBboldxVariants = Variants.define({ '-bboldx': ['MB-bbx', [ CHARS.MapFrom(0x41, CHARSET.MathDoubleStruckUC), CHARS.MapFrom(0x61, CHARSET.MathDoubleStruckLC), CHARS.MapFrom(0x30, CHARSET.MathNumbersDoubleStruck), CHARSET.GreekLCbase.minus(CHARS.At(0x3BC, 0x3BF, 0x3C2)).plus(CHARS.Map({0x3BC: 0xB5})), // GreekUC CHARS.At(0x393, 0x398, 0x39B, 0x39E, 0x3A0, 0x3A3, 0x3A5, 0x3A6, 0x3A8), CHARS.Map({0x3A9: 0x2126, 0x394: 0x2206}), CHARS.At(0x21), // exclam CHARS.Range(0x23, 0x26), CHARS.Range(0x28, 0x2F), CHARS.Range(0x3A, 0x3C), CHARS.Range(0x3E, 0x40), CHARS.Range(0x5B, 0x5D), CHARS.At(0x7C), CHARS.At(0xAD), CHARS.At(0xB7), CHARS.At(0x131), CHARS.At(0x237), CHARS.At(0x2013, 0x2014), // em/en dashes CHARS.At(0x2018, 0x2019), // single quotes CHARS.At(0x201C, 0x201D), // double quotes CHARS.At(0x2329, 0x232A) // angle brackets ]], '-bboldx-bold': ['MB-bbx-bold', [ CHARS.MapFrom(0x41, CHARSET.MathDoubleStruckUC), CHARS.MapFrom(0x61, CHARSET.MathDoubleStruckLC), CHARS.MapFrom(0x30, CHARSET.MathNumbersDoubleStruck), CHARSET.GreekLCbase.minus(CHARS.At(0x3BC, 0x3BF, 0x3C2)).plus(CHARS.Map({0x3BC: 0xB5})), // GreekUC CHARS.At(0x393, 0x398, 0x39B, 0x39E, 0x3A0, 0x3A3, 0x3A5, 0x3A6, 0x3A8), CHARS.Map({0x3A9: 0x2126, 0x394: 0x2206}), CHARS.At(0x21), // exclam CHARS.Range(0x23, 0x26), CHARS.Range(0x28, 0x2F), CHARS.Range(0x3A, 0x3C), CHARS.Range(0x3E, 0x40), CHARS.Range(0x5B, 0x5D), CHARS.At(0x7C), CHARS.At(0xB7), CHARS.At(0x131), CHARS.At(0x237), CHARS.At(0x2013, 0x2014), // em/en dashes CHARS.At(0x2018, 0x2019), // single quotes CHARS.At(0x201C, 0x201D), // double quotes CHARS.At(0x2329, 0x232A), // angle brackets // CHARS.Map({0x2329: 0x5e, 0x232A: 0x5f}), ]], '-bboldx-light': ['MB-bbx-thin', [ CHARS.MapFrom(0x41, CHARSET.MathDoubleStruckUC), CHARS.MapFrom(0x61, CHARSET.MathDoubleStruckLC), CHARS.MapFrom(0x30, CHARSET.MathNumbersDoubleStruck), CHARSET.GreekLCbase.minus(CHARS.At(0x3BC, 0x3BF, 0x3C2)).plus(CHARS.Map({0x3BC: 0xB5})), // GreekUC CHARS.At(0x393, 0x398, 0x39B, 0x39E, 0x3A0, 0x3A3, 0x3A5, 0x3A6, 0x3A8), CHARS.Map({0x3A9: 0x2126, 0x394: 0x2206}), CHARS.At(0x21), // exclam CHARS.Range(0x23, 0x26), CHARS.Range(0x28, 0x2F), CHARS.Range(0x3A, 0x3C), CHARS.Range(0x3E, 0x40), CHARS.Range(0x5B, 0x5D), CHARS.At(0x7C), CHARS.At(0xB7), CHARS.At(0x131), CHARS.At(0x237), CHARS.At(0x2013, 0x2014), // em/en dashes CHARS.At(0x2018, 0x2019), // single quotes CHARS.At(0x201C, 0x201D), // double quotes CHARS.At(0x2329, 0x232A), // angle brackets // CHARS.Map({0x2329: 0x5e, 0x232A: 0x5f}), ]], }); /***********************************************************************************/ const MathJaxBboldxDelimiters = { font: 'MB-bbx', variants: MathJaxBboldxVariants, sizeVariants: ['normal'], stretchVariants: ['normal'], readMathTable: false, }; /***********************************************************************************/ const bboldxSmp = [0x1D538, 0x1D552, , , 0x1D7D8, { 0xB5: 0x3BC, 0x3BF: 0x1D560, // mu and omicron 0x2126: 0x3A9, 0x2206: 0x394, // Ohm and Delta operator // Greek UC 0x391: 0x1D538, 0x392: 0x1D539, 0x395: 0x1D53C, 0x396: 0x2124, 0x397: 0x210D, 0x399: 0x1D540, 0x39A: 0x1D542, 0x39C: 0x1D544, 0x39D: 0x2115, 0x39F: 0x1D546, 0x3A1: 0x2119, 0x3A4: 0x1D54B, 0x3A7: 0x1D54F, // Letter-like symbols 0x213C: 0x3C0, 0x213D: 0x3B3, 0x213E: 0x393, 0x213F: 0x3A0, 0x2140: 0x3A3 }] as SmpData; const MathJaxBboldxData: FontDef = { name: 'MathJaxBboldx', prefix: 'MB', variants: MathJaxBboldxVariants, delimiters: null, variantFallbacks: { '-bboldx': ['bold'], '-bboldx-bold': ['bold'], '-bboldx-light': ['bold'] }, variantSmp: { '-bboldx': bboldxSmp, '-bboldx-bold': bboldxSmp, '-bboldx-light': bboldxSmp } }; const MathJaxBboldxSVGData: FontDef = { ...MathJaxBboldxData, delimiters: Delimiters.define({ ...MathJaxBboldxDelimiters, extends: { fontClass: GenericSVGFont as typeof FontData, path: '@mathjax/fonts/generic/mjs/svg.js' }, }) }; const MathJaxBboldxCHTMLData: FontDef = { ...MathJaxBboldxData, delimiters: Delimiters.define({ ...MathJaxBboldxDelimiters, extends: { fontClass: GenericCHTMLFont as typeof FontData, path: '@mathjax/fonts/generic/mjs/chtml.js' }, }) }; Components.define('svg', MathJaxBboldxSVGData).writeExtension(); SVGFont.define(MathJaxBboldxSVGData).writeExtension('mathjax-bboldx'); Components.define('chtml', MathJaxBboldxCHTMLData).writeExtension(); CHTMLFont.define(MathJaxBboldxCHTMLData).writeExtension('mathjax-bboldx').makeWoffFonts('MB-bbx', false); } catch (err) { console.log(err); process.exit(1); }