| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 | var createCustomError = require('../utils/createCustomError');var generate = require('../definition-syntax/generate');function fromMatchResult(matchResult) {    var tokens = matchResult.tokens;    var longestMatch = matchResult.longestMatch;    var node = longestMatch < tokens.length ? tokens[longestMatch].node : null;    var mismatchOffset = -1;    var entries = 0;    var css = '';    for (var i = 0; i < tokens.length; i++) {        if (i === longestMatch) {            mismatchOffset = css.length;        }        if (node !== null && tokens[i].node === node) {            if (i <= longestMatch) {                entries++;            } else {                entries = 0;            }        }        css += tokens[i].value;    }    return {        node: node,        css: css,        mismatchOffset: mismatchOffset === -1 ? css.length : mismatchOffset,        last: node === null || entries > 1    };}function getLocation(node, point) {    var loc = node && node.loc && node.loc[point];    if (loc) {        return {            offset: loc.offset,            line: loc.line,            column: loc.column        };    }    return null;}var SyntaxReferenceError = function(type, referenceName) {    var error = createCustomError(        'SyntaxReferenceError',        type + (referenceName ? ' `' + referenceName + '`' : '')    );    error.reference = referenceName;    return error;};var MatchError = function(message, syntax, node, matchResult) {    var error = createCustomError('SyntaxMatchError', message);    var details = fromMatchResult(matchResult);    var mismatchOffset = details.mismatchOffset || 0;    var badNode = details.node || node;    var end = getLocation(badNode, 'end');    var start = details.last ? end : getLocation(badNode, 'start');    var css = details.css;    error.rawMessage = message;    error.syntax = syntax ? generate(syntax) : '<generic>';    error.css = css;    error.mismatchOffset = mismatchOffset;    error.loc = {        source: (badNode && badNode.loc && badNode.loc.source) || '<unknown>',        start: start,        end: end    };    error.line = start ? start.line : undefined;    error.column = start ? start.column : undefined;    error.offset = start ? start.offset : undefined;    error.message = message + '\n' +        '  syntax: ' + error.syntax + '\n' +        '   value: ' + (error.css || '<empty string>') + '\n' +        '  --------' + new Array(error.mismatchOffset + 1).join('-') + '^';    return error;};module.exports = {    SyntaxReferenceError: SyntaxReferenceError,    MatchError: MatchError};
 |