MCPcopy Index your code
hub / github.com/clips/pattern / PDFXRefStream

Class PDFXRefStream

pattern/web/pdf/pdfparser.py:152–219  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

150## PDFXRefStream
151##
152class PDFXRefStream(PDFBaseXRef):
153
154 def __init__(self):
155 self.data = None
156 self.entlen = None
157 self.fl1 = self.fl2 = self.fl3 = None
158 self.objid_ranges = []
159 return
160
161 def __repr__(self):
162 return '<PDFXRefStream: fields=%d,%d,%d>' % (self.fl1, self.fl2, self.fl3)
163
164 def load(self, parser, debug=0):
165 (_,objid) = parser.nexttoken() # ignored
166 (_,genno) = parser.nexttoken() # ignored
167 (_,kwd) = parser.nexttoken()
168 (_,stream) = parser.nextobject()
169 if not isinstance(stream, PDFStream) or stream['Type'] is not LITERAL_XREF:
170 raise PDFNoValidXRef('Invalid PDF stream spec.')
171 size = stream['Size']
172 index_array = stream.get('Index', (0,size))
173 if len(index_array) % 2 != 0:
174 raise PDFSyntaxError('Invalid index number')
175 self.objid_ranges.extend( ObjIdRange(start, nobjs)
176 for (start,nobjs) in choplist(2, index_array) )
177 (self.fl1, self.fl2, self.fl3) = stream['W']
178 self.data = stream.get_data()
179 self.entlen = self.fl1+self.fl2+self.fl3
180 self.trailer = stream.attrs
181 if 1 <= debug:
182 print >>sys.stderr, ('xref stream: objid=%s, fields=%d,%d,%d' %
183 (', '.join(map(repr, self.objid_ranges)),
184 self.fl1, self.fl2, self.fl3))
185 return
186
187 def get_trailer(self):
188 return self.trailer
189
190 def get_objids(self):
191 for objid_range in self.objid_ranges:
192 for x in xrange(objid_range.get_start_id(), objid_range.get_end_id()+1):
193 yield x
194 return
195
196 def get_pos(self, objid):
197 offset = 0
198 found = False
199 for objid_range in self.objid_ranges:
200 if objid >= objid_range.get_start_id() and objid <= objid_range.get_end_id():
201 offset += objid - objid_range.get_start_id()
202 found = True
203 break
204 else:
205 offset += objid_range.get_nobjs()
206 if not found: raise KeyError(objid)
207 i = self.entlen * offset
208 ent = self.data[i:i+self.entlen]
209 f1 = nunpack(ent[:self.fl1], 1)

Callers 1

read_xref_fromMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…