Skip to content

Commit

Permalink
Merge pull request #119 from nicolo-ribaudo/unicode-set-update
Browse files Browse the repository at this point in the history
Update `unicodeSet` proposal to use the `\q{` syntax for strings
  • Loading branch information
jviereck committed Dec 8, 2021
2 parents cfa51b3 + 8798b96 commit 578dcdf
Show file tree
Hide file tree
Showing 2 changed files with 167 additions and 124 deletions.
35 changes: 17 additions & 18 deletions parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -928,6 +928,8 @@
range: [res.range[0] - 1, res.range[1]],
raw: res[0]
});
} else if (features.unicodeSet && hasUnicodeSetFlag && match('q{')) {
return parseClassStrings();
}
return false;
}
Expand Down Expand Up @@ -1305,7 +1307,7 @@
skip('&');
skip('&');
if (current('&')) {
bail('&& cannot be followed by &. Wrap it in parentheses: &&(&).');
bail('&& cannot be followed by &. Wrap it in brackets: &&[&].');
}
} else if (kind === 'subtraction') {
skip('-');
Expand Down Expand Up @@ -1346,26 +1348,26 @@
var start, res;

if (match('\\')) {
// ClassOperand ::
// ...
// ClassStrings
// NestedClass
//
// NestedClass ::
// ...
// \ CharacterClassEscape[+U, +V]
if (res = parseCharacterClassEscape()) {
start = res;
} else if (res = parseClassCharacterEscapedHelper()) {
// ClassOperand ::
// ...
// NestedClass
//
// NestedClass ::
// ...
// \ CharacterClassEscape[+U, +V]
return res;
} else {
bail('Invalid escape', '\\' + lookahead(), from);
}
} else if (res = parseClassCharacterUnescapedHelper()) {
start = res;
} else if (res = parseClassStrings() || parseCharacterClass()) {
} else if (res = parseCharacterClass()) {
// ClassOperand ::
// ...
// ClassStrings
// NestedClass
//
// NestedClass ::
Expand Down Expand Up @@ -1446,20 +1448,17 @@

function parseClassStrings() {
// ClassStrings ::
// ( ClassString MoreClassStrings? )
// \q{ ClassString MoreClassStrings? }

var res = [];
var from = pos;

if (!match('(')) {
return null;
}
// When calling this function, \q{ has already been consumed.
var from = pos - 3;

var res = [];
do {
res.push(parseClassString());
} while (match('|'));

skip(')');
skip('}');

return createClassStrings(res, from, pos);
}
Expand Down
Loading

0 comments on commit 578dcdf

Please sign in to comment.