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