diff options
author | ptmcg <ptmcg@9bf210a0-9d2d-494c-87cf-cfb32e7dff7b> | 2007-12-29 04:45:36 +0000 |
---|---|---|
committer | ptmcg <ptmcg@9bf210a0-9d2d-494c-87cf-cfb32e7dff7b> | 2007-12-29 04:45:36 +0000 |
commit | a519cee158fedc8a161295292e0b4bb440b03ec8 (patch) | |
tree | d3a4fd376412ac475684b92012936dc178bce424 | |
parent | e2a6fb83fb5940095e1cbc0180aae1f644242b25 (diff) | |
download | pyparsing-a519cee158fedc8a161295292e0b4bb440b03ec8.tar.gz |
Changes for IronPython compatibility
Better nested expression matching using nestedExpr (simpler expressions as delimiters)
Forward assumes ignorables from embedded expression
git-svn-id: svn://svn.code.sf.net/p/pyparsing/code/src@138 9bf210a0-9d2d-494c-87cf-cfb32e7dff7b
-rw-r--r-- | pyparsing.py | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/pyparsing.py b/pyparsing.py index ad21cf0..24c9afb 100644 --- a/pyparsing.py +++ b/pyparsing.py @@ -1327,6 +1327,7 @@ class Literal(Token): exc.loc = loc
exc.pstr = instring
raise exc
+_L = Literal
class Keyword(Token):
"""Token to exactly match a specified string as a keyword, that is, it must be
@@ -2624,6 +2625,7 @@ class Forward(ParseElementEnhance): self.setWhitespaceChars( self.expr.whiteChars )
self.skipWhitespace = self.expr.skipWhitespace
self.saveAsList = self.expr.saveAsList
+ self.ignoreExprs.extend(self.expr.ignoreExprs)
return self
def leaveWhitespace( self ):
@@ -3083,7 +3085,7 @@ def _makeTags(tagStr, xml): Dict(ZeroOrMore(Group( tagAttrName.setParseAction(downcaseTokens) + \
Optional( Suppress("=") + tagAttrValue ) ))) + \
Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">")
- closeTag = Combine("</" + tagStr + ">")
+ closeTag = Combine(_L("</") + tagStr + ">")
openTag = openTag.setResultsName("start"+"".join(resname.replace(":"," ").title().split())).setName("<%s>" % tagStr)
closeTag = closeTag.setResultsName("end"+"".join(resname.replace(":"," ").title().split())).setName("</%s>" % tagStr)
@@ -3185,7 +3187,7 @@ def operatorPrecedence( baseExpr, opList ): dblQuotedString = Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\x[0-9a-fA-F]+)|(?:\\.))*"').setName("string enclosed in double quotes")
sglQuotedString = Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\x[0-9a-fA-F]+)|(?:\\.))*'").setName("string enclosed in single quotes")
quotedString = Regex(r'''(?:"(?:[^"\n\r\\]|(?:"")|(?:\\x[0-9a-fA-F]+)|(?:\\.))*")|(?:'(?:[^'\n\r\\]|(?:'')|(?:\\x[0-9a-fA-F]+)|(?:\\.))*')''').setName("quotedString using single or double quotes")
-unicodeString = Combine('u' + quotedString.copy())
+unicodeString = Combine(_L('u') + quotedString.copy())
def nestedExpr(opener="(", closer=")", content=None, ignoreExpr=quotedString):
"""Helper method for defining nested lists enclosed in opening and closing
@@ -3217,16 +3219,16 @@ def nestedExpr(opener="(", closer=")", content=None, ignoreExpr=quotedString): raise ValueError("opening and closing arguments must be strings if no content expression is given")
ret = Forward()
if ignoreExpr is not None:
- ret << Group( Suppress(opener) + ZeroOrMore( ignoreExpr | content | ret ) + Suppress(closer) )
+ ret << Group( Suppress(opener) + ZeroOrMore( ignoreExpr | ret | content ) + Suppress(closer) )
else:
- ret << Group( Suppress(opener) + ZeroOrMore( content | ret ) + Suppress(closer) )
+ ret << Group( Suppress(opener) + ZeroOrMore( ret | content ) + Suppress(closer) )
return ret
alphas8bit = srange(r"[\0xc0-\0xd6\0xd8-\0xf6\0xf8-\0xff]")
punc8bit = srange(r"[\0xa1-\0xbf\0xd7\0xf7]")
anyOpenTag,anyCloseTag = makeHTMLTags(Word(alphas,alphanums+"_:"))
-commonHTMLEntity = Combine("&" + oneOf("gt lt amp nbsp quot").setResultsName("entity") +";")
+commonHTMLEntity = Combine(_L("&") + oneOf("gt lt amp nbsp quot").setResultsName("entity") +";")
_htmlEntityMap = dict(zip("gt lt amp nbsp quot".split(),"><& '"))
replaceHTMLEntity = lambda t : t.entity in _htmlEntityMap and _htmlEntityMap[t.entity] or None
|