Changeset 2738:f8305cfab448 in livinglogic.python.xist

Show
Ignore:
Timestamp:
07/02/07 14:17:35 (12 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

Add selectors attrstartswith, attrstartswith_xml, attrendswith,
attrendswith_xml and drop the CSS selector that do the same thing.

Files:
1 modified

Legend:

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

    r2736 r2738  
    215215        return "%s(%r, %r)" % (self.__class__.__name__, self.attrname, self.attrvalue) 
    216216 
     217    def __str__(self): 
     218        return "[%s=%r]" % (self.attributename, self.attributevalue) 
     219 
    217220 
    218221class attrcontains(Selector): 
     
    250253    def __repr__(self): 
    251254        return "%s(%r, %r)" % (self.__class__.__name__, self.attrname, self.attrvalue) 
     255 
     256    def __str__(self): 
     257        return "[%s*=%r]" % (self.attrname, self.attrvalue) 
     258 
     259 
     260class attrstartswith(Selector): 
     261    def __init__(self, attrname, attrvalue): 
     262        self.attrname = attrname 
     263        self.attrvalue = attrvalue 
     264 
     265    def match(self, path): 
     266        node = path[-1] 
     267        if not isinstance_(node, xsc.Element) or not node.Attrs.isallowed(self.attrname): 
     268            return False 
     269        attr = node.attrs.get(self.attrname) 
     270        if attr.isfancy(): # if there are PIs, say no 
     271            return False 
     272        return unicode(attr).startswith(self.attrvalue) 
     273 
     274    def __repr__(self): 
     275        return "%s(%r, %r)" % (self.__class__.__name__, self.attrname, self.attrvalue) 
     276 
     277 
     278class attrstartswith_xml(Selector): 
     279    def __init__(self, attrname, attrvalue): 
     280        self.attrname = attrname 
     281        self.attrvalue = attrvalue 
     282 
     283    def match(self, path): 
     284        node = path[-1] 
     285        if not isinstance_(node, xsc.Element) or not node.Attrs.isallowed_xml(self.attrname): 
     286            return False 
     287        attr = node.attrs.get_xml(self.attrname) 
     288        if attr.isfancy(): # if there are PIs, say no 
     289            return False 
     290        return unicode(attr).startswith(self.attrvalue) 
     291 
     292    def __repr__(self): 
     293        return "%s(%r, %r)" % (self.__class__.__name__, self.attrname, self.attrvalue) 
     294 
     295    def __str__(self): 
     296        return "[%s^=%r]" % (self.attrname, self.attrvalue) 
     297 
     298 
     299class attrendswith(Selector): 
     300    def __init__(self, attrname, attrvalue): 
     301        self.attrname = attrname 
     302        self.attrvalue = attrvalue 
     303 
     304    def match(self, path): 
     305        node = path[-1] 
     306        if not isinstance_(node, xsc.Element) or not node.Attrs.isallowed(self.attrname): 
     307            return False 
     308        attr = node.attrs.get(self.attrname) 
     309        if attr.isfancy(): # if there are PIs, say no 
     310            return False 
     311        return unicode(attr).endswith(self.attrvalue) 
     312 
     313    def __repr__(self): 
     314        return "%s(%r, %r)" % (self.__class__.__name__, self.attrname, self.attrvalue) 
     315 
     316 
     317class attrendswith_xml(Selector): 
     318    def __init__(self, attrname, attrvalue): 
     319        self.attrname = attrname 
     320        self.attrvalue = attrvalue 
     321 
     322    def match(self, path): 
     323        node = path[-1] 
     324        if not isinstance_(node, xsc.Element) or not node.Attrs.isallowed_xml(self.attrname): 
     325            return False 
     326        attr = node.attrs.get_xml(self.attrname) 
     327        if attr.isfancy(): # if there are PIs, say no 
     328            return False 
     329        return unicode(attr).startswith(self.attrvalue) 
     330 
     331    def __repr__(self): 
     332        return "%s(%r, %r)" % (self.__class__.__name__, self.attrname, self.attrvalue) 
     333 
     334    def __str__(self): 
     335        return "[%s$=%r]" % (self.attributename, self.attributevalue) 
    252336 
    253337 
     
    530614 
    531615 
    532 class CSSAttributeIsSelector(Selector): 
    533     def __init__(self, attributename, attributevalue): 
    534         self.attributename = attributename 
    535         self.attributevalue = attributevalue 
    536  
    537     def match(self, path): 
    538         node = path[-1] 
    539         if not isinstance_(node, xsc.Element) or not node.Attrs.isallowed_xml(self.attributename): 
    540             return False 
    541         attr = node.attrs.get_xml(self.attributename) 
    542         if attr.isfancy(): # if there are PIs, say no 
    543             return False 
    544         return unicode(attr) == self.attributevalue 
    545  
    546     def __repr__(self): 
    547         return "%s(%r, %r)" % (self.__class__.__name__, self.attributename, self.attributevalue) 
    548  
    549     def __str__(self): 
    550         return "[%s=%r]" % (self.attributename, self.attributevalue) 
    551  
    552  
    553616class CSSAttributeListSelector(Selector): 
    554617    def __init__(self, attributename, attributevalue): 
     
    590653    def __str__(self): 
    591654        return "[%s|=%r]" % (self.attributename, self.attributevalue) 
    592  
    593  
    594 class CSSAttributeStartsWithSelector(Selector): 
    595     def __init__(self, attributename, attributevalue): 
    596         self.attributename = attributename 
    597         self.attributevalue = attributevalue 
    598  
    599     def match(self, path): 
    600         node = path[-1] 
    601         if not isinstance_(node, xsc.Element) or not node.Attrs.isallowed_xml(self.attributename): 
    602             return False 
    603         attr = node.attrs.get_xml(self.attributename) 
    604         return unicode(attr).startswith(self.attributevalue) 
    605  
    606     def __repr__(self): 
    607         return "%s(%r, %r)" % (self.__class__.__name__, self.attributename, self.attributevalue) 
    608  
    609     def __str__(self): 
    610         return "[%s^=%r]" % (self.attributename, self.attributevalue) 
    611  
    612  
    613 class CSSAttributeEndsWithSelector(Selector): 
    614     def __init__(self, attributename, attributevalue): 
    615         self.attributename = attributename 
    616         self.attributevalue = attributevalue 
    617  
    618     def match(self, path): 
    619         node = path[-1] 
    620         if not isinstance_(node, xsc.Element) or not node.Attrs.isallowed_xml(self.attributename): 
    621             return False 
    622         attr = node.attrs.get_xml(self.attributename) 
    623         return unicode(attr).endswith(self.attributevalue) 
    624  
    625     def __repr__(self): 
    626         return "%s(%r, %r)" % (self.__class__.__name__, self.attributename, self.attributevalue) 
    627  
    628     def __str__(self): 
    629         return "[%s$=%r]" % (self.attributename, self.attributevalue) 
    630  
    631  
    632 class CSSAttributeContainsSelector(Selector): 
    633     def __init__(self, attributename, attributevalue): 
    634         self.attributename = attributename 
    635         self.attributevalue = attributevalue 
    636  
    637     def match(self, path): 
    638         node = path[-1] 
    639         if not isinstance_(node, xsc.Element) or not node.Attrs.isallowed_xml(self.attributename): 
    640             return False 
    641         attr = node.attrs.get_xml(self.attributename) 
    642         return self.attributevalue in unicode(attr) 
    643  
    644     def __repr__(self): 
    645         return "%s(%r, %r)" % (self.__class__.__name__, self.attributename, self.attributevalue) 
    646  
    647     def __str__(self): 
    648         return "[%s*=%r]" % (self.attributename, self.attributevalue) 
    649655 
    650656 
     
    876882 
    877883_attributecombinator2class = { 
    878     "=": CSSAttributeIsSelector, 
     884    "=": attrhasvalue_xml, 
    879885    "~=": CSSAttributeListSelector, 
    880886    "|=": CSSAttributeLangSelector, 
    881     "$=": CSSAttributeStartsWithSelector, 
    882     "$=": CSSAttributeEndsWithSelector, 
    883     "*=": CSSAttributeContainsSelector, 
     887    "^=": attrstartswith_xml, 
     888    "$=": attrendswith_xml, 
     889    "*=": attrcontains_xml, 
    884890} 
    885891