test/dummy/node_modules/regjsgen/regjsgen.js in disco_app-0.18.0 vs test/dummy/node_modules/regjsgen/regjsgen.js in disco_app-0.18.1

- old
+ new

@@ -1,9 +1,9 @@ /*! - * regjsgen 0.5.1 - * Copyright 2014-2019 Benjamin Tan <https://bnjmnt4n.now.sh/> - * Available under MIT license <https://github.com/bnjmnt4n/regjsgen/blob/master/LICENSE> + * regjsgen 0.5.2 + * Copyright 2014-2020 Benjamin Tan <https://ofcr.se/> + * Available under the MIT license <https://github.com/bnjmnt4n/regjsgen/blob/master/LICENSE-MIT.txt> */ ;(function() { 'use strict'; // Used to determine if values are of the language type `Object`. @@ -94,27 +94,49 @@ } throw Error('Invalid node type: ' + type); } - /*--------------------------------------------------------------------------*/ - - function generateAlternative(node) { - assertType(node.type, 'alternative'); - - var terms = node.body, - i = -1, + // Constructs a string by concatentating the output of each term. + function generateSequence(generator, terms) { + var i = -1, length = terms.length, - result = ''; + result = '', + term; while (++i < length) { - result += generateTerm(terms[i]); + term = terms[i]; + + // Ensure that `\0` null escapes followed by number symbols are not + // treated as backreferences. + if ( + i + 1 < length && + terms[i].type == 'value' && + terms[i].kind == 'null' && + terms[i + 1].type == 'value' && + terms[i + 1].kind == 'symbol' && + terms[i + 1].codePoint >= 48 && + terms[i + 1].codePoint <= 57 + ) { + result += '\\000'; + continue; + } + + result += generator(term); } return result; } + /*--------------------------------------------------------------------------*/ + + function generateAlternative(node) { + assertType(node.type, 'alternative'); + + return generateSequence(generateTerm, node.body); + } + function generateAnchor(node) { assertType(node.type, 'anchor'); switch (node.kind) { case 'start': @@ -137,38 +159,22 @@ } function generateCharacterClass(node) { assertType(node.type, 'characterClass'); - var classRanges = node.body, - i = -1, - length = classRanges.length, - result = ''; - - if (node.negative) { - result += '^'; - } - - while (++i < length) { - result += generateClassAtom(classRanges[i]); - } - - return '[' + result + ']'; + return '[' + + (node.negative ? '^' : '') + + generateSequence(generateClassAtom, node.body) + + ']'; } function generateCharacterClassEscape(node) { assertType(node.type, 'characterClassEscape'); return '\\' + node.value; } - function generateUnicodePropertyEscape(node) { - assertType(node.type, 'unicodePropertyEscape'); - - return '\\' + (node.negative ? 'P' : 'p') + '{' + node.value + '}'; - } - function generateCharacterClassRange(node) { assertType(node.type, 'characterClassRange'); var min = node.min, max = node.max; @@ -238,18 +244,12 @@ break; default: throw Error('Invalid behaviour: ' + node.behaviour); } - var body = node.body, - i = -1, - length = body.length; + result += generateSequence(generate, node.body); - while (++i < length) { - result += generate(body[i]); - } - return '(' + result + ')'; } function generateIdentifier(node) { assertType(node.type, 'identifier'); @@ -304,10 +304,16 @@ assertType(node.type, 'anchor|characterClass|characterClassEscape|empty|group|quantifier|reference|unicodePropertyEscape|value|dot'); return generate(node); } + function generateUnicodePropertyEscape(node) { + assertType(node.type, 'unicodePropertyEscape'); + + return '\\' + (node.negative ? 'P' : 'p') + '{' + node.value + '}'; + } + function generateValue(node) { assertType(node.type, 'value'); var kind = node.kind, codePoint = node.codePoint; @@ -324,11 +330,11 @@ case 'identifier': return '\\' + fromCodePoint(codePoint); case 'null': return '\\' + codePoint; case 'octal': - return '\\' + codePoint.toString(8); + return '\\' + ('000' + codePoint.toString(8)).slice(-3); case 'singleEscape': switch (codePoint) { case 0x0008: return '\\b'; case 0x0009: @@ -339,10 +345,12 @@ return '\\v'; case 0x000C: return '\\f'; case 0x000D: return '\\r'; + case 0x002D: + return '\\-'; default: throw Error('Invalid code point: ' + codePoint); } case 'symbol': return fromCodePoint(codePoint); @@ -362,15 +370,15 @@ 'alternative': generateAlternative, 'anchor': generateAnchor, 'characterClass': generateCharacterClass, 'characterClassEscape': generateCharacterClassEscape, 'characterClassRange': generateCharacterClassRange, - 'unicodePropertyEscape': generateUnicodePropertyEscape, 'disjunction': generateDisjunction, 'dot': generateDot, 'group': generateGroup, 'quantifier': generateQuantifier, 'reference': generateReference, + 'unicodePropertyEscape': generateUnicodePropertyEscape, 'value': generateValue }; /*--------------------------------------------------------------------------*/