from Translator import *
import Property
import Declaration

class SSSRule(SSSDeclaration):
    
    UNKNOWN_RULE = 0
    STYLE_RULE = 1
    CHARTSET_RULE = 2
    IMPORT_RULE = 3
    MEDIA_RULE = 4
    FONT_FACE_RULE = 5
    PAGE_RULE = 6
    
    
    
    #// Extensions...
    COMMENT_RULE = 7
    INCLUDE_RULE = 8
    INHERIT_RULE = 9
    CONSTANT_RULE = 10
    COPY_RULE = 11
    

    declaration = None
    
    
    _parentStyleSheet = None
    _parentRule = None
    
    def __init__(self, sourceText = '', parentStyleSheet = None, parentRule = None):
	
		addLogMessage(get_class(self) + ' creating SSSRule.')
    
        if (parentRule):
            super(SSSRule, self).__init__(parentRule)
        else:
            super(SSSRule, self).__init__(parentStyleSheet)
        
        
    hss = self._getHostStyleSheet()
    pss = self._getParentStyleSheet()
    pr = self._getParentRule()
        
    self._parentStyleSheet = parentStyleSheet
    self._parentRule = parentRule

    self.declaration = SSSDeclarationList(self)

    def get(var):
    
        if (var == 'cssText'):
                    return self.__str__(self)
        
        return super(SSSRule, self).get(var)

    def __str__(self):
    
        return ''
    
    
    
    def declareVariable(name, value):
    
     addLogMessage("Declaring variable as property, passing to stylesheet...")
        return self._parentStyleSheet.declareVariable(name, value)
    
    
    
    def isVarSet(name):
        
        if (self.declaration.getPropertyValue(name)):
        
         addLogMessage("Variable name found in " . self)
            return True
        
        
        
        if (self._parentRule):
        
         addLogMessage("Variable name not found, looking in parent rule...")
            
            return self._parentRule.isVarSet(name)
        
        
        
        elif (self._parentStyleSheet):
        
         addLogMessage("Variable name not found, looking in parent stylesheet...")
            return self._parentStyleSheet.isVarSet(name)
        
        
    
     addLogMessage("Error, rule has not been given parent stylesheet or rule")
        return False
    
    
    
    
    def getVar(name):
        value = self.declaration.getPropertyValue(name)
        if (value):
        
            return value
        
        
    
        if (self._parentRule):
        
            return self._parentRule.getVar(name)
        
        
        
        elif (self._parentStyleSheet):
        
            return self._parentStyleSheet.getVar(name)
        
        
        
    
    
     addLogMessage("Error, rule has not been given parent stylesheet or rule")
        return False
    
    
    
    
    def getPropertiesAsArray():
    
        return self.declaration.getPropertiesAsArray()
    
    
    
    def getConstant(name):
    
        return self._parentStyleSheet.getConstant(name)
    
    
    
    
    def getPropertyValue(propertyName):
                
        return self.declaration.getPropertyValue(propertyName)

    
    
    def addDeclaration(obj):
        self.declaration.appendRule(obj)

        return obj
    
    
    
    #// Directives:
    def addCharsetRule(cssText ): 
    
        return self.addDeclaration(SSSCharsetRule(cssText))
    
    
    
    def addFontFaceRule(cssText ): 
    
        return self.addDeclaration(SSSFontFaceRule(cssText))
        
    
    
    def addImportRule(cssText ): 
    
        return self.addDeclaration(SSSImportRule(cssText))
        
    
    
    def addMediaRule(cssText ):
    
        return  self.addDeclaration(SSSMediaRule(cssText))
        
    
    
    def addInheritRule(cssText ): 
    
        return self.addDeclaration(SSSInheritRule(cssText))
        
    
    
    def addCommentRule(cssText ): 
    
        return self.addDeclaration(SSSCommentRule(cssText))
        
    
    
    def addIncludeRule(cssText ): 
    
        return self.addDeclaration(SSSIncludeRule(cssText))
        
    
    
    def addConstantRule(cssText ): 
        
        return self.addDeclaration(SSSConstantRule(cssText))
        
    
    
    def addCopyRule(cssText ): 
        
        return self.addDeclaration(SSSCopyRule(cssText))
        
    
    
    
    #// Style Rules:
    def addStyleRule(cssText ): 
    
        return self.addDeclaration(SSSStyleRule(cssText))
        
    
    
    #// Property Declaration
    def addProperty(cssText ):
                    
        return self.addDeclaration(SSSProperty(cssText))
