From: David F. <dav...@us...> - 2004-10-28 15:56:30
|
Update of /cvsroot/translate/src/translate/storage In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11381 Modified Files: dtd.py Log Message: improved entity parsing so we can handle entities split over multiple lines changed the order of the position checks so that we don't run into the end of the line... took out FIXME about single quotes (they are used in official firefox source) raise an error if we get an unexpected quote character Index: dtd.py =================================================================== RCS file: /cvsroot/translate/src/translate/storage/dtd.py,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- dtd.py 28 Oct 2004 15:40:43 -0000 1.9 +++ dtd.py 28 Oct 2004 15:56:20 -0000 1.10 @@ -111,24 +111,35 @@ if self.entitypart == "start": # the entity definition e = quote.findend(line,'<!ENTITY') - while (line[e].isspace() and e < len(line)): e += 1 + while (e < len(line) and line[e].isspace()): e += 1 self.entity = '' - while (not line[e].isspace() and e < len(line)): + while (e < len(line) and not line[e].isspace()): self.entity += line[e] e += 1 - while (line[e].isspace() and e < len(line)): e += 1 + while (e < len(line) and line[e].isspace()): e += 1 self.entitypart = "definition" # remember the start position and the quote character + if e == len(line): + self.entityhelp = None + continue self.entityhelp = (e,line[e]) self.instring = 0 if self.entitypart == "definition": + if self.entityhelp is None: + e = 0 + while (e < len(line) and line[e].isspace()): e += 1 + if e == len(line): + continue + self.entityhelp = (e,line[e]) + self.instring = 0 # actually the lines below should remember instring, rather than using it as dummy e = self.entityhelp[0] - # FIXME: should we handle single quotes here? should only be double quotes if (self.entityhelp[1] == "'"): (defpart,self.instring) = quote.extract(line[e:],"'","'",None,startinstring=self.instring) - else: # if (self.entityhelp[1] == '"'): + elif (self.entityhelp[1] == '"'): (defpart,self.instring) = quote.extract(line[e:],'"','"',None,startinstring=self.instring) + else: + raise ValueError("Unexpected quote character... %r" % (self.entityhelp[1])) # for any following lines, start at the beginning of the line. remember the quote character self.entityhelp = (0,self.entityhelp[1]) self.definition += defpart |