You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.3 KiB
41 lines
1.3 KiB
4 weeks ago
|
/**
|
||
|
* This is the ParseError class, which is the main error thrown by KaTeX
|
||
|
* functions when something has gone wrong. This is used to distinguish internal
|
||
|
* errors from errors in the expression that the user provided.
|
||
|
*/
|
||
|
function ParseError(message, lexer, position) {
|
||
|
var error = "KaTeX parse error: " + message;
|
||
|
|
||
|
if (lexer !== undefined && position !== undefined) {
|
||
|
// If we have the input and a position, make the error a bit fancier
|
||
|
|
||
|
// Prepend some information
|
||
|
error += " at position " + position + ": ";
|
||
|
|
||
|
// Get the input
|
||
|
var input = lexer._input;
|
||
|
// Insert a combining underscore at the correct position
|
||
|
input = input.slice(0, position) + "\u0332" +
|
||
|
input.slice(position);
|
||
|
|
||
|
// Extract some context from the input and add it to the error
|
||
|
var begin = Math.max(0, position - 15);
|
||
|
var end = position + 15;
|
||
|
error += input.slice(begin, end);
|
||
|
}
|
||
|
|
||
|
// Some hackery to make ParseError a prototype of Error
|
||
|
// See http://stackoverflow.com/a/8460753
|
||
|
var self = new Error(error);
|
||
|
self.name = "ParseError";
|
||
|
self.__proto__ = ParseError.prototype;
|
||
|
|
||
|
self.position = position;
|
||
|
return self;
|
||
|
}
|
||
|
|
||
|
// More hackery
|
||
|
ParseError.prototype.__proto__ = Error.prototype;
|
||
|
|
||
|
module.exports = ParseError;
|