Skip to content

Commit 8c835e2

Browse files
committed
[mj-single] remove support for PNG generation
1 parent ddbe63a commit 8c835e2

File tree

1 file changed

+15
-76
lines changed

1 file changed

+15
-76
lines changed

lib/mj-single.js

+15-76
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@
22
*
33
* mj-single-svg.js
44
*
5-
* Implements an API to MathJax in node.js so that MathJax can be
6-
* used server-side to generate SVG, MathML, or images (the latter
7-
* requires an external library, batik, to do the svg to png
8-
* conversion). This API converts single math expressions to SVG,
9-
* will giving control over the input format, the font caching, and
10-
* a number of other features.
5+
* Implements an API to MathJax in Node.js so that MathJax can be
6+
* used server-side to generate HTML+CSS, SVG, or MathML.
7+
*
8+
* This API converts single math expressions while giving control
9+
* over the input format, the SVG font caching, and a number of other
10+
* features.
1111
*
1212
* ----------------------------------------------------------------------
1313
*
14-
* Copyright (c) 2014 The MathJax Consortium
14+
* Copyright (c) 2014--2016 The MathJax Consortium
1515
*
1616
* Licensed under the Apache License, Version 2.0 (the "License");
1717
* you may not use this file except in compliance with the License.
@@ -30,11 +30,8 @@ var http = require('http');
3030
var fs = require('fs');
3131
var path = require('path');
3232
var url = require('url');
33-
var fmt = require('util').format;
3433
var jsdom = require('jsdom').jsdom;
35-
var execFile = require('child_process').execFile;
3634
var speech = require('speech-rule-engine');
37-
var os = require('os');
3835

3936
require('./patch/jsdom.js').patch(jsdom); // Fix some bugs in jsdom
4037

