+# -*- coding: utf-8 -*-
"""
babel.messages.jslexer
~~~~~~~~~~~~~~~~~~~~~~
line_re = re.compile(r'(\r\n|\n|\r)')
line_join_re = re.compile(r'\\' + line_re.pattern)
uni_escape_re = re.compile(r'[a-fA-F0-9]{1,4}')
+hex_escape_re = re.compile(r'[a-fA-F0-9]{1,2}')
Token = namedtuple('Token', 'type value lineno')
else:
add(next_char)
+ # hex escapes. conversion from 2-digits hex to char is infallible
+ elif next_char in 'xX':
+ escaped = hex_escape_re.match(string, escape_pos + 2)
+ if escaped is not None:
+ escaped_value = escaped.group()
+ add(chr(int(escaped_value, 16)))
+ pos = escape_pos + 2 + len(escaped_value)
+ continue
+ else:
+ add(next_char)
+
# bogus escape. Just remove the backslash.
else:
add(next_char)
def test_unquote():
assert jslexer.unquote_string('""') == ''
assert jslexer.unquote_string(r'"h\u00ebllo"') == u"hëllo"
+ assert jslexer.unquote_string(r'"h\xebllo"') == u"hëllo"
+ assert jslexer.unquote_string(r'"\xebb"') == u"ëb"
def test_dollar_in_identifier():