Package cssutils :: Package css :: Module cssunknownrule |
[hide private]
[frames] | no frames]

# Source Code for Module cssutils.css.cssunknownrule

      1  """CSSUnknownRule implements DOM Level 2 CSS CSSUnknownRule.
      2  """
      3  __all__ = ['CSSUnknownRule']
      4  __docformat__ = 'restructuredtext'
      5  __author__ = '$LastChangedBy: cthedot $'
      6  __date__ = '$LastChangedDate: 2007-08-20 22:07:12 +0200 (Mo, 20 Aug 2007) $'
      7  __version__ = '$LastChangedRevision: 257 $'
      8
      9  import xml.dom
     10  import cssrule
     11  import cssutils
     12
     13 -class CSSUnknownRule(cssrule.CSSRule):
     14      """
     15      represents an at-rule not supported by this user agent.
     16
     17      Properties
     18      ==========
     19      atkeyword
     20          keyword used including @, e.g. @-moz-unknown
     21      cssText: of type DOMString
     22          The parsable textual representation of this rule
     23      seq: a list (cssutils)
     24          All parts of this rule excluding @KEYWORD but including CSSComments
     25      type: see CSSRule
     26          The typecode for this rule
     27
     28      cssutils only
     29      -------------
     30      atkeyword:
     31          the literal keyword used
     32
     33      Inherits properties from CSSRule
     34
     35      Format
     36      ======
     37      unknownrule:
     38          @xxx until ';' or block {...}
     39      """
     40      type = cssrule.CSSRule.UNKNOWN_RULE
     41
     42 -    def __init__(self, cssText=u'', readonly=False):
     43          """
     44          cssText
     45              of type string
     46          """
     47          super(CSSUnknownRule, self).__init__()
     48
     49          if cssText:
     50              self.cssText = cssText
     51          else:
     52              self.atkeyword = None
     53
     54          self._readonly = readonly
     55
     56
     57 -    def _getCssText(self):
     58          """ returns serialized property cssText """
     59          return cssutils.ser.do_CSSUnknownRule(self)
     60
     61 -    def _setCssText(self, cssText):
     62          """
     63          DOMException on setting
     64
     65          - SYNTAX_ERR:
     66            Raised if the specified CSS string value has a syntax error and
     67            is unparsable.
     68          - INVALID_MODIFICATION_ERR:
     69            Raised if the specified CSS string value represents a different
     70            type of rule than the current one.
     71          - HIERARCHY_REQUEST_ERR: (never raised)
     72            Raised if the rule cannot be inserted at this point in the
     73            style sheet.
     74          - NO_MODIFICATION_ALLOWED_ERR: (CSSRule)
     75            Raised if the rule is readonly.
     76          """
     77          super(CSSUnknownRule, self)._setCssText(cssText)
     78          tokens = self._tokenize(cssText)
     79
     80          if not tokens or tokens and tokens[0].type != self._ttypes.ATKEYWORD:
     81              self._log.error(u'CSSUnknown: No CSSUnknown found.',
     82                                  error=xml.dom.InvalidModificationErr)
     83              return
     84
     85          newatkeyword = tokens[0].value[1:]
     86          newseq = []
     87          expected = ''
     88          for i in range(1, len(tokens)):
     89              t = tokens[i]
     90              if self._ttypes.EOF == t.type:
     91                  break
     92
     93              if self._ttypes.S == t.type:
     94                  newseq.append(t.value) # whitespace: add
     95
     96              elif self._ttypes.COMMENT == t.type:
     97                  # Comment: just add
     98                  newseq.append(cssutils.css.CSSComment(t))
     99
    100              # TODO: block or simple content ending with ;
    101
    102              elif self._ttypes.INVALID == t.type:
    103                  self.valid = False
    104                  self._log.error(u'CSSUnknown: Invalid Token found.', t)
    105                  return
    106
    107              else:
    108                  newseq.append(t.value)
    109
    110          self.atkeyword = newatkeyword
    111          self.seq = newseq
    112
    113      cssText = property(fget=_getCssText, fset=_setCssText,
    114          doc="(DOM) The parsable textual representation.")
    115
    116 -    def __repr__(self):
    117          return "cssutils.css.%s()" % (
    118                  self.__class__.__name__)
    119
    120 -    def __str__(self):
    121          return "<cssutils.css.%s object at 0x%x>" % (
    122                  self.__class__.__name__, id(self))
    123
    124
    125  if __name__ == '__main__':
    126      c = CSSUnknownRule('@x something /*comment*/;')
    127  ##    print c.seq
    128  ##    print c.cssText
    129  ##    print
    130  ##    c.cssText = u'@x { block /*comment*/ }'
    131  ##    print c.seq
    132  ##    print c.cssText
    133      sheet = cssutils.parseString(u'''@three-dee {
    134            @background-lighting {
    135              azimuth : 30deg;
    136              elevation : 190deg;
    137            }
    138          }''')
    139      print "SHEET:", sheet.cssText
    140