def append(self, val, typ=None, space=True, keepS=False, indent=False, lineSeparator=False): """Appends val. Adds a single S after each token except as follows: - typ COMMENT uses cssText depending on self.ser.prefs.keepComments - typ "Property", cssutils.css.CSSRule.UNKNOWN_RULE uses cssText - typ STRING escapes helper.string - typ S ignored except ``keepS=True`` - typ URI calls helper.uri - val ``{`` adds LF after - val ``;`` removes S before and adds LF after - val ``, :`` removes S before - val ``+ > ~`` encloses in prefs.selectorCombinatorSpacer - some other vals add ``*spacer`` except ``space=False`` """ prefspace = self.ser.prefs.spacer if val or typ in ('STRING', 'URI'): # PRE if 'COMMENT' == typ: if self.ser.prefs.keepComments: val = val.cssText else: return elif hasattr(val, 'cssText'): val = val.cssText # elif typ in ('Property', cssutils.css.CSSRule.UNKNOWN_RULE): # val = val.cssText elif 'S' == typ and not keepS: return elif 'S' == typ and keepS: val = u' ' elif typ in ('NUMBER', 'DIMENSION', 'PERCENTAGE') and val == '0': # remove sign + or - if value is zero # TODO: only for lenghts! if self.out and self.out[-1] in u'+-': del self.out[-1] elif 'STRING' == typ: # may be empty but MUST not be None if val is None: return val = helper.string(val) if not prefspace: self._remove_last_if_S() elif 'URI' == typ: val = helper.uri(val) elif 'HASH' == typ: val = self.ser._hash(val) elif val in u'+>~,:{;)]/': self._remove_last_if_S() # APPEND if indent: self.out.append(self.ser._indentblock(val, self.ser._level+1)) else: self.out.append(val) # POST if lineSeparator: # Property , ... pass elif val in u'+>~': # enclose selector combinator self.out.insert(-1, self.ser.prefs.selectorCombinatorSpacer) self.out.append(self.ser.prefs.selectorCombinatorSpacer) elif u',' == val: # list self.out.append(self.ser.prefs.listItemSpacer) elif u':' == val: # prop self.out.append(self.ser.prefs.propertyNameSpacer) elif u'{' == val: # block start self.out.insert(-1, self.ser.prefs.paranthesisSpacer) self.out.append(self.ser.prefs.lineSeparator) elif u';' == val: # end or prop or block self.out.append(self.ser.prefs.lineSeparator) elif val not in u'}[]()/' and typ != 'FUNCTION' and space: self.out.append(self.ser.prefs.spacer) if typ != 'STRING' and not self.ser.prefs.spacer and \ self.out and not self.out[-1].endswith(u' '): self.out.append(u' ')
def append(self, val, type_=None, space=True, keepS=False, indent=False): """Appends val. Adds a single S after each token except as follows: - typ COMMENT uses cssText depending on self.ser.prefs.keepComments - typ "Property", cssutils.css.CSSRule.UNKNOWN_RULE uses cssText - typ STRING escapes helper.string - typ S ignored except ``keepS=True`` - typ URI calls helper.uri - val ``{`` adds LF after - val ``;``, typ 'styletext' removes S before and adds LF after - val ``, :`` removes S before - val ``+ > ~`` encloses in prefs.selectorCombinatorSpacer - some other vals add ``*spacer`` except ``space=False`` """ prefspace = self.ser.prefs.spacer if val or type_ in ('STRING', 'URI'): # PRE if 'COMMENT' == type_: if self.ser.prefs.keepComments: val = val.cssText else: return elif hasattr(val, 'cssText'): val = val.cssText # elif type_ in ('Property', cssutils.css.CSSRule.UNKNOWN_RULE): # val = val.cssText elif 'S' == type_ and not keepS: return elif 'S' == type_ and keepS: val = u' ' # elif type_ in ('NUMBER', 'DIMENSION', 'PERCENTAGE') and val == u'0': # # remove sign + or - if value is zero # # TODO: only for lenghts! # if self.out and self.out[-1] in u'+-': # del self.out[-1] elif 'STRING' == type_: # may be empty but MUST not be None if val is None: return val = helper.string(val) if not prefspace: self._remove_last_if_S() elif 'URI' == type_: val = helper.uri(val) elif 'HASH' == type_: val = self.ser._hash(val) elif val in u'+>~,:{;)]/=}': self._remove_last_if_S() # APPEND if indent or (val == u'}' and self.ser.prefs.indentClosingBrace): self.out.append(self.ser._indentblock(val, self.ser._level + 1)) else: if val.endswith(u' '): self._remove_last_if_S() self.out.append(val) # POST if val in u'+>~': # enclose selector combinator self.out.insert(-1, self.ser.prefs.selectorCombinatorSpacer) self.out.append(self.ser.prefs.selectorCombinatorSpacer) elif u')' == val and not keepS: # CHAR funcend # TODO: pref? self.out.append(u' ') elif u',' == val: # list self.out.append(self.ser.prefs.listItemSpacer) elif u':' == val: # prop self.out.append(self.ser.prefs.propertyNameSpacer) elif u'{' == val: # block start self.out.insert(-1, self.ser.prefs.paranthesisSpacer) self.out.append(self.ser.prefs.lineSeparator) elif u';' == val or 'styletext' == type_: # end or prop or block self.out.append(self.ser.prefs.lineSeparator) elif val not in u'}[]()/=' and space and type_ != 'FUNCTION': self.out.append(self.ser.prefs.spacer) if type_ != 'STRING' and not self.ser.prefs.spacer and \ self.out and not self.out[-1].endswith(u' '): self.out.append(u' ')