canonicalize package names

pull/1/head
Yusuke Shinyama 2011-03-02 23:43:03 +09:00
parent bb26cf9180
commit 18e782f330
8 changed files with 77 additions and 81 deletions

View File

@ -18,7 +18,7 @@ import os.path
import gzip import gzip
import cPickle as pickle import cPickle as pickle
import cmap import cmap
from struct import pack, unpack import struct
from psparser import PSStackParser from psparser import PSStackParser
from psparser import PSException, PSSyntaxError, PSTypeError, PSEOF from psparser import PSException, PSSyntaxError, PSTypeError, PSEOF
from psparser import PSLiteral, PSKeyword from psparser import PSLiteral, PSKeyword
@ -98,7 +98,7 @@ class IdentityCMap(object):
def decode(self, code): def decode(self, code):
n = len(code)/2 n = len(code)/2
if n: if n:
return unpack('>%dH' % n, code) return struct.unpack('>%dH' % n, code)
else: else:
return () return ()
@ -348,7 +348,7 @@ class CMapParser(PSStackParser):
vlen = len(svar) vlen = len(svar)
#assert s1 <= e1 #assert s1 <= e1
for i in xrange(e1-s1+1): for i in xrange(e1-s1+1):
x = sprefix+pack('>L',s1+i)[-vlen:] x = sprefix+struct.pack('>L',s1+i)[-vlen:]
self.cmap.add_code2cid(x, cid+i) self.cmap.add_code2cid(x, cid+i)
return return
@ -382,7 +382,7 @@ class CMapParser(PSStackParser):
prefix = code[:-4] prefix = code[:-4]
vlen = len(var) vlen = len(var)
for i in xrange(e1-s1+1): for i in xrange(e1-s1+1):
x = prefix+pack('>L',base+i)[-vlen:] x = prefix+struct.pack('>L',base+i)[-vlen:]
self.cmap.add_cid2unichr(s1+i, x) self.cmap.add_cid2unichr(s1+i, x)
return return

View File

@ -1,6 +1,5 @@
#!/usr/bin/env python2 #!/usr/bin/env python2
import sys import sys
from sys import stderr
try: try:
from cStringIO import StringIO from cStringIO import StringIO
except ImportError: except ImportError:
@ -84,7 +83,7 @@ class LZWDecoder(object):
x = self.feed(code) x = self.feed(code)
yield x yield x
if self.debug: if self.debug:
print >>stderr, ('nbits=%d, code=%d, output=%r, table=%r' % print >>sys.stderr, ('nbits=%d, code=%d, output=%r, table=%r' %
(self.nbits, code, x, self.table[258:])) (self.nbits, code, x, self.table[258:]))
return return

View File

