mathoid-texvcjs
Version:
A TeX/LaTeX validator for MediaWiki.
60 lines (56 loc) • 2 kB
JavaScript
;
// Contains the index functionalities from former texvcinfo class.
const Parser = require('./parser');
const lister = module.exports.tokensFromAst = require('./flatList');
const treeWriter = module.exports.treeFromAst = require('./arrayTree');
const jsonWriter = module.exports.treeFromAst = require('./d3json');
module.exports.texvcinfo = function (input, options) {
try {
// allow user to pass a parsed AST as input, as well as a string
if (typeof (input) === 'string') {
input = Parser.parse(input);
}
let output;
if (!options) {
options = { format: 'list' };
}
switch (options.format) {
case 'tree':
output = treeWriter(input, options.compact);
break;
case 'json':
output = jsonWriter(input, options.flatTree);
break;
case 'identifier':
output = input.extractIdentifiers();
break;
case 'all':
output = {
tree: treeWriter(input, options.compact),
identifier: input.extractIdentifiers(),
list: lister(input, options.compact)
};
break;
default:
output = lister(input, options.compact);
}
return output;
} catch (e) {
if (options && options.debug) {
throw e;
}
if (e instanceof Parser.SyntaxError) {
if (e.message === 'Illegal TeX function') {
return {
status: 'F', details: e.found,
offset: e.offset, line: e.line, column: e.column
};
}
return {
status: 'S', details: e.toString(),
offset: e.offset, line: e.line, column: e.column
};
}
return { status: '-', details: e.toString() };
}
};