mirror of
https://github.com/Smaug123/KaTeX
synced 2025-10-11 05:58:40 +00:00
Add optional pre-process callback to the auto-renderer. (#1784)
* Add optional pre-process callback to the auto-renderer. * Rewrite `preProcess` callback signature. * Add test. * Make test future-proof. * Add root folder to the node module paths.
This commit is contained in:
committed by
Kevin Barabash
parent
ce3840d4ce
commit
f10de9617e
@@ -26,11 +26,14 @@ const renderMathInText = function(text, optionsCopy) {
|
|||||||
fragment.appendChild(document.createTextNode(data[i].data));
|
fragment.appendChild(document.createTextNode(data[i].data));
|
||||||
} else {
|
} else {
|
||||||
const span = document.createElement("span");
|
const span = document.createElement("span");
|
||||||
const math = data[i].data;
|
let math = data[i].data;
|
||||||
// Override any display mode defined in the settings with that
|
// Override any display mode defined in the settings with that
|
||||||
// defined by the text itself
|
// defined by the text itself
|
||||||
optionsCopy.displayMode = data[i].display;
|
optionsCopy.displayMode = data[i].display;
|
||||||
try {
|
try {
|
||||||
|
if (optionsCopy.preProcess) {
|
||||||
|
math = optionsCopy.preProcess(math);
|
||||||
|
}
|
||||||
katex.render(math, span, optionsCopy);
|
katex.render(math, span, optionsCopy);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (!(e instanceof katex.ParseError)) {
|
if (!(e instanceof katex.ParseError)) {
|
||||||
|
@@ -4,6 +4,7 @@
|
|||||||
/* global describe: false */
|
/* global describe: false */
|
||||||
|
|
||||||
import splitAtDelimiters from "../splitAtDelimiters";
|
import splitAtDelimiters from "../splitAtDelimiters";
|
||||||
|
import renderMathInElement from "../auto-render";
|
||||||
|
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
expect.extend({
|
expect.extend({
|
||||||
@@ -234,3 +235,19 @@ describe("A delimiter splitter", function() {
|
|||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("Pre-process callback", function() {
|
||||||
|
it("replace `-squared` with `^2 `", function() {
|
||||||
|
const el1 = document.createElement('div');
|
||||||
|
el1.textContent = 'Circle equation: $x-squared + y-squared = r-squared$.';
|
||||||
|
const el2 = document.createElement('div');
|
||||||
|
el2.textContent = 'Circle equation: $x^2 + y^2 = r^2$.';
|
||||||
|
const delimiters = [{left: "$", right: "$", display: false}];
|
||||||
|
renderMathInElement(el1, {
|
||||||
|
delimiters,
|
||||||
|
preProcess: math => math.replace(/-squared/g, '^2'),
|
||||||
|
});
|
||||||
|
renderMathInElement(el2, {delimiters});
|
||||||
|
expect(el1.innerHTML).toEqual(el2.innerHTML);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
@@ -99,6 +99,9 @@ in addition to two auto-render-specific keys:
|
|||||||
- `errorCallback`: A callback method returning a message and an error stack
|
- `errorCallback`: A callback method returning a message and an error stack
|
||||||
in case of an critical error during rendering. The default uses `console.error`.
|
in case of an critical error during rendering. The default uses `console.error`.
|
||||||
|
|
||||||
|
- `preProcess`: A callback function, `(math: string) => string`, used to process
|
||||||
|
math expressions before rendering.
|
||||||
|
|
||||||
The `displayMode` property of the options object is ignored, and is
|
The `displayMode` property of the options object is ignored, and is
|
||||||
instead taken from the `display` key of the corresponding entry in the
|
instead taken from the `display` key of the corresponding entry in the
|
||||||
`delimiters` key.
|
`delimiters` key.
|
||||||
|
@@ -80,7 +80,7 @@
|
|||||||
"test:lint:js": "eslint *.js src static test contrib dockers website",
|
"test:lint:js": "eslint *.js src static test contrib dockers website",
|
||||||
"test:lint:css": "stylelint src/katex.less static/main.css contrib/**/*.css website/static/**/*.css",
|
"test:lint:css": "stylelint src/katex.less static/main.css contrib/**/*.css website/static/**/*.css",
|
||||||
"test:flow": "flow",
|
"test:flow": "flow",
|
||||||
"test:jest": "jest",
|
"test:jest": "NODE_PATH=./:$NODE_PATH jest",
|
||||||
"test:jest:watch": "jest --watch",
|
"test:jest:watch": "jest --watch",
|
||||||
"test:jest:update": "jest --updateSnapshot",
|
"test:jest:update": "jest --updateSnapshot",
|
||||||
"test:jest:coverage": "jest --coverage",
|
"test:jest:coverage": "jest --coverage",
|
||||||
|
Reference in New Issue
Block a user