@ -1,12 +1,12 @@
#!/usr/bin/env python2 #!/usr/bin/env python2
import sys import sys
import struct
try: try:
from cStringIO import StringIO from cStringIO import StringIO
except ImportError: except ImportError:
from StringIO import StringIO from StringIO import StringIO
from cmapdb import CMapDB, CMapParser, FileUnicodeMap, CMap from cmapdb import CMapDB, CMapParser, FileUnicodeMap, CMap
from encodingdb import EncodingDB, name2unicode from encodingdb import EncodingDB, name2unicode
from struct import pack, unpack
from psparser import PSStackParser from psparser import PSStackParser
from psparser import PSSyntaxError, PSEOF from psparser import PSSyntaxError, PSEOF
from psparser import LIT, KWD, STRICT from psparser import LIT, KWD, STRICT
@ -154,7 +154,7 @@ def getdict(data):
if b0 == 28: if b0 == 28:
value = b1<<8 | b2 value = b1<<8 | b2
else: else:
value = b1<<24 | b2<<16 | unpack('>H', fp.read(2))[0] value = b1<<24 | b2<<16 | struct.unpack('>H', fp.read(2))[0]
stack.append(value) stack.append(value)
return d return d
@ -246,7 +246,7 @@ class CFFFont(object):
def __init__(self, fp): def __init__(self, fp):
self.fp = fp self.fp = fp
self.offsets = [] self.offsets = []
(count, offsize) = unpack('>HB', self.fp.read(3)) (count, offsize) = struct.unpack('>HB', self.fp.read(3))
for i in xrange(count+1): for i in xrange(count+1):
self.offsets.append(nunpack(self.fp.read(offsize))) self.offsets.append(nunpack(self.fp.read(offsize)))
self.base = self.fp.tell()-1 self.base = self.fp.tell()-1
@ -270,7 +270,7 @@ class CFFFont(object):
self.name = name self.name = name
self.fp = fp self.fp = fp
# Header # Header
(_major,_minor,hdrsize,offsize) = unpack('BBBB', self.fp.read(4)) (_major,_minor,hdrsize,offsize) = struct.unpack('BBBB', self.fp.read(4))
self.fp.read(hdrsize-4) self.fp.read(hdrsize-4)
# Name INDEX # Name INDEX
self.name_index = self.INDEX(self.fp) self.name_index = self.INDEX(self.fp)
@ -296,16 +296,16 @@ class CFFFont(object):
format = self.fp.read(1) format = self.fp.read(1)
if format == '\x00': if format == '\x00':
# Format 0 # Format 0
(n,) = unpack('B', self.fp.read(1)) (n,) = struct.unpack('B', self.fp.read(1))
for (code,gid) in enumerate(unpack('B'*n, self.fp.read(n))): for (code,gid) in enumerate(struct.unpack('B'*n, self.fp.read(n))):
self.code2gid[code] = gid self.code2gid[code] = gid
self.gid2code[gid] = code self.gid2code[gid] = code
elif format == '\x01': elif format == '\x01':
# Format 1 # Format 1
(n,) = unpack('B', self.fp.read(1)) (n,) = struct.unpack('B', self.fp.read(1))
code = 0 code = 0
for i in xrange(n): for i in xrange(n):
(first,nleft) = unpack('BB', self.fp.read(2)) (first,nleft) = struct.unpack('BB', self.fp.read(2))
for gid in xrange(first,first+nleft+1): for gid in xrange(first,first+nleft+1):
self.code2gid[code] = gid self.code2gid[code] = gid
self.gid2code[gid] = code self.gid2code[gid] = code
@ -320,17 +320,17 @@ class CFFFont(object):
if format == '\x00': if format == '\x00':
# Format 0 # Format 0
n = self.nglyphs-1 n = self.nglyphs-1
for (gid,sid) in enumerate(unpack('>'+'H'*n, self.fp.read(2*n))): for (gid,sid) in enumerate(struct.unpack('>'+'H'*n, self.fp.read(2*n))):
gid += 1 gid += 1
name = self.getstr(sid) name = self.getstr(sid)
self.name2gid[name] = gid self.name2gid[name] = gid
self.gid2name[gid] = name self.gid2name[gid] = name
elif format == '\x01': elif format == '\x01':
# Format 1 # Format 1
(n,) = unpack('B', self.fp.read(1)) (n,) = struct.unpack('B', self.fp.read(1))
sid = 0 sid = 0
for i in xrange(n): for i in xrange(n):
(first,nleft) = unpack('BB', self.fp.read(2)) (first,nleft) = struct.unpack('BB', self.fp.read(2))
for gid in xrange(first,first+nleft+1): for gid in xrange(first,first+nleft+1):
name = self.getstr(sid) name = self.getstr(sid)
self.name2gid[name] = gid self.name2gid[name] = gid
@ -363,9 +363,9 @@ class TrueTypeFont(object):
self.fp = fp self.fp = fp
self.tables = {} self.tables = {}
self.fonttype = fp.read(4) self.fonttype = fp.read(4)
(ntables, _1, _2, _3) = unpack('>HHHH', fp.read(8)) (ntables, _1, _2, _3) = struct.unpack('>HHHH', fp.read(8))
for _ in xrange(ntables): for _ in xrange(ntables):
(name, tsum, offset, length) = unpack('>4sLLL', fp.read(16)) (name, tsum, offset, length) = struct.unpack('>4sLLL', fp.read(16))
self.tables[name] = (offset, length) self.tables[name] = (offset, length)
return return
@ -375,50 +375,50 @@ class TrueTypeFont(object):
(base_offset, length) = self.tables['cmap'] (base_offset, length) = self.tables['cmap']
fp = self.fp fp = self.fp
fp.seek(base_offset) fp.seek(base_offset)
(version, nsubtables) = unpack('>HH', fp.read(4)) (version, nsubtables) = struct.unpack('>HH', fp.read(4))
subtables = [] subtables = []
for i in xrange(nsubtables): for i in xrange(nsubtables):
subtables.append(unpack('>HHL', fp.read(8))) subtables.append(struct.unpack('>HHL', fp.read(8)))
char2gid = {} char2gid = {}
# Only supports subtable type 0, 2 and 4. # Only supports subtable type 0, 2 and 4.
for (_1, _2, st_offset) in subtables: for (_1, _2, st_offset) in subtables:
fp.seek(base_offset+st_offset) fp.seek(base_offset+st_offset)
(fmttype, fmtlen, fmtlang) = unpack('>HHH', fp.read(6)) (fmttype, fmtlen, fmtlang) = struct.unpack('>HHH', fp.read(6))
if fmttype == 0: if fmttype == 0:
char2gid.update(enumerate(unpack('>256B', fp.read(256)))) char2gid.update(enumerate(struct.unpack('>256B', fp.read(256))))
elif fmttype == 2: elif fmttype == 2:
subheaderkeys = unpack('>256H', fp.read(512)) subheaderkeys = struct.unpack('>256H', fp.read(512))
firstbytes = [0]*8192 firstbytes = [0]*8192
for (i,k) in enumerate(subheaderkeys): for (i,k) in enumerate(subheaderkeys):
firstbytes[k/8] = i firstbytes[k/8] = i
nhdrs = max(subheaderkeys)/8 + 1 nhdrs = max(subheaderkeys)/8 + 1
hdrs = [] hdrs = []
for i in xrange(nhdrs): for i in xrange(nhdrs):
(firstcode,entcount,delta,offset) = unpack('>HHhH', fp.read(8)) (firstcode,entcount,delta,offset) = struct.unpack('>HHhH', fp.read(8))
hdrs.append((i,firstcode,entcount,delta,fp.tell()-2+offset)) hdrs.append((i,firstcode,entcount,delta,fp.tell()-2+offset))
for (i,firstcode,entcount,delta,pos) in hdrs: for (i,firstcode,entcount,delta,pos) in hdrs:
if not entcount: continue if not entcount: continue
first = firstcode + (firstbytes[i] << 8) first = firstcode + (firstbytes[i] << 8)
fp.seek(pos) fp.seek(pos)
for c in xrange(entcount): for c in xrange(entcount):
gid = unpack('>H', fp.read(2)) gid = struct.unpack('>H', fp.read(2))
if gid: if gid:
gid += delta gid += delta
char2gid[first+c] = gid char2gid[first+c] = gid
elif fmttype == 4: elif fmttype == 4:
(segcount, _1, _2, _3) = unpack('>HHHH', fp.read(8)) (segcount, _1, _2, _3) = struct.unpack('>HHHH', fp.read(8))
segcount /= 2 segcount /= 2
ecs = unpack('>%dH' % segcount, fp.read(2*segcount)) ecs = struct.unpack('>%dH' % segcount, fp.read(2*segcount))
fp.read(2) fp.read(2)
scs = unpack('>%dH' % segcount, fp.read(2*segcount)) scs = struct.unpack('>%dH' % segcount, fp.read(2*segcount))
idds = unpack('>%dh' % segcount, fp.read(2*segcount)) idds = struct.unpack('>%dh' % segcount, fp.read(2*segcount))
pos = fp.tell() pos = fp.tell()
idrs = unpack('>%dH' % segcount, fp.read(2*segcount)) idrs = struct.unpack('>%dH' % segcount, fp.read(2*segcount))
for (ec,sc,idd,idr) in zip(ecs, scs, idds, idrs): for (ec,sc,idd,idr) in zip(ecs, scs, idds, idrs):
if idr: if idr:
fp.seek(pos+idr) fp.seek(pos+idr)
for c in xrange(sc, ec+1): for c in xrange(sc, ec+1):
char2gid[c] = (unpack('>H', fp.read(2))[0] + idd) & 0xffff char2gid[c] = (struct.unpack('>H', fp.read(2))[0] + idd) & 0xffff
else: else:
for c in xrange(sc, ec+1): for c in xrange(sc, ec+1):
char2gid[c] = (c + idd) & 0xffff char2gid[c] = (c + idd) & 0xffff

