Changeset 3087:23121020606b in livinglogic.python.xist

Show
Ignore:
Timestamp:
01/02/08 14:01:23 (12 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

Change walk filter so it's possible to overwrite either filterpath() or filternode().

The default implementation of filterpath() forwards to filternode() passing the
last node in the path.

Files:
3 modified

Legend:

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

    r3080 r3087  
    5252        pass 
    5353 
    54     def filter(self, path): 
     54    def filterpath(self, path): 
    5555        return (True, xsc.entercontent, xsc.enterattrs) if self.match(path) else (xsc.entercontent, xsc.enterattrs) 
    5656 
  • src/ll/xist/xsc.py

    r3080 r3087  
    113113    """ 
    114114    @misc.notimplemented 
    115     def filter(self, path): 
     115    def filternode(self, node): 
    116116        pass 
     117 
     118    def filterpath(self, path): 
     119        return self.filternode(path[-1]) 
    117120 
    118121 
     
    125128        self.types = types 
    126129 
    127     def filter(self, path): 
    128         return (isinstance(path[-1], self.types), ) 
     130    def filternode(self, node): 
     131        return (isinstance(node, self.types), ) 
    129132 
    130133 
     
    137140        self.types = types 
    138141 
    139     def filter(self, path): 
    140         return (isinstance(path[-1], self.types), entercontent) 
     142    def filternode(self, node): 
     143        return (isinstance(node, self.types), entercontent) 
    141144 
    142145 
     
    149152        self.types = types 
    150153 
    151     def filter(self, path): 
    152         return (isinstance(path[-1], self.types), entercontent, enterattrs) 
     154    def filternode(self, node): 
     155        return (isinstance(node, self.types), entercontent, enterattrs) 
    153156 
    154157 
     
    162165        self.types = types 
    163166 
    164     def filter(self, path): 
    165         if isinstance(path[-1], self.types): 
     167    def filternode(self, node): 
     168        if isinstance(node, self.types): 
    166169            return (True,) 
    167170        else: 
     
    176179        self.func = func 
    177180 
    178     def filter(self, path): 
     181    def filterpath(self, path): 
    179182        return self.func(path) 
    180183 
     
    187190        self.value = value 
    188191 
    189     def filter(self, path): 
     192    def filterpath(self, path): 
    190193        return self.value 
    191194 
     
    983986        <par>Internal helper for <pyref method="walk"><method>walk</method></pyref>.</par> 
    984987        """ 
    985         for option in filter.filter(path): 
     988        for option in filter.filterpath(path): 
    986989            if option is not entercontent and option is not enterattrs and option: 
    987990                yield path 
     
    20072010 
    20082011    def _walk(self, filter, path): 
    2009         for option in filter.filter(path): 
     2012        for option in filter.filterpath(path): 
    20102013            if option is entercontent: 
    20112014                for result in Frag._walk(self, filter, path): 
     
    31383141 
    31393142    def _walk(self, filter, path): 
    3140         for option in filter.filter(path): 
     3143        for option in filter.filterpath(path): 
    31413144            if option is entercontent: 
    31423145                for result in self.content._walk(filter, path): 
  • test/test_walk.py

    r3080 r3087  
    2020    node = common.createfrag() 
    2121    class Filter(xsc.WalkFilter): 
    22         def filter(self, path): 
     22        def filternode(self, node): 
    2323            return (True, xsc.enterattrs, xsc.entercontent, True) 
    2424 
     
    4646 
    4747    class filtertopdown(xsc.WalkFilter): 
    48         def filter(self, path): 
    49             return (isinstance(path[-1], xsc.Element), xsc.entercontent) 
     48        def filternode(self, node): 
     49            return (isinstance(node, xsc.Element), xsc.entercontent) 
    5050 
    5151    class filterbottomup(xsc.WalkFilter): 
    52         def filter(self, path): 
    53             return (xsc.entercontent, isinstance(path[-1], xsc.Element)) 
     52        def filternode(self, node): 
     53            return (xsc.entercontent, isinstance(node, xsc.Element)) 
    5454 
    5555    class filtertopdownattrs(xsc.WalkFilter): 
    56         def filter(self, path): 
    57             return (isinstance(path[-1], xsc.Element), xsc.enterattrs, xsc.entercontent) 
     56        def filternode(self, node): 
     57            return (isinstance(node, xsc.Element), xsc.enterattrs, xsc.entercontent) 
    5858 
    5959    class filterbottomupattrs(xsc.WalkFilter): 
    60         def filter(self, path): 
    61             return (xsc.enterattrs, xsc.entercontent, isinstance(path[-1], xsc.Element)) 
     60        def filternode(self, node): 
     61            return (xsc.enterattrs, xsc.entercontent, isinstance(node, xsc.Element)) 
    6262 
    6363    class filtertopdowntextonlyinattr(xsc.WalkFilter): 
    64         def filter(self, path): 
     64        def filterpath(self, path): 
    6565            for node in path: 
    6666                if isinstance(node, xsc.Attr): 
     
    7878 
    7979    class filtertopdownattrwithoutcontent(xsc.WalkFilter): 
    80         def filter(self, path): 
    81             if isinstance(path[-1], xsc.Element): 
     80        def filternode(self, node): 
     81            if isinstance(node, xsc.Element): 
    8282                return (True, xsc.entercontent, xsc.enterattrs) 
    83             elif isinstance(path[-1], (xsc.Attr, xsc.Text)): 
     83            elif isinstance(node, (xsc.Attr, xsc.Text)): 
    8484                return (True, ) 
    8585            else: