summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAymeric Augustin <aymeric.augustin@m4x.org>2011-10-04 20:11:41 +0000
committerAymeric Augustin <aymeric.augustin@m4x.org>2011-10-04 20:11:41 +0000
commit2a044732f64a8a5b26cdf11e081cd9d7b135e82a (patch)
treea008a4e53a79852e29321c3d49f94f85f7c436a6
parentf3304d33109bbfc999d65506bc3d6f2c3e043d1f (diff)
Fixed #16971 - Made the parsing of javascript files by 'makemessages' much faster. Thanks Antti Haapala for the implementation and Ned Batchelder for the patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@16924 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--AUTHORS1
-rw-r--r--django/utils/jslex.py30
2 files changed, 19 insertions, 12 deletions
diff --git a/AUTHORS b/AUTHORS
index 6faa171e31..8b0f51a75f 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -222,6 +222,7 @@ answer newbie questions, and generally made Django that much better:
Janos Guljas
Thomas Güttler <hv@tbz-pariv.de>
Horst Gutmann <zerok@zerokspot.com>
+ Antti Haapala <antti@industrialwebandmagic.com>
Scot Hacker <shacker@birdhouse.org>
dAniel hAhler
hambaloney
diff --git a/django/utils/jslex.py b/django/utils/jslex.py
index 88a22ec67d..c465647001 100644
--- a/django/utils/jslex.py
+++ b/django/utils/jslex.py
@@ -51,19 +51,25 @@ class Lexer(object):
Yields pairs (`name`, `tokentext`).
"""
- while text:
- eaten = 0
- for match in self.regexes[self.state].finditer(text):
- for name, toktext in match.groupdict().iteritems():
- if toktext is not None:
- tok = self.toks[name]
- new_state = tok.next
- eaten += len(toktext)
- yield (tok.name, toktext)
- if new_state:
- self.state = new_state
+ end = len(text)
+ state = self.state
+ regexes = self.regexes
+ toks = self.toks
+ start = 0
+
+ while start < end:
+ for match in regexes[state].finditer(text, start):
+ name = match.lastgroup
+ tok = toks[name]
+ toktext = match.group(name)
+ start += len(toktext)
+ yield (tok.name, toktext)
+
+ if tok.next:
+ state = tok.next
break
- text = text[eaten:]
+
+ self.state = state
class JsLexer(Lexer):