View File

@ -1,7 +1,6 @@
#!/usr/bin/env python2 #!/usr/bin/env python2
import sys
import re import re
from sys import stderr
from struct import pack, unpack
try: try:
from cStringIO import StringIO from cStringIO import StringIO
except ImportError: except ImportError:
@ -159,7 +158,7 @@ class PDFResourceManager(object):
font = self.fonts[objid] font = self.fonts[objid]
else: else:
if 2 <= self.debug: if 2 <= self.debug:
print >>stderr, 'get_font: create: objid=%r, spec=%r' % (objid, spec) print >>sys.stderr, 'get_font: create: objid=%r, spec=%r' % (objid, spec)
if STRICT: if STRICT:
if spec['Type'] is not LITERAL_FONT: if spec['Type'] is not LITERAL_FONT:
raise PDFFontError('Type is not /Font') raise PDFFontError('Type is not /Font')
@ -329,7 +328,7 @@ class PDFPageInterpreter(object):
return PREDEFINED_COLORSPACE[name] return PREDEFINED_COLORSPACE[name]
for (k,v) in dict_value(resources).iteritems(): for (k,v) in dict_value(resources).iteritems():
if 2 <= self.debug: if 2 <= self.debug:
print >>stderr, 'Resource: %r: %r' % (k,v) print >>sys.stderr, 'Resource: %r: %r' % (k,v)
if k == 'Font': if k == 'Font':
for (fontid,spec) in dict_value(v).iteritems(): for (fontid,spec) in dict_value(v).iteritems():
objid = None objid = None
@ -649,7 +648,7 @@ class PDFPageInterpreter(object):
(a,b,c,d,e,f) = self.textstate.matrix (a,b,c,d,e,f) = self.textstate.matrix
self.textstate.matrix = (a,b,c,d,tx*a+ty*c+e,tx*b+ty*d+f) self.textstate.matrix = (a,b,c,d,tx*a+ty*c+e,tx*b+ty*d+f)
self.textstate.linematrix = (0, 0) self.textstate.linematrix = (0, 0)
#print >>stderr, 'Td(%r,%r): %r' % (tx,ty,self.textstate) #print >>sys.stderr, 'Td(%r,%r): %r' % (tx,ty,self.textstate)
return return
# text-move # text-move
def do_TD(self, tx, ty): def do_TD(self, tx, ty):
@ -657,7 +656,7 @@ class PDFPageInterpreter(object):
self.textstate.matrix = (a,b,c,d,tx*a+ty*c+e,tx*b+ty*d+f) self.textstate.matrix = (a,b,c,d,tx*a+ty*c+e,tx*b+ty*d+f)
self.textstate.leading = ty self.textstate.leading = ty
self.textstate.linematrix = (0, 0) self.textstate.linematrix = (0, 0)
#print >>stderr, 'TD(%r,%r): %r' % (tx,ty,self.textstate) #print >>sys.stderr, 'TD(%r,%r): %r' % (tx,ty,self.textstate)
return return
# textmatrix # textmatrix
def do_Tm(self, a,b,c,d,e,f): def do_Tm(self, a,b,c,d,e,f):
@ -673,7 +672,7 @@ class PDFPageInterpreter(object):
# show-pos # show-pos
def do_TJ(self, seq): def do_TJ(self, seq):
#print >>stderr, 'TJ(%r): %r' % (seq,self.textstate) #print >>sys.stderr, 'TJ(%r): %r' % (seq,self.textstate)
if self.textstate.font is None: if self.textstate.font is None:
if STRICT: if STRICT:
raise PDFInterpreterError('No font specified!') raise PDFInterpreterError('No font specified!')
@ -719,7 +718,7 @@ class PDFPageInterpreter(object):
raise PDFInterpreterError('Undefined xobject id: %r' % xobjid) raise PDFInterpreterError('Undefined xobject id: %r' % xobjid)
return return
if 1 <= self.debug: if 1 <= self.debug:
print >>stderr, 'Processing xobj: %r' % xobj print >>sys.stderr, 'Processing xobj: %r' % xobj
subtype = xobj.get('Subtype') subtype = xobj.get('Subtype')
if subtype is LITERAL_FORM and 'BBox' in xobj: if subtype is LITERAL_FORM and 'BBox' in xobj:
interpreter = self.dup() interpreter = self.dup()
@ -743,7 +742,7 @@ class PDFPageInterpreter(object):
def process_page(self, page): def process_page(self, page):
if 1 <= self.debug: if 1 <= self.debug:
print >>stderr, 'Processing page: %r' % page print >>sys.stderr, 'Processing page: %r' % page
(x0,y0,x1,y1) = page.mediabox (x0,y0,x1,y1) = page.mediabox
if page.rotate == 90: if page.rotate == 90:
ctm = (0,-1,1,0, -y0,x1) ctm = (0,-1,1,0, -y0,x1)
@ -763,7 +762,7 @@ class PDFPageInterpreter(object):
# This method may be called recursively. # This method may be called recursively.
def render_contents(self, resources, streams, ctm=MATRIX_IDENTITY): def render_contents(self, resources, streams, ctm=MATRIX_IDENTITY):
if 1 <= self.debug: if 1 <= self.debug:
print >>stderr, ('render_contents: resources=%r, streams=%r, ctm=%r' % print >>sys.stderr, ('render_contents: resources=%r, streams=%r, ctm=%r' %
(resources, streams, ctm)) (resources, streams, ctm))
self.init_resources(resources) self.init_resources(resources)
self.init_state(ctm) self.init_state(ctm)
@ -790,12 +789,12 @@ class PDFPageInterpreter(object):
if nargs: if nargs:
args = self.pop(nargs) args = self.pop(nargs)
if 2 <= self.debug: if 2 <= self.debug:
print >>stderr, 'exec: %s %r' % (name, args) print >>sys.stderr, 'exec: %s %r' % (name, args)
if len(args) == nargs: if len(args) == nargs:
func(*args) func(*args)
else: else:
if 2 <= self.debug: if 2 <= self.debug:
print >>stderr, 'exec: %s' % (name) print >>sys.stderr, 'exec: %s' % (name)
func() func()
else: else:
if STRICT: if STRICT:

