diff --git a/babel/messages/jslexer.py b/babel/messages/jslexer.py index 4d9e66fca..5a9c34597 100644 --- a/babel/messages/jslexer.py +++ b/babel/messages/jslexer.py @@ -22,7 +22,7 @@ '[', ']', '{', '}', '!', '--', '++', '~', ',', ';', '.', ':', ], key=len, reverse=True) # fmt: skip -escapes: dict[str, str] = {'b': '\b', 'f': '\f', 'n': '\n', 'r': '\r', 't': '\t'} +escapes: dict[str, str] = {'b': '\b', 'f': '\f', 'n': '\n', 'r': '\r', 't': '\t', 'v': '\v'} name_re = re.compile(r'[\w$_][\w\d$_]*', re.UNICODE) dotted_name_re = re.compile(r'[\w$_][\w\d$_.]*[\w\d$_.]', re.UNICODE) diff --git a/tests/messages/test_js_extract.py b/tests/messages/test_js_extract.py index af6dfb144..2bad02041 100644 --- a/tests/messages/test_js_extract.py +++ b/tests/messages/test_js_extract.py @@ -10,6 +10,7 @@ def test_simple_extract(): msg1 = _('simple') msg2 = gettext('simple') msg3 = ngettext('s', 'p', 42) +msg4 = gettext('before\\vafter') """) messages = \ list(extract.extract('javascript', buf, extract.DEFAULT_KEYWORDS, @@ -17,7 +18,8 @@ def test_simple_extract(): assert messages == [(1, 'simple', [], None), (2, 'simple', [], None), - (3, ('s', 'p'), [], None)] + (3, ('s', 'p'), [], None), + (4, 'before\vafter', [], None)] def test_various_calls(): diff --git a/tests/messages/test_jslexer.py b/tests/messages/test_jslexer.py index 00afc78ae..788e29a41 100644 --- a/tests/messages/test_jslexer.py +++ b/tests/messages/test_jslexer.py @@ -6,6 +6,8 @@ def test_unquote(): assert jslexer.unquote_string(r'"h\u00ebllo"') == "hëllo" assert jslexer.unquote_string(r'"h\xebllo"') == "hëllo" assert jslexer.unquote_string(r'"\xebb"') == "ëb" + assert jslexer.unquote_string(r'"a\vb"') == "a\vb" + assert jslexer.unquote_string(r'"\\v"') == r"\v" def test_dollar_in_identifier():