Changeset 361 for trunk/genshi/input.py
- Timestamp:
- Oct 13, 2006, 3:42:38 PM (17 years ago)
- File:
-
- 1 edited
-
trunk/genshi/input.py (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/genshi/input.py
r358 r361 22 22 from StringIO import StringIO 23 23 24 from genshi.core import Attrs, QName, Stream 24 from genshi.core import Attrs, QName, Stream, stripentities 25 25 from genshi.core import DOCTYPE, START, END, START_NS, END_NS, TEXT, \ 26 26 START_CDATA, END_CDATA, PI, COMMENT … … 71 71 END root 72 72 """ 73 74 _entitydefs = ['<!ENTITY %s "&#%d;">' % (name, value) for name, value in 75 htmlentitydefs.name2codepoint.items()] 76 _external_dtd = '\n'.join(_entitydefs) 73 77 74 78 def __init__(self, source, filename=None): … … 101 105 # (in _handle_other) 102 106 parser.DefaultHandler = self._handle_other 107 parser.SetParamEntityParsing(expat.XML_PARAM_ENTITY_PARSING_ALWAYS) 103 108 parser.UseForeignDTD() 109 parser.ExternalEntityRefHandler = self._build_foreign 104 110 105 111 # Location reporting is only support in Python >= 2.4 … … 142 148 return iter(self.parse()) 143 149 150 def _build_foreign(self, context, base, sysid, pubid): 151 parser = self.expat.ExternalEntityParserCreate(context) 152 parser.ParseFile(StringIO(self._external_dtd)) 153 return 1 154 144 155 def _enqueue(self, kind, data=None, pos=None): 145 156 if pos is None: … … 293 304 if value is None: 294 305 value = name 295 fixed_attrib.append((name, unicode( value)))306 fixed_attrib.append((name, unicode(stripentities(value)))) 296 307 297 308 self._enqueue(START, (QName(tag), Attrs(fixed_attrib)))
Note: See TracChangeset
for help on using the changeset viewer.
