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

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. __author__ = 'Mathieu Fenniak'
  5. __author_email__ = 'biziqe@mathieu.fenniak.net'
  6. import re
  7. from utils import readNonWhitespace, RC4_encrypt
  8. import filters
  9. import utils
  10. import decimal
  11. import codecs
  12.  
  13. def readObject(stream, pdf):
  14.     tok = stream.read(1)
  15.     stream.seek(-1, 1)
  16.     if tok == 't' or tok == 'f':
  17.         return BooleanObject.readFromStream(stream)
  18.     if tok == '(':
  19.         return readStringFromStream(stream)
  20.     if tok == '/':
  21.         return NameObject.readFromStream(stream)
  22.     if tok == '[':
  23.         return ArrayObject.readFromStream(stream, pdf)
  24.     if tok == 'n':
  25.         return NullObject.readFromStream(stream)
  26.     if tok == '<':
  27.         peek = stream.read(2)
  28.         stream.seek(-2, 1)
  29.         if peek == '<<':
  30.             return DictionaryObject.readFromStream(stream, pdf)
  31.         return readHexStringFromStream(stream)
  32.     tok == '<'
  33.     if tok == '%':
  34.         while tok not in ('\r', '\n'):
  35.             tok = stream.read(1)
  36.             continue
  37.             tok == 'n'
  38.         tok = readNonWhitespace(stream)
  39.         stream.seek(-1, 1)
  40.         return readObject(stream, pdf)
  41.     if tok == '+' or tok == '-':
  42.         return NumberObject.readFromStream(stream)
  43.     peek = stream.read(20)
  44.     stream.seek(-len(peek), 1)
  45.     if re.match('(\\d+)\\s(\\d+)\\sR[^a-zA-Z]', peek) != None:
  46.         return IndirectObject.readFromStream(stream, pdf)
  47.     return NumberObject.readFromStream(stream)
  48.  
  49.  
  50. class PdfObject(object):
  51.     
  52.     def getObject(self):
  53.         return self
  54.  
  55.  
  56.  
  57. class NullObject(PdfObject):
  58.     
  59.     def writeToStream(self, stream, encryption_key):
  60.         stream.write('null')
  61.  
  62.     
  63.     def readFromStream(stream):
  64.         nulltxt = stream.read(4)
  65.         if nulltxt != 'null':
  66.             raise utils.PdfReadError, 'error reading null object'
  67.         nulltxt != 'null'
  68.         return NullObject()
  69.  
  70.     readFromStream = staticmethod(readFromStream)
  71.  
  72.  
  73. class BooleanObject(PdfObject):
  74.     
  75.     def __init__(self, value):
  76.         self.value = value
  77.  
  78.     
  79.     def writeToStream(self, stream, encryption_key):
  80.         if self.value:
  81.             stream.write('true')
  82.         else:
  83.             stream.write('false')
  84.  
  85.     
  86.     def readFromStream(stream):
  87.         word = stream.read(4)
  88.         if word == 'true':
  89.             return BooleanObject(True)
  90.         if word == 'fals':
  91.             stream.read(1)
  92.             return BooleanObject(False)
  93.  
  94.     readFromStream = staticmethod(readFromStream)
  95.  
  96.  
  97. class ArrayObject(list, PdfObject):
  98.     
  99.     def writeToStream(self, stream, encryption_key):
  100.         stream.write('[')
  101.         for data in self:
  102.             stream.write(' ')
  103.             data.writeToStream(stream, encryption_key)
  104.         
  105.         stream.write(' ]')
  106.  
  107.     
  108.     def readFromStream(stream, pdf):
  109.         arr = ArrayObject()
  110.         tmp = stream.read(1)
  111.         if tmp != '[':
  112.             raise utils.PdfReadError, 'error reading array'
  113.         tmp != '['
  114.         while True:
  115.             tok = stream.read(1)
  116.             while tok.isspace():
  117.                 tok = stream.read(1)
  118.             stream.seek(-1, 1)
  119.             peekahead = stream.read(1)
  120.             if peekahead == ']':
  121.                 break
  122.             
  123.             stream.seek(-1, 1)
  124.             arr.append(readObject(stream, pdf))
  125.         return arr
  126.  
  127.     readFromStream = staticmethod(readFromStream)
  128.  
  129.  
  130. class IndirectObject(PdfObject):
  131.     
  132.     def __init__(self, idnum, generation, pdf):
  133.         self.idnum = idnum
  134.         self.generation = generation
  135.         self.pdf = pdf
  136.  
  137.     
  138.     def getObject(self):
  139.         return self.pdf.getObject(self).getObject()
  140.  
  141.     
  142.     def __repr__(self):
  143.         return 'IndirectObject(%r, %r)' % (self.idnum, self.generation)
  144.  
  145.     
  146.     def __eq__(self, other):
  147.         if other != None and isinstance(other, IndirectObject) and self.idnum == other.idnum and self.generation == other.generation:
  148.             pass
  149.         return self.pdf is other.pdf
  150.  
  151.     
  152.     def __ne__(self, other):
  153.         return not self.__eq__(other)
  154.  
  155.     
  156.     def writeToStream(self, stream, encryption_key):
  157.         stream.write('%s %s R' % (self.idnum, self.generation))
  158.  
  159.     
  160.     def readFromStream(stream, pdf):
  161.         idnum = ''
  162.         while True:
  163.             tok = stream.read(1)
  164.             if tok.isspace():
  165.                 break
  166.             
  167.             idnum += tok
  168.         generation = ''
  169.         while True:
  170.             tok = stream.read(1)
  171.             if tok.isspace():
  172.                 break
  173.             
  174.             generation += tok
  175.         r = stream.read(1)
  176.         if r != 'R':
  177.             raise utils.PdfReadError('error reading indirect object reference')
  178.         r != 'R'
  179.         return IndirectObject(int(idnum), int(generation), pdf)
  180.  
  181.     readFromStream = staticmethod(readFromStream)
  182.  
  183.  
  184. class FloatObject(decimal.Decimal, PdfObject):
  185.     
  186.     def __new__(cls, value = '0', context = None):
  187.         return decimal.Decimal.__new__(cls, str(value), context)
  188.  
  189.     
  190.     def __repr__(self):
  191.         return str(self)
  192.  
  193.     
  194.     def writeToStream(self, stream, encryption_key):
  195.         stream.write(str(self))
  196.  
  197.  
  198.  
  199. class NumberObject(int, PdfObject):
  200.     
  201.     def __init__(self, value):
  202.         int.__init__(self, value)
  203.  
  204.     
  205.     def writeToStream(self, stream, encryption_key):
  206.         stream.write(repr(self))
  207.  
  208.     
  209.     def readFromStream(stream):
  210.         name = ''
  211.         while True:
  212.             tok = stream.read(1)
  213.             if tok != '+' and tok != '-' and tok != '.' and not tok.isdigit():
  214.                 stream.seek(-1, 1)
  215.                 break
  216.             
  217.             name += tok
  218.         if name.find('.') != -1:
  219.             return FloatObject(name)
  220.         return NumberObject(name)
  221.  
  222.     readFromStream = staticmethod(readFromStream)
  223.  
  224.  
  225. def createStringObject(string):
  226.     if isinstance(string, unicode):
  227.         return TextStringObject(string)
  228.     if isinstance(string, str):
  229.         if string.startswith(codecs.BOM_UTF16_BE):
  230.             retval = TextStringObject(string.decode('utf-16'))
  231.             retval.autodetect_utf16 = True
  232.             return retval
  233.         
  234.         try:
  235.             retval = TextStringObject(decode_pdfdocencoding(string))
  236.             retval.autodetect_pdfdocencoding = True
  237.             return retval
  238.         except UnicodeDecodeError:
  239.             string.startswith(codecs.BOM_UTF16_BE)
  240.             string.startswith(codecs.BOM_UTF16_BE)
  241.             isinstance(string, unicode)
  242.             return ByteStringObject(string)
  243.         
  244.  
  245.     string.startswith(codecs.BOM_UTF16_BE)<EXCEPTION MATCH>UnicodeDecodeError
  246.     raise TypeError('createStringObject should have str or unicode arg')
  247.  
  248.  
  249. def readHexStringFromStream(stream):
  250.     stream.read(1)
  251.     txt = ''
  252.     x = ''
  253.     while True:
  254.         tok = readNonWhitespace(stream)
  255.         if tok == '>':
  256.             break
  257.         
  258.         x += tok
  259.         if len(x) == 2:
  260.             txt += chr(int(x, base = 16))
  261.             x = ''
  262.             continue
  263.     if len(x) == 1:
  264.         x += '0'
  265.     
  266.     if len(x) == 2:
  267.         txt += chr(int(x, base = 16))
  268.     
  269.     return createStringObject(txt)
  270.  
  271.  
  272. def readStringFromStream(stream):
  273.     tok = stream.read(1)
  274.     parens = 1
  275.     txt = ''
  276.     while True:
  277.         tok = stream.read(1)
  278.         if tok == '(':
  279.             parens += 1
  280.         elif tok == ')':
  281.             parens -= 1
  282.             if parens == 0:
  283.                 break
  284.             
  285.         elif tok == '\\':
  286.             tok = stream.read(1)
  287.             if tok == 'n':
  288.                 tok = '\n'
  289.             elif tok == 'r':
  290.                 tok = '\r'
  291.             elif tok == 't':
  292.                 tok = '\t'
  293.             elif tok == 'b':
  294.                 tok = '\x08'
  295.             elif tok == 'f':
  296.                 tok = '\x0c'
  297.             elif tok == '(':
  298.                 tok = '('
  299.             elif tok == ')':
  300.                 tok = ')'
  301.             elif tok == '\\':
  302.                 tok = '\\'
  303.             elif tok.isdigit():
  304.                 tok += stream.read(2)
  305.                 tok = chr(int(tok, base = 8))
  306.             elif tok in '\n\r':
  307.                 tok = stream.read(1)
  308.                 if tok not in '\n\r':
  309.                     stream.seek(-1, 1)
  310.                 
  311.                 tok = ''
  312.             else:
  313.                 raise utils.PdfReadError('Unexpected escaped string')
  314.         tok == 'n'
  315.         txt += tok
  316.     return createStringObject(txt)
  317.  
  318.  
  319. class ByteStringObject(str, PdfObject):
  320.     original_bytes = property((lambda self: self))
  321.     
  322.     def writeToStream(self, stream, encryption_key):
  323.         bytearr = self
  324.         if encryption_key:
  325.             bytearr = RC4_encrypt(encryption_key, bytearr)
  326.         
  327.         stream.write('<')
  328.         stream.write(bytearr.encode('hex'))
  329.         stream.write('>')
  330.  
  331.  
  332.  
  333. class TextStringObject(unicode, PdfObject):
  334.     autodetect_pdfdocencoding = False
  335.     autodetect_utf16 = False
  336.     original_bytes = property((lambda self: self.get_original_bytes()))
  337.     
  338.     def get_original_bytes(self):
  339.         if self.autodetect_utf16:
  340.             return codecs.BOM_UTF16_BE + self.encode('utf-16be')
  341.         if self.autodetect_pdfdocencoding:
  342.             return encode_pdfdocencoding(self)
  343.         raise Exception('no information about original bytes')
  344.  
  345.     
  346.     def writeToStream(self, stream, encryption_key):
  347.         
  348.         try:
  349.             bytearr = encode_pdfdocencoding(self)
  350.         except UnicodeEncodeError:
  351.             bytearr = codecs.BOM_UTF16_BE + self.encode('utf-16be')
  352.  
  353.         if encryption_key:
  354.             bytearr = RC4_encrypt(encryption_key, bytearr)
  355.             obj = ByteStringObject(bytearr)
  356.             obj.writeToStream(stream, None)
  357.         else:
  358.             stream.write('(')
  359.             for c in bytearr:
  360.                 if not c.isalnum() and c != ' ':
  361.                     stream.write('\\%03o' % ord(c))
  362.                     continue
  363.                 stream.write(c)
  364.             
  365.             stream.write(')')
  366.  
  367.  
  368.  
  369. class NameObject(str, PdfObject):
  370.     delimiterCharacters = ('(', ')', '<', '>', '[', ']', '{', '}', '/', '%')
  371.     
  372.     def __init__(self, data):
  373.         str.__init__(self, data)
  374.  
  375.     
  376.     def writeToStream(self, stream, encryption_key):
  377.         stream.write(self)
  378.  
  379.     
  380.     def readFromStream(stream):
  381.         name = stream.read(1)
  382.         if name != '/':
  383.             raise utils.PdfReadError, 'name read error'
  384.         name != '/'
  385.         while True:
  386.             tok = stream.read(1)
  387.             if tok.isspace() or tok in NameObject.delimiterCharacters:
  388.                 stream.seek(-1, 1)
  389.                 break
  390.             
  391.             name += tok
  392.         return NameObject(name)
  393.  
  394.     readFromStream = staticmethod(readFromStream)
  395.  
  396.  
  397. class DictionaryObject(dict, PdfObject):
  398.     
  399.     def __init__(self, *args, **kwargs):
  400.         if len(args) == 0:
  401.             self.update(kwargs)
  402.         elif len(args) == 1:
  403.             arr = args[0]
  404.             if not hasattr(arr, 'iteritems'):
  405.                 newarr = { }
  406.                 for k, v in arr:
  407.                     newarr[k] = v
  408.                 
  409.                 arr = newarr
  410.             
  411.             self.update(arr)
  412.         else:
  413.             raise TypeError('dict expected at most 1 argument, got 3')
  414.         return len(args) == 0
  415.  
  416.     
  417.     def update(self, arr):
  418.         for k, v in arr.iteritems():
  419.             self.__setitem__(k, v)
  420.         
  421.  
  422.     
  423.     def raw_get(self, key):
  424.         return dict.__getitem__(self, key)
  425.  
  426.     
  427.     def __setitem__(self, key, value):
  428.         if not isinstance(key, PdfObject):
  429.             raise ValueError('key must be PdfObject')
  430.         isinstance(key, PdfObject)
  431.         if not isinstance(value, PdfObject):
  432.             raise ValueError('value must be PdfObject')
  433.         isinstance(value, PdfObject)
  434.         return dict.__setitem__(self, key, value)
  435.  
  436.     
  437.     def setdefault(self, key, value = None):
  438.         if not isinstance(key, PdfObject):
  439.             raise ValueError('key must be PdfObject')
  440.         isinstance(key, PdfObject)
  441.         if not isinstance(value, PdfObject):
  442.             raise ValueError('value must be PdfObject')
  443.         isinstance(value, PdfObject)
  444.         return dict.setdefault(self, key, value)
  445.  
  446.     
  447.     def __getitem__(self, key):
  448.         return dict.__getitem__(self, key).getObject()
  449.  
  450.     
  451.     def getXmpMetadata(self):
  452.         metadata = self.get('/Metadata', None)
  453.         if metadata == None:
  454.             return None
  455.         metadata = metadata.getObject()
  456.         import xmp
  457.         if not isinstance(metadata, xmp.XmpInformation):
  458.             metadata = xmp.XmpInformation(metadata)
  459.             self[NameObject('/Metadata')] = metadata
  460.         
  461.         return metadata
  462.  
  463.     xmpMetadata = property((lambda self: self.getXmpMetadata()), None, None)
  464.     
  465.     def writeToStream(self, stream, encryption_key):
  466.         stream.write('<<\n')
  467.         for key, value in self.items():
  468.             key.writeToStream(stream, encryption_key)
  469.             stream.write(' ')
  470.             value.writeToStream(stream, encryption_key)
  471.             stream.write('\n')
  472.         
  473.         stream.write('>>')
  474.  
  475.     
  476.     def readFromStream(stream, pdf):
  477.         tmp = stream.read(2)
  478.         if tmp != '<<':
  479.             raise utils.PdfReadError, 'dictionary read error'
  480.         tmp != '<<'
  481.         data = { }
  482.         while True:
  483.             tok = readNonWhitespace(stream)
  484.             if tok == '>':
  485.                 stream.read(1)
  486.                 break
  487.             
  488.             stream.seek(-1, 1)
  489.             key = readObject(stream, pdf)
  490.             tok = readNonWhitespace(stream)
  491.             stream.seek(-1, 1)
  492.             value = readObject(stream, pdf)
  493.             if data.has_key(key):
  494.                 raise utils.PdfReadError, 'multiple definitions in dictionary'
  495.             data.has_key(key)
  496.             data[key] = value
  497.         pos = stream.tell()
  498.         s = readNonWhitespace(stream)
  499.         if s == 's' and stream.read(5) == 'tream':
  500.             eol = stream.read(1)
  501.             while eol == ' ':
  502.                 eol = stream.read(1)
  503.             if eol == '\r':
  504.                 stream.read(1)
  505.             
  506.             length = data['/Length']
  507.             if isinstance(length, IndirectObject):
  508.                 t = stream.tell()
  509.                 length = pdf.getObject(length)
  510.                 stream.seek(t, 0)
  511.             
  512.             data['__streamdata__'] = stream.read(length)
  513.             e = readNonWhitespace(stream)
  514.             ndstream = stream.read(8)
  515.             if e + ndstream != 'endstream':
  516.                 pos = stream.tell()
  517.                 stream.seek(-10, 1)
  518.                 end = stream.read(9)
  519.                 if end == 'endstream':
  520.                     data['__streamdata__'] = data['__streamdata__'][:-1]
  521.                 else:
  522.                     stream.seek(pos, 0)
  523.                     raise utils.PdfReadError, "Unable to find 'endstream' marker after stream."
  524.             end == 'endstream'
  525.         else:
  526.             stream.seek(pos, 0)
  527.         if data.has_key('__streamdata__'):
  528.             return StreamObject.initializeFromDictionary(data)
  529.         retval = DictionaryObject()
  530.         retval.update(data)
  531.         return retval
  532.  
  533.     readFromStream = staticmethod(readFromStream)
  534.  
  535.  
  536. class StreamObject(DictionaryObject):
  537.     
  538.     def __init__(self):
  539.         self._data = None
  540.         self.decodedSelf = None
  541.  
  542.     
  543.     def writeToStream(self, stream, encryption_key):
  544.         self[NameObject('/Length')] = NumberObject(len(self._data))
  545.         DictionaryObject.writeToStream(self, stream, encryption_key)
  546.         del self['/Length']
  547.         stream.write('\nstream\n')
  548.         data = self._data
  549.         if encryption_key:
  550.             data = RC4_encrypt(encryption_key, data)
  551.         
  552.         stream.write(data)
  553.         stream.write('\nendstream')
  554.  
  555.     
  556.     def initializeFromDictionary(data):
  557.         if data.has_key('/Filter'):
  558.             retval = EncodedStreamObject()
  559.         else:
  560.             retval = DecodedStreamObject()
  561.         retval._data = data['__streamdata__']
  562.         del data['__streamdata__']
  563.         del data['/Length']
  564.         retval.update(data)
  565.         return retval
  566.  
  567.     initializeFromDictionary = staticmethod(initializeFromDictionary)
  568.     
  569.     def flateEncode(self):
  570.         if self.has_key('/Filter'):
  571.             f = self['/Filter']
  572.             if isinstance(f, ArrayObject):
  573.                 f.insert(0, NameObject('/FlateDecode'))
  574.             else:
  575.                 newf = ArrayObject()
  576.                 newf.append(NameObject('/FlateDecode'))
  577.                 newf.append(f)
  578.                 f = newf
  579.         else:
  580.             f = NameObject('/FlateDecode')
  581.         retval = EncodedStreamObject()
  582.         retval[NameObject('/Filter')] = f
  583.         retval._data = filters.FlateDecode.encode(self._data)
  584.         return retval
  585.  
  586.  
  587.  
  588. class DecodedStreamObject(StreamObject):
  589.     
  590.     def getData(self):
  591.         return self._data
  592.  
  593.     
  594.     def setData(self, data):
  595.         self._data = data
  596.  
  597.  
  598.  
  599. class EncodedStreamObject(StreamObject):
  600.     
  601.     def __init__(self):
  602.         self.decodedSelf = None
  603.  
  604.     
  605.     def getData(self):
  606.         if self.decodedSelf:
  607.             return self.decodedSelf.getData()
  608.         decoded = DecodedStreamObject()
  609.         decoded._data = filters.decodeStreamData(self)
  610.         for key, value in self.items():
  611.             if key not in ('/Length', '/Filter', '/DecodeParms'):
  612.                 decoded[key] = value
  613.                 continue
  614.             self.decodedSelf
  615.         
  616.         self.decodedSelf = decoded
  617.         return decoded._data
  618.  
  619.     
  620.     def setData(self, data):
  621.         raise utils.PdfReadError, 'Creating EncodedStreamObject is not currently supported'
  622.  
  623.  
  624.  
  625. class RectangleObject(ArrayObject):
  626.     
  627.     def __init__(self, arr):
  628.         []([], [ self.ensureIsNumber(x) for x in arr ])
  629.  
  630.     
  631.     def ensureIsNumber(self, value):
  632.         if not isinstance(value, (NumberObject, FloatObject)):
  633.             value = FloatObject(value)
  634.         
  635.         return value
  636.  
  637.     
  638.     def __repr__(self):
  639.         return 'RectangleObject(%s)' % repr(list(self))
  640.  
  641.     
  642.     def getLowerLeft_x(self):
  643.         return self[0]
  644.  
  645.     
  646.     def getLowerLeft_y(self):
  647.         return self[1]
  648.  
  649.     
  650.     def getUpperRight_x(self):
  651.         return self[2]
  652.  
  653.     
  654.     def getUpperRight_y(self):
  655.         return self[3]
  656.  
  657.     
  658.     def getUpperLeft_x(self):
  659.         return self.getLowerLeft_x()
  660.  
  661.     
  662.     def getUpperLeft_y(self):
  663.         return self.getUpperRight_y()
  664.  
  665.     
  666.     def getLowerRight_x(self):
  667.         return self.getUpperRight_x()
  668.  
  669.     
  670.     def getLowerRight_y(self):
  671.         return self.getLowerLeft_y()
  672.  
  673.     
  674.     def getLowerLeft(self):
  675.         return (self.getLowerLeft_x(), self.getLowerLeft_y())
  676.  
  677.     
  678.     def getLowerRight(self):
  679.         return (self.getLowerRight_x(), self.getLowerRight_y())
  680.  
  681.     
  682.     def getUpperLeft(self):
  683.         return (self.getUpperLeft_x(), self.getUpperLeft_y())
  684.  
  685.     
  686.     def getUpperRight(self):
  687.         return (self.getUpperRight_x(), self.getUpperRight_y())
  688.  
  689.     
  690.     def setLowerLeft(self, value):
  691.         (self[0], self[1]) = [ self.ensureIsNumber(x) for x in value ]
  692.  
  693.     
  694.     def setLowerRight(self, value):
  695.         (self[2], self[1]) = [ self.ensureIsNumber(x) for x in value ]
  696.  
  697.     
  698.     def setUpperLeft(self, value):
  699.         (self[0], self[3]) = [ self.ensureIsNumber(x) for x in value ]
  700.  
  701.     
  702.     def setUpperRight(self, value):
  703.         (self[2], self[3]) = [ self.ensureIsNumber(x) for x in value ]
  704.  
  705.     lowerLeft = property(getLowerLeft, setLowerLeft, None, None)
  706.     lowerRight = property(getLowerRight, setLowerRight, None, None)
  707.     upperLeft = property(getUpperLeft, setUpperLeft, None, None)
  708.     upperRight = property(getUpperRight, setUpperRight, None, None)
  709.  
  710.  
  711. def encode_pdfdocencoding(unicode_string):
  712.     retval = ''
  713.     for c in unicode_string:
  714.         
  715.         try:
  716.             retval += chr(_pdfDocEncoding_rev[c])
  717.         continue
  718.         except KeyError:
  719.             raise UnicodeEncodeError('pdfdocencoding', c, -1, -1, 'does not exist in translation table')
  720.             continue
  721.         
  722.  
  723.     
  724.     return retval
  725.  
  726.  
  727. def decode_pdfdocencoding(byte_array):
  728.     retval = u''
  729.     for b in byte_array:
  730.         c = _pdfDocEncoding[ord(b)]
  731.         if c == u'\x00':
  732.             raise UnicodeDecodeError('pdfdocencoding', b, -1, -1, 'does not exist in translation table')
  733.         c == u'\x00'
  734.         retval += c
  735.     
  736.     return retval
  737.  
  738. _pdfDocEncoding = (u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'╦ÿ', u'╦ç', u'╦å', u'╦Ö', u'╦¥', u'╦¢', u'╦Ü', u'╦£', u' ', u'!', u'"', u'#', u'$', u'%', u'&', u"'", u'(', u')', u'*', u'+', u',', u'-', u'.', u'/', u'0', u'1', u'2', u'3', u'4', u'5', u'6', u'7', u'8', u'9', u':', u';', u'<', u'=', u'>', u'?', u'@', u'A', u'B', u'C', u'D', u'E', u'F', u'G', u'H', u'I', u'J', u'K', u'L', u'M', u'N', u'O', u'P', u'Q', u'R', u'S', u'T', u'U', u'V', u'W', u'X', u'Y', u'Z', u'[', u'\\', u']', u'^', u'_', u'`', u'a', u'b', u'c', u'd', u'e', u'f', u'g', u'h', u'i', u'j', u'k', u'l', u'm', u'n', u'o', u'p', u'q', u'r', u's', u't', u'u', u'v', u'w', u'x', u'y', u'z', u'{', u'|', u'}', u'~', u'\x00', u'ΓÇó', u'ΓÇá', u'ΓÇí', u'ΓǪ', u'ΓÇö', u'ΓÇô', u'╞Æ', u'Γüä', u'ΓÇ╣', u'ΓÇ║', u'ΓêÆ', u'ΓÇ░', u'ΓÇ₧', u'ΓÇ£', u'ΓÇ¥', u'ΓÇÿ', u'ΓÇÖ', u'ΓÇÜ', u'Γäó', u'∩¼ü', u'∩¼é', u'┼ü', u'┼Æ', u'┼á', u'┼╕', u'┼╜', u'─▒', u'┼é', u'┼ô', u'┼í', u'┼╛', u'\x00', u'Γé¼', u'┬í', u'┬ó', u'┬ú', u'┬ñ', u'┬Ñ', u'┬ª', u'┬º', u'┬¿', u'┬⌐', u'┬¬', u'┬½', u'┬¼', u'\x00', u'┬«', u'┬»', u'┬░', u'┬▒', u'┬▓', u'┬│', u'┬┤', u'┬╡', u'┬╢', u'┬╖', u'┬╕', u'┬╣', u'┬║', u'┬╗', u'┬╝', u'┬╜', u'┬╛', u'┬┐', u'├Ç', u'├ü', u'├é', u'├â', u'├ä', u'├à', u'├å', u'├ç', u'├ê', u'├ë', u'├è', u'├ï', u'├î', u'├ì', u'├Ä', u'├Å', u'├É', u'├æ', u'├Æ', u'├ô', u'├ö', u'├ò', u'├û', u'├ù', u'├ÿ', u'├Ö', u'├Ü', u'├¢', u'├£', u'├¥', u'├₧', u'├ƒ', u'├á', u'├í', u'├ó', u'├ú', u'├ñ', u'├Ñ', u'├ª', u'├º', u'├¿', u'├⌐', u'├¬', u'├½', u'├¼', u'├¡', u'├«', u'├»', u'├░', u'├▒', u'├▓', u'├│', u'├┤', u'├╡', u'├╢', u'├╖', u'├╕', u'├╣', u'├║', u'├╗', u'├╝', u'├╜', u'├╛', u'├┐')
  739. _pdfDocEncoding_rev = { }
  740. for i in xrange(256):
  741.     char = _pdfDocEncoding[i]
  742.     if char == u'\x00':
  743.         continue
  744.     
  745.     _pdfDocEncoding_rev[char] = i
  746.  
  747.