summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorptmcg <ptmcg@9bf210a0-9d2d-494c-87cf-cfb32e7dff7b>2007-12-29 04:45:36 +0000
committerptmcg <ptmcg@9bf210a0-9d2d-494c-87cf-cfb32e7dff7b>2007-12-29 04:45:36 +0000
commita519cee158fedc8a161295292e0b4bb440b03ec8 (patch)
treed3a4fd376412ac475684b92012936dc178bce424
parente2a6fb83fb5940095e1cbc0180aae1f644242b25 (diff)
downloadpyparsing-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.py12
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