def __get_prefixed_prop(self, prefix=None): name = self.prop.name if prefix: name = '-%s-%s' % (prefix, self.prop.name) newValues = [] for value in self.prop.value.split(','): parts = value.strip().split(' ') parts[0] = prefixRegex.sub('', parts[0]) if parts[0] in rules and prefix and rules[ parts[0]].should_prefix(): parts[0] = '-%s-%s' % (prefix, parts[0]) newValues.append(' '.join(parts)) return cssutils.css.Property(name=name, value=', '.join(newValues), priority=self.prop.priority)
def __get_prefixed_prop(self, prefix=None): name = self.prop.name if prefix: name = '-%s-%s' % (prefix, self.prop.name) newValues = [] for value in self.prop.value.split(','): parts = value.strip().split(' ') parts[0] = prefixRegex.sub('', parts[0]) if parts[0] in rules and prefix and rules[parts[0]].should_prefix(): parts[0] = '-%s-%s' % (prefix, parts[0]) newValues.append(' '.join(parts)) return cssutils.css.Property( name=name, value=', '.join(newValues), priority=self.prop.priority )
def magic(ruleset, debug, minify): if hasattr(ruleset, 'style'): # Comments don't ruleSet = set(); rules = list() children = list(ruleset.style.children()) ruleset.style = cssutils.css.CSSStyleDeclaration()#clear out the styles that were there for rule in children: if not hasattr(rule, 'name'):#comments don't have name rules.append(rule) continue name = prefixRegex.sub('', rule.name) if name in tr_rules: rule.name = name if rule.cssText in ruleSet: continue ruleSet.add(rule.cssText) rules.append(rule) ruleset.style.seq._readonly = False for rule in rules: if not hasattr(rule, 'name'): ruleset.style.seq.append(rule, 'Comment') continue processor = None try:#try except so if anything goes wrong we don't lose the original property if rule.name in tr_rules: processor = tr_rules[rule.name](rule) [ruleset.style.seq.append(prop, 'Property') for prop in processor.get_prefixed_props() if prop] #always add the original rule if processor and hasattr(processor, 'get_base_prop'): ruleset.style.seq.append(processor.get_base_prop(), 'Property') else: ruleset.style.seq.append(rule, 'Property') except: if debug: print 'warning with ' + str(rule) ruleset.style.seq.append(rule, 'Property') ruleset.style.seq._readonly = True elif hasattr(ruleset, 'cssRules'): for subruleset in ruleset: magic(subruleset, debug, minify) cssText = ruleset.cssText if not cssText:#blank rules return None so return an empty string return if minify or not hasattr(ruleset, 'style'): return unicode(cssText) return unicode(cssText)+'\n'
def __iter_values(self): valueSplit = self.prop.value.split(',') index = 0 # currentString = '' while(True): if index >= len(valueSplit): break rawValue = valueSplit[index].strip() snip = prefixRegex.sub('', rawValue) if snip.startswith('linear-gradient'): values = [re.sub('^linear-gradient\(', '', snip)] if valueSplit[index + 1].strip().endswith(')'): values.append(re.sub('\)+$', '', valueSplit[index + 1].strip())) else: values.append(valueSplit[index + 1].strip()) values.append(re.sub('\)+$', '', valueSplit[index + 2].strip())) if len(values) == 2: yield { 'start': values[0], 'end': values[1] } else: yield { 'pos': values[0], 'start': values[1], 'end': values[2] } index += len(values) elif snip.startswith('gradient'): yield { 'start': re.sub('\)+$', '', valueSplit[index + 4].strip()), 'end': re.sub('\)+$', '', valueSplit[index + 6].strip()), } index += 7 else: # not a gradient so just yield the raw string yield rawValue index += 1
def __iter_values(self): valueSplit = self.prop.value.split(',') index = 0 # currentString = '' while (True): if index >= len(valueSplit): break rawValue = valueSplit[index].strip() snip = prefixRegex.sub('', rawValue) if snip.startswith('linear-gradient'): values = [re.sub('^linear-gradient\(', '', snip)] if valueSplit[index + 1].strip().endswith(')'): values.append( re.sub('\)+$', '', valueSplit[index + 1].strip())) else: values.append(valueSplit[index + 1].strip()) values.append( re.sub('\)+$', '', valueSplit[index + 2].strip())) if len(values) == 2: yield {'start': values[0], 'end': values[1]} else: yield { 'pos': values[0], 'start': values[1], 'end': values[2] } index += len(values) elif snip.startswith('gradient'): yield { 'start': re.sub('\)+$', '', valueSplit[index + 4].strip()), 'end': re.sub('\)+$', '', valueSplit[index + 6].strip()), } index += 7 else: # not a gradient so just yield the raw string yield rawValue index += 1
def magic(ruleset, debug, minify, filt, parser): if isinstance(ruleset, cssutils.css.CSSUnknownRule): if ruleset.cssText.startswith('@keyframes'): inner = parser.parseString(keyframesRegex.split(ruleset.cssText.replace('\n', ''))[1]) # BUG: doesn't work when minified s = '' if minify else '\n' return '@-webkit-keyframes {' + s + \ ''.join([magic(rs, debug, minify, ['webkit'], parser) for rs in inner]) \ + '}' + s + '@-moz-keyframes {' + s + \ ''.join([magic(rs, debug, minify, ['moz'], parser) for rs in inner]) \ + '}' + s + ruleset.cssText elif ruleset.cssText.startswith('from') or ruleset.cssText.startswith('to'): return ''.join([magic(rs, debug, minify, filt, parser) for rs in parser.parseString(blockRegex.sub(r'\1', ruleset.cssText.replace('\n', ''))[1])]) else: return elif hasattr(ruleset, 'style'): # Comments don't ruleSet = set() rules = list() children = list(ruleset.style.children()) ruleset.style = cssutils.css.CSSStyleDeclaration() # clear out the styles that were there for rule in children: if not hasattr(rule, 'name'): # comments don't have name rules.append(rule) continue name = prefixRegex.sub('', rule.name) if name in tr_rules: rule.name = name if rule.cssText in ruleSet: continue ruleSet.add(rule.cssText) rules.append(rule) ruleset.style.seq._readonly = False for rule in rules: if not hasattr(rule, 'name'): ruleset.style.seq.append(rule, 'Comment') continue processor = None try: # try except so if anything goes wrong we don't lose the original property if rule.name in tr_rules: processor = tr_rules[rule.name](rule) [ruleset.style.seq.append(prop, 'Property') for prop in processor.get_prefixed_props(filt) if prop] # always add the original rule if processor and hasattr(processor, 'get_base_prop'): ruleset.style.seq.append(processor.get_base_prop(), 'Property') else: ruleset.style.seq.append(rule, 'Property') except: if debug: print 'warning with ' + str(rule) ruleset.style.seq.append(rule, 'Property') ruleset.style.seq._readonly = True elif hasattr(ruleset, 'cssRules'): for subruleset in ruleset: magic(subruleset, debug, minify, filt, parser) cssText = ruleset.cssText if not cssText: # blank rules return None so return an empty string return if minify or not hasattr(ruleset, 'style'): return unicode(cssText) return unicode(cssText) + '\n'
def magic(ruleset, debug, minify, filt, parser): if isinstance(ruleset, cssutils.css.CSSUnknownRule): if ruleset.cssText.startswith('@keyframes'): inner = parser.parseString( keyframesRegex.split(ruleset.cssText.replace('\n', ''))[1]) # BUG: doesn't work when minified s = '' if minify else '\n' return '@-webkit-keyframes {' + s + \ ''.join([magic(rs, debug, minify, ['webkit'], parser) for rs in inner]) \ + '}' + s + '@-moz-keyframes {' + s + \ ''.join([magic(rs, debug, minify, ['moz'], parser) for rs in inner]) \ + '}' + s + ruleset.cssText elif ruleset.cssText.startswith('from') or ruleset.cssText.startswith( 'to'): return ''.join([ magic(rs, debug, minify, filt, parser) for rs in parser.parseString( blockRegex.sub(r'\1', ruleset.cssText.replace('\n', ''))[1]) ]) else: return elif hasattr(ruleset, 'style'): # Comments don't ruleSet = set() rules = list() children = list(ruleset.style.children()) ruleset.style = cssutils.css.CSSStyleDeclaration( ) # clear out the styles that were there for rule in children: if not hasattr(rule, 'name'): # comments don't have name rules.append(rule) continue name = prefixRegex.sub('', rule.name) if name in tr_rules: rule.name = name if rule.cssText in ruleSet: continue ruleSet.add(rule.cssText) rules.append(rule) ruleset.style.seq._readonly = False for rule in rules: if not hasattr(rule, 'name'): ruleset.style.seq.append(rule, 'Comment') continue processor = None try: # try except so if anything goes wrong we don't lose the original property if rule.name in tr_rules: processor = tr_rules[rule.name](rule) [ ruleset.style.seq.append(prop, 'Property') for prop in processor.get_prefixed_props(filt) if prop ] # always add the original rule if processor and hasattr(processor, 'get_base_prop'): ruleset.style.seq.append(processor.get_base_prop(), 'Property') else: ruleset.style.seq.append(rule, 'Property') except: if debug: print 'warning with ' + str(rule) ruleset.style.seq.append(rule, 'Property') ruleset.style.seq._readonly = True elif hasattr(ruleset, 'cssRules'): for subruleset in ruleset: magic(subruleset, debug, minify, filt, parser) cssText = ruleset.cssText if not cssText: # blank rules return None so return an empty string return if minify or not hasattr(ruleset, 'style'): return unicode(cssText) return unicode(cssText) + '\n'
def magic(ruleset, debug, minify, filt, parser): if isinstance(ruleset, cssutils.css.CSSUnknownRule): if ruleset.cssText.startswith("@keyframes"): inner = parser.parseString(re.split(r"@keyframes\s?\w+\s?{(.*)}", ruleset.cssText.replace("\n", ""))[1]) # TODO: DRY, un-mess this up # BUG: doesn't work when minified s = "" if minify else "\n" return ( "@-webkit-keyframes {" + s + "".join([magic(rs, debug, minify, ["webkit"], parser) for rs in inner]) + "}" + s + "@-moz-keyframes {" + s + "".join([magic(rs, debug, minify, ["moz"], parser) for rs in inner]) + "}" + s + ruleset.cssText ) elif ruleset.cssText.startswith("from") or ruleset.cssText.startswith("to"): return "".join( [ magic(rs, debug, minify, filt, parser) for rs in parser.parseString(re.sub(r"\w+\s?\{(.*)\}", r"\1", ruleset.cssText.replace("\n", ""))[1]) ] ) else: return elif hasattr(ruleset, "style"): # Comments don't ruleSet = set() rules = list() children = list(ruleset.style.children()) ruleset.style = cssutils.css.CSSStyleDeclaration() # clear out the styles that were there for rule in children: if not hasattr(rule, "name"): # comments don't have name rules.append(rule) continue name = prefixRegex.sub("", rule.name) if name in tr_rules: rule.name = name if rule.cssText in ruleSet: continue ruleSet.add(rule.cssText) rules.append(rule) ruleset.style.seq._readonly = False for rule in rules: if not hasattr(rule, "name"): ruleset.style.seq.append(rule, "Comment") continue processor = None try: # try except so if anything goes wrong we don't lose the original property if rule.name in tr_rules: processor = tr_rules[rule.name](rule) [ruleset.style.seq.append(prop, "Property") for prop in processor.get_prefixed_props(filt) if prop] # always add the original rule if processor and hasattr(processor, "get_base_prop"): ruleset.style.seq.append(processor.get_base_prop(), "Property") else: ruleset.style.seq.append(rule, "Property") except: if debug: print "warning with " + str(rule) ruleset.style.seq.append(rule, "Property") ruleset.style.seq._readonly = True elif hasattr(ruleset, "cssRules"): for subruleset in ruleset: magic(subruleset, debug, minify, filt, parser) cssText = ruleset.cssText if not cssText: # blank rules return None so return an empty string return if minify or not hasattr(ruleset, "style"): return unicode(cssText) return unicode(cssText) + "\n"