From bda29a7089c3a21e9e49887f54cd73e38f6445d5 Mon Sep 17 00:00:00 2001 From: Aarni Koskela Date: Mon, 18 Jan 2016 16:54:23 +0200 Subject: [PATCH 1/6] JavaScript: modernize lexer slightly --- babel/messages/jslexer.py | 37 +++++++++++++------------------------ 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/babel/messages/jslexer.py b/babel/messages/jslexer.py index 22c6e1f9c..282d294f3 100644 --- a/babel/messages/jslexer.py +++ b/babel/messages/jslexer.py @@ -9,27 +9,34 @@ :copyright: (c) 2013 by the Babel Team. :license: BSD, see LICENSE for more details. """ - -from operator import itemgetter +from collections import namedtuple import re from babel._compat import unichr -operators = [ +operators = sorted([ '+', '-', '*', '%', '!=', '==', '<', '>', '<=', '>=', '=', '+=', '-=', '*=', '%=', '<<', '>>', '>>>', '<<=', '>>=', '>>>=', '&', '&=', '|', '|=', '&&', '||', '^', '^=', '(', ')', '[', ']', '{', '}', '!', '--', '++', '~', ',', ';', '.', ':' -] -operators.sort(key=lambda a: -len(a)) +], key=len, reverse=True) escapes = {'b': '\b', 'f': '\f', 'n': '\n', 'r': '\r', 't': '\t'} +division_re = re.compile(r'/=?') +regex_re = re.compile(r'/(?:[^/\\]*(?:\\.[^/\\]*)*)/[a-zA-Z]*(?s)') +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}') +name_re = re.compile(r'(\$+\w*|[^\W\d]\w*)(?u)') + +Token = namedtuple('Token', 'type value lineno') + rules = [ (None, re.compile(r'\s+(?u)')), (None, re.compile(r'