You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Feb 18, 2025. It is now read-only.
Copy file name to clipboardExpand all lines: spec.emu
+33-14Lines changed: 33 additions & 14 deletions
Original file line number
Diff line number
Diff line change
@@ -27,35 +27,54 @@ contributors: Jordan Harband
27
27
<emu-alg>
28
28
1. Let _str_ be ? ToString(_S_).
29
29
1. Let _cpList_ be StringToCodePoints(_str_).
30
-
1. Let _punctuators_ be the following String, which consists of every ASCII punctuator except U+005F (LOW LINE): *"(){}[]|,.?\*+-^$=<>\/#&!%:;@~'"`"*.
31
-
1. Let _toEscape_ be StringToCodePoints(_punctuators_).
32
30
1. Let _escapedList_ be a new empty List.
33
31
1. For each code point _c_ in _cpList_, do
34
32
1. If _escapedList_ is empty and _c_ is matched by |DecimalDigit|, then
35
33
1. Append code unit U+005C (REVERSE SOLIDUS) to _escapedList_.
36
34
1. Append code unit U+0078 (LATIN SMALL LETTER X) to _escapedList_.
37
35
1. Append code unit U+0033 (DIGIT THREE) to _escapedList_.
38
36
1. Append _c_ to _escapedList_.
39
-
1. Else if _toEscape_ contains _c_ or _c_ is matched by |WhiteSpace|, then
40
-
1. Let _hex_ be Number::toString(𝔽(_c_), 16).
41
-
1. If the length of _hex_ is 1 or 2, then
42
-
1. Set _hex_ to StringPad(_hex_, 2, *"0"*, ~start~).
43
-
1. Append code unit U+0078 (LATIN SMALL LETTER X) to _escapedList_.
44
-
1. Append the code units in _hex_ to _escapedList_.
45
-
1. Else,
46
-
1. Assert: The length of _hex_ is at most 4.
47
-
1. Set _hex_ to StringPad(_hex_, 4, *"0"*, ~start~).
48
-
1. Append code unit U+0075 (LATIN SMALL LETTER U) to _escapedList_.
49
-
1. Append the code units in _hex_ to _escapedList_.
50
37
1. Else,
51
-
1. Append _c_ to _escapedList_.
38
+
1. Append the code units in EncodeForRegExpEscape(_c_) to _escapedList_.
52
39
1. Return CodePointsToString(_escapedList_).
53
40
</emu-alg>
54
41
55
42
<emu-note>
56
43
<p>`escape` takes a string and escapes it so it can be literally represented as a pattern. In contrast EscapeRegExpPattern (as the name implies) takes a pattern and escapes it so that it can be represented as a string. While the two are related, they do not share the same character escape set or perform similar actions.</p>
<dd>If the code unit represents a RegExp punctuator that needs escaping, or ASCII whitespace, it produces the code units for *"\x"* followed by the relevant escape code. If the code unit represents non-ASCII white space, it produces the code units for *"\u"* followed by the relevant escape code. Otherwise, it returns a List containing the original code unit.</dd>
56
+
</dl>
57
+
58
+
<emu-alg>
59
+
1. Let _codeUnits_ be a new empty List.
60
+
1. Let _punctuators_ be the following String, which consists of every ASCII punctuator except U+005F (LOW LINE): *"(){}[]|,.?\*+-^$=<>\/#&!%:;@~'"`"*.
61
+
1. Let _toEscape_ be StringToCodePoints(_punctuators_).
62
+
1. If _toEscape_ contains _c_ or _c_ is matched by |WhiteSpace|, then
63
+
1. Append code unit U+005C (REVERSE SOLIDUS) to _codeUnits_.
64
+
1. Let _hex_ be Number::toString(𝔽(_c_), 16).
65
+
1. If the length of _hex_ is 1 or 2, then
66
+
1. Set _hex_ to StringPad(_hex_, 2, *"0"*, ~start~).
67
+
1. Append code unit U+0078 (LATIN SMALL LETTER X) to _codeUnits_.
68
+
1. Else,
69
+
1. Assert: The length of _hex_ is at most 4.
70
+
1. Set _hex_ to StringPad(_hex_, 4, *"0"*, ~start~).
71
+
1. Append code unit U+0075 (LATIN SMALL LETTER U) to _codeUnits_.
0 commit comments