Changeset 2635:48542cd41589 in livinglogic.python.xist

Show
Ignore:
Timestamp:
01/31/07 14:48:53 (13 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

Fix parsing: implement a createEntity() in the Parser and forward text
creation to the pool method, if the content handler has a pool attribute.

This makes the parsing test pass again.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/ll/xist/parsers.py

    r2633 r2635  
    312312        if text is None: 
    313313            return xsc.Null 
    314         ct = getattr(self.getContentHandler(), "createText", xsc.Text) 
     314        pool = getattr(self.getContentHandler(), "pool", None) 
     315        ct = (pool.create_text if pool is not None else xsc.Text) 
    315316        node = xsc.Frag() 
    316317        while True: 
     
    361362                self.getContentHandler().skippedEntity(name) 
    362363            except xsc.IllegalEntityError: 
    363                 try: 
    364                     entity = xsc.Entity.create(name, xml=True) 
    365                 except xsc.IllegalEntityError: 
    366                     self.getContentHandler().characters(u"&%s;" % name) 
    367                 else: 
    368                     if issubclass(entity, xsc.CharRef): 
    369                         self.getContentHandler().characters(unichr(entity.codepoint)) 
    370                     else: 
    371                         self.getContentHandler().characters(u"&%s;" % name) 
     364                self.getContentHandler().characters(u"&%s;" % name) 
    372365        else: 
    373366            self.getContentHandler().characters(c) 
     
    381374            return xsc.Null 
    382375        node = xsc.Frag() 
    383         ct = self.getContentHandler().createText 
     376        pool = getattr(self.getContentHandler(), "pool", None) 
     377        ct = (pool.create_text if pool is not None else xsc.Text) 
    384378        while True: 
    385379            texts = text.split(u"&", 1) 
     
    414408                            entity = self.getContentHandler().createEntity(name) 
    415409                        except xsc.IllegalEntityError: 
    416                             try: 
    417                                 entity = xsc.Entity.create(name, xml=True) 
    418                                 if issubclass(entity, xsc.CharRef): 
    419                                     entity = ct(unichr(entity.codepoint)) 
    420                                 else: 
    421                                     entity = entity() 
    422                             except xsc.IllegalEntityError: 
    423                                 name = u"&%s;" % name 
    424                                 warnings.warn(xsc.MalformedCharRefWarning(name)) 
    425                                 entity = ct(name) 
     410                            name = u"&%s;" % name 
     411                            warnings.warn(xsc.MalformedCharRefWarning(name)) 
     412                            entity = ct(name) 
    426413                    else: 
    427414                        entity = ct(entity) 
     
    932919            self.skippingwhitespace = False 
    933920 
     921    def createEntity(self, name): 
     922        node = self.pool.create_entity_xml(name) 
     923        if isinstance(node, xsc.CharRef): 
     924            return xsc.Text(unichr(node.codepoint)) 
     925        else: 
     926            node = node.parsed(self) 
     927            return node 
     928 
    934929    def skippedEntity(self, name): 
    935930        node = self.pool.create_entity_xml(name)