View File

@ -2,7 +2,6 @@
import sys import sys
import re import re
import struct import struct
from sys import stderr
try: try:
import hashlib as md5 import hashlib as md5
except ImportError: except ImportError:
@ -96,7 +95,7 @@ class PDFXRef(PDFBaseXRef):
if use != 'n': continue if use != 'n': continue
self.offsets[objid] = (int(genno), long(pos)) self.offsets[objid] = (int(genno), long(pos))
if 1 <= debug: if 1 <= debug:
print >>stderr, 'xref objects:', self.offsets print >>sys.stderr, 'xref objects:', self.offsets
self.load_trailer(parser) self.load_trailer(parser)
return return
@ -126,7 +125,7 @@ class PDFXRef(PDFBaseXRef):
parser.seek(pos) parser.seek(pos)
self.load_trailer(parser) self.load_trailer(parser)
if 1 <= debug: if 1 <= debug:
print >>stderr, 'trailer: %r' % self.get_trailer() print >>sys.stderr, 'trailer: %r' % self.get_trailer()
break break
m = self.PDFOBJ_CUE.match(line) m = self.PDFOBJ_CUE.match(line)
if not m: continue if not m: continue
@ -180,7 +179,7 @@ class PDFXRefStream(PDFBaseXRef):
self.entlen = self.fl1+self.fl2+self.fl3 self.entlen = self.fl1+self.fl2+self.fl3
self.trailer = stream.attrs self.trailer = stream.attrs
if 1 <= debug: if 1 <= debug:
print >>stderr, ('xref stream: objid=%s, fields=%d,%d,%d' % print >>sys.stderr, ('xref stream: objid=%s, fields=%d,%d,%d' %
(', '.join(map(repr, self.objid_ranges)), (', '.join(map(repr, self.objid_ranges)),
self.fl1, self.fl2, self.fl3)) self.fl1, self.fl2, self.fl3))
return return
@ -408,7 +407,7 @@ class PDFDocument(object):
if not self.xrefs: if not self.xrefs:
raise PDFException('PDFDocument is not initialized') raise PDFException('PDFDocument is not initialized')
if 2 <= self.debug: if 2 <= self.debug:
print >>stderr, 'getobj: objid=%r' % (objid) print >>sys.stderr, 'getobj: objid=%r' % (objid)
if objid in self.objs: if objid in self.objs:
genno = 0 genno = 0
obj = self.objs[objid] obj = self.objs[objid]
@ -481,7 +480,7 @@ class PDFDocument(object):
except PSEOF: except PSEOF:
return None return None
if 2 <= self.debug: if 2 <= self.debug:
print >>stderr, 'register: objid=%r: %r' % (objid, obj) print >>sys.stderr, 'register: objid=%r: %r' % (objid, obj)
self.objs[objid] = obj self.objs[objid] = obj
if self.decipher: if self.decipher:
obj = decipher_all(self.decipher, objid, genno, obj) obj = decipher_all(self.decipher, objid, genno, obj)
@ -503,13 +502,13 @@ class PDFDocument(object):
tree[k] = v tree[k] = v
if tree.get('Type') is LITERAL_PAGES and 'Kids' in tree: if tree.get('Type') is LITERAL_PAGES and 'Kids' in tree:
if 1 <= self.debug: if 1 <= self.debug:
print >>stderr, 'Pages: Kids=%r' % tree['Kids'] print >>sys.stderr, 'Pages: Kids=%r' % tree['Kids']
for c in list_value(tree['Kids']): for c in list_value(tree['Kids']):
for x in search(c, tree): for x in search(c, tree):
yield x yield x
elif tree.get('Type') is LITERAL_PAGE: elif tree.get('Type') is LITERAL_PAGE:
if 1 <= self.debug: if 1 <= self.debug:
print >>stderr, 'Page: %r' % tree print >>sys.stderr, 'Page: %r' % tree
yield (objid, tree) yield (objid, tree)
if 'Pages' not in self.catalog: return if 'Pages' not in self.catalog: return
for (pageid,tree) in search(self.catalog['Pages'], self.catalog): for (pageid,tree) in search(self.catalog['Pages'], self.catalog):
@ -672,7 +671,7 @@ class PDFParser(PSStackParser):
self.seek(pos+objlen) self.seek(pos+objlen)
# XXX limit objlen not to exceed object boundary # XXX limit objlen not to exceed object boundary
if 2 <= self.debug: if 2 <= self.debug:
print >>stderr, 'Stream: pos=%d, objlen=%d, dic=%r, data=%r...' % \ print >>sys.stderr, 'Stream: pos=%d, objlen=%d, dic=%r, data=%r...' % \
(pos, objlen, dic, data[:10]) (pos, objlen, dic, data[:10])
obj = PDFStream(dic, data, self.doc.decipher) obj = PDFStream(dic, data, self.doc.decipher)
self.push((pos, obj)) self.push((pos, obj))
@ -690,14 +689,14 @@ class PDFParser(PSStackParser):
for line in self.revreadlines(): for line in self.revreadlines():
line = line.strip() line = line.strip()
if 2 <= self.debug: if 2 <= self.debug:
print >>stderr, 'find_xref: %r' % line print >>sys.stderr, 'find_xref: %r' % line
if line == 'startxref': break if line == 'startxref': break
if line: if line:
prev = line prev = line
else: else:
raise PDFNoValidXRef('Unexpected EOF') raise PDFNoValidXRef('Unexpected EOF')
if 1 <= self.debug: if 1 <= self.debug:
print >>stderr, 'xref found: pos=%r' % prev print >>sys.stderr, 'xref found: pos=%r' % prev
return long(prev) return long(prev)
# read xref table # read xref table
@ -710,7 +709,7 @@ class PDFParser(PSStackParser):
except PSEOF: except PSEOF:
raise PDFNoValidXRef('Unexpected EOF') raise PDFNoValidXRef('Unexpected EOF')
if 2 <= self.debug: if 2 <= self.debug:
print >>stderr, 'read_xref_from: start=%d, token=%r' % (start, token) print >>sys.stderr, 'read_xref_from: start=%d, token=%r' % (start, token)
if isinstance(token, int): if isinstance(token, int):
# XRefStream: PDF-1.5 # XRefStream: PDF-1.5
self.seek(pos) self.seek(pos)
@ -725,7 +724,7 @@ class PDFParser(PSStackParser):
xrefs.append(xref) xrefs.append(xref)
trailer = xref.get_trailer() trailer = xref.get_trailer()
if 1 <= self.debug: if 1 <= self.debug:
print >>stderr, 'trailer: %r' % trailer print >>sys.stderr, 'trailer: %r' % trailer
if 'XRefStm' in trailer: if 'XRefStm' in trailer:
pos = int_value(trailer['XRefStm']) pos = int_value(trailer['XRefStm'])
self.read_xref_from(pos, xrefs) self.read_xref_from(pos, xrefs)
@ -745,7 +744,7 @@ class PDFParser(PSStackParser):
except PDFNoValidXRef: except PDFNoValidXRef:
# fallback # fallback
if 1 <= self.debug: if 1 <= self.debug:
print >>stderr, 'no xref, fallback' print >>sys.stderr, 'no xref, fallback'
self.fallback = True self.fallback = True
xref = PDFXRef() xref = PDFXRef()
xref.load_fallback(self) xref.load_fallback(self)

