home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- __license__ = 'GPL v3'
- __copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
- import struct
- from calibre.ebooks.lrf import LRFParseError
-
- class Tag(object):
- tags = {
- 0: (6, '*ObjectStart'),
- 1: (0, '*ObjectEnd'),
- 2: (4, '*ObjectInfoLink'),
- 3: (4, '*Link'),
- 4: (4, '*StreamSize'),
- 5: (0, '*StreamStart'),
- 6: (0, '*StreamEnd'),
- 7: (4, None),
- 8: (4, None),
- 9: (4, None),
- 10: (4, None),
- 11: ('type_one', '*ContainedObjectsList'),
- 13: (2, None),
- 14: (2, None),
- 17: (2, None),
- 18: (2, None),
- 19: (2, None),
- 20: (2, None),
- 21: (2, None),
- 22: ('string', None),
- 23: (4, None),
- 24: (4, None),
- 25: (2, None),
- 26: (2, None),
- 27: (2, None),
- 28: (2, None),
- 29: (2, None),
- 30: (2, None),
- 33: (2, None),
- 34: (2, None),
- 35: (2, None),
- 36: (2, None),
- 37: (2, None),
- 38: (2, None),
- 39: (2, None),
- 40: (2, None),
- 41: (6, None),
- 42: (2, None),
- 43: (2, None),
- 44: (2, None),
- 45: (4, None),
- 46: (2, None),
- 49: (2, None),
- 50: (2, None),
- 51: (2, None),
- 52: (4, None),
- 53: (2, None),
- 54: (2, None),
- 55: (4, None),
- 56: (2, None),
- 57: (2, None),
- 58: (2, None),
- 60: (2, None),
- 61: (2, None),
- 62: (2, None),
- 65: (2, None),
- 66: (2, None),
- 68: (4, None),
- 69: (4, None),
- 70: (2, None),
- 71: (2, None),
- 72: (2, None),
- 73: (8, None),
- 74: (8, None),
- 75: (4, None),
- 76: (4, None),
- 77: (0, None),
- 78: (12, None),
- 81: (2, None),
- 82: (2, None),
- 83: (4, None),
- 84: (2, '*StreamFlags'),
- 85: ('string', None),
- 86: (2, None),
- 87: (2, None),
- 88: (2, None),
- 89: ('string', None),
- 90: ('string', None),
- 91: (4, None),
- 92: ('type_one', None),
- 93: ('string', None),
- 94: (2, None),
- 97: (2, None),
- 98: (0, None),
- 99: (0, None),
- 100: (0, None),
- 101: (0, None),
- 102: (0, None),
- 103: (0, None),
- 104: (0, None),
- 105: (0, None),
- 106: (0, None),
- 107: (0, None),
- 108: (8, None),
- 109: (2, None),
- 110: (0, None),
- 113: (0, None),
- 114: (0, None),
- 115: (10, None),
- 117: (2, None),
- 118: (2, None),
- 119: (2, None),
- 120: ('tag_78', None),
- 121: (2, None),
- 122: (2, None),
- 123: (4, None),
- 124: (4, '*ParentPageTree'),
- 129: (0, None),
- 130: (0, None),
- 161: (4, None),
- 162: (0, None),
- 165: ('unknown', None),
- 166: (0, None),
- 167: (4, None),
- 168: (0, None),
- 169: (0, None),
- 170: (0, None),
- 171: (0, None),
- 172: (0, None),
- 173: (0, None),
- 174: (0, None),
- 177: (0, None),
- 178: (0, None),
- 179: (0, None),
- 180: (0, None),
- 181: (0, None),
- 182: (0, None),
- 183: (0, None),
- 184: (0, None),
- 185: (0, None),
- 186: (0, None),
- 187: (0, None),
- 188: (0, None),
- 189: (0, None),
- 190: (0, None),
- 193: (0, None),
- 194: (0, None),
- 195: (2, None),
- 196: (0, None),
- 197: (2, None),
- 198: (2, None),
- 199: (0, None),
- 200: (2, None),
- 201: (0, None),
- 202: (2, None),
- 203: ('unknown', None),
- 204: (2, None),
- 209: (12, None),
- 210: (0, None),
- 212: (2, None),
- 214: (0, None),
- 215: (14, None),
- 216: (4, None),
- 217: (8, None),
- 218: (2, None),
- 219: (2, None),
- 220: (2, None),
- 221: (2, None),
- 241: (2, None),
- 242: (4, None),
- 243: (4, None),
- 244: (2, None),
- 245: (4, None),
- 246: (4, None),
- 247: (4, None),
- 248: (4, None),
- 249: (6, None) }
- name_map = { }
- for key in tags.keys():
- temp = tags[key][1]
- if temp is not None:
- name_map[key] = temp
- continue
-
-
- def __init__(self, stream):
- self.offset = stream.tell()
- tag_id = struct.unpack('<BB', stream.read(2))
- if tag_id[1] != 245:
- raise LRFParseError('Bad tag ID %02X at %d' % (tag_id[1], self.offset))
- tag_id[1] != 245
- if tag_id[0] not in self.__class__.tags:
- raise LRFParseError('Unknown tag ID: F5%02X' % tag_id[0])
- tag_id[0] not in self.__class__.tags
- self.id = 62720 + tag_id[0]
- (size, self.name) = self.__class__.tags[tag_id[0]]
- if isinstance(size, basestring):
- parser = getattr(self, size + '_parser')
- self.contents = parser(stream)
- else:
- self.contents = stream.read(size)
-
-
- def __str__(self):
- s = 'Tag %04X ' % self.id
- if self.name:
- s += self.name
-
- s += ' at %08X, contents: %s' % (self.offset, repr(self.contents))
- return s
-
-
- def byte(self):
-
- def fget(self):
- if len(self.contents) != 1:
- raise LRFParseError('Bad parameter for tag ID: %04X' % self.id)
- len(self.contents) != 1
- return struct.unpack('<B', self.contents)[0]
-
- return property(fget = fget)
-
- byte = dynamic_property(byte)
-
- def word(self):
-
- def fget(self):
- if len(self.contents) != 2:
- raise LRFParseError('Bad parameter for tag ID: %04X' % self.id)
- len(self.contents) != 2
- return struct.unpack('<H', self.contents)[0]
-
- return property(fget = fget)
-
- word = dynamic_property(word)
-
- def sword(self):
-
- def fget(self):
- if len(self.contents) != 2:
- raise LRFParseError('Bad parameter for tag ID: %04X' % self.id)
- len(self.contents) != 2
- return struct.unpack('<h', self.contents)[0]
-
- return property(fget = fget)
-
- sword = dynamic_property(sword)
-
- def dword(self):
-
- def fget(self):
- if len(self.contents) != 4:
- raise LRFParseError('Bad parameter for tag ID: %04X' % self.id)
- len(self.contents) != 4
- return struct.unpack('<I', self.contents)[0]
-
- return property(fget = fget)
-
- dword = dynamic_property(dword)
-
- def dummy_parser(self, stream):
- raise LRFParseError('Unknown tag at %08X' % stream.tell())
-
-
- def string_parser(self, stream):
- size = struct.unpack('<H', stream.read(2))[0]
- return unicode(stream.read(size), 'utf_16')
-
- string_parser = classmethod(string_parser)
-
- def type_one_parser(self, stream):
- cnt = struct.unpack('<H', stream.read(2))[0]
- res = []
- while cnt > 0:
- res.append(struct.unpack('<I', stream.read(4))[0])
- cnt -= 1
- return res
-
-
- def tag_78_parser(self, stream):
- pos = stream.tell()
- res = []
- res.append(struct.unpack('<I', stream.read(4))[0])
- tag = Tag(stream)
- if tag.id != 62742:
- raise LRFParseError('Bad tag 78 at %08X' % pos)
- tag.id != 62742
- res.append(tag.contents)
- res.append(struct.unpack('<H', stream.read(2))[0])
- return res
-
-
-