from Translator import *
import SelectorList
import Object, pdb
class SSSStyleRule(Object.SSSObject):
def __init__(self, rule = ''):
super(SSSStyleRule, self).__init__()
self._selectors = SelectorList.SSSSelectorList('', self)
if rule: self._parse(rule)
def _parse(self, text):
text = trim(text)
matches = preg_match(r'^([^\{]*)\{([\w|\W]*)\}$', text)
if (matches):
self._selectors = SelectorList.SSSSelectorList(matches[0][0], self)
super(SSSStyleRule, self)._parse(matches[0][1])
def get_computedSelector(self):
return self._selectors.selectorArrayToString(self.get_computedSelectorAsArray())
selectorText = property(get_computedSelector)
def get_computedSelectorAsArray(self):
if get_class(self.parentObject) == 'SSSStyleRule':
computedSelector = []
parentSelectorList = SelectorList.SSSSelectorList( self.parentObject.selectorText, self)
for parentSelector in parentSelectorList.selectors:
for selector in self.selectorList.selectors:
computedSelector.append( parentSelector + ' ' + trim( selector ) )
return computedSelector
else:
return self._selectors.selectors
def prependToAllSelectors(self, args):
return self._selectors.prependToAllSelectors(args)
def set_cssText(self, value):
return self._parse(value)
def get_cssText(self):
return self.__str__()
cssText = property(get_cssText, set_cssText)
def get_type(self):
return SSSObject.STYLE_RULE
type = property(get_type)
def get_style(self):
return self.declaration.cssText
style = property(get_style)
def get_styleDeclaration(self):
return self.declaration
styleDeclaration = property(get_styleDeclaration)
def get_selectorText(self):
return self._selectors.selectorText
def get_selectorList(self):
return self._selectors
selectorList = property(get_selectorList)
def __str__(self):
#// output current rule...
string = preg_replace(r'\, ', ",\n", self.selectorText) + " {\n"
#string = self.selectorText + " {\n"
string += self.getCssTextFromArray(self.getNonStyleRulesAsArray())
string += "}\n\n"
string += self.getCssTextFromArray(self.getStyleRulesAsArray())
return string
def appendSelector(self, selector):
return self._selectors.appendSelector(selector)
def addInheritRule(self, cssText):
import InheritRule
inherit_rule = InheritRule.SSSInheritRule()
self.addDeclaration(inherit_rule)
inherit_rule.cssText = cssText
if (self.hostStyleSheet):
for i in xrange(inherit_rule.selectorList.length):
inherit_rule_selector = inherit_rule.selectorList.item(i)
superclass_rules = self.hostStyleSheet.getRulesWithSelector(inherit_rule_selector)
for superclass_rule in superclass_rules:
num_selectors = superclass_rule.selectorList.length
for j in xrange(num_selectors):
superclass_rule_selector = superclass_rule.selectorList.item(j)
self_rule_selectors = self.get_computedSelectorAsArray()
for k in xrange(len(self_rule_selectors)):
self_rule_selector = self_rule_selectors[k]
if (preg_match(' ' + inherit_rule_selector + ' ', ' ' + superclass_rule_selector + ' ')):
additional_selector = preg_replace(' ' + inherit_rule_selector + ' ', ' ' + self_rule_selector + ' ', ' ' + superclass_rule_selector + ' ')
superclass_rule.appendSelector(additional_selector)
return inherit_rule