Changeset 2881:30a416e2b50a in livinglogic.python.xist

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

Rename _fixurl() to replaceurl() and make it an officially usable function.

Files:
1 modified

Legend:

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

    r2876 r2881  
    2323    cssutils = None 
    2424 
    25 from ll import misc 
     25from ll import misc, url 
    2626from ll.xist import xsc, xfind 
    2727from ll.xist.ns import html 
     
    3535 
    3636 
    37 def _fixurl(rule, base): 
    38     if base is not None: 
    39         for proplist in rule.style.seq: 
    40             if not isinstance(proplist, css.CSSComment): 
    41                 for prop in proplist: 
    42                     newvalue = [] 
    43                     for value in prop.cssValue.seq: 
    44                         if value.startswith("url(") and value.endswith(")"): 
    45                             value = "url(%s)" % (base/value[4:-1]) 
    46                         newvalue.append(value) 
    47                     prop.cssValue = "".join(newvalue) 
     37def replaceurl(style, replacer): 
     38    """ 
     39    Replace all &url;s appearing in the <class>CSSStyleDeclaration<class> 
     40    <arg>style</arg>. For each &url; the function <arg>replacer</arg> will be 
     41    called and the &url; will be replace with the result. 
     42    """ 
     43    for proplist in style.seq: 
     44        if not isinstance(proplist, css.CSSComment): 
     45            for prop in proplist: 
     46                newvalue = [] 
     47                for value in prop.cssValue.seq: 
     48                    if value.startswith("url(") and value.endswith(")"): 
     49                        value = "url(%s)" % replacer(url.URL(value[4:-1])) 
     50                    newvalue.append(value) 
     51                prop.cssValue = "".join(newvalue) 
    4852 
    4953 
     
    5862 
    5963def _doimport(wantmedia, parentsheet, base): 
     64    def prependbase(u): 
     65        if base is not None: 
     66            u = base/u 
     67        return u 
     68 
    6069    havemedia = _getmedia(parentsheet) 
    6170    if wantmedia is None or not havemedia or wantmedia in havemedia: 
     
    7180                sheet = css.CSSStyleSheet(href=str(href), media=havemedia, parentStyleSheet=parentsheet) 
    7281                sheet.cssText = text 
    73                 for rule in self._doimport(wantmedia, sheet, href): 
     82                for rule in _doimport(wantmedia, sheet, href): 
    7483                    yield rule 
    7584            elif rule.type == css.CSSRule.MEDIA_RULE: 
    7685                if wantmedia in rule.media: 
    7786                    for subrule in rule.cssRules: 
    78                         _fixurl(subrule, base) 
     87                        replaceurl(subrule.style, prependbase) 
    7988                        yield subrule 
    8089            elif rule.type == css.CSSRule.STYLE_RULE: 
    81                 _fixurl(rule, base) 
     90                replaceurl(rule.style, prependbase) 
    8291                yield rule 
    8392