View File

@ -1,7 +1,6 @@
#!/usr/bin/env python2 #!/usr/bin/env python2
import sys import sys
import re import re
from sys import stderr
from utils import choplist from utils import choplist
STRICT = 0 STRICT = 0
@ -169,7 +168,7 @@ class PSBaseParser(object):
if not pos: if not pos:
pos = self.bufpos+self.charpos pos = self.bufpos+self.charpos
self.fp.seek(pos) self.fp.seek(pos)
print >>stderr, 'poll(%d): %r' % (pos, self.fp.read(n)) print >>sys.stderr, 'poll(%d): %r' % (pos, self.fp.read(n))
self.fp.seek(pos0) self.fp.seek(pos0)
return return
@ -177,7 +176,7 @@ class PSBaseParser(object):
"""Seeks the parser to the given position. """Seeks the parser to the given position.
""" """
if 2 <= self.debug: if 2 <= self.debug:
print >>stderr, 'seek: %r' % pos print >>sys.stderr, 'seek: %r' % pos
self.fp.seek(pos) self.fp.seek(pos)
# reset the status for nextline() # reset the status for nextline()
self.bufpos = pos self.bufpos = pos
@ -227,7 +226,7 @@ class PSBaseParser(object):
linebuf += self.buf[self.charpos:] linebuf += self.buf[self.charpos:]
self.charpos = len(self.buf) self.charpos = len(self.buf)
if 2 <= self.debug: if 2 <= self.debug:
print >>stderr, 'nextline: %r' % ((linepos, linebuf),) print >>sys.stderr, 'nextline: %r' % ((linepos, linebuf),)
return (linepos, linebuf) return (linepos, linebuf)
def revreadlines(self): def revreadlines(self):
@ -466,7 +465,7 @@ class PSBaseParser(object):
self.charpos = self._parse1(self.buf, self.charpos) self.charpos = self._parse1(self.buf, self.charpos)
token = self._tokens.pop(0) token = self._tokens.pop(0)
if 2 <= self.debug: if 2 <= self.debug:
print >>stderr, 'nexttoken: %r' % (token,) print >>sys.stderr, 'nexttoken: %r' % (token,)
return token return token
@ -507,7 +506,7 @@ class PSStackParser(PSBaseParser):
def add_results(self, *objs): def add_results(self, *objs):
if 2 <= self.debug: if 2 <= self.debug:
print >>stderr, 'add_results: %r' % (objs,) print >>sys.stderr, 'add_results: %r' % (objs,)
self.results.extend(objs) self.results.extend(objs)
return return
@ -515,7 +514,7 @@ class PSStackParser(PSBaseParser):
self.context.append((pos, self.curtype, self.curstack)) self.context.append((pos, self.curtype, self.curstack))
(self.curtype, self.curstack) = (type, []) (self.curtype, self.curstack) = (type, [])
if 2 <= self.debug: if 2 <= self.debug:
print >>stderr, 'start_type: pos=%r, type=%r' % (pos, type) print >>sys.stderr, 'start_type: pos=%r, type=%r' % (pos, type)
return return
def end_type(self, type): def end_type(self, type):
@ -524,7 +523,7 @@ class PSStackParser(PSBaseParser):
objs = [ obj for (_,obj) in self.curstack ] objs = [ obj for (_,obj) in self.curstack ]
(pos, self.curtype, self.curstack) = self.context.pop() (pos, self.curtype, self.curstack) = self.context.pop()
if 2 <= self.debug: if 2 <= self.debug:
print >>stderr, 'end_type: pos=%r, type=%r, objs=%r' % (pos, type, objs) print >>sys.stderr, 'end_type: pos=%r, type=%r, objs=%r' % (pos, type, objs)
return (pos, objs) return (pos, objs)
def do_keyword(self, pos, token): def do_keyword(self, pos, token):
@ -580,7 +579,7 @@ class PSStackParser(PSBaseParser):
if STRICT: raise if STRICT: raise
else: else:
if 2 <= self.debug: if 2 <= self.debug:
print >>stderr, 'do_keyword: pos=%r, token=%r, stack=%r' % \ print >>sys.stderr, 'do_keyword: pos=%r, token=%r, stack=%r' % \
(pos, token, self.curstack) (pos, token, self.curstack)
self.do_keyword(pos, token) self.do_keyword(pos, token)
if self.context: if self.context:
@ -589,7 +588,7 @@ class PSStackParser(PSBaseParser):
self.flush() self.flush()
obj = self.results.pop(0) obj = self.results.pop(0)
if 2 <= self.debug: if 2 <= self.debug:
print >>stderr, 'nextobject: %r' % (obj,) print >>sys.stderr, 'nextobject: %r' % (obj,)
return obj return obj

