diff --git a/lib/main.js b/lib/main.js index d78c717..5afe568 100644 --- a/lib/main.js +++ b/lib/main.js @@ -80,6 +80,15 @@ exports.mjpage = function(htmlstring, configOptions, typesetOptions, callback) { const window = doc.defaultView; const document = window.document; + //rewrite custom scripts types from core MathJax + const rewriteScripts = function(oldType, newType){ + const scripts = document.querySelectorAll('script[type="' + oldType + '"]'); + for (let script of scripts) script.setAttribute('type', newType); + } + rewriteScripts('math/tex','math/inline-TeX'); + rewriteScripts('math/tex; mode=display','math/TeX'); + rewriteScripts('math/asciimath','math/asciiMath'); + // configure mathjax-node mathjax.config(config); @@ -114,8 +123,13 @@ exports.mjpage = function(htmlstring, configOptions, typesetOptions, callback) { window.ascii.PreProcess(); } + const scripts = document.querySelectorAll(` + script[type="math/TeX"], + script[type="math/inline-TeX"], + script[type="math/AsciiMath"], + script[type="math/MathML"], + script[type="math/MathML-block"]`); // convert with mathjax-node - const scripts = document.querySelectorAll('script[type^="math/"]'); const process = function(index) { const script = scripts[index]; if (script) { @@ -213,7 +227,7 @@ exports.mjpage = function(htmlstring, configOptions, typesetOptions, callback) { border: 0; margin: 0 } - + .mjpage__block { text-align: center; margin: 1em 0em; diff --git a/test/script-types.js b/test/script-types.js new file mode 100644 index 0000000..69ef151 --- /dev/null +++ b/test/script-types.js @@ -0,0 +1,51 @@ +const tape = require('tape'); +const mjpage = require('../lib/main.js').mjpage; +const jsdom = require('jsdom').jsdom; + +tape('Custom script types are processed correctly', function(t) { + t.plan(4); + const inlineInput = ''; + mjpage(inlineInput, { + format: ['TeX'] + }, { + svg: true + }, function(output) { + const window = jsdom(output).defaultView; + const expected = window.document.querySelector('.mjpage'); + t.ok(expected, '"math/tex" treated as inline'); + }); + + const displayInput = ''; + mjpage(displayInput, { + format: ['TeX'] + }, { + svg: true + }, function(output) { + const window = jsdom(output).defaultView; + const expected = window.document.querySelector('.mjpage__block'); + t.ok(expected, '"math/tex; mode=display" treated as block'); + }); + + const asciiInput = ''; + mjpage(displayInput, { + format: ['TeX'] + }, { + svg: true + }, function(output) { + const window = jsdom(output).defaultView; + const expected = window.document.querySelector('.mjpage'); + t.ok(expected, '"math/asciimath" treated as asciimath'); + }); + + const crazyCaseInput = ''; + mjpage(crazyCaseInput, { + format: ['TeX'] + }, { + svg: true + }, function(output) { + const window = jsdom(output).defaultView; + const expected = window.document.querySelector('.mjpage'); + t.notOk(expected, 'Other scripts are ignored'); + }); + +});