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 {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'; import {MathJaxModernFont as MathJaxModernSVGFont} from '../../mathjax-modern/mjs/svg.js'; import {MathJaxModernFont as MathJaxModernCHTMLFont} from '../../mathjax-modern/mjs/chtml.js'; import {FontData} from 'mathjax-full/mjs/output/common/FontData.js'; /***********************************************************************************/ try { Font.load({ 'NE-M': ['fonts/euler.otf', {autoPUA: 0xE000, ignore: /\.ssty.?$/}] }); /***********************************************************************************/ const MathJaxEulerVariants = Variants.define({ normal: ['NE-M', [ CHARS.Range(0x21, 0x07A).minus(CHARS.Range(0x5B, 0x5D), CHARS.At(0x2F, 0x5F)), CHARS.At(0x7E, 0xA7, 0xB5, 0xB7, 0x131, 0x237, 0x2C6, 0x2C7, 0x302, 0x30C, 0x324, 0x325), CHARSET.Greek.minus(CHARS.At(0x3C2, 0x3F4, 0x3F0, 0x3F1)), CHARS.At( 0x2026, 0x20DB, 0x20DC, 0x210E, 0x210F, 0x2126, 0x2127, 0x2135, 0x2202, 0x2206, 0x2207, 0x220F, 0x2210, 0x2211 ), CHARS.Range(0x222B, 0x222E), CHARS.Range(0x22EF, 0x22F1), CHARS.At(0x2320, 0x2321, 0x2A0C), CHARSET.MathBold, CHARSET.MathGreekBold.minus(CHARS.At(0x1D6B9, 0x1D6D3, 0x1D6DE, 0x1D6E0)), CHARSET.MathNumbersBold, CHARSET.MathFraktur, CHARSET.MathBoldFraktur, // // Duplicate bold into bold-italic, normal into italic, since Neo-Euler has no italic versions // CHARS.MapTo(0x1D400, CHARSET.MathBoldItalic, 0x1D468), CHARS.MapTo(0x41, CHARSET.MathItalicUC, 0x1D434), CHARS.MapTo(0x61, CHARSET.MathItalicLC.minus(CHARS.At(0x210E)), 0x1D44E), // // Duplicate bold Greek into bold-italic Greek and normal Greek into italic Greek, // since Neo-Euler has no italic versions // CHARS.MapTo(0x1D6A8, CHARSET.MathGreekBoldItalic.minus(CHARS.At(0x1D72D, 0x1D747, 0x1D752, 0x1D754)), 0x1D71C), CHARS.MapTo(0x391, CHARS.Range(0x1D6E2, 0x1D6FA).minus(CHARS.At(0x1D6F3)), 0x1D6E2), CHARS.MapTo(0x3B1, CHARS.Range(0x1D6FC, 0x1D714).minus(CHARS.At(0x1D70D)), 0x1D6FC), CHARS.Map({ 0x1D715: 0x2202, 0x1D6FB: 0x2207, 0x1D716: 0x03F5, 0x1D717: 0x03D1, 0x1D719: 0x03D5, 0x1D71B: 0x03D6 }), ]], bold: ['NE-M', [ CHARS.ForFeature('mathbold', 'NE-M') ]], '-tex-calligraphic': ['NE-M', [ CHARSET.ScriptToAlphaUC ]], '-tex-bold-calligraphic': ['NE-M', [ CHARSET.BoldScriptToAlphaUC ]], '-tex-oldstyle': ['NE-M', [ CHARSET.Numbers.feature('onum') ]], '-tex-bold-oldstyle': ['NE-M', [ CHARS.MapTo(0x1D7CE, CHARSET.Numbers, 0x30).feature('onum') ]], '-largeop': ['NE-M', [ CHARS.Range(0x220F, 0x2211).feature('alt'), CHARS.Range(0x222B, 0x222E).feature('alt'), CHARS.At(0x2A0C).feature('alt') ]] }, { fixIC: [ ['-largeop', .11, CHARS.At(0x222B, 0x222E)], // adjust integral italic correction ['normal', .1, CHARS.At(0x222B, 0x222C, 0x222D, 0x222E, 0x2A0C)] ] }); /***********************************************************************************/ const MathJaxEulerDelimiters = { font: 'NE-M', variants: MathJaxEulerVariants, sizeVariants: ['normal'], stretchVariants: ['normal'], readMathTable: false }; /***********************************************************************************/ const MathJaxEulerData: FontDef = { name: 'MathJaxEuler', prefix: 'NE', variants: MathJaxEulerVariants, delimiters: null, ranges: [ ['fraktur', { F: {normal: RANGES.FRAKTUR} }], ['calligraphic', { C: {'-tex-calligraphic': RANGES.ALPHAUC}, CB: {'-tex-bold-calligraphic': RANGES.ALPHAUC} }], ['greek', { GK: { normal: [ [0x3B1, 0x3C1], [0x3C3, 0x3C9], 0x3D1, 0x3D5, 0x3D6, 0x3F5, [0x1D6A8, 0x1D6B8], [0x1D6BA, 0x1D6D2], [0x1D6D4, 0x1D6DD], 0x1D6DF, 0x1D6E1, [0x1D71C, 0x1D72C], [0x1D72E, 0x1D746], [0x1D748, 0x1D751], 0x1D753, 0x1D755 ] } }] ], legal: { addCopyright: 'Copyright (c) 2022 MathJax, Inc. (www.mathjax.org)' } }; const MathJaxEulerSVGData: FontDef = { ...MathJaxEulerData, delimiters: Delimiters.define({ ...MathJaxEulerDelimiters, extends: { fontClass: MathJaxModernSVGFont as typeof FontData, path: '@mathjax/fonts/mathjax-modern/mjs/svg.js', } }) }; const MathJaxEulerCHTMLData: FontDef = { ...MathJaxEulerData, delimiters: Delimiters.define({ ...MathJaxEulerDelimiters, extends: { fontClass: MathJaxModernCHTMLFont as typeof FontData, path: '@mathjax/fonts/mathjax-modern/mjs/chtml.js', } }) }; SVGFont.define(MathJaxEulerSVGData).writeExtension('mathjax-euler'); Components.define('svg', MathJaxEulerSVGData).writeExtension(); CHTMLFont.define(MathJaxEulerCHTMLData).writeExtension('mathjax-euler').makeWoffFonts('NE-M', false); Components.define('chtml', MathJaxEulerCHTMLData).writeExtension(); } catch(err) { console.error(err); process.exit(1); }