1e5c31af7Sopenharmony_ci// Copyright 2020-2024 The Khronos Group Inc.
2e5c31af7Sopenharmony_ci//
3e5c31af7Sopenharmony_ci// SPDX-License-Identifier: Apache-2.0
4e5c31af7Sopenharmony_ci
5e5c31af7Sopenharmony_ci// Translates the latexmath in html on build time using KaTeX
6e5c31af7Sopenharmony_ci// Usage: nodejs translate_math.js katex/katex.min.js vkspec.html
7e5c31af7Sopenharmony_ci
8e5c31af7Sopenharmony_ciconst katex = require(process.argv[2]);
9e5c31af7Sopenharmony_ciconst fs = require("fs");
10e5c31af7Sopenharmony_ciconst escapeRegex = require("escape-string-regexp");
11e5c31af7Sopenharmony_ciconst he = require('he');
12e5c31af7Sopenharmony_ci
13e5c31af7Sopenharmony_ciconst filepath = process.argv[3];
14e5c31af7Sopenharmony_ci
15e5c31af7Sopenharmony_civar html = fs.readFileSync(filepath, "utf8");
16e5c31af7Sopenharmony_ci
17e5c31af7Sopenharmony_ciconst delimiters = [
18e5c31af7Sopenharmony_ci                     //{ left: "$$", right: "$$", display: true},
19e5c31af7Sopenharmony_ci                     { left: "\\[", right: "\\]", display: true},
20e5c31af7Sopenharmony_ci                     //{ left: "$", right: "$", display: false},
21e5c31af7Sopenharmony_ci                     { left: "\\(", right: "\\)", display: false}
22e5c31af7Sopenharmony_ci                   ]
23e5c31af7Sopenharmony_ci
24e5c31af7Sopenharmony_cifor( var delim of delimiters ) {
25e5c31af7Sopenharmony_ci    const regex = new RegExp( escapeRegex(delim.left) + "([\\S\\s]*?)" + escapeRegex(delim.right), "g");
26e5c31af7Sopenharmony_ci    html = html.replace( regex,
27e5c31af7Sopenharmony_ci        function(match, g1) {
28e5c31af7Sopenharmony_ci            return katex.renderToString( he.decode(g1, {'strict': true}), {displayMode: delim.display, output: 'html', strict: true} );
29e5c31af7Sopenharmony_ci        }
30e5c31af7Sopenharmony_ci    );
31e5c31af7Sopenharmony_ci}
32e5c31af7Sopenharmony_ci
33e5c31af7Sopenharmony_cifs.writeFileSync(filepath, html, 'utf8');
34