Changeset 2882:2845681c18a1 in livinglogic.python.xist

Show
Ignore:
Timestamp:
08/13/07 23:17:58 (12 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

Use cssutils for parsing and publishing style attributes (this still has a formatting problem).

Files:
1 modified

Legend:

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

    r2879 r2882  
    1717import sys, os, random, copy, warnings, cPickle, threading, weakref, itertools, types 
    1818 
     19import cssutils 
     20from cssutils import serialize as cssserialize 
     21 
    1922from ll import misc, url as url_ 
    2023 
     
    2932except ImportError: 
    3033    ipipe = None 
    31  
    3234 
    3335local = threading.local() 
     
    21052107    """ 
    21062108 
     2109    serializer = cssserialize.CSSSerializer(cssserialize.Preferences(indent="")) 
     2110 
    21072111    def parsed(self, parser, start=None): 
    2108         if not self.isfancy(): 
    2109             csshandler = cssparsers.ParseHandler(ignorecharset=True) 
    2110             value = csshandler.parseString(unicode(self), base=parser.base) 
    2111             return self.__class__(value) 
     2112        if not self.isfancy() and parser.base is not None: 
     2113            from ll.xist import css 
     2114            def prependbase(u): 
     2115                return parser.base/u 
     2116            style = cssutils.parseString(u"a{%s}" % self).cssRules[0].style 
     2117            css.replaceurl(style, prependbase) 
     2118            return self.__class__(self.serializer.do_css_CSSStyleDeclaration(style)) 
    21122119        return self 
    21132120 
    21142121    def _publishattrvalue(self, publisher): 
    2115         if not self.isfancy(): 
    2116             csshandler = cssparsers.PublishHandler(ignorecharset=True) 
    2117             value = csshandler.parseString(unicode(self), base=publisher.base) 
    2118             new = Frag(value) 
     2122        if not self.isfancy() and publisher.base is not None: 
     2123            from ll.xist import css 
     2124            def reltobase(u): 
     2125                return u.relative(publisher.base) 
     2126            style = cssutils.parseString(u"a{%s}" % self).cssRules[0].style 
     2127            css.replaceurl(style, reltobase) 
     2128            new = Frag(self.serializer.do_css_CSSStyleDeclaration(style)) 
    21192129            for part in new.publish(publisher): 
    21202130                yield part 
     
    21282138        found in the style attribute.</par> 
    21292139        """ 
    2130         csshandler = cssparsers.CollectHandler(ignorecharset=True) 
    2131         csshandler.parseString(unicode(self), base=base) 
    2132         urls = csshandler.urls 
     2140        urls = [] 
     2141        def collect(u): 
     2142            urls.append(u) 
     2143            return u 
     2144        s = cssutils.parseString(u"a{%s}" % self) 
     2145        css.replaceurl(s.cssRules[0].style, collect) 
    21332146        return urls 
    21342147