Skip to content

Commit

Permalink
[spec] handle surrogate pairs
Browse files Browse the repository at this point in the history
Fixes #69
  • Loading branch information
ljharb committed Mar 27, 2024
1 parent 263eb02 commit f527b0d
Showing 1 changed file with 11 additions and 14 deletions.
25 changes: 11 additions & 14 deletions spec.emu
Original file line number Diff line number Diff line change
Expand Up @@ -60,21 +60,18 @@ contributors: Jordan Harband
1. Let _punctuators_ be the string-concatenation of *"(){}[]|,.?*+-^$=<>/#&!%:;@~'`"*, the code unit 0x0022 (QUOTATION MARK), and the code unit 0x005C (REVERSE SOLIDUS).
1. Let _toEscape_ be StringToCodePoints(_punctuators_).
1. If _toEscape_ contains _c_ or _c_ is matched by |WhiteSpace|, then
1. Append the code point U+005C (REVERSE SOLIDUS) to _codePoints_.
1. Let _hex_ be Number::toString(𝔽(_c_), 16).
1. If the length of _hex_ is 1 or 2, then
1. Set _hex_ to StringPad(_hex_, 2, *"0"*, ~start~).
1. Append the code point U+0078 (LATIN SMALL LETTER X) to _codePoints_.
1. Let _codeUnits_ be UTF16EncodeCodePoint(_c_).
1. For each code unit _cu_ of _codeUnits_, do
1. Append the code point U+005C (REVERSE SOLIDUS) to _codePoints_.
1. Let _hex_ be Number::toString(𝔽(_cu_), 16).
1. If the length of _hex_ is 1 or 2, then
1. Set _hex_ to StringPad(_hex_, 2, *"0"*, ~start~).
1. Append the code point U+0078 (LATIN SMALL LETTER X) to _codePoints_.
1. Else,
1. Assert: The length of _hex_ is 3 or 4.
1. Set _hex_ to StringPad(_hex_, 4, *"0"*, ~start~).
1. Append the code point U+0075 (LATIN SMALL LETTER U) to _codePoints_.
1. Append the code points in StringToCodePoints(_hex_) to _codePoints_.
1. Else if the length of _hex_ is 3 or 4, then
1. Set _hex_ to StringPad(_hex_, 4, *"0"*, ~start~).
1. Append the code point U+0075 (LATIN SMALL LETTER U) to _codePoints_.
1. Append the code points in StringToCodePoints(_hex_) to _codePoints_.
1. Else,
1. Append the code point U+0075 (LATIN SMALL LETTER U) to _codePoints_.
1. Append the code point U+007B (LEFT CURLY BRACKET) to _codePoints_.
1. Append the code points in StringToCodePoints(_hex_) to _codePoints_.
1. Append the code point U+007D (RIGHT CURLY BRACKET) to _codePoints_.
1. Else,
1. Append _c_ to _codePoints_.
1. Return _codePoints_.
Expand Down

0 comments on commit f527b0d

Please sign in to comment.