View File

@ -11,7 +11,7 @@ by Philip J. Erdelsky:
""" """
import sys import sys
from struct import pack, unpack import struct
def KEYLENGTH(keybits): return (keybits)/8 def KEYLENGTH(keybits): return (keybits)/8
def RKLENGTH(keybits): return (keybits)/8+28 def RKLENGTH(keybits): return (keybits)/8+28
@ -694,14 +694,14 @@ rcon = [
# 128-bit blocks, Rijndael never uses more than 10 rcon values # 128-bit blocks, Rijndael never uses more than 10 rcon values
] ]
if len(pack('L',0)) == 4: if len(struct.pack('L',0)) == 4:
# 32bit # 32bit
def GETU32(x): return unpack('>L', x)[0] def GETU32(x): return struct.unpack('>L', x)[0]
def PUTU32(x): return pack('>L', x) def PUTU32(x): return struct.pack('>L', x)
else: else:
# 64bit # 64bit
def GETU32(x): return unpack('>I', x)[0] def GETU32(x): return struct.unpack('>I', x)[0]
def PUTU32(x): return pack('>I', x) def PUTU32(x): return struct.pack('>I', x)
# Expand the cipher key into the encryption key schedule. # Expand the cipher key into the encryption key schedule.
# #

View File

@ -2,8 +2,8 @@
""" """
Miscellaneous Routines. Miscellaneous Routines.
""" """
import struct
from sys import maxint as INF from sys import maxint as INF
from struct import pack, unpack
## Matrix operations ## Matrix operations
@ -107,11 +107,11 @@ def nunpack(s, default=0):
elif l == 1: elif l == 1:
return ord(s) return ord(s)
elif l == 2: elif l == 2:
return unpack('>H', s)[0] return struct.unpack('>H', s)[0]
elif l == 3: elif l == 3:
return unpack('>L', '\x00'+s)[0] return struct.unpack('>L', '\x00'+s)[0]
elif l == 4: elif l == 4:
return unpack('>L', s)[0] return struct.unpack('>L', s)[0]
else: else:
raise TypeError('invalid length: %d' % l) raise TypeError('invalid length: %d' % l)
@ -247,9 +247,9 @@ class Plane(object):
# create_bmp # create_bmp
def create_bmp(data, bits, width, height): def create_bmp(data, bits, width, height):
info = pack('<IiiHHIIIIII', 40, width, height, 1, bits, 0, len(data), 0, 0, 0, 0) info = struct.pack('<IiiHHIIIIII', 40, width, height, 1, bits, 0, len(data), 0, 0, 0, 0)
assert len(info) == 40, len(info) assert len(info) == 40, len(info)
header = pack('<ccIHHI', 'B', 'M', 14+40+len(data), 0, 0, 14+40) header = struct.pack('<ccIHHI', 'B', 'M', 14+40+len(data), 0, 0, 14+40)
assert len(header) == 14, len(header) assert len(header) == 14, len(header)
# XXX re-rasterize every line # XXX re-rasterize every line
return header+info+data return header+info+data