home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_1605 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  5.5 KB  |  133 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. __all__ = [
  5.     'MediaQuery']
  6. __docformat__ = 'restructuredtext'
  7. __version__ = '$Id: mediaquery.py 1738 2009-05-02 13:03:28Z cthedot $'
  8. import cssutils
  9. import re
  10. import xml.dom as xml
  11.  
  12. class MediaQuery(cssutils.util.Base):
  13.     MEDIA_TYPES = [
  14.         u'all',
  15.         u'braille',
  16.         u'embossed',
  17.         u'handheld',
  18.         u'print',
  19.         u'projection',
  20.         u'screen',
  21.         u'speech',
  22.         u'tty',
  23.         u'tv']
  24.     __mediaTypeMatch = re.compile(u'^[-a-zA-Z0-9]+$', re.U).match
  25.     
  26.     def __init__(self, mediaText = None, readonly = False):
  27.         super(MediaQuery, self).__init__()
  28.         self.seq = []
  29.         self._mediaType = u''
  30.         if mediaText:
  31.             self.mediaText = mediaText
  32.         
  33.         self._readonly = readonly
  34.  
  35.     
  36.     def __repr__(self):
  37.         return 'cssutils.stylesheets.%s(mediaText=%r)' % (self.__class__.__name__, self.mediaText)
  38.  
  39.     
  40.     def __str__(self):
  41.         return '<cssutils.stylesheets.%s object mediaText=%r at 0x%x>' % (self.__class__.__name__, self.mediaText, id(self))
  42.  
  43.     
  44.     def _getMediaText(self):
  45.         return cssutils.ser.do_stylesheets_mediaquery(self)
  46.  
  47.     
  48.     def _setMediaText(self, mediaText):
  49.         self._checkReadonly()
  50.         tokenizer = self._tokenize2(mediaText)
  51.         if not tokenizer:
  52.             self._log.error(u'MediaQuery: No MediaText given.')
  53.         else:
  54.             new = {
  55.                 'mediatype': None,
  56.                 'wellformed': True }
  57.             
  58.             def _ident_or_dim(expected, seq, token, tokenizer = (None, None)):
  59.                 val = self._tokenvalue(token)
  60.                 nval = self._normalize(val)
  61.                 if expected.endswith('mediatype'):
  62.                     if nval in (u'only', u'not'):
  63.                         seq.append(val)
  64.                         return 'mediatype'
  65.                     new['mediatype'] = val
  66.                     seq.append(val)
  67.                     return 'and'
  68.                 expected.endswith('mediatype')
  69.                 if 'and' == nval and expected.startswith('and'):
  70.                     seq.append(u'and')
  71.                     return 'feature'
  72.                 new['wellformed'] = False
  73.                 self._log.error(u'MediaQuery: Unexpected syntax.', token = token)
  74.                 return expected
  75.  
  76.             
  77.             def _char(expected, seq, token, tokenizer = (None, None)):
  78.                 val = self._tokenvalue(token)
  79.                 if val == u'(' and expected == 'feature':
  80.                     proptokens = self._tokensupto2(tokenizer, funcendonly = True)
  81.                     if proptokens and u')' == self._tokenvalue(proptokens[-1]):
  82.                         proptokens.pop()
  83.                     
  84.                     property = cssutils.css.Property(_mediaQuery = True)
  85.                     property.cssText = proptokens
  86.                     seq.append(property)
  87.                     return 'and or EOF'
  88.                 new['wellformed'] = False
  89.                 self._log.error(u'MediaQuery: Unexpected syntax, expected "and" but found "%s".' % val, token)
  90.                 return expected
  91.  
  92.             newseq = []
  93.             (wellformed, expected) = self._parse(expected = 'only|not or mediatype', seq = newseq, tokenizer = tokenizer, productions = {
  94.                 'IDENT': _ident_or_dim,
  95.                 'DIMENSION': _ident_or_dim,
  96.                 'CHAR': _char })
  97.             if wellformed:
  98.                 pass
  99.             wellformed = new['wellformed']
  100.             if not new['mediatype']:
  101.                 wellformed = False
  102.                 self._log.error(u'MediaQuery: No mediatype found: %s' % self._valuestr(mediaText))
  103.             
  104.             if wellformed:
  105.                 self.mediaType = new['mediatype']
  106.                 self.seq = newseq
  107.             
  108.  
  109.     mediaText = property(_getMediaText, _setMediaText, doc = 'The parsable textual representation of the media list.')
  110.     
  111.     def _setMediaType(self, mediaType):
  112.         self._checkReadonly()
  113.         nmediaType = self._normalize(mediaType)
  114.         if not MediaQuery._MediaQuery__mediaTypeMatch(nmediaType):
  115.             self._log.error(u'MediaQuery: Syntax Error in media type "%s".' % mediaType, error = xml.dom.SyntaxErr)
  116.         elif nmediaType not in MediaQuery.MEDIA_TYPES:
  117.             self._log.warn(u'MediaQuery: Unknown media type "%s".' % mediaType, error = xml.dom.InvalidCharacterErr)
  118.             return None
  119.         self._mediaType = mediaType
  120.         for i, x in enumerate(self.seq):
  121.             if isinstance(x, basestring):
  122.                 if self._normalize(x) in (u'only', u'not'):
  123.                     continue
  124.                 else:
  125.                     self.seq[i] = mediaType
  126.                     break
  127.             self._normalize(x) in (u'only', u'not')
  128.         
  129.  
  130.     mediaType = property((lambda self: self._mediaType), _setMediaType, doc = 'The media type of this MediaQuery (one of :attr:`MEDIA_TYPES`).')
  131.     wellformed = property((lambda self: bool(len(self.seq))))
  132.  
  133.