@@ -60,9 +57,6 @@ var defaults = {
6057
css: false, // return CSS for HTML output?
6158
mml: false, // return mml output?
6259
svg: false, // return svg output?
63-
img: false, // return img tag for remote image?
64-
png: false, // return png image (as data: URL)?
65-
dpi: 144, // dpi for png image
6660

6761
speakText: false, // add spoken annotations to svg output?
6862
speakRuleset: "mathspeak", // set speech ruleset (default (chromevox rules), mathspeak)
@@ -88,12 +82,10 @@ var STATE = {
8882
// The MathJaxPath is normaized against file:/// so that Windows paths are correct
8983
//
9084
var MathJaxPath = url.resolve("file:///","file:"+require.resolve('mathjax/unpacked/MathJax'));
91-
var BatikRasterizerPath = path.resolve(__dirname,'..','batik/batik-rasterizer.jar');
9285
var MathJaxConfig; // configuration for when starting MathJax
9386
var MathJax; // filled in once MathJax is loaded
9487
var serverState = STATE.STOPPED; // nothing loaded yet
9588
var timer; // used to reset MathJax if it runs too long
96-
var tmpfile = os.tmpdir() + "/mj-single-svg" + process.pid; // file name prefix to use for temp files
9789

9890
var document, window, content, html; // the DOM elements
9991

@@ -593,10 +585,10 @@ function GetHTML(result) {
593585
}
594586

595587
//
596-
// Create SVG output and IMG output, if requested
588+
// Create SVG output, if requested
597589
//
598590
function GetSVG(result) {
599-
if (!data.svg && !data.png && !data.img) return;
591+
if (!data.svg) return;
600592
var jax = MathJax.Hub.getAllJax()[0]; if (!jax) return;
601593
var script = jax.SourceElement(),
602594
svg = script.previousSibling.getElementsByTagName("svg")[0];
@@ -623,67 +615,15 @@ function GetSVG(result) {
623615
var svgdata = svg.outerHTML.replace(/><([^/])/g,">\n<$1")
624616
.replace(/(<\/[a-z]*>)(?=<\/)/g,"$1\n")
625617
.replace(/(<(?:use|image) [^>]*)(href=)/g,' $1xlink:$2');
626-
//
627-
// The file version includes the xml and DOCTYPE comments
628-
//
629-
var svgfile = [
630-
'<?xml version="1.0" standalone="no"?>',
631-
'<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">',
632-
svgdata
633-
].join("\n");
634618

635619
//
636620
// Add the requested data to the results
637621
//
638-
if (data.svg) result.svg = svgdata;
639-
if (data.png) result.svgfile = svgfile;
640-
if (data.img) {
641-
if (data.svg) result.svg = svgfile;
642-
result.img = [
643-
'<img src="file.svg" style="',
644-
svg.style.cssText,
645-
" width:",svg.getAttribute("width"),"; height:",svg.getAttribute("height"),
646-
';"',
647-
(data.speakText ? ' alt="'+result.speakText+'"' : ""),
648-
' />'
649-
].join("");
650-
}
651-
652-
//
653-
// Add metadata to the results
654-
//
655-
if (data.svg){
656-
result.svg = svgdata;
657-
result.width = svg.getAttribute("width");
658-
result.height = svg.getAttribute("height");
659-
result.style = svg.style.cssText;
660-
}
661-
662-
}
622+
result.svg = svgdata;
623+
result.width = svg.getAttribute("width");
624+
result.height = svg.getAttribute("height");
625+
result.style = svg.style.cssText;
663626

664-
//
665-
// Create the PNG file asynchronously, reporting errors.
666-
//
667-
function GetPNG(result) {
668-
var svgfile = result.svgfile; delete result.svgfile;
669-
if (data.png) {
670-
var batikCommands = ['-jar', BatikRasterizerPath, '-dpi', data.dpi, tmpfile + '.svg'];
671-
var synch = MathJax.Callback(function () {}); // for synchronization with MathJax
672-
var check = function (err) {if (err) {AddError(err.message); synch(); return true}}
673-
var tmpSVG = tmpfile+".svg", tmpPNG = tmpfile+".png";
674-
fs.writeFile(tmpSVG,svgfile,function (err) {
675-
if (check(err)) return;
676-
execFile('java', batikCommands, function (err,stdout,stderr) {
677-
if (check(err)) {fs.unlinkSync(tmpSVG); return}
678-
fs.readFile(tmpPNG,null,function (err,buffer) {
679-
result.png = "data:image/png;base64,"+(buffer||"").toString('base64');
680-
fs.unlinkSync(tmpSVG); fs.unlinkSync(tmpPNG);
681-
check(err); synch();
682-
});
683-
});
684-
});
685-
return synch; // This keeps the queue from continuing until the readFile() is complete
686-
}
687627
}
688628

689629
/********************************************************************/
@@ -735,7 +675,7 @@ function StartQueue() {
735675

736676
//
737677
// Set up a timeout timer to restart MathJax if it runs too long,
738-
// Then push the Typeset call, the MathML, speech, SVG, and PNG calls,
678+
// Then push the Typeset call, the MathML, speech, and SVG calls,
739679
// and our TypesetDone routine
740680
//
741681
timer = setTimeout(RestartMathJax,data.timeout);
@@ -749,7 +689,6 @@ function StartQueue() {
749689
$$(GetHTML,result),
750690
$$(RerenderSVG,result),
751691
$$(GetSVG,result),
752-
$$(GetPNG,result),
753692
$$(ReturnResult,result)
754693
);
755694
}
@@ -836,7 +775,7 @@ function SetRenderer(renderer) {
836775
}
837776

838777
function RerenderSVG(result) {
839-
if (data.html && (data.svg || data.png || data.img)) {
778+
if (data.html && data.svg) {
840779
timer = setTimeout(RestartMathJax,data.timeout);
841780
var queue = MathJax.Callback.Queue(), $$ = window.Array;
842781
return queue.Push(

0 commit comments

Comments
 (0)