from Translator import *
import SimpleList
import PrimitiveValue
class SSSValueList(object):
CSS_INHERIT = 0
CSS_PRIMITIVE_VALUE = 1
CSS_VALUE_LIST = 2
CSS_CUSTOM = 3
def __init__(self, sourceText = '', parentObject = None):
self._parentObject = parentObject
self._values = None
self._sourceText = sourceText
self._isImportant = False
if (self._sourceText):
self._parse(self._sourceText)
def appendValue(self, value):
if (value != ''):
val = PrimitiveValue.SSSPrimitiveValue(value, self._parentObject)
self._values.appendItem(val)
def item(self, index):
return self._values.item(index)
def _parse(self, text):
self._sourceText = trim(text)
self._isImportant = self.isImportant(text)
self._values = SimpleList.SSSSimpleList()
ruleText = ''
in_single_quote = False
in_double_quote = False
in_paren = []
for i in xrange(len(self._sourceText)):
char = self._sourceText[i]
ruleText += char
if (char == '"'):
in_double_quote = not in_double_quote
elif (char == "'"):
in_single_quote = not in_single_quote
elif (char == "("):
in_paren.append("(")
elif (char == ")"):
array_pop(in_paren)
if char == ' ' and not in_single_quote and not in_double_quote and len(in_paren) == 0:
self.appendValue(ruleText)
ruleText = ''
if ruleText != '':
self.appendValue(ruleText)
def isImportant(self, value):
return preg_match(' \!important', value)
def stripImportantDeclaration(self, value):
exp = ' \!important'
return preg_replace(exp, '', value)
def __call(self, method, args):
if (method == 'item'):
return self._values.item(args[0])
def __set(self, var, value):
if (var == 'cssText'): return self._parse(text)
def get_length(self):
return self._values.length
length = property(get_length)
def get_cssValueType(self):
return SSSValue.CSS_VALUE_LIST
cssValueType = property(get_cssValueType)
def get_parentObject(self):
return self._parentObject
parentObject = property(get_parentObject)
def get_cssText(self):
return self.__str__()
cssText = property(get_cssText)
def __str__(self):
string = ''
#addLogMessage('SSSValueList __str__: self._values.length = ' + str(self._values.length))
for i in xrange(self._values.length): #(i = 0; i < self._values.length; i++):
#addLogMessage('ValueList __str__: i self._values.item(' + str(i) + ') = ' + str(self._values.item(i)))
string += self._values.item(i).cssText + ' '
return string.rstrip()