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

Method do_keyword

pattern/web/pdf/pdfparser.py:615–686  ·  view source on GitHub ↗

Handles PDF-related keywords.

(self, pos, token)

Source from the content-addressed store, hash-verified

613 KEYWORD_XREF = KWD('xref')
614 KEYWORD_STARTXREF = KWD('startxref')
615 def do_keyword(self, pos, token):
616 """Handles PDF-related keywords."""
617
618 if token in (self.KEYWORD_XREF, self.KEYWORD_STARTXREF):
619 self.add_results(*self.pop(1))
620
621 elif token is self.KEYWORD_ENDOBJ:
622 self.add_results(*self.pop(4))
623
624 elif token is self.KEYWORD_NULL:
625 # null object
626 self.push((pos, None))
627
628 elif token is self.KEYWORD_R:
629 # reference to indirect object
630 try:
631 ((_,objid), (_,genno)) = self.pop(2)
632 (objid, genno) = (int(objid), int(genno))
633 obj = PDFObjRef(self.doc, objid, genno)
634 self.push((pos, obj))
635 except PSSyntaxError:
636 pass
637
638 elif token is self.KEYWORD_STREAM:
639 # stream object
640 ((_,dic),) = self.pop(1)
641 dic = dict_value(dic)
642 objlen = 0
643 if not self.fallback:
644 try:
645 objlen = int_value(dic['Length'])
646 except KeyError:
647 if STRICT:
648 raise PDFSyntaxError('/Length is undefined: %r' % dic)
649 self.seek(pos)
650 try:
651 (_, line) = self.nextline() # 'stream'
652 except PSEOF:
653 if STRICT:
654 raise PDFSyntaxError('Unexpected EOF')
655 return
656 pos += len(line)
657 self.fp.seek(pos)
658 data = self.fp.read(objlen)
659 self.seek(pos+objlen)
660 while 1:
661 try:
662 (linepos, line) = self.nextline()
663 except PSEOF:
664 if STRICT:
665 raise PDFSyntaxError('Unexpected EOF')
666 break
667 if 'endstream' in line:
668 i = line.index('endstream')
669 objlen += i
670 data += line[:i]
671 break
672 objlen += len(line)

Callers

nothing calls this directly

Calls 13

PDFObjRefClass · 0.90
dict_valueFunction · 0.90
int_valueFunction · 0.90
PDFStreamClass · 0.90
PDFSyntaxErrorClass · 0.85
lenFunction · 0.85
add_resultsMethod · 0.80
nextlineMethod · 0.80
popMethod · 0.45
pushMethod · 0.45
seekMethod · 0.45
readMethod · 0.45

Tested by

no test coverage detected