summaryrefslogtreecommitdiff
path: root/cheetah/Parser.py
diff options
context:
space:
mode:
authorR. Tyler Ballance <tyler@monkeypox.org>2009-11-15 22:56:13 -0800
committerR. Tyler Ballance <tyler@monkeypox.org>2009-11-16 00:04:10 -0800
commit74961058e939739e97f9c570d5fc8c0959760dc9 (patch)
treeb93f1e01bf4dbc1e55bb0b342be1064ce7a74044 /cheetah/Parser.py
parent987fc399ff52ed27dc655a84f5712c323ae28e56 (diff)
downloadpython-cheetah-74961058e939739e97f9c570d5fc8c0959760dc9.tar.gz
Refactor Cheetah.Parser.ArgList
Added a test for ArgList as well; a large amount of code in Cheetah.Parser could do well to be cleaned up, but perhaps another day.
Diffstat (limited to 'cheetah/Parser.py')
-rw-r--r--cheetah/Parser.py45
1 files changed, 21 insertions, 24 deletions
diff --git a/cheetah/Parser.py b/cheetah/Parser.py
index 3eccc50..904a0ca 100644
--- a/cheetah/Parser.py
+++ b/cheetah/Parser.py
@@ -314,36 +314,33 @@ class CheetahVariable:
self.cacheToken = cacheToken
self.rawSource = rawSource
-class Placeholder(CheetahVariable): pass
+class Placeholder(CheetahVariable):
+ pass
-class ArgList:
+class ArgList(object):
"""Used by _LowLevelParser.getArgList()"""
def __init__(self):
- self.argNames = []
- self.defVals = []
- self.i = 0
+ self.arguments = []
+ self.defaults = []
+ self.count = 0
- def addArgName(self, name):
- self.argNames.append( name )
- self.defVals.append( None )
+ def add_argument(self, name):
+ self.arguments.append(name)
+ self.defaults.append(None)
def next(self):
- self.i += 1
+ self.count += 1
- def addToDefVal(self, token):
- i = self.i
- if self.defVals[i] == None:
- self.defVals[i] = ''
- self.defVals[i] += token
+ def add_default(self, token):
+ count = self.count
+ if self.defaults[count] is None:
+ self.defaults[count] = ''
+ self.defaults[count] += token
def merge(self):
- defVals = self.defVals
- for i in range(len(defVals)):
- if type(defVals[i]) == StringType:
- defVals[i] = defVals[i].strip()
-
- return map(None, [i.strip() for i in self.argNames], defVals)
+ defaults = (isinstance(d, basestring) and d.strip() or None for d in self.defaults)
+ return list(map(None, (a.strip() for a in self.arguments), defaults))
def __str__(self):
return str(self.merge())
@@ -1034,7 +1031,7 @@ class _LowLevelParser(SourceReader):
break
elif c in " \t\f\r\n":
if onDefVal:
- argList.addToDefVal(c)
+ argList.add_default(c)
self.advance()
elif c == '=':
onDefVal = True
@@ -1046,7 +1043,7 @@ class _LowLevelParser(SourceReader):
elif self.startswith(self.cheetahVarStartToken) and not onDefVal:
self.advance(len(self.cheetahVarStartToken))
elif self.matchIdentifier() and not onDefVal:
- argList.addArgName( self.getIdentifier() )
+ argList.add_argument( self.getIdentifier() )
elif onDefVal:
if self.matchCheetahVarInExpressionStartToken():
token = self.getCheetahVar()
@@ -1060,7 +1057,7 @@ class _LowLevelParser(SourceReader):
self.rev()
token = self.getExpression(enclosed=True)
token = self.transformToken(token, beforeTokenPos)
- argList.addToDefVal(token)
+ argList.add_default(token)
elif c == '*' and not onDefVal:
varName = self.getc()
if self.peek() == '*':
@@ -1068,7 +1065,7 @@ class _LowLevelParser(SourceReader):
if not self.matchIdentifier():
raise ParseError(self)
varName += self.getIdentifier()
- argList.addArgName(varName)
+ argList.add_argument(varName)
else:
raise ParseError(self)