;ò
>3 @c           @   sQ  d  Z  d Z d Z d k Z d k Z d k Z d k Z d k Z d k Z d k	 Z	 d e i
 f d „  ƒ  YZ d f  d „  ƒ  YZ d e f d	 „  ƒ  YZ d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d f  d „  ƒ  YZ d f  d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ e ƒ  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ e e ƒ Z e e ƒ Z d  e f d! „  ƒ  YZ d" e f d# „  ƒ  YZ d$ e f d% „  ƒ  YZ  e  d& ƒ Z! e  d' ƒ Z" e  d( ƒ Z# e  d) ƒ Z$ e  d* ƒ Z% e  d+ ƒ Z& d, e f d- „  ƒ  YZ' d. f  d/ „  ƒ  YZ( d0 f  d1 „  ƒ  YZ) d2 e) f d3 „  ƒ  YZ* d4 „  Z+ d5 e) f d6 „  ƒ  YZ, d7 e f d8 „  ƒ  YZ- d9 f  d: „  ƒ  YZ. h  e/ e* <d; e, <Z0 d< f  d= „  ƒ  YZ1 d> e f d? „  ƒ  YZ2 d@ f  dA „  ƒ  YZ3 dB e f dC „  ƒ  YZ4 dD f  dE „  ƒ  YZ5 dF e f dG „  ƒ  YZ6 dH f  dI „  ƒ  YZ7 dJ e f dK „  ƒ  YZ8 dL f  dM „  ƒ  YZ9 dN e f dO „  ƒ  YZ: e/ Z; e/ Z< e/ Z= h  dP e6 <dQ e6 <dR e4 <dS e4 <dT e: <dU e: <dV e2 <dW e2 <dX e8 <dY e8 <dZ e; <d[ e; <d\ e< <d] e= <d^ e= <Z> d_ e f d` „  ƒ  YZ? da „  Z@ db „  ZA dc „  ZB eC dd j oÇ eD e iE ƒ de j o e@ ƒ  n eD e iE ƒ de j oŒ e1 ƒ  ZF x€ e iE de D]m ZG df GeG Gdg GHeF iH eG ƒ dh GeI eF iJ iK ƒ  ƒ GHdi GeI eF iL iK ƒ  ƒ GHdj GeI eF iM ƒ GHeA eF ƒ HqÔWqMn d S(k   sÓ   PDF file parser

    This module exports the PDFFile class which provides access
    to a PDF file's object tree. PDFFile instances have a Root
    dictionary attribute which is the file's "document catalog"
    object tree.  You really need to have the PDF reference book
    at hand to understand its structure (free to download from
    Adobe.com).

    All objects in the tree are wrapped in the Object class so as
    to permit 'lazy loading'. Call the value() method on Objects
    to get the underlying pythonized object. For lists and dictionaries,
    normal [] access is implemented accordingly. Note that Name
    objects look like strings, which is generally what you want.

    All non-image filters have been implemented, and encrypted
    documents with either empty or supplied user password are
    supported.  Only revision 2 standard encryption is fully
    implemented.  External file streams are not supported.

    This module is not particualrly efficient at accessing the PDF
    document, so I wouldn't recommend using it as the basis of a
    file transformer or viewer. Instead, it is probably most useful
    as a way of accessing information about PDF documents, such as
    the TOC, or the security bits.

    References:

    [1] Adobe Systems Incorporated, 'PDF reference: Adobe portable 
        document format version 1.4', 3rd ed., Addison-Wesley, 
        Boston. December 2001.

    David Leonard, 2003. Public domain. Provided 'as is'; no warranties.
s   David Leonard, 2003s   1.1Ns   Errorc           B   s   t  Z d  Z RS(   s"   All exceptions from the PDF module(   s   __name__s
   __module__s   __doc__(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   Error*   s    s
   ByteStreamc           B   s\   t  Z d  Z e d „ Z d „  Z e d „ Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z RS(	   s7    The abstract byte stream class. Tokenisers use this.  c         C   s   | |  _  |  i ƒ  d  S(   N(   s   dicts   selfs   rewind(   s   selfs   dict(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __init__3   s    	c         C   s   |  i d ƒ Sd S(   s   getchar() -> char or ''.i   N(   s   selfs   read(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   getchar6   s     c         C   s
   t  ‚ d S(   sA   substream(start[, len]) -> ByteStream. Create independent stream.N(   s   AbstractError(   s   selfs   starts   len(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys	   substream9   s     c         C   s
   t  ‚ d S(   s)   read(len) -> string. Read up to len bytesN(   s   AbstractError(   s   selfs   len(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   read<   s     c         C   s
   t  ‚ d S(   s4   tell() -> int. Current file position as byte offset.N(   s   AbstractError(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   tell?   s     c         C   s
   t  ‚ d S(   s.   seek(pos) -> None. Move to new stream positionN(   s   AbstractError(   s   selfs   pos(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   seekB   s     c         C   s   |  i d ƒ d S(   s9   rewind() -> None. Reset the stream and seek to position 0i    N(   s   selfs   seek(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   rewindE   s     c         C   s   t  Sd S(   s>   end() -> int. byte offset after end of file or None if unknownN(   s   None(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   endH   s     (   s   __name__s
   __module__s   __doc__s   Nones   __init__s   getchars	   substreams   reads   tells   seeks   rewinds   end(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys
   ByteStream1   s    					s   FileByteStreamc           B   s_   t  Z d  Z d e d „ Z d „  Z d „  Z e d „ Z d „  Z d „  Z	 d „  Z
 d	 „  Z RS(
   s0   A byte stream interface to a python file object.i    c         C   sr   | |  _  | |  _ | t j o  | i d d ƒ | i ƒ  } n | |  _ |  i  i d ƒ d |  _ t i	 |  ƒ d  S(   Ni    i   (
   s   fs   selfs   offsets   lens   Nones   seeks   tells   _physposs
   ByteStreams   __init__(   s   selfs   fs   offsets   len(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __init__N   s    				c         C   s\   |  i | j o |  i i | ƒ | |  _ n |  i i | ƒ } |  i t | ƒ 7_ | Sd  S(   N(	   s   selfs   _physposs   physposs   fs   seeks   reads   datalens   datas   len(   s   selfs   physposs   datalens   data(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   _readY   s    c         C   st   |  i t j	 o |  i | |  i j o |  i |  i } n |  i |  i |  i | ƒ } |  i t | ƒ 7_ | Sd  S(   N(   s   selfs   lens   Nones   poss   bytess   _reads   offsets   data(   s   selfs   bytess   data(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   reada   s
    'c         C   sb   | d j  p. |  i t j	 o | t j	 o | | |  i j o t d ƒ ‚ n t |  | | ƒ Sd  S(   Ni    s&   substream exceeds parent stream bounds(   s   starts   selfs   lens   Nones   Errors   FileByteSubStream(   s   selfs   starts   len(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys	   substreamg   s    >c         C   s   |  i Sd  S(   N(   s   selfs   pos(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   telll   s    c         C   sD   | d j  p t t j	 o
 | t j o t d ƒ ‚ n | |  _  d  S(   Ni    s   Invalid seek(   s   poss   lens   Nones   IOErrors   self(   s   selfs   pos(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   seekn   s    'c         C   s   |  i Sd  S(   N(   s   selfs   len(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   endr   s    c         C   s=   |  i o d t |  i ƒ |  i f Sn d t |  i ƒ Sd  S(   Ns   <FileStream %s @%d>s   <FileStream %s>(   s   selfs   offsets   reprs   f(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __repr__t   s    
(   s   __name__s
   __module__s   __doc__s   Nones   __init__s   _reads   reads	   substreams   tells   seeks   ends   __repr__(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   FileByteStreamL   s    					s   FileByteSubStreamc           B   s2   t  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   sp   A substream of a FileByteStrem. This is what is normally
       created when a 'stream' keyword is encounterred.c         C   s3   | |  _  | i | |  _ | |  _ t i |  ƒ d  S(   N(   s   parents   selfs   offsets   lens
   ByteStreams   __init__(   s   selfs   parents   offsets   len(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __init__}   s    		c         C   s   |  i i | ƒ d  S(   N(   s   selfs   parents   _seeks   physpos(   s   selfs   physpos(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   _seek‚   s    c         C   s   |  i i | | ƒ Sd  S(   N(   s   selfs   parents   _reads   poss   datalen(   s   selfs   poss   datalen(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   _read„   s    c         C   s$   d t  |  i ƒ t  |  i ƒ f Sd  S(   Ns   <FileSubstream %s @%s>(   s   reprs   selfs   parents   offset(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __repr__†   s    (   s   __name__s
   __module__s   __doc__s   __init__s   _seeks   _reads   __repr__(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   FileByteSubStreamz   s
    			s   FilteredByteStreamc           B   s_   t  Z d  Z d Z h  d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z RS(
   s¸    Abstract class for stream that applies self.filter() 
	to the data from an underlying stream. seek() is not available,
	but rewind is: it resets the filter and the underlying stream. i   c         C   s&   | |  _ d |  _ t i |  | ƒ d  S(   Ns    (   s   unders   selfs   _unders   _remains
   ByteStreams   __init__s   dict(   s   selfs   unders   dict(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __init__”   s    		c         C   s«   xh t  |  i ƒ | j  oQ |  i i |  i ƒ } |  i |  i | ƒ 7_ | d j o t  |  i ƒ } q q W|  i |  |  i | f \ } |  _ |  i
 t  | ƒ 7_
 | Sd  S(   Ns    (   s   lens   selfs   _remains   datalens   _unders   reads	   chunksizes   datas   filters   results   _pos(   s   selfs   datalens   datas   result(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   read˜   s     #c         C   s   |  i Sd  S(   N(   s   selfs   _pos(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   tell¥   s    c         C   s   d |  _ |  i i ƒ  d  S(   Ni    (   s   selfs   _poss   _unders   rewind(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   rewind§   s    	c         C   s!   | d j o t d ƒ ‚ n d  S(   Ni    s"   Cannot seek() on a filtered stream(   s   poss   Error(   s   selfs   pos(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   seekª   s    c         C   s   t  d ƒ ‚ d  S(   Ns+   Cannot determine end() of a filtered stream(   s   Error(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   end­   s    c         C   s   t  d ƒ ‚ d  S(   Ns0   Cannot create a substream() on a filtered stream(   s   Error(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys	   substream¯   s    c         C   s
   t  ‚ d S(   s   filter(string) -> string
	    The filter method can return as much data as it can. 
	    It is usually fed data in chunks of up to 1024 bytes.
	    It will be given data='' when underlying stream is exhausted.
	    It should return '' when no more data can be generated.
	N(   s   AbstractError(   s   selfs   data(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   filter±   s     (   s   __name__s
   __module__s   __doc__s	   chunksizes   __init__s   reads   tells   rewinds   seeks   ends	   substreams   filter(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   FilteredByteStream   s    						s	   Tokeniserc           B   sÌ   t  Z d  Z d Z d Z e e Z d Z h  d d <d d <d d <d	 d
 <d d <Z d Z d „  Z	 d „  Z
 d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e e d „ Z RS(   s–  PDF tokenizer class. 

       This class reads a byte stream and breaks it into tokens.
       get_token() should be called to get the next token on the stream.
       - if get_token() returns '/' then get_name() should be called to get
	 the rest of the name.
       - if get_token() returns '(' then get_string() should be called to get
	 the rest of the string.
       - if get_token() returns '<' then get_hexstring() should be called to
	 get the rest of the (hex) string.
       - if get_token() returns a 'stream' keyword, then get_stream() should 
         be called next - it will return a substream object.
       - otherwise get_token() returns keywords and ignores comments/whitespace

       get_header() parses the header comment of the PDF file and should
       be called first if at all

       get_xref() is useful for finding byte offsets of the xref table
         after an 'xref' keyword.

       s    	
 s
   ()<>[]{}/%s    s   ns   
s   rs   s   ts   bs   s   fs   s   01234567c         C   s#   | |  _  d |  _ |  i d ƒ d  S(   Ns   1.4i    (   s   streams   selfs   versions   seek(   s   selfs   stream(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __init__Ü   s    		c         C   s&   |  i i | ƒ |  i i ƒ  |  _ d S(   s   Seek and prime the lookaheadN(   s   selfs   streams   seeks   poss   getchars   nextch(   s   selfs   pos(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   seeká   s     c         C   s   |  i i ƒ  |  i f Sd S(   s   Return current tokeniser stateN(   s   selfs   streams   tells   nextch(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys	   get_stateæ   s     c         C   s)   | \ } } |  i i | ƒ | |  _ d S(   s   Restore tokeniser stateN(   s   poss   nextchs   selfs   streams   seek(   s   selfs   .2s   poss   nextch(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys	   set_stateé   s    c         C   s'  |  i d j o t Sn xk d D]c } |  i | j o; x0 |  i d d d f j o |  i i ƒ  |  _ q8 Wt Sn |  i i ƒ  |  _ q Wd } xS n oK |  i d j p |  i |  i j o Pn | |  i } |  i i ƒ  |  _ q– Wx1 |  i d d d f j o |  i i ƒ  |  _ qå W| |  _ | Sd S(   s‡   get_header() -> version or None
	   Read the %PDF-x.y first line and return 'x.y'.
	   Returns None if the header line was not found.
	s   %s   %PDF-s    s   
s   i   N(   s   selfs   nextchs   Nones   ks   streams   getchars   versions
   Whitespace(   s   selfs   ks   version(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys
   get_headerî   s.        # 	c         C   sÓ   |  i ƒ  } |  i ƒ  } xP n oH |  i d j o
 t ‚ n |  i |  i j o Pn |  i i ƒ  |  _ q" W|  i i	 ƒ  d } |  i |  i i d ƒ } | d i ƒ  o | d 8} n t | ƒ t | ƒ | f Sd S(   só   get_xref() -> (startid, nentries, offset)
	   Special access for reading the integers after an xref keyword.
	   returns the two integers and then the byte position of the first
	   20-character entry. seek position is indeterminate afterwardsi   s    i   N(   s   selfs	   get_tokens   startids   nentriess   nextchs   EOFErrors
   Whitespaces   streams   getchars   tells   firstposs   reads   testlines   isdigits   int(   s   selfs   firstposs   startids   testlines   nentries(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   get_xref
  s       
 c         C   s®  xò n oê |  i |  i i ƒ  f \ } |  _ | d j o‹ x9 d D]- } |  i d j o Pn |  i i ƒ  |  _ q? Wd SxL n o@ |  i |  i i ƒ  f \ } |  _ | d d d f j o Pqw q~ Wn | d j o |  i Sn | |  i j o Pq q
 W| |  i j oC | |  i j o
 | d j o |  i i ƒ  |  _ | | Sn | Sn | } xY n oQ |  i } | d j p | |  i j o | Sn | |  i 7} |  i i ƒ  |  _ qXWd	 S(
   sÆ   get_token() -> string
	   Return next delimiter or token composed of regular characters,
	   or EOF.  Comments and whitespace are ignored.
	   Tokens returned are:
		( < [ ] { } / << >> regularseq
	i   s   %s   %EOFs   %%EOFs    s   s   
s   <>N(   s   selfs   nextchs   streams   getchars   cs   ks   EOFs
   Whitespaces
   Delimiterss   tokens   ns
   NonRegular(   s   selfs   ks   cs   tokens   n(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys	   get_token   sB      !  !
 	c         C   sT  d } d } xAn o9|  i |  i i ƒ  f \ } |  _ | d j o
 t ‚ q | d j o- | d j o | Sn | | 7} | d 8} q | d j o | | 7} | d 7} q | d j oF|  i |  i i ƒ  f \ } |  _ | d j o
 t ‚ qK| |  i j o• |  i |  i j oe | |  i |  i i ƒ  f \ } |  _ |  i |  i j o) | |  i |  i i ƒ  f \ } |  _ qzn | t	 t
 | d ƒ ƒ 7} qK| d j o* |  i d	 j o |  i i ƒ  |  _ qüqK| d	 j o qK| |  i i | ƒ p | 7} q | d j o4 |  i d	 j o |  i i ƒ  |  _ n | d	 7} q | | 7} q Wd
 S(   s˜   get_string() -> string
	   Return the expanded string after having read the '(',
	   consuming the trailing ')' as well.
	   Will raise EOFError on EOF.i    s    i   s   )s   (s   \i   s   s   
N(   s   parenss   ss   selfs   nextchs   streams   getchars   cs   EOFErrors   OctalDigitss   chrs   ints	   EscapeMaps   get(   s   selfs   parenss   cs   s(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys
   get_stringJ  sJ      !


!
%-!c         C   s/  d } x"n oxY n oQ |  i |  i i ƒ  f \ } |  _ | d j o
 t ‚ n | |  i j o Pq q W| d j o | Sn xY n oQ |  i |  i i ƒ  f \ } |  _ | d j o
 t ‚ n | |  i j o Pq„ q‹ W| d j o | t	 t
 | d d ƒ ƒ Sn | t	 t
 | | d ƒ ƒ 7} q Wd S(   sÁ   get_hexstring() -> string
	   Return the expanded hex string after reading an '<',
	   consuming the trailing '>' as well. Raises EOFError on EOF.
	   Raises ValueError if the string is invalids    i   s   >s   0i   N(   s   ss   selfs   nextchs   streams   getchars   c1s   EOFErrors
   Whitespaces   c2s   chrs   int(   s   selfs   ss   c2s   c1(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   get_hexstringz  s.       !

 !

c         C   sñ   d } xà n oØ |  i d j p |  i |  i j o Pn |  i d j o |  i d j om |  i i ƒ  } | d j o
 t ‚ n |  i i ƒ  } | d j o
 t ‚ n | t
 t | | d ƒ ƒ 7} n | |  i 7} |  i i ƒ  |  _ q W| Sd S(   sJ   get_name() -> string
	   Return the name immediately following a / token. s    i   s   #s   1.1i   N(   s   ss   selfs   nextchs
   NonRegulars   versions   streams   getchars   c1s   EOFErrors   c2s   chrs   int(   s   selfs   ss   c2s   c1(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   get_name–  s"      #  
 
!c   	      C   s>  |  i d j o |  i i ƒ  |  _ n |  i d j o
 t ‚ n |  i d j o t d ƒ ‚ n |  i i ƒ  } | o† xk n oc |  i i ƒ  } |  i i
 d ƒ } | d j o t d ƒ ‚ n | i d ƒ } | d	 j o Pqy q€ W| | } | | } n |  i i | | ƒ } | t j	 o |  i i | | ƒ n | Sd
 S(   sš  get_stream([length_hint = None [, search = False]) -> substream
	    Return a substream object, for the stream immediately
	    following the 'stream' keyword. Parser should expect to
	    read an endstream keyword after this if length_hint is given.
	    If search is True, then the endstream keyword is scanned for.
	    Otherwise if length_hint is None, then the substream is given
	    an unbounded length.s   s    s   
s!   stream keyword not followed by \ni   i    s   missing endstreams	   endstreamiÿÿÿÿN(   s   selfs   nextchs   streams   getchars   EOFErrors   Errors   tells   poss   search_for_endstreams   dataposs   reads   datas   finds   es   endposs   length_hints	   substreams   Nones   seek(	   s   selfs   length_hints   search_for_endstreams   dataposs	   substreams   poss   endposs   es   data(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys
   get_stream©  s0     
  

(   s   __name__s
   __module__s   __doc__s
   Whitespaces
   Delimiterss
   NonRegulars   EOFs	   EscapeMaps   OctalDigitss   __init__s   seeks	   get_states	   set_states
   get_headers   get_xrefs	   get_tokens
   get_strings   get_hexstrings   get_names   Nones   Falses
   get_stream(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys	   Tokeniser½   s$    
3							*	0		s   Objectc           B   s€   t  Z d  Z e Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z RS(   s5    Abstract Object class for wrapping PDF file objects c         C   s   t  |  _ d  S(   N(   s   Nones   selfs   _id(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __init__Ó  s    c         C   s   | | f |  _ d  S(   N(   s   ids   gens   selfs   _id(   s   selfs   ids   gen(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   set_idÕ  s    c         C   s   t  d ƒ ‚ d  S(   Ns   No value for this object(   s   Error(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   value×  s    c         C   s
   t  ‚ d  S(   N(   s   AbstractError(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __repr__Ù  s    c         C   s   t  Sd  S(   N(   s   False(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   is_dictÛ  s    c         C   s   t  Sd  S(   N(   s   False(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   is_intÝ  s    c         C   s   t  Sd  S(   N(   s   False(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys	   is_stringß  s    c         C   s   t  Sd  S(   N(   s   False(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys	   is_streamá  s    c         C   s   t  Sd  S(   N(   s   False(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   is_arrayã  s    c         C   s   |  i Sd  S(   N(   s   selfs   _id(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   idå  s    c         C   so   t  | t ƒ oB |  i o | i |  i j o d Sn t |  i ƒ  | i ƒ  ƒ Sn t |  i ƒ  t | ƒ ƒ Sd  S(   Ni   (   s
   isinstances   others   Objects   selfs   _ids   cmps   values   id(   s   selfs   other(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __cmp__ç  s
    c         C   s   |  i ƒ  o d Sn d Sd  S(   Ni   i    (   s   selfs   value(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __nonzero__î  s     (   s   __name__s
   __module__s   __doc__s   Falses   repr_expands   __init__s   set_ids   values   __repr__s   is_dicts   is_ints	   is_strings	   is_streams   is_arrays   ids   __cmp__s   __nonzero__(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   ObjectË  s    											s   LiteralObjectc           B   s_   t  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z RS(
   s4    Generic objects that have python-equivalent values c         C   s   | |  _ t i |  ƒ d  S(   N(   s   values   selfs   _values   Objects   __init__(   s   selfs   value(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __init__ô  s    	c         C   s   |  i Sd  S(   N(   s   selfs   _value(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   value÷  s    c         C   s   t  |  i ƒ Sd  S(   N(   s   strs   selfs   _value(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __str__ù  s    c         C   s   t  |  i ƒ Sd  S(   N(   s   unicodes   selfs   _value(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __unicode__û  s    c         C   s   d t  |  i ƒ d Sd  S(   Ns   <s   >(   s   reprs   selfs   _value(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __repr__ý  s    c         C   s   t  |  i t ƒ Sd  S(   N(   s
   isinstances   selfs   _values   int(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   is_intÿ  s    c         C   s   t  |  i t ƒ Sd  S(   N(   s
   isinstances   selfs   _values   dict(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   is_dict  s    c         C   s   t  |  i ƒ  ƒ Sd  S(   N(   s   ints   selfs   value(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __int__  s    c         C   s   t  |  i ƒ  ƒ Sd  S(   N(   s   floats   selfs   value(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys	   __float__  s    (   s   __name__s
   __module__s   __doc__s   __init__s   values   __str__s   __unicode__s   __repr__s   is_ints   is_dicts   __int__s	   __float__(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   LiteralObjectò  s    								s
   NullObjectc           B   s)   t  Z d  Z d „  Z d „  Z d „  Z RS(   s    The special 'null' class c         C   s   t  Sd  S(   N(   s   None(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   value
  s    c         C   s   d Sd  S(   Ns   <null>(    (   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __repr__  s    c         C   s   d Sd  S(   Ni    (    (   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __nonzero__  s    (   s   __name__s
   __module__s   __doc__s   values   __repr__s   __nonzero__(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys
   NullObject  s    		s   StringObjectc           B   s    t  Z d  Z d „  Z d „  Z RS(   s	    Strings c         C   sG   | i d ƒ p | i d ƒ o | i d ƒ } n t i |  | ƒ d  S(   Ns   þfs   ÿþs   utf16(   s   values
   startswiths   decodes   LiteralObjects   __init__s   self(   s   selfs   value(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __init__  s     c         C   s   t  Sd  S(   N(   s   True(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys	   is_string  s    (   s   __name__s
   __module__s   __doc__s   __init__s	   is_string(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   StringObject  s    	s   StreamObjectc           B   sG   t  Z d  Z h  d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s>    Streams. Use str() or .value() to access the stream content. c         C   s,   t  i |  ƒ t |  _ | |  _ | |  _ d  S(   N(   s   Objects   __init__s   selfs   Nones   _contents   dicts   streams   _stream(   s   selfs   streams   dict(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __init__  s    		c         C   s   |  i Sd  S(   N(   s   selfs   _stream(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   value$  s    c         C   sw   |  i t j o\ d |  _ |  i i ƒ  xC n o7 |  i i d ƒ } | d j o Pn |  i | 7_ q0 Wn |  i Sd S(   s<   Read and cache the whole stream contents and treat as strings    i   i    N(   s   selfs   _contents   Nones   _streams   rewinds   reads   data(   s   selfs   data(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __str__&  s     	  c         C   s   t  Sd  S(   N(   s   True(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys	   is_string0  s    c         C   s   t  Sd  S(   N(   s   True(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys	   is_stream2  s    c         C   s7   |  i o d t t |  ƒ ƒ Sn d t |  i ƒ Sd  S(   Ns   <Stream %s>(   s   selfs   repr_expands   reprs   strs   _stream(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __repr__4  s    
(	   s   __name__s
   __module__s   __doc__s   __init__s   values   __str__s	   is_strings	   is_streams   __repr__(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   StreamObject  s    		
		s   ArrayObjectc           B   s)   t  Z d  Z d „  Z d „  Z d „  Z RS(   s    Heterogeneous arrays c         C   s   |  i | Sd  S(   N(   s   selfs   _values   index(   s   selfs   index(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __getitem__<  s    c         C   s   t  |  i ƒ Sd  S(   N(   s   lens   selfs   _value(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __len__>  s    c         C   s   t  Sd  S(   N(   s   True(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   is_array@  s    (   s   __name__s
   __module__s   __doc__s   __getitem__s   __len__s   is_array(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   ArrayObject:  s    		s
   DictObjectc           B   s2   t  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   s(    Dictionarys. All keys must be strings. c         C   s   |  i | ƒ Sd S(   s$   Return NullObj for non-existent keysN(   s   selfs   gets   key(   s   selfs   key(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __getitem__E  s     c         C   s/   |  i i | ƒ } | t j o t Sn | Sd S(   s$   Return NullObj for non-existent keysN(   s   selfs   _values   gets   keys   vs   Nones   NullObj(   s   selfs   keys   v(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   getH  s
      c         C   s   |  i i | ƒ Sd  S(   N(   s   selfs   _values   has_keys   key(   s   selfs   key(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   has_keyM  s    c         C   s   |  i i ƒ  Sd  S(   N(   s   selfs   _values   items(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   itemsO  s    (   s   __name__s
   __module__s   __doc__s   __getitem__s   gets   has_keys   items(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys
   DictObjectC  s
    			s   Booleanc           B   sD   t  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s    The two Boolean objects c         C   s    t  | ƒ |  _ t i |  ƒ d  S(   N(   s   bools   values   selfs   _values   Objects   __init__(   s   selfs   value(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __init__T  s    c         C   s   |  i Sd  S(   N(   s   selfs   _value(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   valueW  s    c         C   s   |  i o d Sn d Sd  S(   Ns   <True>s   <False>(   s   selfs   _value(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __repr__Y  s    
 c         C   s   |  i o d Sn d Sd  S(   Nu   trueu   false(   s   selfs   _value(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __unicode__\  s    
 c         C   s   |  i o d Sn d Sd  S(   Ns   trues   false(   s   selfs   _value(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __str___  s    
 c         C   s   |  i Sd  S(   N(   s   selfs   _value(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __int__b  s    (	   s   __name__s
   __module__s   __doc__s   __init__s   values   __repr__s   __unicode__s   __str__s   __int__(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   BooleanR  s    					s   IndirectObjectc           B   sh   t  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z RS(   sµ    Indirect object. 
	This is a reference to some other object in the file.
	Call value() to get to the real object, or
	use int(), str(), float(), or [] to automatically dereference.c         C   s,   t  i |  ƒ | |  _ | |  _ | |  _ d  S(   N(   s   Objects   __init__s   selfs   derefs   _derefs   keys   _keys   _id(   s   selfs   keys   deref(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __init__m  s    		c         C   s   |  i |  i ƒ Sd S(   s/   Returns None if the value has not yet been seenN(   s   selfs   _derefs   _key(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   valuer  s     c         C   s-   t  i o t |  i ƒ  ƒ Sn d |  i Sd  S(   Ns	   <%d %d R>(   s   Objects   repr_expands   reprs   selfs   values   _key(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __repr__u  s    
c         C   s   d Sd  S(   Ni   (    (   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __nonzero__y  s    c         C   s   |  i ƒ  | Sd  S(   N(   s   selfs   values   key(   s   selfs   key(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __getitem__|  s    c         C   s   t  |  i ƒ  ƒ Sd  S(   N(   s   ints   selfs   value(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __int__~  s    c         C   s   t  |  i ƒ  ƒ Sd  S(   N(   s   strs   selfs   value(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __str__€  s    c         C   s   t  |  i ƒ  ƒ Sd  S(   N(   s   unicodes   selfs   value(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __unicode__‚  s    c         C   s   t  |  i ƒ  ƒ Sd  S(   N(   s   floats   selfs   value(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys	   __float__„  s    c         C   s   |  i ƒ  i | ƒ Sd  S(   N(   s   selfs   values   gets   key(   s   selfs   key(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   get†  s    (   s   __name__s
   __module__s   __doc__s   __init__s   values   __repr__s   __nonzero__s   __getitem__s   __int__s   __str__s   __unicode__s	   __float__s   get(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   IndirectObjecth  s    									s   Namec           B   s;   t  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s2    A '/Name' object - act as labels in the PDF file c         C   s@   t  | ƒ t j	 o | i d ƒ } n | |  _ t i |  ƒ d  S(   Ns   utf8(   s   types   names   unicodes   decodes   selfs   _names   Objects   __init__(   s   selfs   name(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __init__‹  s    	c         C   s   |  i Sd  S(   N(   s   selfs   _name(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   value  s    c         C   sN   t  |  i ƒ t j o d t |  i ƒ d d !Sn d t |  i ƒ d d !Sd  S(   Ns   /i   iÿÿÿÿi   (   s   types   selfs   _names   unicodes   repr(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __repr__’  s    c         C   s   t  |  i ƒ Sd  S(   N(   s   strs   selfs   _name(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __str__—  s    c         C   s   |  i Sd  S(   N(   s   selfs   _name(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __unicode__™  s    (   s   __name__s
   __module__s   __doc__s   __init__s   values   __repr__s   __str__s   __unicode__(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   Name‰  s    				s   Markc           B   s    t  Z d  Z d „  Z d „  Z RS(   sÐ    Various kinds of marks used to delimit things pushed
	on the stack while parsing the PDF file in a postscript
	interpreter-like way. These are temporary and should
	never be encountered outside this module. c         C   s   | |  _ t i |  ƒ d  S(   N(   s   types   selfs   _types   Objects   __init__(   s   selfs   type(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __init__¡  s    	c         C   s   d |  i Sd  S(   Ns	   <Mark:%s>(   s   selfs   _type(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __repr__¤  s    (   s   __name__s
   __module__s   __doc__s   __init__s   __repr__(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   Markœ  s    	s   dicts   arrays   objs   in-uses   frees   trailers   Datec           B   s>   t  Z d  Z e d „ Z d „  Z d „  Z d „  Z d „  Z RS(   sŠ    PDF dates from section 3.8.2.
	If no timezone is specified, the date is treated as UTC,
	and the 'approximate' attribute is set to True. c      
   C   sø  | i d ƒ o t d t | ƒ ƒ ‚ n d d d d d t d d f \ }
 } } } }	 } } } t | d d !ƒ } t | ƒ d j oØt | d d !ƒ }
 t | ƒ d j o®t | d d !ƒ } t | ƒ d	 j o„t | d d	 !ƒ } t | ƒ d
 j oZt | d	 d
 !ƒ } t | ƒ d j o0t | d
 d !ƒ }	 t | ƒ d j o| d } | d j o t d t | ƒ ƒ ‚ n t | ƒ d j o¾ | d j o t d t | ƒ ƒ ‚ n t | d d !ƒ } | d d j o t d t | ƒ ƒ ‚ n t | ƒ d j oB t | d d !ƒ } | d d j o t d t | ƒ ƒ ‚ qCqGqKqOqSqWq[q_n | d j o | | f \ } } n t i | |
 | | | |	 d d d f	 ƒ t i } | d j o | | d | d 7} n | t j |  _ | |  _ d  S(   Ns   D:s   Bad date format %si   i    i   i   i   i
   i   i   i   i   s   Z-+s   Bad format %si   s   Zi   s   'i   i   s   -s   -+i  i<   (   s   ss
   startswiths   Errors   reprs   Nones   mons   days   hours   mins   secs   os   tzhs   thms   ints   years   lens   tzms   times   mktimes   timezones   ts   selfs   approximates   _t(   s   selfs   ss   refs   hours   mins   tzms   years   os   thms   secs   mons   tzhs   days   t(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __init__²  sF    6
    : 1c         C   s   |  i Sd  S(   N(   s   selfs   _t(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   valueÑ  s    c         C   s   d t  |  ƒ Sd  S(   Ns	   <Date %s>(   s   strs   self(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __repr__Ó  s    c   	   	   C   sh   t  i |  i ƒ \	 } } } } } } } } } |  i o
 d } n d } d | | | | | | | f Sd  S(   Ns    s   Zs   D:%04d%02d%02d%02d%02d%02d%s(   s   times   gmtimes   selfs   _ts   years   mons   days   hours   mins   secs   _s   approximates   z(	   s   selfs   hours   mins   secs   mons   years   zs   days   _(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __str__Õ  s
    -
 
c         C   s   |  i ƒ  Sd  S(   N(   s   selfs   value(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __int__Ú  s    (	   s   __name__s
   __module__s   __doc__s   Nones   __init__s   values   __repr__s   __str__s   __int__(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   Date®  s    			s   XREFc           B   s)   t  Z d  Z d „  Z d „  Z d „  Z RS(   sÎ   A caching XREF table.
       Each instance represents an xref section in the PDF file,
       used for translating object IDs into file byte positions,
       rather than having to pre-parse the whole file.c         C   s1   | |  _  | |  _ | |  _ | |  _ h  |  _ d  S(   N(   s   toks   selfs   startids   nentriess   offsets   cache(   s   selfs   toks   startids   nentriess   offset(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __init__æ  s
    				c         C   sï   |  i i | ƒ o |  i | Sn | |  i j  p | |  i |  i j o t Sn |  i i ƒ  } |  i i
 i |  i | |  i d ƒ |  i i
 i d ƒ } |  i i | ƒ t | d  d ƒ t | d d !d ƒ | d f } | |  i | <| Sd S(   sv   lookup(id) -> (offset, generation, 'n'|'f') or None
	   Returns an entry in the XREF table, or None if doesnt exist.
	i   i
   i   i   i   N(   s   selfs   caches   has_keys   ids   startids   nentriess   Nones   toks	   get_states   states   streams   seeks   offsets   reads   datas	   set_states   ints   ret(   s   selfs   ids   rets   states   data(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   lookupí  s     '%0c         C   s#   d |  i |  i |  i d f Sd  S(   Ns   <XREF %d-%d>i   (   s   selfs   startids   nentries(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __repr__þ  s    (   s   __name__s
   __module__s   __doc__s   __init__s   lookups   __repr__(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   XREFà  s    		s   SecurityHandlerc           B   sD   t  Z d  Z e e d d „ Z d „  Z d „  Z d „  Z d „  Z RS(   sÃ    Abstract class for handling encryption and security 
	operations on the file.
	The properties 'printable', 'modify', and 'copy'
	are set to values reflecting the document security permissions.
	s    c         C   sY  t  | d ƒ } g  } | d d >@o | i d ƒ n | d d >@o | i d ƒ n t | ƒ |  _ g  } | d d >@o | i d ƒ n | d d	 >@o | i d
 ƒ n | d d >@o | i d ƒ n | d d >@o | i d ƒ n t | ƒ |  _ g  } | d d >@o | i	 d d g ƒ n | d d >@o | i d ƒ n t | ƒ |  _ d  S(   Ns   Pi   i   s   low-qualityi   s   high-qualityi	   s   formsi   s   annotationsi   s   assemblyi   s   misci   s   texts   graphicsi
   s
   accessible(
   s   ints   encrypt_dicts   Ps	   printables   appends   tuples   selfs   modifys   copys   extend(   s   selfs   encrypt_dicts   trailerss   passwords   copys   modifys   Ps	   printable(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __init__
  s.            c         C   s
   t  ‚ d  S(   N(   s   AbstractError(   s   selfs   ids   s(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   decrypt_string  s    c         C   s
   t  ‚ d  S(   N(   s   AbstractError(   s   selfs   ids   s(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   decrypt_stream  s    c         C   s   d |  i i |  i ƒ  f Sd  S(   Ns   <%s: %s>(   s   selfs	   __class__s   __name__s	   _authinfo(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __repr__  s    c         C   s9   d d i  |  i ƒ d i  |  i ƒ d i  |  i ƒ f Sd  S(   Ns$   printable:(%s) modify:(%s) copy:(%s)s   ,(   s   joins   selfs	   printables   modifys   copy(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys	   _authinfo"  s    (	   s   __name__s
   __module__s   __doc__s   Nones   __init__s   decrypt_strings   decrypt_streams   __repr__s	   _authinfo(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   SecurityHandler  s    			s   NullSecurityHandlerc           B   s2   t  Z d  Z e e d d „ Z d „  Z d „  Z RS(   sc    Default, not-encrypted handler. Permits everything
	and treats strings and streams as plain text. s    c         C   s   t  i |  h  d d <ƒ d  S(   Ns   Piüÿÿÿ(   s   SecurityHandlers   __init__s   self(   s   selfs   encrypt_dicts   trailerss   password(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __init__+  s    c         C   s   | Sd  S(   N(   s   s(   s   selfs   ids   s(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   decrypt_string-  s    c         C   s   | Sd  S(   N(   s   s(   s   selfs   ids   s(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   decrypt_stream/  s    (   s   __name__s
   __module__s   __doc__s   Nones   __init__s   decrypt_strings   decrypt_stream(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   NullSecurityHandler(  s    	c         C   s   d i  t d „  |  ƒ ƒ Sd S(   s]   hexstr(string) -> nice-string
       Handy utility function for displaying hex strings nicelys   :c         C   s   d t  |  ƒ S(   Ns   %02x(   s   ords   c(   s   c(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   <lambda>5  s    N(   s   joins   maps   s(   s   s(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   hexstr2  s     s   StandardSecurityHandlerc           B   sX   t  Z d  Z d d d Z d d „ Z d d „ Z d „  Z d „  Z d	 „  Z d
 „  Z	 RS(   s!    Standard PDF encryption handler s   (¿N^NuŠAd Ns   Vÿú.. ¶Ðhs
   >€/©þdSizs    c         C   s^  t  i |  | | | ƒ t | d ƒ |  _ t | d ƒ |  _ t	 | d ƒ |  _
 t	 | d ƒ |  _ t | d ƒ |  _ |  i d j  p |  i d j o t d |  i ƒ ‚ n |  i d	 j p |  i d j o | i d
 ƒ o t | d
 ƒ d |  _ n d d |  _ t	 | d d d ƒ |  _ h  |  _ |  i | ƒ |  _ |  i t j o t d ƒ ‚ n d  S(   Ns   Vs   Rs   Us   Os   Pi   i   s&   Standard encryption: V flag unknown %di   s   Lengthi   i(   i    s   IDs'   PDF file encrypted or password mismatch(   s   SecurityHandlers   __init__s   selfs   encrypts   trailerss   passwords   ints   Vs   Rs   strs   Us   Os   Ps   Errors   has_keys   Lengths   id1s	   _keycaches   compute_encryption_keys   _keys   None(   s   selfs   encrypts   trailerss   password(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __init__<  s      0
	c         C   sB  | |  i d  } t i ƒ  } | i | ƒ | i |  i ƒ t i d |  i	 ƒ } | i | ƒ | i |  i
 ƒ | i ƒ  } |  i d j o0 x- t d ƒ D] } t i | ƒ i ƒ  } q• Wn | |  i  } t | ƒ i |  i ƒ } | |  i j oM t i | ƒ i ƒ  d  } t | ƒ i |  i ƒ } | |  i j o t Sq:n | Sd S(   s”   Algorithm 3.2. Compute the key used to decode strings
	   and streams. Returns None if the user password does not
	   pass the simple password test.i    s   <Li   i2   i   N(   s   passwords   selfs   PasswordPads   md5s   ms   updates   Os   structs   packs   Ps   id1s   digests   xs   Rs   ranges   is   Lengths   keys   RC4s   crypts   Uchecks   Us   None(   s   selfs   passwords   is   ms   Ps   keys   xs   Ucheck(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   compute_encryption_keyX  s*      c         C   s§   |  i i | ƒ } | t j o€ |  i t i d | d ƒ d  t i d | d ƒ d  } t
 i
 ƒ  } | i | ƒ | i ƒ  t |  i ƒ d  } | |  i | <n | Sd S(   s8   Return the RC4 key for an object given its id/generations   <Li    i   i   i   i   N(   s   selfs	   _keycaches   gets   ids   keys   Nones   _keys   structs   packs   ks   md5s   ms   updates   digests   len(   s   selfs   ids   ks   ms   key(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   make_rc4keyu  s     9c         C   s    t  |  i | ƒ ƒ i | ƒ Sd  S(   N(   s   RC4s   selfs   make_rc4keys   ids   crypts   s(   s   selfs   ids   s(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   decrypt_string  s    c         C   s   t  | |  i | ƒ ƒ Sd  S(   N(   s   RC4DecryptedByteStreams   ss   selfs   make_rc4keys   id(   s   selfs   ids   s(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   decrypt_streamƒ  s    c         C   s*   d |  i i |  i ƒ  t |  i ƒ f Sd  S(   Ns   <%s: %s key=%s>(   s   selfs	   __class__s   __name__s	   _authinfos   hexstrs   _key(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __repr__†  s    (
   s   __name__s
   __module__s   __doc__s   PasswordPads   __init__s   compute_encryption_keys   make_rc4keys   decrypt_strings   decrypt_streams   __repr__(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   StandardSecurityHandler7  s    			s   RC4DecryptedByteStreamc           B   s)   t  Z d  Z d „  Z d „  Z d „  Z RS(   s*    A stream filtered through the RC4 cipher c         C   s   | |  _ t i |  | ƒ d  S(   N(   s   keys   selfs   _keys   FilteredByteStreams   __init__s   under(   s   selfs   unders   key(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __init__Ž  s    	c         C   s   |  i i | ƒ Sd  S(   N(   s   selfs   _rc4s   crypts   data(   s   selfs   data(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   filter‘  s    c         C   s#   t  i |  ƒ t |  i ƒ |  _ d  S(   N(   s   FilteredByteStreams   rewinds   selfs   RC4s   _keys   _rc4(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   rewind“  s    (   s   __name__s
   __module__s   __doc__s   __init__s   filters   rewind(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   RC4DecryptedByteStreamŒ  s    		s   RC4c           B   s)   t  Z d  Z d „  Z d „  Z d „  Z RS(   s   RC4 symmetric cipher (slow!)c         C   s§   t  d ƒ } d } t | ƒ } t i d | | ƒ } xT t  d ƒ D]F } | | | | | | d } | | | | f \ | | <| | <qA W| |  _ d d f |  _
 d S(   s4   Initialise the symmetric cipher with a non-empty keyi   i    s   %dBN(   s   ranges   perms   js   lens   keys   keylens   structs   unpacks   is   selfs   state(   s   selfs   keys   is   js   perms   keylen(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __init__™  s      &	c   
      C   sð   |  i } |  i \ } } t | ƒ } d | }	 t	 i
 |	 | ƒ } |	 g } x{ | D]s } | d d } | | | d } | | | | f \ | | <| | <| | | | } | i | | | d Aƒ qP W| | f |  _ t t	 i t | ƒ ƒ Sd S(   s2   crypt(string) -> string
	   Decrypt/Encrypt strings   %dBi   i   N(   s   selfs   perms   states   index1s   index2s   lens   datas   datalens   fmts   structs   unpacks   ress   cs   js   appends   applys   packs   tuple(
   s   selfs   datas   cs   ress   js   perms   datalens   index2s   index1s   fmt(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   crypt¥  s      	
	 "c         C   s   d |  i Sd  S(   Ns   <RC4 %d %d>(   s   selfs   state(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __repr__·  s    (   s   __name__s
   __module__s   __doc__s   __init__s   crypts   __repr__(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   RC4—  s    		s   Standards   PDFFilec           B   sL  t  Z d  Z d „  Z d „  Z d d „ Z d d „ Z e d „ Z d „  Z	 e d „ Z
 d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d e i h  d „ Z h  d e <d e <d e <d e <d e <d e <d e <d e <d e <d e <d e <d e <d  e <d! e <d" e <Z RS(#   so   A PDF file parser/accessor.
       This class provides on-demand parsing of the PDF object
       content.
    c         C   s   |  i ƒ  d  S(   N(   s   selfs   _reset(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __init__È  s    c         C   sO   t  |  _ g  |  _ h  |  _ g  |  _ t ƒ  |  _ t |  _	 g  |  _
 t |  _ d  S(   N(   s   Nones   selfs	   tokenisers   stacks   refdicts   xrefss   NullSecurityHandlers   Securitys   NullObjs   Roots   Trailerss   ID(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   _resetË  s    						s    c         C   s)   |  i t t t | d ƒ ƒ ƒ | ƒ d  S(   Ns   rb(   s   selfs   _loads	   Tokenisers   FileByteStreams   files   filenames   password(   s   selfs   filenames   password(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys	   load_fileÕ  s    c         C   s›  |  i ƒ  | |  _ | i ƒ  |  _ |  i t j o t i i	 d ƒ n | i
 i ƒ  } t | d ƒ } | i
 i | | ƒ | i
 i | ƒ } | i d ƒ } | d j o t d ƒ ‚ n | i d d | ƒ } | d j o t d ƒ ‚ n | | | 7} | i | ƒ |  i ƒ  }
 |
 d j o t d	 |
 ƒ ‚ n |  i ƒ  i ƒ  } x™ n o‘ | i | ƒ |  i ƒ  }
 |
 d j o t d |
 ƒ ‚ n |  i ƒ  |  i ƒ  }	 |  i i |	 ƒ |	 i ƒ  i d ƒ o Pn |	 d i ƒ  } qMW|  i d d |  _ |  i d d |  _ |  i d d |  _  |  i d i! d ƒ } | t# j	 o t$ | d ƒ } n t } t& i | ƒ o t d | ƒ n t& | | |  i | ƒ |  _( d  S(   Ns,   *** No header found - file probably not PDF
i   s   %%EOFiÿÿÿÿs#   cannot find %%EOF - truncated file?s	   startxrefi    s   cannot find startxrefs   exepected startxref at i   s   xrefs   expected xref at s   Prevs   Roots   Infos   IDs   Encrypts   Filters   unknown security handler /%s()   s   selfs   _resets   tokrs	   tokenisers
   get_headers   versions   Nones   syss   stderrs   writes   streams   ends   filesizes   mins   lastblocksizes   seeks   reads	   lastblocks   rfinds   ps   Errors
   read_tokens   ts   values	   exec_xrefs   read_trailers   trailers   Trailerss   appends   has_keys   Roots   Infos   IDs   gets   Encrypts   NullObjs   strs   handlers   SecurityHandlerMaps   passwords   Security(   s   selfs   tokrs   passwords   Encrypts   lastblocksizes   ps	   lastblocks   handlers   filesizes   trailers   t(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   _loadØ  sX    
	   
 
c         C   sP  |  i ƒ  } |  i ƒ  } |  i ƒ  } | d j o t d ƒ ‚ n |  i | | g f \ } |  _ zà |  i ƒ  | t
 j	 oz | i ƒ  | d j o$ t d | d t | ƒ f ƒ ‚ n | i ƒ  | d j o$ t d | d t | ƒ f ƒ ‚ qó n xH |  i o= |  i | ƒ } | t
 j o t d ƒ ‚ n |  i | ƒ qö WWd | |  _ Xd S(	   s,   Expects to read a tagged object up to endobjs   objs   expected obji    s   expected object id %d not %si   s$   expected object generation %d not %ss   EOF before endobj?N(   s   selfs
   read_tokens   idtoks   gentoks   toks   Errors   stacks   oldstacks   exec_objs   ids   Nones   values   reprs
   exec_token(   s   selfs   ids   gentoks   oldstacks   toks   idtok(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   read_object  s,     
$( 
 c         C   sé   |  i ƒ  } | d j o t d | ƒ ‚ n |  i g  f \ } |  _ zŽ xT n oL |  i ƒ  } | d j o Pn | t j o t d ƒ ‚ n |  i | ƒ qS Wt	 |  i ƒ d j o t d ƒ ‚ n |  i d } Wd | |  _ X| Sd S(	   sH   read_trailer() -> dictionary
	   Read and return the trailer dictionary.s   trailers   expected trailer at i   s	   startxrefs   EOF before startxref?s(   wrong number of objects before startxrefi    N(   s   selfs
   read_tokens   ts   Errors   stacks   oldstacks   toks   Nones
   exec_tokens   lens   dict(   s   selfs   oldstacks   toks   dicts   t(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   read_trailer,  s(         
c         C   sæ  |  i i ƒ  } | d j o t |  i i ƒ  ƒ Sn°| d j o, |  i i ƒ  } t |  i	 i
 | | ƒ ƒ Snw| d j o, |  i i ƒ  } t |  i	 i
 | | ƒ ƒ Sn>| d j o¥ |  i d i ƒ  o! t d t |  i d ƒ ƒ ‚ n |  i d i d ƒ } | o |  i i t t ƒ } n |  i i t | ƒ t ƒ } t |  i	 i | | ƒ ƒ SnŒ | |  i i j o t Snq | d d	 j o[ y t t | d
 ƒ ƒ SWn t j
 o n Xy t t | ƒ ƒ SWqÞt j
 o qÞXn | Sd S(   se   Reads some tokens from the stream and returns either
	   an Object, a string keyword or None for EOF.s   /s   (s   <s   streamiÿÿÿÿs"   stream follows non-dictionary (%s)s   Lengthi    s   .-+0123456789i
   N(   s   selfs	   tokenisers	   get_tokens   toks   Names   get_names
   get_strings   ss   StringObjects   Securitys   decrypt_strings   ids   get_hexstrings   stacks   is_dicts   Errors   reprs   gets   length_hints
   get_streams   Nones   Trues   ints   Falses   StreamObjects   decrypt_streams   EOFs   LiteralObjects
   ValueErrors   float(   s   selfs   ids   length_hints   toks   s(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys
   read_token@  s<     !  	c         C   s‰   t  | t ƒ o |  i i | ƒ nb |  i i | ƒ } | t	 j o t
 d | ƒ ‚ n/ t  | t ƒ o |  i i | ƒ n | |  ƒ d S(   s    Execute a token s   unknown token %sN(   s
   isinstances   toks   Objects   selfs   stacks   appends   execmaps   gets   actions   Nones   Error(   s   selfs   toks   action(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys
   exec_tokend  s     c         C   s   h  } xj n ob |  i i ƒ  } | t j o Pn |  i i ƒ  } t | t ƒ o t	 d ƒ ‚ n | | | i
 <q W|  i i t | ƒ ƒ d S(   s    called when executing '>>' i   s    Non-name used for dictionary keyN(   s   dicts   selfs   stacks   pops   ss   DictMarks   ns
   isinstances   Names   Errors   _names   appends
   DictObject(   s   selfs   ns   ss   dict(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   exec_enddictq  s      c         C   s`   g  } x= n o5 |  i i ƒ  } | t j o Pn | i d | ƒ q W|  i i t | ƒ ƒ d S(   s    called when executing ']' i   i    N(	   s   arrays   selfs   stacks   pops   ss	   ArrayMarks   inserts   appends   ArrayObject(   s   selfs   ss   array(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   exec_endarray~  s      c         C   sN   |  i d i ƒ  p |  i d i ƒ  o t d ƒ ‚ n |  i i t ƒ d S(   s    called when executing 'obj' iÿÿÿÿiþÿÿÿs%   obj must be preceeded by two integersN(   s   selfs   stacks   is_ints   Errors   appends   ObjMark(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   exec_objˆ  s     *c         C   s¼   |  i i ƒ  } |  i i ƒ  } | t j	 o2 t d t |  i ƒ t | ƒ t | ƒ f ƒ ‚ n |  i i ƒ  } |  i i ƒ  } | i
 ƒ  | i
 ƒ  f } | i | d | d ƒ | |  i | <d S(   s     called when executing 'endobj' s&   too many objects after "obj"? %s %s %si    i   N(   s   selfs   stacks   pops   objs   marks   ObjMarks   Errors   reprs
   generations   ids   values   keys   set_ids   refdict(   s   selfs   objs
   generations   marks   keys   id(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   exec_endobjŽ  s     2c         C   s’   |  i i ƒ  } |  i i ƒ  } | i ƒ  p | i ƒ  o& t d t | ƒ t | ƒ f ƒ ‚ n |  i i t	 | i
 ƒ  | i
 ƒ  f |  i ƒ ƒ d S(   s9    called when executing 'R' - pushes an indirect R object s,   expected two integers before R but got %s %sN(   s   selfs   stacks   pops
   generations   ids   is_ints   Errors   reprs   appends   IndirectObjects   values	   deref_obj(   s   selfs
   generations   id(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   exec_R›  s     &!c         C   sç   |  i i | ƒ o |  i | Sn x­ |  i D]¢ } | i | d ƒ } | t j o q, n | d | d j o | d d j oO |  i	 i
 ƒ  } |  i	 i | d ƒ |  i | ƒ |  i	 i | ƒ |  i | Sq, q, Wt |  i | <t Sd S(   sÖ    called when value() method called on an R object.
	    It is also useful when debugging a PDF file, to be
	    able to pull out an object by its (id,gen) key.
	    Returns NullObj if the object is not in the file.i    i   i   s   nN(   s   selfs   refdicts   has_keys   keys   xrefss   xrefs   lookups   vs   Nones	   tokenisers	   get_states
   save_states   seeks   read_objects	   set_states   NullObj(   s   selfs   keys   xrefs
   save_states   v(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys	   deref_obj¥  s      
  &c         C   s]   |  i i ƒ  \ } } } |  i i | d | d ƒ |  i i d t	 |  i | | | ƒ ƒ d S(   s6   Called when xref is encountered. Also skips the table.i   i   i    N(
   s   selfs	   tokenisers   get_xrefs   startids   nentriess   offsets   seeks   xrefss   inserts   XREF(   s   selfs   startids   nentriess   offset(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys	   exec_xref¹  s     c         C   s  |  i i ƒ  i ƒ  } |  i i ƒ  } | i ƒ  o t d ƒ ‚ n | i d ƒ } | o | i
 ƒ  o | g } n xq | D]e } t | ƒ } t i | ƒ o3 t i t | ƒ ƒ } | o | | | ƒ } qß qz t d | ƒ ‚ qz Wn t | d | ƒ} |  i i | ƒ d S(   s:   Called when we have on the stack a dictionary and a streams$   Stream not preceeded by a dictionarys   Filters   /%ss   dictN(   s   selfs   stacks   pops   values   streams   dicts   is_dicts   Errors   gets   filters   is_arrays   fs   strs	   Filtermaps   has_keys	   filtclasss   UnknownFilterErrors   StreamObjects   append(   s   selfs   streams   fs   filters   dicts	   filtclass(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   exec_endstreamÀ  s&      i    c         C   s¿  | d } | i ƒ  } | t j	 o7 | i | ƒ o | i d | ƒ d  Sn | | | <n |  i	 } t | t ƒ o | | i ƒ  | | ƒ nùt | t ƒ o’ d }	 xx | i ƒ  D]j \ } } | i |	 ƒ t | ƒ } | i | d ƒ | | | d t | ƒ d | ƒ d d | d }	 q° W| i d ƒ nWt | t ƒ oa d	 }	 xG | i ƒ  D]9 } | i |	 ƒ | | | d
 | ƒ d d | d
 }	 qRW| i d ƒ næ t | t ƒ o | i d t | ƒ ƒ n» t | t ƒ oP t | ƒ }
 t |
 ƒ d d !i d d ƒ i d d ƒ }
 | i d |
 d ƒ n[ t | t ƒ o7 t | ƒ }
 | i d ƒ | i |
 ƒ | i d ƒ n | i t | ƒ ƒ | d j o | i d ƒ n | t j	 o | | =n d  S(   NiP   s   %d %d Rs   << s    i   i   s   
s    >>s   [ i   s    ]s   /iÿÿÿÿs   (s   \(s   )s   \)s   stream
s
   
endstreami    (   s   indents   objects   ids   Nones   seens   has_keys   outs   writes   selfs   PrettyPrints   pps
   isinstances   IndirectObjects   values
   DictObjects   ls   itemss   ks   vs   strs   keynames   lens   ArrayObjects   es   Names   StringObjects   ss   reprs   replaces   StreamObject(   s   selfs   objects   indents   outs   seens   ids   pps   es   ks   ls   ss   keynames   v(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   PrettyPrintÖ  sX    
	 " +s   trues   falses   nulls   <<s   [s   objs   endobjs   >>s   ]s   Rs   ns   fs   trailers   xrefs	   endstream(    s   __name__s
   __module__s   __doc__s   __init__s   _resets	   load_files   _loads   Nones   read_objects   read_trailers
   read_tokens
   exec_tokens   exec_enddicts   exec_endarrays   exec_objs   exec_endobjs   exec_Rs	   deref_objs	   exec_xrefs   exec_endstreams   syss   stdouts   PrettyPrints   TrueObjs   FalseObjs   NullObjs   DictMarks	   ArrayMarks	   InUseMarks   FreeMarks   TrailerMarks   execmap(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   PDFFileÂ  s&    		
:	$			
			
			1s   FlateDecodeFilterc           B   s&   t  Z h  d „ Z d „  Z d „  Z RS(   Nc         C   s   t  i |  | ƒ d  S(   N(   s   FilteredByteStreams   __init__s   selfs   under(   s   selfs   unders   dict(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __init__  s    c         C   s    t  i |  ƒ t i ƒ  |  _ d  S(   N(   s   FilteredByteStreams   rewinds   selfs   zlibs   decompressobjs   _d(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   rewind  s    c         C   sY   |  i t j o d Sn | d j o  |  i i ƒ  } t |  _ | Sn |  i i | ƒ Sd  S(   Ns    (   s   selfs   _ds   Nones   datas   flushs   rets
   decompress(   s   selfs   datas   ret(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   filter"  s    	(   s   __name__s
   __module__s   __init__s   rewinds   filter(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   FlateDecodeFilter  s   	s   ASCII85Decoderc           B   s2   t  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   sv    This class decodes ASCII85 strings using the feed interface.
	It is not the filter. See below for the actual filter. c         C   s   g  |  _ d |  _ g  |  _ d  S(   Ni    (   s   selfs   _outs   _ateods   _buf(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __init__0  s    		c         C   s³   |  i o d Sn | d j o d |  _ |  i ƒ  n[ xW | D]O } | t i j o q= q= | d j o d |  _ |  i ƒ  Pq= |  i | ƒ q= Wd i |  i	 ƒ } g  |  _	 | Sd S(   si   Accept some Base85 data and return the data parsed so far.
	   Feed an empty string to force end of data.s    i   s   ~N(   s   selfs   _ateods   datas   _swallows   ds	   Tokenisers
   Whitespaces   _chews   joins   _outs   result(   s   selfs   datas   ds   result(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   feed5  s$     
	 	
	c         C   s¹   | d j o |  i o& d d d d d g |  _ |  i ƒ  nx d | j o
 d j n o t d t | ƒ ƒ ‚ n? |  i i t | ƒ d ƒ t |  i ƒ d j o |  i ƒ  n d S(	   s!   Accept a non-whitespace characters   zi    s   !s   us   Base85Decode: bad character %si!   i   N(	   s   cs   selfs   _bufs   _swallows   Errors   reprs   appends   ords   len(   s   selfs   c(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   _chewK  s     c      	   C   sÑ   t  |  i ƒ } | d j o d Sn | d j o t d ƒ ‚ n |  i d d d d g d  } t d „  t | d d d	 d
 d g ƒ d ƒ } t	 | d „ d d d d g ƒ } |  i i | | d  ƒ g  |  _ d S(   sb   Convert between 2 and 5 base 85 digits in self._buf
	   into chars and append them on to self._outi    Ni   s   Base85Decode: short datai   c         C   s   | \ } } |  | | S(   N(   s   as   bs   s(   s   ss   .2s   as   b(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   <lambda>_  s    i±„ií^	 i9  iU   c         C   s   t  | |  ?d @ƒ S(   Niÿ   (   s   chrs   ms   y(   s   ys   m(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   <lambda>a  s    i   i   i   (   s   lens   selfs   _bufs   buflens   Errors   bufs   reduces   zips   ms   maps   bs   _outs   extend(   s   selfs   bs   ms   bufs   buflen(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   _swallowV  s     	$!(   s   __name__s
   __module__s   __doc__s   __init__s   feeds   _chews   _swallow(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   ASCII85Decoder,  s
    			s   ASCII85DecodeFilterc           B   s   t  Z d „  Z d „  Z RS(   Nc         C   s   t  i |  ƒ t ƒ  |  _ d  S(   N(   s   FilteredByteStreams   rewinds   selfs   ASCII85Decoders   _decoder(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   rewindh  s    c         C   s   |  i i | ƒ Sd  S(   N(   s   selfs   _decoders   feeds   data(   s   selfs   data(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   filterk  s    (   s   __name__s
   __module__s   rewinds   filter(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   ASCII85DecodeFilterg  s   	s   ASCIIHexDecoderc           B   sæ   t  Z h  d d <d d <d d <d d <d	 d
 <d d <d d <d d <d d <d d <d d <d d <d d <d d <d d <d d  <d! d <d" d <d# d <d$ d <d% d <d& d  <Z d' „  Z d( „  Z RS()   Ns   0i    s   1i   s   2i   s   3i   s   4i   s   5i   s   6i   s   7i   s   8i   s   9i	   s   ai
   s   bi   s   ci   s   di   s   ei   s   fi   s   As   Bs   Cs   Ds   Es   Fc         C   s   t  |  _ t |  _ d  S(   N(   s   Nones   selfs   msns   Falses   eod(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __init__r  s    	c         C   s
  g  } |  i o d Sn xÕ | D]Í } | t i j o q n | d j o2 |  i t j	 o | i	 |  i ƒ n t
 |  _ Pn |  i i | ƒ } | t j o t d | ƒ ‚ n |  i t j o | d |  _ q | i	 |  i | ƒ t |  _ q Wd i t t | ƒ ƒ Sd  S(   Ns    s   >s    ASCIIHex: bad input character %si   (   s   outs   selfs   eods   datas   cs	   Tokenisers
   Whitespaces   msns   Nones   appends   Trues   Hexmaps   gets   vs   Errors   joins   maps   chr(   s   selfs   datas   cs   vs   out(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   feedu  s(    
 	(   s   __name__s
   __module__s   Hexmaps   __init__s   feed(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   ASCIIHexDecodern  s   Ì	s   ASCIIHexDecodeFilterc           B   s   t  Z d „  Z d „  Z RS(   Nc         C   s   t  i |  ƒ t ƒ  |  _ d  S(   N(   s   FilteredByteStreams   rewinds   selfs   ASCIIHexDecoders   _decoder(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   rewindŒ  s    c         C   s   |  i i | ƒ Sd  S(   N(   s   selfs   _decoders   feeds   data(   s   selfs   data(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   filter  s    (   s   __name__s
   __module__s   rewinds   filter(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   ASCIIHexDecodeFilter‹  s   	s   RunLengthDecoderc           B   s    t  Z d  Z d „  Z d „  Z RS(   s?  Run length decoding filter.  Input consists of 'length' bytes
       followed by 0 or more data bytes.  A length byte of 128 means
       end of data.  A length byte less than 128 means that length+1
       bytes of literal data follows.  Otherwise, a single byte
       follows that is to be repeated 257-length times.c         C   s   d |  _ d  S(   Niÿÿÿÿ(   s   selfs   state(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __init__˜  s    c         C   sS  d } t | ƒ } | d j o |  i t d f j o t d ƒ ‚ n d } |  i t j	 oð xí | | j  oÛ |  i d j o! t	 | | ƒ |  _ | d 7} q^ |  i d j  oL t
 |  i d | | ƒ } | | | | | !7} |  i | 8_ | | 7} q^ |  i d j o t |  _ Pq^ | | | d |  i 7} | d 7} d |  _ q^ Wn | Sd  S(   Ni    iÿÿÿÿs"   RunLengthDecodeFilter: short inputs    i   i€   i  (   s   poss   lens   datas   datalens   selfs   states   Nones   Errors   outs   ords   mins   l(   s   selfs   datas   poss   ls   datalens   out(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   feedš  s.    # 	
(   s   __name__s
   __module__s   __doc__s   __init__s   feed(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   RunLengthDecoder’  s    	s   RunLengthDecodeFilterc           B   s   t  Z d „  Z d „  Z RS(   Nc         C   s   t  i |  ƒ t ƒ  |  _ d  S(   N(   s   FilteredByteStreams   rewinds   selfs   RunLengthDecoders   _decoder(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   rewind´  s    c         C   s   |  i i | ƒ Sd  S(   N(   s   selfs   _decoders   feeds   data(   s   selfs   data(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   filter·  s    (   s   __name__s
   __module__s   rewinds   filter(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   RunLengthDecodeFilter³  s   	s
   LZWDecoderc           B   sG   t  Z d  Z d Z d Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   s¾   A Lempel-Ziv decoder based on the descripion in
       section 3.3.3 of the PDF Reference. The book mentions
       that the algorithm is patented, so you and I should
       never run this.i   i  c         C   s5   g  |  _ d |  _ d |  _ |  i |  _ |  i ƒ  d  S(   Ni    (   s   selfs   inbufs   eods   bitposs
   ClearTables   lastcodes   clear(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   __init__Ã  s
    			c         C   s,   t  t t d ƒ ƒ d g |  _ d |  _ d  S(   Ni   s    i	   (   s   maps   chrs   ranges   selfs   tables   bits(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   clearÊ  s    c         C   s’   |  i t t | ƒ 7_ d } xi |  i o] |  i ƒ  } | d j o Pq! | |  i	 j o d |  _ q! |  i
 | ƒ | |  i | 7} q! W| Sd  S(   Ns    iÿÿÿÿi   (   s   selfs   inbufs   maps   ords   datas   outs   eods   nextcodes   codes	   EndOfDatas   eats   table(   s   selfs   datas   codes   out(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   feedÎ  s     c         C   sÕ   |  i |  i } | d t |  i ƒ j o d Sn |  i d } | d j o? | d |  i d } | d j o | d |  i d } q‹ n |  i | d 4| d ;} | d | d ?d |  i >d @} | |  _ | Sd S(	   s~   nextcode() -> integer
	   Return the next 'self.bits'-long code from the input buffer,
	   or return -1 if not yet enough datai   iÿÿÿÿi    i   i   i   i   N(   s   selfs   bitposs   bitss
   nextbitposs   lens   inbufs   code(   s   selfs
   nextbitposs   code(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   nextcodeÜ  s     
!	c         C   s%  | |  i j o |  i ƒ  nû |  i } | t |  i ƒ j o  |  i | |  i | d } nC | t |  i ƒ j o t d ƒ ‚ n |  i | |  i | d } |  i i	 | ƒ t |  i ƒ d j o d |  _
 n t |  i ƒ d j o d |  _
 n t |  i ƒ d j o d |  _
 n | |  _ d	 S(
   sB   eat(code) -> None
	   Receive a code, and track the encoder state.i    s/   LZWDecoder: bad input: code beyond table boundsiÿ  i
   iÿ  i   iÿ  i   N(   s   codes   selfs
   ClearTables   clears   lastcodes   lens   tables   newstrs   Errors   appends   bits(   s   selfs   codes   lastcodes   newstr(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   eatð  s"     	    (
   s   __name__s
   __module__s   __doc__s
   ClearTables	   EndOfDatas   __init__s   clears   feeds   nextcodes   eat(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys
   LZWDecoderº  s    				s   LZWDecodeFilterc           B   s   t  Z d „  Z d „  Z RS(   Nc         C   s   t  i |  ƒ t ƒ  |  _ d  S(   N(   s   FilteredByteStreams   rewinds   selfs
   LZWDecoders   _decoder(   s   self(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   rewind  s    c         C   s   |  i i | ƒ Sd  S(   N(   s   selfs   _decoders   feeds   data(   s   selfs   data(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   filter  s    (   s   __name__s
   __module__s   rewinds   filter(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   LZWDecodeFilter  s   	s   ASCIIHexDecodes   AHxs   ASCII85Decodes   A85s	   LZWDecodes   LZWs   FlateDecodes   Fls   RunLengthDecodes   RLs   CCITTFaxDecodes   CCFs   JBIG2Decodes	   DCTDecodes   DCTs   UnknownFilterErrorc           B   s   t  Z RS(   N(   s   __name__s
   __module__(    (    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   UnknownFilterError%  s   c          C   sû   d GHd } d G| GHt ƒ  i | ƒ } d Gd i t d „  | ƒ ƒ GHt ƒ  i | ƒ } d G| GHd GHt ƒ  } x< d	 d
 d d d d f D]" } d G| Gd G| i | ƒ GHq‡ Wd GHt ƒ  }  x9 d d d d d f D]" } d G| Gd G|  i | ƒ GHqÑ Wd  S(   Ns   Testing ascii85/lzw decoderss#  
	J..)6T`?p&<!J9%_[umg"B7/Z7KNXbN'S+,*Q/&"OLT'F
	LIDK#!n`$"<Atdi`\Vn%b%)&'cA*VnK\CJY(sF>c!Jnl@
	RM]WM;jjH6Gnc75idkL5]+cPZKEBPWdR>FF(kj1_R%W_d
	&/jS!;iuad7h?[L-F$+]]0A3Ck*$I0KZ?;<)CJtqi65Xb
	Vc3\n5ua:Q/=0$W<#N3U;H,MQKqfg1?:lUpR;6oN[C2E4
	ZNr8Udn.'p+?#X+1>0Kuk$bCDF/(3fL5]Oq)^kJZ!C2H1
	'TO]Rl?Q:&'<5&iP!$Rq;BXRecDN[IJB`,)o8XJOSJ9sD
	S]hQ;Rj@!ND)bD_q&C\g:inYC%)&u#:u,M6Bm%IY!Kb1+
	":aAa'S`ViJglLb8<W9k6Yl\\0McJQkDeLWdPN?9A'jX*
	al>iG1p&i;eVoK&juJHs9%;Xomop"5KatWRT"JQ#qYuL,
	JD?M$0QP)lKn06l1apKDC@\qJ4B!!(5m+j.7F790m(Vj8
	l8Q:_CZ(Gm1%X\N1&u!FKHMB~>
	s   original stream:s   after ascii85 decoding:s    c         C   s   d t  |  ƒ S(   Ns   %02x(   s   ords   x(   s   x(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   <lambda>@  s    s   
after LZW decoding:s   
Testing Runlengths   Hs   eÿl os   s	   , there€!s   ignores    s   	s   ->s   
Testing ASCIIHex decodings     4 8 6s    56
 C 6c2c20 50 6f 7 s    > zzz! (   s   zs   ASCII85Decoders   feeds   z2s   joins   maps
   LZWDecoders   z3s   RunLengthDecoders   rlds   segs   ASCIIHexDecoders   ahd(   s   ahds   segs   rlds   zs   z2s   z3(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   test_decoders+  s"    	
	  	 c         C   sˆ   |  i d } | t j o d GHd Sn d GH| d } | d } xA n o9 t | d ƒ | i ƒ  | i ƒ  j o Pn | d	 } qJ Wd S(
   s=    Test the interpreter by printing the document's outline/TOC s   Outliness   No Outline (TOC) for fileNs$   Outline tree (TOC) for the document:s   Lasts   Firsti   i    s   Next(   s   fs   Roots   ols   NullObjs   lasts   items   test_outline_items   id(   s   fs   ols   lasts   item(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   test_outlineN  s     

  c         C   s  t  |  d ƒ i d d ƒ i d d ƒ } |  d oV t |  d ƒ } | d d >@o d | d } n | d d	 >@o d
 | d } q‰ n d | d d | GH|  d o` |  d } |  d } xI n o= t	 | | d ƒ | i
 ƒ  | i
 ƒ  j o Pn | d } qÇ Wn d  S(   Ns   Titles   s    s   
s   Fi   s   <i>s   </i>i   s   <b>s   </b>i   s   + s   Firsts   Lasts   Next(   s   strs   objs   replaces   titles   ints   flagss   depths   lasts   items   test_outline_items   id(   s   objs   depths   titles   items   flagss   last(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   test_outline_item^  s"    (  

  s   __main__i   s   loadings   ...s   Root: s   Info: s
   security: (N   s   __doc__s
   __author__s   __version__s   syss   operators
   exceptionss   structs   zlibs   md5s   codecss	   Exceptions   Errors
   ByteStreams   FileByteStreams   FileByteSubStreams   FilteredByteStreams	   Tokenisers   Objects   LiteralObjects
   NullObjects   NullObjs   StringObjects   StreamObjects   ArrayObjects
   DictObjects   Booleans   Trues   TrueObjs   Falses   FalseObjs   IndirectObjects   Names   Marks   DictMarks	   ArrayMarks   ObjMarks	   InUseMarks   FreeMarks   TrailerMarks   Dates   XREFs   SecurityHandlers   NullSecurityHandlers   hexstrs   StandardSecurityHandlers   RC4DecryptedByteStreams   RC4s   Nones   SecurityHandlerMaps   PDFFiles   FlateDecodeFilters   ASCII85Decoders   ASCII85DecodeFilters   ASCIIHexDecoders   ASCIIHexDecodeFilters   RunLengthDecoders   RunLengthDecodeFilters
   LZWDecoders   LZWDecodeFilters   CCITTFaxDecodeFilters   JBIG2DecodeFilters   DCTDecodeFilters	   Filtermaps   UnknownFilterErrors   test_decoderss   test_outlines   test_outline_items   __name__s   lens   argvs   fs   paths	   load_files   reprs   Roots   values   Infos   Security(@   s   ASCII85DecodeFilters	   ArrayMarks   LiteralObjects   codecss   Marks   StandardSecurityHandlers   NullSecurityHandlers
   DictObjects   operators   paths   ASCIIHexDecodeFilters   StringObjects   PDFFiles   FileByteStreams   structs   RC4DecryptedByteStreams
   LZWDecoders   test_outline_items   Objects   RunLengthDecoders   FilteredByteStreams   DictMarks   JBIG2DecodeFilters   hexstrs   ObjMarks   Dates   DCTDecodeFilters	   Tokenisers
   ByteStreams	   Filtermaps   FlateDecodeFilters   CCITTFaxDecodeFilters   StreamObjects   Names   fs   TrailerMarks   test_outlines   SecurityHandlers
   __author__s   syss   XREFs	   InUseMarks   RunLengthDecodeFilters   Errors   IndirectObjects
   NullObjects   ArrayObjects   md5s   FalseObjs   SecurityHandlerMaps   __version__s   RC4s   ASCIIHexDecoders   TrueObjs   zlibs   ASCII85Decoders   FreeMarks   NullObjs   Booleans
   exceptionss   UnknownFilterErrors   test_decoderss   FileByteSubStreams   LZWDecodeFilter(    (    s,   /u/0/www/users/d/software/pdffile/pdffile.pys   ?"   s’   $..ÿ '		
	!2$$
	U#ÿ [;!M	#			 

