
    9i                    80   d dl mZ esdev rddlmZ nd dlZ	 d dlZd Z
d Zd Zd	 Z G d
 de      Zej                   Zej"                  Zej$                  Zej&                  Zd dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZ e ejB                  dz    e"d       z         Z# ejH                  d      Z%dZ&dZ'dZ(dZ)ejT                  Z+ejX                  e-df   Z.ej^                  e0   Z1ej^                  e2   Z3ej^                  e4   Z5ej^                  ejl                     Z7ej^                  ejp                     Z9	 d dl:m;Z;m<Z<  e;jz                         Z>e>j                         D ]  Z@e<e@   e>e@   d<    [;[<dZAdZBdZCeBeAdfZD eEeAj                  d      D  cg c]
  }  e-|        c}       ZGdZHdZI ZJdZKdZLdZM ZNdZOej                  ZPej                  ZQej                  ZRej                  ZSej                  ZTej                  ZUej                  ZVej                  ZWej                  ZXej                  ZYej                  ZZej                  Z[ej                  Z\ej                  Z]ej                  Z^ej                  Z_ej                  Z`ej                  Zaej                  Zbej                  Zcej                  Zdej                  Zeej                  Zfej                  Zgej                  Zhej                  Ziej                  Zjej                  Zkej                  Zlej                  Zmej                  Znej                  Zoej                  Zpej                  Zqej                  Zrej                  Zsej                  Ztej                  Zuej                  Zvej                  Zwej                  Zxej                  Zyej                  Zzej                  Z{ej                  Z|ej                  Z}ej                  Z~ej                  Zej                   Zej                  Zej                  Zej                  Zej                  Zej
                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                   Zej"                  Zej$                  Zej&                  Zej(                  Zej*                  Zej,                  Zej.                  Zej0                  Zej2                  Zej4                  Zej6                  Zej8                  Zej:                  Zej<                  Zej>                  Zej@                  ZejB                  ZejD                  ZejF                  ZejH                  ZejJ                  ZejL                  ZejN                  ZejP                  ZejR                  ZejT                  ZejV                  ZejX                  ZejZ                  Zej\                  Zej^                  Zej`                  Zejb                  Zejd                  Zejf                  Zejh                  Zejj                  Zejl                  Zejn                  Zejp                  Zejr                  Zejt                  Zejv                  Zejx                  Zejz                  Zej|                  Zej~                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                  Zej                   Z ej                  Zej                  Zej                  Zej                  Zej
                  Zej                  Zej                  Zej                  Zej                  Z	ej                  Z
ej                  Zej                  Zej                  Zej                  Zej                  Zej                   Zej"                  Zej$                  Zej&                  Zej(                  Zej*                  Zej,                  Zej.                  Zej0                  Zej2                  Zej4                  Zej6                  Zej8                  Zej:                  Zej<                  Zej>                  Zej@                  Z ejB                  Z!ejD                  Z"ejF                  Z#ejH                  Z$ejJ                  Z%ejL                  Z&ejN                  Z'ejP                  Z(ejR                  Z)ejT                  Z*ejV                  Z+ejX                  Z,ejZ                  Z-ej\                  Z.ej^                  Z/ej`                  Z0ejb                  Z1ejd                  Z2ejf                  Z3ejh                  Z4ejj                  Z5ejl                  Z6ejn                  Z7ejp                  Z8ejr                  Z9ejt                  Z:ejv                  Z;ejx                  Z<ejz                  Z=ej|                  Z>ej~                  Z?ej                  Z@ej                  ZAej                  ZBej                  ZCej                  ZDej                  ZEej                  ZFej                  ZGej                  ZHej                  ZIej                  ZJej                  ZKej                  ZLej                  ZMej                  ZNej                  ZOej                  ZPej                  ZQej                  ZRej                  ZSej                  ZTej                  ZUej                  ZVej                  ZWej                  ZXej                  ZYej                  ZZej                  Z[ej                  Z\ej                  Z]ej                  Z^ej                  Z_ej                  Z`ej                  Zaej                  Zbej                  Zcej                  Zdej                  Zeej                  Zfej                  Zgej                  Zhej                  Ziej                  Zjej                  Zkej                  Zlej                  Zmej                  Znej                  Zoej                  Zpej                  Zqej                  Zrej                  Zsej                  Ztd Zud Zvd Zwd Zxd Zyd Zzd  Z{d! Z|d" Z}d# Z~d$ Zd% Zd& Zd' Zd( Zd) Zd* Zd+Zd,Z G d- d.e      Z G d/ d0e      Z e       Z G d1 d2e      Z G d3 d4e      Z G d5 d6e      Z G d7 d8e      Zd9 Zd: Zd; Zd< Zd= Zd> Z G d? d@e      Zd ZdZdAZd ZdZdAZdBZdCZdDZdZdAZdCZdEZdFZdGZdHZd ZdZdAZdBZd ZdZdAZdBZdCZdZdAZdCZdEZdFZdGZdHZeez  ez  Zeez  ez  Zeez  ez  ez  ZeZeez  ez  ez  Zeez  ez  ez  Zeez  ez  ez  Zeez  ez  Zeez  ez  Zd ZdZdAZd ZdZdAZdBZdCZdDZdIZdJZdEZdKZdLZdMZdNZdOZdPZi ZҐeD ]  ZӐeӐeҐeӐj                         <   [ӌ dQedR<   dSedT<   dUedV<   dWedX<   dYedZ<   d[ed\<   d]ed^<   d_ed`<   daedb<   dcedd<   deedf<   dgedh<   diedj<   dkedl<   dmdndodpdqdrdsdtZ G du dve֫      Z G dw dxe֫      Z G dy dze׫      Z eue׫       dddd{d|e2d}e3d~e+de3de2f
dZdde2de2de0de-de0f
dZdZdZ G d de      Zde2fdZde2de2fdZde2dejX                  eeEdf   dede-de2f
dZd Zde2deEfdZde2defdZdejT                  fdZdejT                  fdZde9fdZdejX                  eeEe0df   de2de2fdZdejp                  deEfdZdejp                  deEfdZdejT                  defdZdejT                  defdZdejT                  deEfdZdejT                  defdZddde2deEfdZddde-defdZdddejp                  fdZd Zde&de&defdZdejl                  de4fdZdde2de3fdZde2fdZ G d de      Zd Zdde&de&de'defdZddde-fdZddZde-deEfdĄZde-deEfdńZdde'de-de-defdɄZ dd˄Zd dlZd dlZi Zi Zde-de2fd̈́Zde2de-fd΄ZdeEfdτZdeEfdЄZ	de
fdфZde2fd҄Z G dӄ dԐe      Z ej                  e        G dՄ de      Z ej                   e        G dք dאe      Z ej$                  e        G d؄ dِe      Z ej(                  e        G dڄ dېe      Z ej,                  e        G d܄ dݐe      Z ej0                  e        G dބ de      Z ej4                  e        G d߄ de      Z ej8                  e        G d de      Z ej<                  e        G d de      Z ej@                  e        G d de      Z! ejD                  e!        G d de      Z# ejH                  e#        G d dʐe      Z% ejL                  e%        G d de      Z' ejP                  e'        G d de      Z) ejT                  e)        G d de      Z+ ejX                  e+        G d de      Z- ej\                  e-        G d de      Z/ ej`                  e/       y# e	$ r d dlZY w xY w# e	$ r i Z>Y w xY wc c} w )    )version_info.   )_fitzNc                     	 d| j                   j                         z   }d| j                  j
                  d| j                  j                  d|dS # t        j                  $ r d}Y Kw xY w)Nz	proxy of  <r   z; z >)this__repr____builtin__	Exception	__class__
__module____name__)selfstrthiss     S/var/www/html/backtest/airagagent/rag_env/lib/python3.12/site-packages/fitz/fitz.py
_swig_reprr      s_    		 2 2 44 "^^668O8OQXZZ    s   A A+*A+c                       fd}|S )Nc                     |dk(  r | ||       y |dk(  r| j                   j                  |       y t        | |      r.t        t	        t        |       |      t              r | ||       y t        d| z        )Nr
   thisownz(You cannot add instance attributes to %s)r
   ownhasattr
isinstancegetattrtypepropertyAttributeError)r   namevaluesets      r   set_instance_attrzE_swig_setattr_nondynamic_instance_variable.<locals>.set_instance_attr    si    6>dE"YIIMM% T4 ZT
D0I8%TdE" !Kd!RSS     )r!   r"   s   ` r   *_swig_setattr_nondynamic_instance_variabler%      s    T r#   c                       fd}|S )Nc                     t        | |      r%t        t        | |      t              s | ||       y t	        d| z        )Nz%You cannot add class attributes to %s)r   r   r   r   r   )clsr   r    r!   s      r   set_class_attrz?_swig_setattr_nondynamic_class_variable.<locals>.set_class_attr-   s:    3jd1CX&NT5! !H3!NOOr#   r$   )r!   r)   s   ` r   '_swig_setattr_nondynamic_class_variabler*   ,   s    P
 r#   c                       fd}|S )zlClass decorator for adding a metaclass to a SWIG wrapped class - a slimmed down version of six.add_metaclassc                 p     | j                   | j                  | j                  j                               S N)r   	__bases____dict__copy)r(   	metaclasss    r   wrapperz$_swig_add_metaclass.<locals>.wrapper7   s'    s}}cll6G6G6IJJr#   r$   )r1   r2   s   ` r   _swig_add_metaclassr3   5   s    KNr#   c                   4    e Zd ZdZ eej                        Zy)_SwigNonDynamicMetazKMeta class to enforce nondynamic attributes (no new attributes) for a classN)r   r   __qualname____doc__r*   r   __setattr__r$   r#   r   r5   r5   <   s    U9$:J:JKKr#   r5   z
()<>[]{}/%TESSDATA_PREFIX
point_like	rect_likematrix_like	quad_like)fontdescriptorsfontbuffersloaderz1.23.7z2023-11-30 00:00:0120231130000001(bde223b194907e349f0a9ce495dd874bf77be3ebz&Updates for release of PyMuPDF-1.23.7.mainc                 ,    t        j                  |       S r-   )r   _set_FileDataError)r    s    r   rE   rE     s    ##E**r#   c                 0    t        j                  | ||      S r-   )r   util_sine_between)CPQs      r   rG   rG     s    ""1a++r#   c                 .    t        j                  | |      S r-   )r   util_hor_matrix)rH   rI   s     r   rL   rL     s      A&&r#   c                 ,    t        j                  |       S r-   )r   util_ensure_widget_calc)annots    r   rN   rN     s    ((//r#   c                 ,    t        j                  |       S r-   )r   util_make_rectas    r   rQ   rQ     s    ""r#   c                 ,    t        j                  |       S r-   )r   util_make_irectrR   s    r   rU   rU     s      ##r#   c                 ,    t        j                  |       S r-   )r   util_round_rectrects    r   rW   rW     s      &&r#   c                 .    t        j                  | |      S r-   )r   util_transform_rect)rY   matrixs     r   r[   r[     s    $$T622r#   c                 .    t        j                  | |      S r-   )r   util_intersect_rectr1r2s     r   r^   r^     s    $$R,,r#   c                 .    t        j                  | |      S r-   )r   util_is_point_in_rect)prs     r   rc   rc     s    &&q!,,r#   c                 .    t        j                  | |      S r-   )r   util_include_point_in_rect)re   rd   s     r   rg   rg     s    ++Aq11r#   c                 .    t        j                  | |      S r-   )r   util_point_in_quad)rI   rJ   s     r   ri   ri     s    ##Aq))r#   c                 .    t        j                  | |      S r-   )r   util_transform_point)pointr\   s     r   rk   rk     s    %%eV44r#   c                 .    t        j                  | |      S r-   )r   util_union_rectr_   s     r   rn   rn     s      R((r#   c                 .    t        j                  | |      S r-   )r   util_concat_matrix)m1m2s     r   rp   rp     s    ##B++r#   c                 ,    t        j                  |       S r-   )r   util_invert_matrix)r\   s    r   rt   rt     s    ##F++r#   c                 2    t        j                  | |||      S r-   )r   util_measure_string)textfontnamefontsizeencodings       r   rv   rv     s    $$T8XxHHr#   i   ic                       e Zd ZdZd ZddZd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd ZeZd Zd ZeZd Zd Zd Zd Zd Zd Zd Zd ZeZed        Zy)MatrixzMatrix() - all zeros
    Matrix(a, b, c, d, e, f)
    Matrix(zoom-x, zoom-y) - zoom
    Matrix(shear-x, shear-y, 1) - shear
    Matrix(degree) - rotate
    Matrix(Matrix) - new copy
    Matrix(sequence) - from 'sequence'c                 h   |s+dx| _         x| _        x| _        x| _        x| _        | _        y t        |      dkD  rt        d      t        |      dk(  r6t        t        |      \  | _         | _        | _        | _        | _        | _        y t        |      dk(  rt        |d   d      rt        j                  |d         }t        t        j                  |      d      }t        t        j                  |      d      }|x| _         | _        || _        | | _        dx| _        | _        y t        t        |d         \  | _         | _        | _        | _        | _        | _        y t        |      dk(  st        |      d	k(  rN|d   dk(  rFt        |d         ddt        |d         ddf\  | _         | _        | _        | _        | _        | _        y t        |      d	k(  rN|d   dk(  rFd
t        |d         t        |d         d
ddf\  | _         | _        | _        | _        | _        | _        y t        d      )N           Matrix: bad seq lenr   r   	__float__               ?zMatrix: bad args)rS   bcdeflen
ValueErrormapfloatr   mathradiansroundcossin)r   argsthetar   ss        r   __init__zMatrix.__init__  s   BEEDFETVEdfEtvEt9q=233t9>=@=M:DFDFDFDFDFDFt9>tAw,T!W-$((5/2.$((5/2."##"%%ADUDQRGAT>t9>SY!^Q1=B47^S%Q.#s>3:DFDFDFDFDFDFt9>d1gl=@d1gd1gS#>>:DFDFDFDFDFDF+,,r#   Nc                     |t        |       }nt        |      }|d   dk(  ry|d   \  | _        | _        | _        | _        | _        | _        y)z}Calculate the inverted matrix. Return 0 if successful and replace
        current one. Else return 1 and do nothing.
        r   r   )rt   rS   r   r   r   r   r   )r   srcdsts      r   invertzMatrix.invert  sP     ;$T*C$S)Cq6Q;9<Q6r#   c                     t        |      }t        |      }| xj                  || j                  z  || j                  z  z   z  c_        | xj                  || j
                  z  || j                  z  z   z  c_        | S )z5Calculate pre translation and replace current matrix.)r   r   rS   r   r   r   r   )r   txtys      r   pretranslatezMatrix.pretranslate  s_    2Y2Y"tvv+TVV++"tvv+TVV++r#   c                     t        |      }t        |      }| xj                  |z  c_        | xj                  |z  c_        | xj                  |z  c_        | xj                  |z  c_        | S )z1Calculate pre scaling and replace current matrix.r   rS   r   r   r   )r   sxsys      r   prescalezMatrix.prescale'  sM    2Y2Y""""r#   c                 J   t        |      }t        |      }| j                  | j                  }}| xj                  || j                  z  z  c_        | xj                  || j                  z  z  c_        | xj                  ||z  z  c_        | xj                  ||z  z  c_        | S )z2Calculate pre shearing and replace current matrix.r   )r   hvrS   r   s        r   preshearzMatrix.preshear1  sx    !H!Hvvtvv1!dff*!dff*!a%!a%r#   c                 P   t        |      }|dk  r|dz  }|dk  r|dk\  r|dz  }|dk\  rt        d|z
        t        k  r	 | S t        d|z
        t        k  rL| j                  }| j                  }| j
                  | _        | j                  | _        | | _        | | _        | S t        d|z
        t        k  rJ| j                   | _        | j                   | _        | j
                   | _        | j                   | _        | S t        d|z
        t        k  rL| j                  }| j                  }| j
                   | _        | j                   | _        || _        || _        | S t        j                  |      }t        j                  |      }t        j                  |      }| j                  }| j                  }||z  || j
                  z  z   | _        ||z  || j                  z  z   | _        | |z  || j
                  z  z   | _        | |z  || j                  z  z   | _        | S )z2Calculate pre rotation and replace current matrix.r   h  g     V@g     f@g     p@)r   absEPSILONrS   r   r   r   r   r   r   r   )r   r   rS   r   radr   r   s          r   	prerotatezMatrix.prerotate<  s   eai#eaislESLEeslq5y>G#F C (AAVVDFVVDFRDFRDF6 3 ')ffWDFffWDFffWDFffWDF* ' ')AAffWDFffWDFDFDF  ,,u%CAAAAUQZ'DFUQZ'DFBFQZ'DFBFQZ'DFr#   c                     t        |      t        |      cxk(  rdk(  st        d       t        d      t        ||      \  | _        | _        | _        | _        | _        | _        | S )z.Multiply two matrices and replace current one.r   r   )	r   r   rp   rS   r   r   r   r   r   )r   onetwos      r   concatzMatrix.concatg  s_    3x3s8(q(233 )2339KCQT9U6r#   c                     | j                   | j                  | j                  | j                  | j                  | j
                  f|   S r-   )rS   r   r   r   r   r   r   is     r   __getitem__zMatrix.__getitem__n  s2    ?BBr#   c                     t        |      }|dk(  r|| _        y |dk(  r|| _        y |dk(  r|| _        y |dk(  r|| _        y |dk(  r|| _        y |dk(  r|| _        y t        d      )Nr   r   r   r         index out of range)r   rS   r   r   r   r   r   
IndexErrorr   r   r   s      r   __setitem__zMatrix.__setitem__q  s    !H!VaTV 	 !VaTV 	 !VaTV 	 !VaTV
 		 !VaTV 	 !VaTV 	 122r#   c                      y)Nr   r$   r   s    r   __len__zMatrix.__len__}      r#   c                 0    dt        t        |             z   S )Nr|   strtupler   s    r   r   zMatrix.__repr__  s    #eDk***r#   c                 <    t               }|j                  |        |S )zCalculate inverted matrix.)r|   r   )r   rq   s     r   
__invert__zMatrix.__invert__  s    X
		$	r#   c           	         t        |d      r^t        | j                  |z  | j                  |z  | j                  |z  | j
                  |z  | j                  |z  | j                  |z        S t        dd      }|j                  | |      S )Nr   r   )	r   r|   rS   r   r   r   r   r   r   )r   mrq   s      r   __mul__zMatrix.__mul__  sr    1k"$&&1*dffqj$&&1*&&1*dffqj$&&1*> >Aa[yyq!!r#   c           	      l   t        |d      rpt        | j                  dz  |z  | j                  dz  |z  | j                  dz  |z  | j
                  dz  |z  | j                  dz  |z  | j                  dz  |z        S t        |      d   }|st        d      t        dd      }|j                  | |      S Nr   r   r   zmatrix not invertible)r   r|   rS   r   r   r   r   r   rt   ZeroDivisionErrorr   )r   r   rq   rr   s       r   __truediv__zMatrix.__truediv__  s    1k"$&&2+a-"QA&&2+a-"QAG G"1%#$;<<Aa[yyr""r#   c           
         t        |d      r^t        | j                  |z   | j                  |z   | j                  |z   | j
                  |z   | j                  |z   | j                  |z         S t        |      dk7  rt        d      t        | j                  |d   z   | j                  |d   z   | j                  |d   z   | j
                  |d   z   | j                  |d   z   | j                  |d	   z         S 
Nr   r   r   r   r   r   r   r   r   
r   r|   rS   r   r   r   r   r   r   r   r   r   s     r   __add__zMatrix.__add__      1k"$&&1*dffqj$&&1*&&1*dffqj$&&1*> >q6Q;233dffqtmTVVad]DFFQqTM&&1Q4-!A$1G 	Gr#   c           
         t        |d      r^t        | j                  |z
  | j                  |z
  | j                  |z
  | j
                  |z
  | j                  |z
  | j                  |z
        S t        |      dk7  rt        d      t        | j                  |d   z
  | j                  |d   z
  | j                  |d   z
  | j
                  |d   z
  | j                  |d   z
  | j                  |d	   z
        S r   r   r   s     r   __sub__zMatrix.__sub__  r   r#   c                     t        |       S r-   )r|   r   s    r   __pos__zMatrix.__pos__  s    d|r#   c                     t        | j                   | j                   | j                   | j                   | j
                   | j                         S r-   )r|   rS   r   r   r   r   r   r   s    r   __neg__zMatrix.__neg__  s;    tvvgw$&&466'DFF7KKr#   c                 J    t        |       t        |       cxk(  xr dk(   S c  S Nr   maxminr   s    r   __bool__zMatrix.__bool__  &    IT/a/00/00r#   c                 J    t        |       t        |       cxk(  xr dk(   S c  S r   r   r   s    r   __nonzero__zMatrix.__nonzero__  r   r#   c                 \    t        |d      syt        |      dk(  xr t        | |z
        du S )Nr   Fr   r   r   bool)r   mats     r   __eq__zMatrix.__eq__  s0    sI&3x1}:dSj!1U!::r#   c           	      j    t        j                  t        | D cg c]  }||z  	 c}            S c c}w r-   r   sqrtsumr   r   s     r   __abs__zMatrix.__abs__  (    yy40aac01220   0c                     t        | j                        t        k  xr t        | j                        t        k  xs: t        | j                        t        k  xr t        | j
                        t        k  S )z,True if rectangles are mapped to rectangles.)r   r   r   r   rS   r   r   s    r   is_rectilinearzMatrix.is_rectilinear  sR     DFFg%?#dff+*? >[7"<s466{W'<	>r#   r-   )r   r   r6   r7   r   r   r   r   r   r   r   r   r   r   r   r   __inv__r   r   __div__r   r   r   r   r   r   r   r   normr   r   r$   r#   r   r|   r|     s    *-@	)VC
+
 G"# GGGL11;
3 D? ?r#   r|   c                   F    e Zd ZdZd Zd Zd ZeZeZeZ	eZ
eZeZd Zd Zy)IdentityMatrixz"Identity matrix [1, 0, 0, 1, 0, 0]c                 2    t         j                  | dd       y )Nr   )r|   r   r   s    r   r   zIdentityMatrix.__init__  s    c3'r#   c                 r    |dv rd| j                   |<   y |dv rd| j                   |<   y || j                   |<   y )Nadr   bcefr~   )r/   )r   r   r    s      r   r8   zIdentityMatrix.__setattr__  s:    4<"%DMM$V^"%DMM$"'DMM$r#   c                      t        d      )NzIdentity is readonly)NotImplementedError)r   s    r   	checkargszIdentityMatrix.checkargs  s    !"899r#   c                      y)Nz,IdentityMatrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)r$   r   s    r   r   zIdentityMatrix.__repr__  s    =r#   c                     t        d      S )N)r   r   r   r   r   r   )hashr   s    r   __hash__zIdentityMatrix.__hash__  s    M""r#   N)r   r   r6   r7   r   r8   r   r   r   r   r   r   r   r   r  r$   r#   r   r   r     s>    ,((: IHHLFF>#r#   r   c                       e Zd ZdZd Zd Zed        Ze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Zd Zd Zd Zd ZeZd Zy)PointzYPoint() - all zeros
Point(x, y)
Point(Point) - new copy
Point(sequence) - from 'sequence'c                    |sd| _         d| _        y t        |      dkD  rt        d      t        |      dk(  r't	        |d         | _         t	        |d         | _        y t        |      dk(  r^|d   }t        |d      du rt        d      t        |      dk7  rt        d      t	        |d         | _         t	        |d         | _        y t        d      )	Nr~   r   Point: bad seq lenr   r   r   FzPoint: bad args)xyr   r   r   r   r   r   ls      r   r   zPoint.__init__  s    DFDFt9q=122t9>47^DF47^DFt9>QAq-(E1 !2331v{ !5661Q4[DF1Q4[DF*++r#   c                 j    t        |      dk7  rt        d      t        | |      \  | _        | _        | S )z7Replace point by its transformation with matrix-like m.r   r   )r   r   rk   r  r  r   s     r   	transformzPoint.transform  s2    q6Q;233-dA6r#   c                    | j                   | j                   z  | j                  | j                  z  z   }|t        k  rt        dd      S t	        j
                  |      }t        | j                   |z  | j                  |z        S )zUnit vector of the point.r   )r  r  r   r  r   r   r   r   s     r   unitz
Point.unit
  sc     FFTVVOdfftvvo-w;1:IIaLTVVaZ!,,r#   c                 ,   | j                   | j                   z  | j                  | j                  z  z   }|t        k  rt        dd      S t	        j
                  |      }t        t        | j                         |z  t        | j                        |z        S )z&Unit vector with positive coordinates.r   )r  r  r   r  r   r   r   r  s     r   abs_unitzPoint.abs_unit  sk     FFTVVOdfftvvo-w;1:IIaLS[1_c$&&kAo66r#   c                    t        |      dkD  st        d      |d   }t        |      dk(  rt        |      }n%t        |      dk(  rt        |      }nt        d      t        |      dkD  r|d   }nd}dd	d
dd}||   d   ||   d   z  }t	        |      t        u rt        | |z
        |z  S t        |j                  |j                        }||j                  z  }| |v ry| j                  |j                  kD  r| j                  |j                  k\  r| j                  |j                  |      S | j                  |j                  k  r| j                  |j                  |      S | j                  |j                  z
  |z  S |j                  | j                  cxk  r|j                  k  rTn nQ| j                  |j                  k\  r| j                  |j                  z
  |z  S |j                  | j                  z
  |z  S | j                  |j                  k\  r| j                  |j                   |      S | j                  |j                  k  r| j                  |j                  |      S |j                  | j                  z
  |z  S )z.Return distance to rectangle or another point.r   z$at least one parameter must be givenr   r   z$arg1 must be point-like or rect-liker   px)r   r   )r         R@)gRQ@r  )gffffff9@r  )r  incmmmr~   )r   r   r  Rectr   r   top_leftbottom_rightr  x1r  y1distance_toy0	top_rightx0bottom_left)r   r   r  r  ur   re   s          r   r  zPoint.distance_to  s   4y1}CDDGq6Q;aAVq[QACDDt9q=7DD(+ dGAJ4#7etax=1$$ QZZ(1966ADD=vv~''==144''T::**TTTVV#qtt#vv~**tvv**vv~''t<<144''

D99tvv**r#   c                 8    | j                   | j                  f|   S r-   r  r  r   s     r   r   zPoint.__getitem__N  s    ""r#   c                      y)Nr   r$   r   s    r   r   zPoint.__len__Q  r   r#   c                 b    t        |      }|dk(  r|| _        y |dk(  r|| _        y t        d      )Nr   r   r   )r   r  r  r   r   s      r   r   zPoint.__setitem__T  s?    !H!VaTV  !VaTV  122r#   c                 0    dt        t        |             z   S )Nr  r   r   s    r   r   zPoint.__repr__\      U4[)))r#   c                     t        |       S r-   )r  r   s    r   r   zPoint.__pos___      T{r#   c                 F    t        | j                   | j                         S r-   )r  r  r  r   s    r   r   zPoint.__neg__b  s    dffWtvvg&&r#   c                 J    t        |       t        |       cxk(  xr dk(   S c  S r   r   r   s    r   r   zPoint.__bool__e  r   r#   c                 J    t        |       t        |       cxk(  xr dk(   S c  S r   r   r   s    r   r   zPoint.__nonzero__h  r   r#   c                 \    t        |d      syt        |      dk(  xr t        | |z
        du S )Nr   Fr   r   r   rd   s     r   r   zPoint.__eq__k  s/    q)$1v{6tD1H~66r#   c                     t        j                  | j                  | j                  z  | j                  | j                  z  z         S r-   )r   r   r  r  r   s    r   r   zPoint.__abs__p  s.    yy$&&466DFF?:;;r#   c                     t        |d      r&t        | j                  |z   | j                  |z         S t	        |      dk7  rt        d      t        | j                  |d   z   | j                  |d   z         S Nr   r   r  r   r   r   r  r  r  r   r   r/  s     r   r   zPoint.__add__u  e    1k"!TVVaZ00q6Q;122TVVad]DFFQqTM22r#   c                     t        |d      r&t        | j                  |z
  | j                  |z
        S t	        |      dk7  rt        d      t        | j                  |d   z
  | j                  |d   z
        S r2  r3  r/  s     r   r   zPoint.__sub__|  r4  r#   c                     t        |d      r&t        | j                  |z  | j                  |z        S t        |       }|j	                  |      S Nr   )r   r  r  r  r  )r   r   rd   s      r   r   zPoint.__mul__  s@    1k"!TVVaZ00$K{{1~r#   c                     t        |d      r,t        | j                  dz  |z  | j                  dz  |z        S t	        |      d   }|st        d      t        |       }|j                  |      S r   )r   r  r  r  rt   r   r  )r   r   rq   rd   s       r   r   zPoint.__truediv__  sf    1k""QA66"1%#$;<<$K{{2r#   c                 *    t        t        |             S r-   r  r   r   s    r   r  zPoint.__hash__      E$K  r#   N)r   r   r6   r7   r   r  r   r  r  r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r$   r#   r   r  r    s    f,. - - 7 70+d#*'117
< D33 G!r#   r  c                      e Zd ZdZd Zd Zed        Zed        Zed        Z	ed        Z
ed        Zed	        Zed
        Ze
ZeZeZeZed        Zd Zd Zd Z ee      Z ed       Z ed       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$d Z%d Z&d Z'd  Z(d! Z)d" Z*d# Z+d$ Z,e,Z-d% Z.d& Z/d' Z0d( Z1d) Z2y*)+r  a
  Rect() - all zeros
    Rect(x0, y0, x1, y1) - 4 coordinates
    Rect(top-left, x1, y1) - point and 2 coordinates
    Rect(x0, y0, bottom-right) - 2 coordinates and point
    Rect(top-left, bottom-right) - 2 points
    Rect(sequ) - new from sequence or rect-like
    c                 L    t        |      \  | _        | _        | _        | _        y r-   )rQ   r   r  r  r  r   r   s     r   r   zRect.__init__  s     -;D-A*$'47r#   c                     | j                   | j                  k  r#| j                   | j                  c| _        | _         | j                  | j                  k  r#| j                  | j                  c| _        | _        | S z)Replace rectangle with its valid version.r  r   r  r  r   s    r   	normalizezRect.normalize  W    77TWW#wwDGTW77TWW#wwDGTWr#   c                 j    | j                   | j                  k\  xs | j                  | j                  k\  S z True if rectangle area is empty.r   r  r  r  r   s    r   is_emptyzRect.is_empty  )     ww$''!7TWW%77r#   c                 j    | j                   | j                  k  xr | j                  | j                  k  S zTrue if rectangle is valid.rF  r   s    r   is_validzRect.is_valid  )     ww$''!8dgg&88r#   c                     | j                   | j                  cxk(  xr	 t        k(  nc xr( | j                  | j                  cxk(  xr	 t
        k(  S c S )z'True if this is the infinite rectangle.r   r  FZ_MIN_INF_RECTr  r  FZ_MAX_INF_RECTr   s    r   is_infinitezRect.is_infinite  9     ww$''4_4^DGG9^9^^9^^r#   c                 B    t        | j                  | j                        S zTop-left corner.r  r   r  r   s    r   r  zRect.top_left       TWWdgg&&r#   c                 B    t        | j                  | j                        S zTop-right corner.r  r  r  r   s    r   r  zRect.top_right  rV  r#   c                 B    t        | j                  | j                        S zBottom-left corner.r  r   r  r   s    r   r!  zRect.bottom_left  rV  r#   c                 B    t        | j                  | j                        S zBottom-right corner.r  r  r  r   s    r   r  zRect.bottom_right  rV  r#   c                 n    t        | j                  | j                  | j                  | j                        S z!Return Quad version of rectangle.Quadtltrblbrr   s    r   quadz	Rect.quad  %     DGGTWWdggtww77r#   c           	         t        |      }| j                  s$| j                  s|j                  s|j                  rt        d      t	        dddd| j
                   | j                         t	        |j                  | j                  z  |j                  | j                  z        z  t	        dddd|j
                  |j                        z  S z+Return matrix that converts to target rect.z'rectangles must be finite and not emptyr   r   	r  rQ  rG  r   r|   r   r  widthheightr   re   s     r   torectzRect.torect       Gt}}FGG1aAx$''2QWWtzz)188dkk+ABCQ1aqtt,-	
r#   c                 f    | j                   r
t               S | j                  j                  ||      S zGMorph with matrix-like m and point-like p.

        Returns a new quad.rQ  INFINITE_QUADrh  morphr   rd   r   s      r   rv  z
Rect.morph  *      ?"yyq!$$r#   c                 *    t        t        |             S )zReturn the IRect.)IRectrW   r   s    r   r   z
Rect.round  s    _T*++r#   c                 j    | j                   | j                  kD  r| j                   | j                  z
  S dS r   r  r   r   s    r   <lambda>zRect.<lambda>  &    $''8I477TWW#4 q r#   c                 j    | j                   | j                  kD  r| j                   | j                  z
  S dS r   r  r  r   s    r   r}  zRect.<lambda>  r~  r#   c                     t        |      dk7  rt        d      t        | |      \  | _        | _        | _        | _        | S )zExtend to include point-like p.r   r  )r   r   rg   r   r  r  r  r/  s     r   include_pointzRect.include_point  s;    q6Q;122-Ga-P*$'47r#   c                    t        |      dk7  rt        d      t        |      }|j                  s| j                  r1t        t        t
        t
        f\  | _        | _        | _        | _	        | S |j                  r| S | j                  rI|j                  |j                  |j                  |j                  f\  | _        | _        | _        | _	        | S t        | |      \  | _        | _        | _        | _	        | S )zExtend to include rect-like r.r   Rect: bad seq len)r   r   r  rQ  rO  rP  r   r  r  r  rG  rn   ro  s     r   include_rectzRect.include_rect  s    q6Q;011G==D,,1@/Sbds1s.DGTWdgtw  ZZK]]12qttQTT1441G.DGTWdgtw  2Aq1I.DGTWdgtwr#   c                 $   t        |      dk(  st        d      t        |      }|j                  r| S | j                  rI|j                  |j
                  |j                  |j                  f\  | _        | _        | _        | _        | S |j                  rI|j                  |j
                  |j                  |j                  f\  | _        | _        | _        | _        | S | j                  r| S t        | |      \  | _        | _        | _        | _        | S )z)Restrict to common rect with rect-like r.r   r  )
r   r   r  rQ  r   r  r  r  rG  r^   ro  s     r   	intersectzRect.intersect  s    1v{011G==K12qttQTT1441G.DGTWdgtw  ZZ12qttQTT1441G.DGTWdgtw
 	 ]]K1DT11M.DGTWdgtwr#   c                 $    | j                  |      S )z.Check if containing point-like or rect-like x.)__contains__r   r  s     r   containszRect.contains        ##r#   c                     t        |      dk(  st        d      t        | |      \  | _        | _        | _        | _        | S )z1Replace with the transformation by matrix-like m.r   r   )r   r   r[   r   r  r  r  r   s     r   r  zRect.transform   s;    1v{233-@q-I*$'47r#   c                 d    | j                   | j                  | j                  | j                  f|   S r-   r   r  r  r  r   s     r   r   zRect.__getitem__'  &    $''4773A66r#   c                      yNr   r$   r   s    r   r   zRect.__len__*  r   r#   c                     t        |      }|dk(  r|| _        y |dk(  r|| _        y |dk(  r|| _        y |dk(  r|| _        y t        d      Nr   r   r   r   r   )r   r   r  r  r  r   r   s      r   r   zRect.__setitem__-  sg    !H!VqTW  !VqTW
 	 !VqTW  !VqTW  122r#   c                 0    dt        t        |             z   S )Nr  r   r   s    r   r   zRect.__repr__7      E$K(((r#   c                     t        |       S r-   r  r   s    r   r   zRect.__pos__:      Dzr#   c                 v    t        | j                   | j                   | j                   | j                         S r-   )r  r   r  r  r  r   s    r   r   zRect.__neg__=  +    TWWHtwwh477(;;r#   c                     | j                   | j                  cxk(  xr* | j                  cxk(  xr | j                  cxk(  xr dk(   S c  S r   r  r   s    r   r   zRect.__bool__@  8    77dgg@@DGG@q@@@@@@r#   c                     | j                   | j                  cxk(  xr* | j                  cxk(  xr | j                  cxk(  xr dk(   S c  S r   r  r   s    r   r   zRect.__nonzero__C  r  r#   c                     t        |d      syt        |      dk(  xrN | j                  |d   k(  xr: | j                  |d   k(  xr& | j                  |d   k(  xr | j
                  |d   k(  S Nr   Fr   r   r   r   r   r   r   r   r  r  r  ro  s     r   r   zRect.__eq__F  k    q)$1v{jtww!A$j477ad?jtwwRSTURVj[_[b[bfghifj[jjr#   c                 f    | j                   s| j                  sy| j                  | j                  z  S Nr~   rQ  rK  rm  rn  r   s    r   r   zRect.__abs__K  s'    4==zzDKK''r#   c           	      j    t        j                  t        | D cg c]  }||z  	 c}            S c c}w r-   r   r   s     r   r   z	Rect.normP  r   r   c                 l   t        |d      rBt        | j                  |z   | j                  |z   | j                  |z   | j
                  |z         S t        |      dk7  rt        d      t        | j                  |d   z   | j                  |d   z   | j                  |d   z   | j
                  |d   z         S Nr   r   r  r   r   r   r   r   r  r   r  r  r  r   r   r/  s     r   r   zRect.__add__S      1k"!TWWq[$''A+tww{KKq6Q;011DGGadNDGGadNDGGadNDGGaPQdNSSr#   c                 l   t        |d      rBt        | j                  |z
  | j                  |z
  | j                  |z
  | j
                  |z
        S t        |      dk7  rt        d      t        | j                  |d   z
  | j                  |d   z
  | j                  |d   z
  | j
                  |d   z
        S r  r  r/  s     r   r   zRect.__sub__[  r  r#   c                     t        |d      rBt        | j                  |z  | j                  |z  | j                  |z  | j
                  |z        S t        |       }|j                  |      }|S r7  )r   r  r   r  r  r  r  )r   r   re   s      r   r   zRect.__mul__c  sX    1k"!TWWq[$''A+tww{KKJKKNr#   c                 (   t        |d      rNt        | j                  dz  |z  | j                  dz  |z  | j                  dz  |z  | j
                  dz  |z        S t        |      d   }|st        d      t        |       }|j                  |      }|S Nr   r   r   zMatrix not invertible)	r   r  r   r  r  r  rt   r   r  )r   r   imre   s       r   r   zRect.__truediv__j  s    1k""Q"Q"QRTUVWW"1%#$;<<JKKOr#   c                    t        |d      r|t        |       v S t        |      }|dk(  rt        ||       S |dk(  rt	               }	 t        |      }| j                  |j                  cxk  xr! |j                  cxk  xr | j                  k  nc xr@ | j                  |j                  cxk  xr! |j                  cxk  xr | j                  k  S c S y#  t        |      j                  }Y xY w)Nr   r   r   F)r   r   r   rc   INFINITE_RECTr  rc  rY   r   r  r  r  )r   r  r
  re   s       r   r  zRect.__contains__v  s    1k"d##F6(D116A!G GGqtt6qtt6tww6 7GGqtt6qtt6tww6868	!GLLs   C C-c                     t        |d      st        d      t        |       }t        |      dk(  r|j	                  |      S t        |      dk(  r|j                  |      S t        d      )Nr   bad type op 2r   r   )r   r   r  r   r  r  r   r  re   s      r   __or__zRect.__or__  s_    q)$_--Jq6Q;??1%%q6Q;>>!$$))r#   c                     t        |d      rt        |      dk7  rt        d      t        |       }|j	                  |      S )Nr   r   r  )r   r   r   r  r  r  s      r   __and__zRect.__and__  s8    q)$A!_--J{{1~r#   c                     t        |      }| j                  s$| j                  s|j                  s|j                  ryt        |       }|j                  |      j                  ryy)z4Check if intersection with rectangle x is not empty.FT)r  rG  rQ  r  )r   r  r`   re   s       r   
intersectszRect.intersects  sI    !W==D,,r~~J;;r?##r#   c                 *    t        t        |             S r-   r:  r   s    r   r  zRect.__hash__  r;  r#   N)3r   r   r6   r7   r   rB  r   rG  rK  rQ  r  r  r!  r  rd  re  rf  rg  rh  rp  rv  r   irectrm  rn  r  r  r  r  r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r$   r#   r   r  r    s    8 8 9 9 _ _ ' ' ' ' ' ' ' ' 
B	B	B	B8 8

%, UOEPQEPQF"$7)<AAk
(
3TT G"	*!r#   r  c                      e Zd ZdZd Zd Zed        Zed        Zed        Z	ed        Z
ed        Zed	        Zed
        Ze
ZeZeZeZed        Zd Zd Zed        Z ed       Z ed       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#d Z$d Z%d Z&d  Z'd! Z(d" Z)d# Z*e*Z+d$ Z,d% Z-d& Z.d' Z/d( Z0y))*rz  a  IRect() - all zeros
    IRect(x0, y0, x1, y1) - 4 coordinates
    IRect(top-left, x1, y1) - point and 2 coordinates
    IRect(x0, y0, bottom-right) - 2 coordinates and point
    IRect(top-left, bottom-right) - 2 points
    IRect(sequ) - new from sequence or rect-like
    c                 L    t        |      \  | _        | _        | _        | _        y r-   )rU   r   r  r  r  r>  s     r   r   zIRect.__init__  s     -<T-B*$'47r#   c                     | j                   | j                  k  r#| j                   | j                  c| _        | _         | j                  | j                  k  r#| j                  | j                  c| _        | _        | S r@  rA  r   s    r   rB  zIRect.normalize  rC  r#   c                 j    | j                   | j                  k\  xs | j                  | j                  k\  S rE  rF  r   s    r   rG  zIRect.is_empty  rH  r#   c                 j    | j                   | j                  k  xr | j                  | j                  k  S rJ  rF  r   s    r   rK  zIRect.is_valid  rL  r#   c                     | j                   | j                  cxk(  xr	 t        k(  nc xr( | j                  | j                  cxk(  xr	 t
        k(  S c S )zTrue if rectangle is infinite.rN  r   s    r   rQ  zIRect.is_infinite  rR  r#   c                 B    t        | j                  | j                        S rT  rU  r   s    r   r  zIRect.top_left  rV  r#   c                 B    t        | j                  | j                        S rX  rY  r   s    r   r  zIRect.top_right  rV  r#   c                 B    t        | j                  | j                        S r[  r\  r   s    r   r!  zIRect.bottom_left  rV  r#   c                 B    t        | j                  | j                        S r^  r_  r   s    r   r  zIRect.bottom_right  rV  r#   c                 n    t        | j                  | j                  | j                  | j                        S ra  rb  r   s    r   rh  z
IRect.quad  ri  r#   c           	         t        |      }| j                  s$| j                  s|j                  s|j                  rt        d      t	        dddd| j
                   | j                         t	        |j                  | j                  z  |j                  | j                  z        z  t	        dddd|j
                  |j                        z  S rk  rl  ro  s     r   rp  zIRect.torect  rq  r#   c                 f    | j                   r
t               S | j                  j                  ||      S rs  rt  rw  s      r   rv  zIRect.morph  rx  r#   c                     t        |       S r-   r  r   s    r   rY   z
IRect.rect  s    Dzr#   c                 j    | j                   | j                  kD  r| j                   | j                  z
  S dS r   r|  r   s    r   r}  zIRect.<lambda>  r~  r#   c                 j    | j                   | j                  kD  r| j                   | j                  z
  S dS r   r  r   s    r   r}  zIRect.<lambda>   r~  r#   c                 P    | j                   j                  |      }|j                  S )z$Extend rectangle to include point p.)rY   r  r  )r   rd   rY   s      r   r  zIRect.include_point  s     yy&&q)zzr#   c                 P    | j                   j                  |      }|j                  S )z(Extend rectangle to include rectangle r.)rY   r  r  r   re   rY   s      r   r  zIRect.include_rect  s     yy%%a(zzr#   c                 P    | j                   j                  |      }|j                  S )z4Restrict rectangle to intersection with rectangle r.)rY   r  r  r  s      r   r  zIRect.intersect  s     yy""1%zzr#   c                 d    | j                   | j                  | j                  | j                  f|   S r-   r  r   s     r   r   zIRect.__getitem__  r  r#   c                      yr  r$   r   s    r   r   zIRect.__len__  r   r#   c                     t        |      }|dk(  r|| _        y |dk(  r|| _        y |dk(  r|| _        y |dk(  r|| _        y t        d      r  )intr   r  r  r  r   r   s      r   r   zIRect.__setitem__  sg    F!VqTW  !VqTW
 	 !VqTW  !VqTW  122r#   c                 0    dt        t        |             z   S )Nrz  r   r   s    r   r   zIRect.__repr__!  r(  r#   c                     t        |       S r-   )rz  r   s    r   r   zIRect.__pos__$  r*  r#   c                 v    t        | j                   | j                   | j                   | j                         S r-   )rz  r   r  r  r  r   s    r   r   zIRect.__neg__'  s+    dggXx$''DGG8<<r#   c                     | j                   | j                  cxk(  xr* | j                  cxk(  xr | j                  cxk(  xr dk(   S c  S r   r  r   s    r   r   zIRect.__bool__*  r  r#   c                     | j                   | j                  cxk(  xr* | j                  cxk(  xr | j                  cxk(  xr dk(   S c  S r   r  r   s    r   r   zIRect.__nonzero__-  r  r#   c                     t        |d      syt        |      dk(  xrN | j                  |d   k(  xr: | j                  |d   k(  xr& | j                  |d   k(  xr | j
                  |d   k(  S r  r  ro  s     r   r   zIRect.__eq__0  r  r#   c                 f    | j                   s| j                  sy| j                  | j                  z  S r   r  r   s    r   r   zIRect.__abs__5  s'    4==zzDKK''r#   c           	      j    t        j                  t        | D cg c]  }||z  	 c}            S c c}w r-   r   r   s     r   r   z
IRect.norm:  r   r   c                 J    t         j                  | |      j                         S r-   )r  r   r   r/  s     r   r   zIRect.__add__=      ||D!$**,,r#   c                 J    t         j                  | |      j                         S r-   )r  r   r   r/  s     r   r   zIRect.__sub__@  r  r#   c                 J    t         j                  | |      j                         S r-   )r  r  r   r   s     r   r  zIRect.transformC  s    ~~dA&,,..r#   c                 J    t         j                  | |      j                         S r-   )r  r   r   r   s     r   r   zIRect.__mul__F  r  r#   c                 J    t         j                  | |      j                         S r-   )r  r   r   r   s     r   r   zIRect.__truediv__I  s    a(..00r#   c                 .    t         j                  | |      S r-   )r  r  r  s     r   r  zIRect.__contains__O  s      q))r#   c                 J    t         j                  | |      j                         S r-   )r  r  r   r  s     r   r  zIRect.__or__S  s    {{4#))++r#   c                 J    t         j                  | |      j                         S r-   )r  r  r   r  s     r   r  zIRect.__and__V  r  r#   c                 .    t         j                  | |      S r-   )r  r  r  s     r   r  zIRect.intersectsY  s    tQ''r#   c                 *    t        t        |             S r-   r:  r   s    r   r  zIRect.__hash__\  r;  r#   N)1r   r   r6   r7   r   rB  r   rG  rK  rQ  r  r  r!  r  rd  re  rf  rg  rh  rp  rv  rY   rm  rn  r  r  r  r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r  r  r  r  r  r$   r#   r   rz  rz    s    8 8 9 9 _ _ ' ' ' ' ' ' ' ' 
B	B	B	B8 8


%   PQEPQF


7*=AAk
(
3--/-1 G*,-(!r#   rz  c                      e Zd ZdZd Zedefd       Zedefd       Z ed       Z	 ed       Z
ed        Zed	        Zed
        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d Zd Zd Zd Zd ZeZd Z y)rc  zdQuad() - all zero points
Quad(ul, ur, ll, lr)
Quad(quad) - new copy
Quad(sequence) - from 'sequence'c                    |s%t               x| _        x| _        x| _        | _        y t        |      dkD  rt        d      t        |      dk(  r*t        t         |      \  | _        | _        | _        | _        y t        |      dk(  ra|d   }t        |d      du rt        d      t        |      dk7  rt        d      t        t         |      \  | _        | _        | _        | _        y t        d      )Nr   Quad: bad seq lenr   r   r   FzQuad: bad args)	r  ulurlllrr   r   r   r   r	  s      r   r   zQuad.__init__b  s    49G;DG;dg;$'t9q=011t9>14UD1A.DGTWdgtwt9>QAq-(E1 !1221v{ !45514UA.DGTWdgtw)**r#   returnc                    t        | j                  | j                  | j                        }t	        |dz
        t
        kD  ryt        | j                  | j                  | j                        }t	        |dz
        t
        kD  ryt        | j                  | j                  | j                        }t	        |dz
        t
        kD  ryy)zCheck if quad is rectangular.

        Notes:
            Some rotation matrix can thus transform it into a rectangle.
            This is equivalent to three corners enclose 90 degrees.
        Returns:
            True or False.
        r   FT)rG   r  r  r  r   r   r  )r   sines     r   is_rectangularzQuad.is_rectangularv  s     !$''477;tax=7" $''477;tax=7" $''477;tax=7"r#   c                 p   t        | j                  | j                        }| j                  |z  }| j                  |z  }|j
                  |j
                  z  dkD  ryt        | j                  | j                        }| j                  |z  }| j                  |z  }|j
                  |j
                  z  dkD  ryy)zCheck if quad is convex and not degenerate.

        Notes:
            Check that for the two diagonals, the other two corners are not
            on the same side of the diagonal.
        Returns:
            True or False.
        r   FT)planish_liner  r  r  r  r  )r   r   p1p2s       r   	is_convexzQuad.is_convex  s     $''*WWq[WWq[44"$$;?$''*WWq[WWq[44"$$;?r#   c                     t        t        | j                  | j                  z
        t        | j                  | j
                  z
              S r-   )r   r   r  r  r  r  r   s    r   r}  zQuad.<lambda>  1    3s477TWW+<'=s477TWWCT?U#V r#   c                     t        t        | j                  | j                  z
        t        | j                  | j
                  z
              S r-   )r   r   r  r  r  r  r   s    r   r}  zQuad.<lambda>  r  r#   c                 R    | j                   t        k  xs | j                  t        k  S )zsCheck whether all quad corners are on the same line.

        This is the case if width or height is zero.
        )rm  r   rn  r   s    r   rG  zQuad.is_empty  s!     zzG#<t{{W'<<r#   c                 .    | j                   j                  S )z(Check whether this is the infinite quad.)rY   rQ  r   s    r   rQ  zQuad.is_infinite  s     yy$$$r#   c                 2   t               }t        | j                  j                  | j                  j                  | j
                  j                  | j                  j                        |_        t        | j                  j                  | j                  j                  | j
                  j                  | j                  j                        |_	        t        | j                  j                  | j                  j                  | j
                  j                  | j                  j                        |_        t        | j                  j                  | j                  j                  | j
                  j                  | j                  j                        |_        |S r-   )r  r   r  r  r  r  r  r   r  r  r   r  r  ro  s     r   rY   z	Quad.rect  s    F47799dggiiDGGII>47799dggiiDGGII>47799dggiiDGGII>47799dggiiDGGII>r#   c                 >   	 |j                         }|dk(  rt        ||       S |dk7  ryt        |      r6t        |      j                  ryt        |d d |       xr t        |dd  |       S t        |      r"t        d      D ]  }t        ||   |       r y yy#  Y yxY w)NFr   r   T)r   ri   	CheckRectr  rG  	CheckQuadrange)r   r  r
  r   s       r   r  zQuad.__contains__  s    			A 6%a..6Q<Aw%aeT2V7I!AB%QU7VVQ<1X !)!A$5 ! 	s   B Bc                 d    | j                   | j                  | j                  | j                  f|   S r-   )r  r  r  r  r   s     r   r   zQuad.__getitem__  r  r#   c                      yr  r$   r   s    r   r   zQuad.__len__  r   r#   c                     |dk(  rt        |      | _        y |dk(  rt        |      | _        y |dk(  rt        |      | _        y |dk(  rt        |      | _        y t        d      r  )r  r  r  r  r  r   r   s      r   r   zQuad.__setitem__  sn    !VuQxTW  !VuQxTW
 	 !VuQxTW  !VuQxTW  122r#   c                 0    dt        t        |             z   S )Nrc  r   r   s    r   r   zQuad.__repr__  r  r#   c                     t        |       S r-   )rc  r   s    r   r   zQuad.__pos__  r  r#   c                 v    t        | j                   | j                   | j                   | j                         S r-   )rc  r  r  r  r  r   s    r   r   zQuad.__neg__  r  r#   c                     | j                    S r-   rG  r   s    r   r   zQuad.__bool__      ==  r#   c                     | j                    S r-   r  r   s    r   r   zQuad.__nonzero__  r	  r#   c                     t        |d      syt        |      dk(  xrN | j                  |d   k(  xr: | j                  |d   k(  xr& | j                  |d   k(  xr | j
                  |d   k(  S r  )r   r   r  r  r  r  )r   rh  s     r   r   zQuad.__eq__  su    tY'4yA~ 
GGtAw GGtAwGGtAw GGtAw		
r#   c                     | j                   ryt        | j                  | j                  z
        t        | j                  | j                  z
        z  S r  )rG  r   r  r  r  r   s    r   r   zQuad.__abs__  s;    ==477TWW$%DGGdgg,=(>>>r#   c                     | j                   r
t               S t        dd      j                  |j                  |j
                        }| | z  |z  |z  }|S )zSMorph the quad with matrix-like 'm' and point-like 'p'.

        Return a new quad.r   )rQ  ru  r|   r   r  r  )r   rd   r   deltaqs        r   rv  z
Quad.morph  sO      ?"q!))!##qss3E6MA%r#   c                     t        |d      rnt        |      dk7  rt        d      | xj                  |z  c_        | xj                  |z  c_        | xj
                  |z  c_        | xj                  |z  c_        | S )z1Replace quad by its transformation with matrix m.r   r   r   )r   r   r   r  r  r  r  r   s     r   r  zQuad.transform  s_    1k"Vq[2331111r#   c                 >    t        |       }|j                  |      }|S r-   )rc  r  )r   r   r  s      r   r   zQuad.__mul__  s    JKKNr#   c                 t   t        |d      rBt        | j                  |z   | j                  |z   | j                  |z   | j
                  |z         S t        t              dk7  rt        d      t        | j                  |d   z   | j                  |d   z   | j                  |d   z   | j
                  |d   z         S Nr   r   r  r   r   r   r   	r   rc  r  r  r  r  r   rd   r   r   r  s     r   r   zQuad.__add__       1k"!TWWq[$''A+tww{KKq6Q;011DGGadNDGGadNDGGadNDGGaPQdNSSr#   c                 t   t        |d      rBt        | j                  |z
  | j                  |z
  | j                  |z
  | j
                  |z
        S t        t              dk7  rt        d      t        | j                  |d   z
  | j                  |d   z
  | j                  |d   z
  | j
                  |d   z
        S r  r  r  s     r   r   zQuad.__sub__(  r  r#   c                     t        |d      rd|z  }nt        |      d   }|st        d      t        |       }|j	                  |      }|S r  )r   rt   r   rc  r  )r   r   r  r  s       r   r   zQuad.__truediv__0  sN    1k"aB#A&q)B'(?@@JKKOr#   c                 *    t        t        |             S r-   r:  r   s    r   r  zQuad.__hash__>  r;  r#   N)!r   r   r6   r7   r   r   r   r  r  rm  rn  rG  rQ  rY   r  r   r   r   r   r   r   r   r   r   r   rv  r  r   r   r   r   r   r  r$   r#   r   rc  rc  `  s    q+( d  2   , VWEVWF= = % %  *7)<!!
?

TT	 G!r#   rc  c                  >    t        t        t        t        t              S r-   )r  rP  rO  r$   r#   r   
EMPTY_RECTr  C      /?SSr#   c                  >    t        t        t        t        t              S r-   )r  rO  rP  r$   r#   r   r  r  G  r  r#   c                  >    t        t        t        t        t              S r-   )rz  rP  rO  r$   r#   r   EMPTY_IRECTr  K      /?OTTr#   c                  >    t        t        t        t        t              S r-   )rz  rO  rP  r$   r#   r   INFINITE_IRECTr"  O  r   r#   c                  *    t               j                  S r-   )r  rh  r$   r#   r   ru  ru  S  s    ?r#   c                  *    t               j                  S r-   )r  rh  r$   r#   r   
EMPTY_QUADr%  W  s    <r#   c                   ^    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ed        Zy)Widgetc                    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| _        y )NTSr   r   r   r   Helvr   ) r   border_colorborder_styleborder_widthborder_dasheschoice_values	rb_parent
field_namefield_labelfield_valuefield_flagsfield_display
field_typefield_type_string
fill_colorbutton_caption	is_signed
text_color	text_fonttext_fontsizetext_maxlentext_format_text_dascriptscript_strokescript_formatscript_changescript_calcscript_blurscript_focusrY   xrefr   s    r   r   zWidget.__init__a  s     !!!%"#!!! 		r#   c                    | j                   j                  s| j                   j                  rt        d      | j                  st        d      | j
                  dk(  rd| _        t        | j                         t        | j                         | j                  sd| _	        t        | j                         | j                  sd| _
        | j                  sd| _        | j                  j                         dd | _        | j                  t        t         t"        fv }| j$                  sd| _        n&t'        | j$                        t(        urt        d      |s| j*                  sd| _        n&t'        | j*                        t(        urt        d	      |s| j,                  sd| _        n&t'        | j,                        t(        urt        d
      |s| j.                  sd| _        n&t'        | j.                        t(        urt        d      |s| j0                  sd| _        n&t'        | j0                        t(        urt        d      |s| j2                  sd| _        n&t'        | j2                        t(        urt        d      |s| j4                  sd| _        n&t'        | j4                        t(        urt        d      | j7                          y)z$Validate the class entries.
        zbad rectzfield name missingUnnamedNr*  r   r   zscript content must be a stringz$script_calc content must be a stringz&script_change content must be a stringz&script_format content must be a stringz&script_stroke content must be a stringz$script_blur content must be a stringz%script_focus content must be a string)rY   rQ  rG  r   r2  r3  
CheckColorr,  r9  r<  r.  r>  r-  upperr7  PDF_WIDGET_TYPE_BUTTONPDF_WIDGET_TYPE_CHECKBOXPDF_WIDGET_TYPE_RADIOBUTTONrB  r   r   rF  rE  rD  rC  rG  rH  _checker)r   btn_types     r   	_validatezWidget._validate  sH    II!!yy!!Z((122y(#D4$$%4??#'DO4??#   !D!!!"D --335a: ??"$''
 

 {{DK$++c)>?? 4++#D$""#3.CDD4--!%D$$$%S0EFF4--!%D$$$%S0EFF4--!%D$$$%S0EFF4++#D$""#3.CDD4,, $D$##$C/DEEr#   c                     | j                   sd| _         y| j                  j                  }|j                  g dz   D ]6  }| j                   j                         |j                         k(  s/|| _          y d| _         y)zEnsure text_font is correctly spelled if empty or from our list.

        Otherwise assume the font is in an existing field.
        r+  N)CourTiRor+  ZaDb)r=  parent	FormFontslowerr   docr   s      r   _adjust_fontzWidget._adjust_font  sn    
 ~~#DNkk  !AA 	A~~##%2!"	  r#   c                     | j                   syd}d}d}| j                   j                         }t        |      D ]  \  }}|dk(  r2||dz
     dd }t        ||dz
           }dx||<   x||dz
  <   ||dz
  <   =|d	k(  r t        ||dz
           g}dx||<   ||dz
  <   b|d
k(  sh||dz
  | D cg c]  }t        |       }}dx||<   x||dz
  <   x||dz
  <   ||dz
  <    || _        || _        || _        d| _         yc c}w )zExtract font name, size and color from default appearance string (/DA object).

        Equivalent to 'pdf_parse_default_appearance' function in MuPDF's 'pdf-annot.c'.
        Nr+  r   r*  Tfr   r   r   grgr   )rA  split	enumerater   r=  r>  r<  )r   fontfsizecoldatr   itemr   s           r   	_parse_dazWidget._parse_da  sO   
 }}mm!!# ~ 	GAtt|1q5z!"~c!a%j)/11A1QqSC!Hs{c!a%j)+$&&AQqSt|),QU16AuQx66:<<A<QqS<C!Hs1Q3x	 " 7s   +C;c           	         | j                   t        dd      vrt        d      | j                   t        k(  r| j                  dvrt        | d      r| j                  j                  }|j                  | j                  d      \  }}|dk(  ret        t        t        |dd j                  d	d
      j                                     }|D ]%  }|| j                  k7  s|j                  |dd       ' yyyyy)z Any widget type checks.
        r      zbad field type)FOffrX  zParent/Kidsarray0 Rr   ASz/OffN)r7  r   r   rP  r4  r   rX  xref_get_keyrI  r   r   r  replacerb  xref_set_key)r   r\  	kids_type
kids_valuexrefsrI  s         r   rQ  zWidget._checker  s     ??%1+--..
 ??99d>N>NVd>dipquw  jA ++$$C$'$4$4TYY$N!IzG#c#z!B'7'?'?b'I'O'O'QRS! =Dtyy(((tV<= $ jA>d9r#   c                 h   | j                   j                   }| j                          | j                          d| _        t	        | j
                        dk(  rd| j                  z   }nOt	        | j
                        dk(  rd| j                  z   }n't	        | j
                        dk(  rd| j                  z   } j                  | j
                  | j                  | j                  d| _        | j                  rt        | j                         t        j                  | j                  |        d| _        y	)
z*Reflect Python object in the PDF.
        r   r   !{:g} {:g} {:g} rg /{f:s} {s:g} Tfr   {:g} g /{f:s} {s:g} Tfr   %{:g} {:g} {:g} {:g} k /{f:s} {s:g} Tfr   r   N)rX  rS  r]  rA  r   r<  formatr=  r>  rF  rN   _annotTOOLS_save_widget)r   r\  fmts      r   updatezWidget.update  s     kk   !Q&5EC!Q&*T]]:C!Q&9DMMIC"

DOOt~~&*&8&8:
 #DKK0 	4;;-r#   c                 &   | j                   dvryt        | d      r| j                  j                  }ny| j                  }ddd}|j	                  |d      }|d   dk(  rLg }|d   d	d
 }|j                  d      dd }|D ]$  }|j                  |j                         d          & ||d<   |j	                  |d      }|d   dk(  rLg }	|d   d	d
 }|j                  d      dd }
|
D ]$  }|	j                  |j                         d          & |	|d<   |S )a	  Return the on/off state names for button widgets.

        A button may have 'normal' or 'pressed down' appearances. While the 'Off'
        state is usually called like this, the 'On' state is often given a name
        relating to the functional context.
        r   r   NrX  )normaldownzAP/Nr   dictr   r   /r  zAP/Dr  )r7  r   rX  rI  rq  rb  append)r   r\  rI  statesAPNnstatesapntr  APDdstatesapdts              r   button_stateszWidget.button_states6  s0    ??&(4"++$$Cyy $/tV,q6VGa&2,C99S>!"%D -qwwy|,-&F8tV,q6VGa&2,C99S>!"%D -qwwy|,-$F6Nr#   c                     | j                   dvry| j                   dk(  ry| j                         }|dk(  ri }|j                         D ]  }||   D ]  }|dk7  s	|c c S   t        d       y)a  Return the "On" value for button widgets.

        This is useful for radio buttons mainly. Checkboxes will always return
        "Yes". Radio buttons will return the string that is unequal to "Off"
        as returned by method button_states().
        If the radio button is new / being created, it does not yet have an
        "On" value. In this case, a warning is shown and True is returned.
        r  Nr   Yesrl  z(warning: radio button has no 'On' value.T)r7  r  keysprint)r   bstatekr   s       r   on_statezWidget.on_stateW  s~     ??&(??a##%4<F 	AAY :H	 	89r#   c                 B    t         j                  | j                         y)z.Reset the field value to its default.
        N)r~  _reset_widgetr}  r   s    r   resetzWidget.resetn  s     	DKK(r#   c                 L    d| j                   dt        | j                        S )N'z' widget on )r8  r   rX  r   s    r   r   zWidget.__repr__s  s    &*&<&<c$++>NOOr#   c                 "    t        | d      r| `y y )Nr}  )r   r}  r   s    r   __del__zWidget.__del__v  s    4" #r#   c                 .    | j                   j                  S r-   )r}  nextr   s    r   r  zWidget.nextz  s    {{r#   N)r   r   r6   r   rS  r]  ri  rQ  r  r  r  r  r   r  r   r  r$   r#   r   r'  r'  `  sS    $NEP"@=.<B.)
P    r#   r'  r   r   r   r   rk         @   r      	   
      r      )CourierCourier-ObliqueCourier-BoldCourier-BoldOblique	HelveticaHelvetica-ObliqueHelvetica-BoldHelvetica-BoldObliqueTimes-RomanTimes-Italic
Times-BoldTimes-BoldItalicSymbolZapfDingbatsr  helvr  heitr  hebor  hebir  courr  coitr  cobor  cobir  tiror  tibor  tiitr  tibir  symbr  zadbzI<</A<</S/GoTo/D[%i 0 R/XYZ %g %g %g]>>/Rect[%s]/BS<</W 0>>/Subtype/Link>>z6<</A<</S/GoTo/D%s>>/Rect[%s]/BS<</W 0>>/Subtype/Link>>zh<</A<</S/GoToR/D[%i /XYZ %g %g %g]/F<</F(%s)/UF(%s)/Type/Filespec>>>>/Rect[%s]/BS<</W 0>>/Subtype/Link>>z=<</A<</S/GoToR/D%s/F(%s)>>/Rect[%s]/BS<</W 0>>/Subtype/Link>>zU<</A<</S/Launch/F<</F(%s)/UF(%s)/Type/Filespec>>>>/Rect[%s]/BS<</W 0>>/Subtype/Link>>z9<</A<</S/URI/URI(%s)>>/Rect[%s]/BS<</W 0>>/Subtype/Link>>zD<</A<</S/Named/N/%s/Type/Action>>/Rect[%s]/BS<</W 0>>/Subtype/Link>>)goto1goto2gotor1gotor2launchurinamedc                       e Zd ZdZy)FileDataErrorz0Raised for documents with file structure issues.Nr   r   r6   r7   r$   r#   r   r  r  -  s    :r#   r  c                       e Zd ZdZy)FileNotFoundErrorzRaised if file does not exist.Nr  r$   r#   r   r  r  1  s    (r#   r  c                       e Zd ZdZy)EmptyFileErrorz5Raised when creating documents from zero-length data.Nr  r$   r#   r   r  r  5  s    ?r#   r  )CSSarchiver   fontcoder  r  r   r  c                   d}t        |      t        urt        d      |dk(  rd}t        j	                         D cg c]  }|j                  |       s| }}|g k(  rt        d|  d      t        |      dkD  rt        d      |dk(  r| }|D ]I  }t        |   }|d	   }	|d
   }
 |d          }|j                  ||       |	rdnd}|
rdnd}||||||fz  z  }K |S c c}w )a  Create @font-face items for the given fontcode of pymupdf-fonts.

    Adds @font-face support for fonts contained in package pymupdf-fonts.

    Creates a CSS font-family for all fonts starting with string 'fontcode'.

    Note:
        The font naming convention in package pymupdf-fonts is "fontcode<sf>",
        where the suffix "sf" is either empty or one of "it", "bo" or "bi".
        These suffixes thus represent the regular, italic, bold or bold-italic
        variants of a font. For example, font code "notos" refers to fonts
        "notos" - "Noto Sans Regular"
        "notosit" - "Noto Sans Italic"
        "notosbo" - "Noto Sans Bold"
        "notosbi" - "Noto Sans Bold Italic"

        This function creates four CSS @font-face definitions and collectively
        assigns the font-family name "notos" to them (or the "name" value).

    All fitting font buffers of the pymupdf-fonts package are placed / added
    to the archive provided as parameter.
    To use the font in fitz.Story, execute 'set_font(fontcode)'. The correct
    font weight (bold) or style (italic) will automatically be selected.
    Expects and returns the CSS source, with the new CSS definitions appended.

    Args:
        fontcode: (str) font code for naming the font variants to include.
                  E.g. "fig" adds notos, notosi, notosb, notosbi fonts.
                  A maximum of 4 font variants is accepted.
        CSS: (str) CSS string to add @font-face definitions to.
        archive: (Archive, mandatory) where to place the font buffers.
        name: (str) use this as family-name instead of 'fontcode'.
    Returns:
        Modified CSS, with appended @font-face statements for each font variant
        of fontcode.
        Fontbuffers associated with "fontcode" will be added to 'archive'.
    z1
@font-face {font-family: %s; src: url(%s);%s%s}
z'archive' must be an ArchiveNr   zNo font code 'z' found in pymupdf-fonts.r   zfontcode too shortbolditalicr@   zfont-weight: bold;zfont-style: italic;)r   Archiver   fitz_fontdescriptorsr  
startswithr   add)r  r  r  r   CSSFONTr  	font_keysfkeyrd  r  r  fbuff	bold_textitalic_texts                 r   css_for_pymupdf_fontr  <  s   R DG=G#788
d{ 1557Rq1<<;QRIRB>(3LMNN
9~-..t| >#D)F|hX E4 ,0(b	/5+2w$i===> J# Ss   CCrw   rx   ry   rz   c           	         |j                         }t        j                  |d      }d}|dk(  rt        }|dk(  rt        }|Ct        | D cg c])  }t        |      dk  r|t        |         d   n|d   d   + c}      }||z  S |t        j                         v rt        | t        |   ||      S |dv rt        |       |z  S t        d|z        c c}w )	a  Calculate length of a string for a built-in font.

    Args:
        fontname: name of the font.
        fontsize: font size points.
        encoding: encoding to use, 0=Latin (default), 1=Greek, 2=Cyrillic.
    Returns:
        (float) length of text.
    Nr  r     r      )china-tchina-schina-tschina-ssjapanjapan-skoreakorea-szFont '%s' is unsupported)rZ  Base14_fontdictgetsymbol_glyphszapf_glyphsr   ordr  rv   r   r   )rw   rx   ry   rz   basenameglyphsr   ws           r   get_text_lengthr    s     ~~H""8T2HF8>!PTU1c!fslA"sAFUV8|?''))"/(+Xx
 	
  	 	 4y8##
/(:
;;) Vs   
.C(   r  K7?r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )r  n?)!   ^I+?)"   gn?)#   r  )$   g\(\?)%   g5^I?)&   sh|??)'   HzG?)(   Zd;O?))   Gz?)*   gQ?)+   g?5^I?),    rh?)-   g\(\?).   x&?)/   gB`"?)0   r  )1   g=
ףp=?)2   r  )3   g)\(?)4   gOn?)5   Mb?)6   '1Z?)7   gʡE?)8   gDl?)9   "~j?):   RQ?);   }?5^I?)<   gT㥛 ?)=   V-?)>   gDl?)?   gv/?)r  gX9v?)A   g/$?)B   x&?)C   r  )D   r  )E   r  )F   gK7A`?)G   g rh?)H   &1?)I   tV?)J   r  )K   gx?)L   r3  )M   -?)N   r1  )O   d;O?)P   gK7?)Q   g+?)R   gA`"?)S   g+?)T   r  )U   MbX?)V   g=
ףp=?)W   E?)X   ~jt?)Y   rB  )Z   r"  )[   9v?)\   g-?)]   gm?)^   g;On?)_   g;On?)`   gGz?)a   r  )b   r  )c   rK  )d   gCl?)e   ʡE?)f   g?5^I?)g   r*  )h   gv/?)i   7A`?)j   r  )k   gQ?)l   r  )m   V-?)n   r  )o   r  )p   r  )q   r"  )r   r"  )s   %C?)t   rg  )u   r  )v   gJ+?)w   gx&1?)x   gDl?)y   g|?5^?)z   g(\?){   J+?)|   rp  )}   K7A`?)~   rs  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )   gCl?)    rh?)   rw  )   gQ?)   MbX?)   r   )   r   )   rE  )   g
ףp=
?)   gh|?5?)   gx&1?)   r  )   r  )   r  )   r  )   r  )   r  )   r  )   r  )   r  )   r  )   r  r  )   r  )   r  )   r  )   r  )   r  )   r  )   r  )   r  )   r  )   r  )   r  )   r  )   r  )   r  )   r  )   r  )   r  )   r  )   r  )   r  )   r  )   r  )   r  )   r  )   r  )   r  )   r  )   r  )   gS㥛?)   g7A`?)   gK7A?)   gZd;O?)   V-?)    rh?)   r  )   gK7A`?)   Dl?)   V-?)   r  )   g㥛 ?)   r`  )   g"~?)   r  )   r  )   gMbX?)   g(\?)   gn?)   goʡ?)   gK7A?)   獗n?)   r  )   X9v?)   r  )   rV  )   rV  )   +?r  )   r  )   r   )   gʡE?)   y&1?)   gGz?)   r  )   "~j?)   gl?)   r  )   r;  )   r`  )   r  )   g
ףp=
?r  r  (   r  gq=
ףp?r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )r        ?)r  Zd;O?)r  r[  )r        ?)r   r  )r  r8  )r  gL7A`?)r  jt?)r  r  )r  r  )r
  r  )r  r  )r  r  )r  r  )r  r  )r  r  )r  r  )r  r  )r  r  )r  r  )r  r  )r  r  )r  r  )r  r  )r  r  )r  r  )r  r  )r!  r  )r#  r  )r$  r  )r&  r  )r'  g"~j?)r  r  )r(  v?)r)  r{  )r+  r  )r,  g/$?)r-  Zd;O?)r.  r  )r/  粝K?)r0  r  )r2  r  )r4  x&1?)r5  r  )r6  ʡE?)r7  g r?)r9  r  )r:  r  )r<  rG  )r=  gʡE?)r>  gn?)r?  gl?)r@  r  )rA  r	  )rC  r  )rD  rG  )rF  gp=
ף?)rH  q=
ףp?)rI  r  )rJ  r  )rL  gV-?)rM  r  )rN  uV?)rO  r  )rP  r  )rQ  r  )rR  r  )rS  r  )rT  r%  )rU  r  )rW  y&1?)rX  M?)rY  r  )rZ  uV?)r\  r  )r]  r  )r^  r  )r_  ;On?)ra  r  )rb  r  )rc  r  )rd  r  )re  r  )rf  r  )rh  r  )ri  r  )rj  r[  )rk  r  )rl  gZd;O?)rm  r  )rn  r%  )ro  Q?)rq  g?)rr  r  )rt  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )   r  )ru  gףp=
?)rv  gV-?)rx  r  )ry  gK7A`?)rz  r[  )r|  r  )r}  jt?)r~  r  )r  r  )r  r  )r  y&1?)r  r[  )r  r  )r  /$?)r  r  )r  g?)r  r  )r  r  )r  r  )r  r  )r  r  )r  r%  r  )r  r  )r  r  )r  r  )r  r  )r  r   )r  r  )r  r   )r  r  )r  r3  )r  r  )r  r  )r  r  )r  rG  )r  rG  )r  r3  )r  rG  )r  rG  )r  r[  )r  r[  )r  r[  )r  r[  )r  r[  )r  r[  )r  r[  )r  rG  )r  r[  )r  r  )r  r  )r  g{Gz?)r  r3  )r  r  )r  r  )r  r[  )r  r  )r  r  )r  r  )r  r  )r  r  )r  r  )r  r  )r  r%  )r  r  )r  r  )r  r  )r  r*  )r  r[  )r  ~jt?)r  r  )r  r  )r  r  )r  r  )r  r  )r  r%  )r  r%  )r  r%  )r  r%  r  )r  r  )r  gK7?)r  r  )r  r  )r  r  )r  r  )r  r  )r  r  )r  r  )r  r  )r  r  )r  r%  )r  r%  )   r%  r  c                       e Zd ZdZd Zy)linkDestz#link or outline destination detailsc                    |j                   }| }d| _        d| _        d| _        d| _        d| _        t        | _        t        dd      | _	        d| _
        d| _        |j                  | _        t        dd      | _        |j                  | _        |r4| j                  j                  d      sd|d   dz   |d   |d   fz  | _        |j                   rd| _        t         | _        | j                  sd| _        t        | _        |r| j                  ru| j                  j#                  d	d
      | _        | j                  j                  d      rd| _
        t$        | _        t'        j(                  d| j                        }|rt+        |j-                  d            dz
  | _        t        t/        |j-                  d            t/        |j-                  d                  | _	        | j                  t0        z  t2        z  | _        nt'        j(                  d| j                        }|r#t+        |j-                  d            dz
  | _        n<t4        | _        | j                  dd  | _
        nt4        | _        | j                  | _
        |j                   r| j                  j                  d      rd| _        t         | _        y | j                  j                  d      r| j                  dd  | _        d| _        d| _        t6        | _        | j                  j9                  d      }t;        |      dk(  rD|d   j                  d      r/t<        | _        |d   | _        t+        |d   dd        dz
  | _        y y y d| _        t6        | _        y y )Nr   r   F#z#page=%i&zoom=0,%g,%gr   r   rn  z	&zoom=nanz&zoom=0z7^#page=([0-9]+)&zoom=([0-9.]+),(-?[0-9.]+),(-?[0-9.]+)$r   r   z^#page=([0-9]+)$)zhttp://zhttps://zmailto:zftp://Tzfile://r  zpage=r   )is_externaldestfileSpecflagsisMapisUri	LINK_NONEkindr  ltr  	newWindowpagerbr  r  LINK_URIrr  	LINK_GOTOrematchr  groupr   LINK_FLAG_L_VALIDLINK_FLAG_T_VALID
LINK_NAMEDLINK_LAUNCHrb  r   
LINK_GOTOR)r   objrlinkisExtisIntr   ftabs          r   r   zlinkDest.__init__
  s   		


	1+
HH	1+77,,S1.%(Q,a%PQ(1SSDH??DI DIxxDI!DITXXxx''Y?DHxx""3'
%	HHVX\X`X`a #AGGAJ! 3DI#E1771:$7qwwqz9JKDG!%.?!?BS!SDJ!3TXX>A$'
Oa$7	$.	%)XXab\
&	!XX
??xx""#OP!
$	$$Y/ $"
'	}}**3/t9>Aw))'2$.	(,Q$'Q$4q$8	 3 " "
'	# r#   Nr   r   r6   r7   r   r$   r#   r   r  r  
  s
    -<(r#   r  c                     dd l } t        t        | j                  dz              j	                  dd      dt        t        | j                  dz        dz        j	                  dd      d}| j                  d| j                               }| j                  dkD  r
|d|z   z  }|S | j                  dk  r
|d	|z   z  }|S 	 |S )
Nr   i  r   0r  r#  zD:%Y%m%d%H%M%S-+)timer   r   altzonerjuststrftime	localtime)r  tztstamps      r   get_pdf_nowr  
  s     	C$%&,,Q4S#$r)+11!S9
B ]]+T^^-=>F||a#(
 M	 
	#( M 	Mr#   r   c                 <   t        |       syd }d}| D ]  }t        |      }|dkD  r
 ||       c S |dkD  r|dk  r|dv r|dz  }||z  }6|dkD  r	|d	|z  z  }D|d
k(  r|dz  }O|dk(  r|dz  }Z|dk(  r|dz  }e|dk(  r|dz  }p|dk(  r|dz  }{|dz  } d|z   dz   S )a   Return a PDF string depending on its coding.

    Notes:
        Returns a string bracketed with either "()" or "<>" for hex values.
        If only ascii then "(original)" is returned, else if only 8 bit chars
        then "(original)" with interspersed octal strings 
nn is returned,
        else a string "<FEFF[hexstring]>" is returned, where [hexstring] is the
        UTF-16BE encoding of the original.
    z()c                 b    t        ddg      t        | d      z   }d|j                         z   dz   S )Nr     zUTF-16BEr	   >)	bytearrayhex)r   re   s     r   make_utf16bez!get_pdf_str.<locals>.make_utf16be  s1    sCj!Ia$<<QUUW}s""r#   r   r         )()\r)  z\%03ork  z\br  z\tr  \nr   z\fr  z\rz\267r'  r(  )r   r  )r   r$  re   r   ocs        r   get_pdf_strr,    s     7# 	A V8?"7rCx$$T	FA8BA 7JA1WJA2XJA2XJA2XJALA7: 7S=r#   r  simpleorderingc           
      p   | j                  d      r| j                  d      r| S t        |       sy|r|<dj                  | D cg c]   }t	        |      dk  rdt	        |      z  nd" c}      }nAdj                  | D cg c]&  }t	        |      dk  rd|t	        |         d   z  nd( c}      }d|z   dz   S |dk  r2dj                  | D cg c]  }d	|t	        |         d   z   c}      }n+dj                  | D cg c]  }d	t	        |      z   c}      }d|z   dz   S c c}w c c}w c c}w c c}w )
a   Return a PDF string enclosed in [] brackets, suitable for the PDF TJ
    operator.

    Notes:
        The input string is converted to either 2 or 4 hex digits per character.
    Args:
        simple: no glyphs: 2-chars, use char codes as the glyph
                glyphs: 2-chars, use glyphs instead of char codes (Symbol,
                ZapfDingbats)
        not simple: ordering < 0: 4-chars, use glyphs not char codes
                    ordering >=0: a CJK font! 4 chars, use char codes as glyphs
    z[<z>]z[<>]r   r  z%02xb7r   z%04x)r  endswithr   joinr  )rw   r  r-  r.  r   otxts         r   getTJstrr4  C  s)    tt!4:>77tT!s1v|FSVOETUD77OST!s1v|&Q.++ETD d{T!! !|wwDAqA!22ABww6AQ67$; U U B6s   %D$ +D)D. D3c                      i 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"i d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdO
S )Pa6  Known paper formats @ 72 dpi as a dictionary. Key is the format string
    like "a4" for ISO-A4. Value is the tuple (width, height).

    Information taken from the following web sites:
    www.din-formate.de
    www.din-formate.info/amerikanische-formate.html
    www.directtools.de/wissen/normen/iso.htm
    a0)P	  i*  a1)  r7  a10)r4  rZ  a2)  r9  a3)J  r<  a4)S  r>  a5)  r@  a6)*  rB  a7)r  rD  a8)   r  a9)rZ  rG  b0)  i  b1)  rJ  b10)rF  rr  b2)  rL  b3)  rO  b4)  rQ  b5)  rS  b6)b  rU  r0  )r  rW  b8)r  r  b9)rr  r  c0)'
  i]  c1)-  r[  c10)r:  rd  c2)  r]  c3)  r`  c4)  rb  c5)  rd  c6)C  rf  c7)r  rh  c8)rv  r  c9)rd  rv  zcard-4x6)i   i  )r   i  )i)  i  )i
  i  )i  d  )  i  )rl  i  )rl  i  )rl  rm  )i  i  )i`  i  )
zcard-5x7
commercial	executiveinvoiceledgerlegalzlegal-13lettermonarchztabloid-extrar$   r$   r#   r   paper_sizesru  h  s   -l-l- 	y- 	l	-
 	k- 	j- 	j- 	j- 	j- 	j- 	j- 	l- 	l- 	y- 	l-  	l!-" 	k#-$ 	j%-& 	j'-( 	j)-* 	j+-, 	j--. 	l/-0 	l1-2 	y3-4 	l5-6 	k7-8 	j9-: 	j;-< 	j=-> 	j?-@ 	jA-B 	jC-D 	JE-F  $Y- -r#   c                     | j                         }d}|j                  d      rd}|dd }|j                  d      r|dd }t               j                  |d      }|dk(  r|S |d   |d	   fS )
zReturn a tuple (width, height) for a given paper format string.

    Notes:
        'A4-L' will return (842, 595), the values for A4 landscape.
        Suffix '-P' and no suffix return the portrait tuple.
    rd   z-lr
  Nr  z-p)rn  rn  r   r   )rZ  r1  ru  r  )r   sizer   rcs       r   
paper_sizery    sy     779DA}}TCRy}}TCRy			4	*BCx	qE2a5>r#   c                 :    t        |       \  }}t        dd||      S )zReturn a Rect for the paper size indicated in string 's'. Must conform to the argument of method 'PaperSize', which will be invoked.
    r~   )ry  r  )r   rm  rn  s      r   
paper_rectr{    s"     qMME6S%((r#   oc                 :    t        | dd       d k(  rt        d      y )NrX  orphaned object: parent is None)r   r   r|  s    r   CheckParentr    s$    q(D!T):;; *r#   c                 4    t        | dd      st        d      y )Nr   Fzobject destroyed)r   RuntimeErrorr  s    r   EnsureOwnershipr    s    1i'-.. (r#   r   c                     | rLt        |       t        t        fvs)t        |       dvst	        |       dk  st        |       dkD  rt        d      y y )N)r   r   r   r   r   z/need 1, 3 or 4 color components in range 0 to 1)r   listr   r   r   r   r   )r   s    r   rL  rL    sM    GD%=(1vY&1vz1vzNOO  	r#   r   c                    | syt        | d      r| f} t        |        t        |       dk(  rd| d   z  }|dk(  r|dz   S |dz   S t        |       d	k(  rd
t        |       z  }|dk(  r|dz   S |dz   S dt        |       z  }|dk(  r|dz   S |dz   S )Nr   r   r   z%g r   r   zG zg r   z	%g %g %g zRG zrg z%g %g %g %g zK zk )r   rL  r   r   )r   r   r   s      r   	ColorCoder    s    q+DqM
1v{AaDL8q4x1T1
1v{%("Hq5y3!e)3q!ACx1t8-QX-r#   c                 .    t        t        d |             S )Nc                 :    t        |       dk\  rt        | d      S dS )Ng-C6?r   r   r   r   r  s    r   r}  zJM_TUPLE.<locals>.<lambda>      c!fnuQ{ ! r#   r   r   r  s    r   JM_TUPLEr        CQGHHr#   c                 .    t        t        d |             S )Nc                 :    t        |       dk\  rt        | d      S dS )NMbP?r   r   r  r  s    r   r}  zJM_TUPLE3.<locals>.<lambda>  r  r#   r  r  s    r   	JM_TUPLE3r    r  r#   re   c                 ^    	 t        |       } | j                  xs | j                   S #  Y yxY w)zbCheck whether an object is non-degenerate rect-like.

    It must be a sequence of 4 numbers.
    F)r  rG  rQ  )re   s    r   r  r    s2    
G 

+amm,,s   ( ,r  c                 @    	 t        |       }|j                  S #  Y yxY w)zjCheck whether an object is convex, not empty quad-like.

    It must be a sequence of 4 number pairs.
    F)rc  r  )r  q0s     r   r  r    s&    
!W <<s    quadsc                     t        |       rt        |       }|j                  fS t        |       r| fS | D ]$  }t        |      rt        |      rt	        d       | S )Nzbad quads entry)r  r  rh  r  r   )r  re   r  s      r   CheckMarkerArgr    s]    Kyx 0!	!.//0 Lr#   c                 2   t        |       syt        |       t        t        fv rt	        |       dk(  st        d      t	        | d         dk(  rt	        | d         dk(  st        d      | d   d   | d   d	   cxk(  rdk(  st        d
       t        d
      y)NFr   z$morph must be a sequence of length 2r   r   r   zinvalid morph parm 0r   r   zinvalid morph parm 1T)r   r   r  r   r   r   r  s    r   
CheckMorphr    s    7Ge}$Q1?@@!INs1Q4yA~/00Q47ad1g""/00 #/00r#   r   struct Page *c                 F    | j                         D ]  }|d   |k(  s|c S  y)zGReturn an entry in the page's font list if reference name matches.
    r   N)	get_fonts)r   rx   r   s      r   	CheckFontr    s+     ^^ Q48Hr#   r\  zstruct Document *rI  c                 >    | j                   D ]  }||d   k(  s|c S  y)z3Return a font info if present in the document.
    r   N)	FontInfos)r\  rI  r   s      r   CheckFontInfor  #  s'     ]] 1Q4<Hr#   infoc                     |d   }d}t        | j                        D ]  \  }}|d   |k(  sd} n |r|| j                  <   y | j                  j                  |       y )Nr   FT)rc  r  r  )r\  r  rI  foundr   fis         r   UpdateFontInfor  +  sd    7DE3==) 2a5D=E aT"r#   c                       y r-   r$   )r   kws     r   DUMMYr  8  s    
r#   r  r  c                 X    t        |       } t        |      }t        t        | |            S )am  Compute matrix which maps line from p1 to p2 to the x-axis, such that it
    maintains its length and p1 * matrix = Point(0, 0).

    Args:
        p1, p2: point_like
    Returns:
        Matrix which maps p1 to Point(0, 0) and p2 to a point on the x axis at
        the same distance to Point(0,0). Will always combine a rotation and a
        transformation.
    )r  r|   rL   )r  r  s     r   r  r  <  s(     
rB	rB/"b)**r#   imgc                    t        |       t        j                  u r| j                         }nBt	        | d      r| j                         }n%t        |       t        t        fv r| }nt        d      t        j                  |      S )aG   Return basic properties of an image.

    Args:
        img: bytes, bytearray, io.BytesIO object or an opened image file.
    Returns:
        A dictionary with keys width, height, colorspace.n, bpc, type, ext and size,
        where 'type' is the MuPDF image type (0 to 14) and 'ext' the suitable
        file extension.
    readzbad argument 'img')r   ioBytesIOgetvaluer   r  bytesr"  r   r~  image_profile)r  streams     r   r  r  L  sg     CyBJJ	f		cui(	(-..v&&r#   r   filenamec                     | j                         }d}d|z  }d}d}d|z  }|dk(  r|}|S |dk(  r|}|S |dk(  r|}|S |d	k(  r|}|S |}|S )
Nz<!DOCTYPE html>
<html>
<head>
<style>
body{background-color:gray}
div{position:relative;background-color:white;margin:1em auto}
p{position:absolute;margin:0}
img{position:absolute}
</style>
</head>
<body>
z+<?xml version="1.0"?>
<document name="%s">
a>  <?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style>
body{background-color:gray}
div{background-color:white;margin:1em;padding:1em}
p{white-space:pre-wrap}
</style>
</head>
<body>
r   z{"document": "%s", "pages": [
htmljsonxmlxhtmlrZ  )	r   r  tr  r  r  rw   r  re   s	            r   ConversionHeaderr  b  s    		A
D	
	 
E D,x7DF{ H 
f H 
e H 
g H Hr#   c                     | j                         }d}d}d}d}|}|dk(  r|}|S |dk(  r|}|S |dk(  r|}|S |dk(  r|}|S |}|S )	Nr   z]
}z</body>
</html>
z</document>
r  r  r  r  r  )r   r  rw   r  r  r  r  re   s           r   ConversionTrailerr    s    		ADDD
CEF{ H 
f H 
e H 
g H Hr#   c                       e Zd ZdZd Zd Zy)ElementPositionzDConvert a dictionary with element position information to an object.c                      y r-   r$   r   s    r   r   zElementPosition.__init__      r#   c                 d    d}| j                   j                         D ]  \  }}|d| d|z  } |S )Nr    =)r/   items)r   retnr   s       r   __str__zElementPosition.__str__  sB    MM'') 	!DAqQqc1%= C	!
r#   N)r   r   r6   r7   r   r  r$   r#   r   r  r    s    Nr#   r  c                      t               S r-   )r  r$   r#   r   make_story_elposr    s    r#   startstopclipc                    || j                   }t        |      }||j                  }||j                  }|j                  |_        |j                  |_        |j                  s|j                  rg S | j                  dd|      d   }g }|D ]k  }t        |d         }|j                  s|j                  r*|d   D ]:  }t        |d         }|j                  s|j                  r*|j                  |       < m |g k(  r|S |j                  d        |j                  d      }	|	j
                  |j                  z
  d	|	j                  z  k  rVt        |j                  |	j
                  |	j                        }
|
j                  s1|
j                  s%|j                  d|
       n|j                  d|	       |g k(  r|S |j                         }|j                  |j                  z
  d	|j                  z  k  rVt        |j                  |j                  |j                        }
|
j                  s|
j                  s|j                  |
       |S |j                  |       |S )
a  Return rectangles of text lines between two points.

    Notes:
        The default of 'start' is top-left of 'clip'. The default of 'stop'
        is bottom-reight of 'clip'.

    Args:
        start: start point_like
        stop: end point_like, must be 'below' start
        clip: consider this rect_like only, default is page rectangle
    Returns:
        List of line bbox intersections with the area established by the
        parameters.
    r  r   )r  r  blocksbboxlinesc                     | j                   S r-   )r  )r  s    r   r}  z)get_highlight_selection.<locals>.<lambda>  s
     r#   keyg?)rY   r  rd  rg  r  r  r  rG  rQ  get_textr  sortpoprn  r  insert)r   r  r  r  r  r  r   r  linebboxfre   bboxls               r   get_highlight_selectionr    s	     |yy:D}|wwggDGffDG}}((	 ]]ad  F E AfIt}}gJ 	DV%D4==LL			 {	JJ'J( IIaLExx%''S5<<//%((EHH-

ammLLAQ{ IIKEvvC%,,..466588,

ammLLO L 	ULr#   Pagec                     t        |        | j                  j                  st        d      | j                  }|dk7  r| j                  d       |S )zPrepare for annotation insertion on the page.

    Returns:
        Old page rotation value. Temporarily sets rotation to 0 when required.
    	is no PDFr   )r  rX  is_pdfr   rotationset_rotation)r   old_rotations     r   annot_preprocessr    sI     ;;%%==Lq!r#   Annotc                 v    t        j                  |       |_        || j                  t	        |      <   d|_        y)ztClean up after annotation inertion.

    Set ownership flag and store annotation in page annotation dictionary.
    TN)weakrefproxyrX  _annot_refsidr   )r   rO   s     r   annot_postprocessr    s/    
 ==&EL"'DRYEMr#   srgbc                 H    | dz	  }| |dz  z
  dz	  }| |dz  z
  |dz  z
  }|||fS )a  Convert sRGB color code to an RGB color triple.

    There is **no error checking** for performance reasons!

    Args:
        srgb: (int) RRGGBB (red, green, blue), each color in range(255).
    Returns:
        Tuple (red, green, blue) each item in intervall 0 <= item <= 255.
    r  rk  r$   )r  re   r`  r   s       r   sRGB_to_rgbr    sC     	
A	b	aARAF#Aq!9r#   c                 F    t        |       }|d   dz  |d   dz  |d   dz  fS )a  Convert sRGB color code to a PDF color triple.

    There is **no error checking** for performance reasons!

    Args:
        srgb: (int) RRGGBB (red, green, blue), each color in range(255).
    Returns:
        Tuple (red, green, blue) each item in intervall 0 <= item <= 1.
    r   g     o@r   r   )r  )r  r  s     r   sRGB_to_pdfr  &  s3     	DAQ4%<1qte|33r#   rY   colsrowsc                    t        |       } | j                  s| j                  rt        d      | j                  }| j
                  |z  }| j                  |z  }|d|df}d|d|f}t        ||j                  |z   |j                  |z         }|g}	t        d|      D ]  }
||z  }|	j                  |        |	g}t        d|      D ]8  }
||
dz
     }	g }|	D ]  }|j                  ||z           |j                  |       : |S )a  Return a list of (rows x cols) equal sized rectangles.

    Notes:
        A utility to fill a given area with table cells of equal size.
    Args:
        rect: rect_like to use as the table area
        rows: number of rows
        cols: number of columns
    Returns:
        A list with <rows> items, where each item is a list of <cols>
        PyMuPDF Rect objects of equal sizes.
    z!rect must be finite and not emptyr   r   )r  rG  rQ  r   rd  rn  rm  r  r  r   r  )rY   r  r  rd  rn  rm  delta_hdelta_vre   rowr   rectsnrows                r   
make_tabler  4  s    :D}}((<==	B[[4FJJEa"G&!V$GRrttf}-A #C1d^ 	W

1
 EE1d^ AEl 	%AKKG$	%T Lr#   Fontc                 (   d }|j                   d   sy| j                  }| j                         }|D cg c]A  }|d   |j                  k(  r-|d   j	                  d      r|d   j	                  d      r|d	   C }}|g k(  ryt        |      }t        |j                         dd D cg c]  }|j                  |       c}      }t        t        |d
z              }	|D ]'  }
 |||
|	      rt        d|j                  |
fz         ) yc c}w c c}w )a  Repair character spacing for mono fonts.

    Notes:
        Some mono-spaced fonts are displayed with a too large character
        width, e.g. "a b c" instead of "abc". This utility adds an entry
        "/DW w" to the descendent font of font. The int w is
        taken to be the first width > 0 of the font's unicodes.
        This should enforce viewers to use 'w' as the character width.

    Args:
        page: fitz.Page object.
        font: fitz.Font object.
    c                    | j                  |d      }|d   dk7  ryt        |d   dd j                  dd            }| j                  |d	      }|d   d
k7  r| j                  |d	d
       | j                  |dt	        |             y)NDescendantFontsr   rm  Fr   rn  ro  r   WnullDWT)rq  r  rr  rs  r   )r\  rI  rm  dfdf_xrefr   s         r   set_font_widthz(repair_mono_font.<locals>.set_font_widthm  s    d$56a5GbeAbk))%34Wc*Q46>Wc62$E
3r#   monoNr   r   Fr   Identityr   i  z$Cannot set width for '%s' in xref %i)r  rX  r  r   r  r!   r   valid_codepointsglyph_advancer  r   r  )r   rd  r  r\  fontlistr   rv  cpmaxadvrm  rI  s              r   repair_mono_fontr  _  s   	 ::f
++C~~H aDDII!A$//#"61Q4??:;V 	
!E 
 {JE43H3H3J2A3NOR$$$R(OPFv}&'E Nc4/8DIIt;LLMN Ps   AD
'Dchc                 
   t         i k(  ret               D ]X  }|j                  d      r|j                  d      \  }}|j                         }|D ]  }t	        |d d d      }|t         |<    Z t         j                  | d      S )Nr  ;r   r  basez.notdef)_adobe_glyphs_get_glyph_textr  rb  r  r  )r  r  r   uncunclr   s         r   unicode_to_glyph_namer    s    #% 	(Ds#

3ID#99;D (BQb)#'a (	( R++r#   c                     t         i k(  rNt               D ]A  }|j                  d      r|j                  d      \  }}t	        |d d d      }|t         |<   C t         j                  | d      S )Nr  r  r   r  r  i  )_adobe_unicodesr  r  rb  r  r  )r   r  gnamer  r   s        r   glyph_name_to_unicoder    sm    "#% 	'Ds#CJE3CG"%A%&OE"	' tU++r#   c                      t         i k(  rQt               D ]D  } | j                  d      r| j                  d      \  }}t	        d|d d z   d      }|t         |<   F t        t         j                               S Nr  r  0xr   r  r  )r  r  r  rb  r  r   r  r  r  r  r   s       r   adobe_glyph_namesr!    sr    "#% 	'Ds#CJE3D3r7N,A%&OE"	' %%'((r#   c                      t         i k(  rQt               D ]D  } | j                  d      r| j                  d      \  }}t	        d|d d z   d      }|t         |<   F t        t         j                               S r  )r  r  r  rb  r  r   valuesr   s       r   adobe_glyph_unicodesr$    sr    "#% 	'Ds#CJE3D3r7N,A%&OE"	' '')**r#   c                      t        j                  t        j                  d            j	                         j                         S )Ns~  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)gzip
decompressbase64	b64decodedecode
splitlinesr$   r#   r   r  r    s;    ??6++NDP P` vx

aPr#   c                      t        j                  d      } | dk7  r| S t        j                  dk(  rd}nd}t         j                  j                  |      r|S 	 t        j                  dk(  r	 t        j                  d      j                         j                         }|st        d       y	t         j                  j                  |      }t         j                  j                  |d
      }t         j                  j                  |      r|S t        dt        j                         y		 t        j                  d      j                         j                         j                         }t        |      dk7  rt        d       y	d}|j                         D ]5  }|j                         D ]   }t!        |      j#                  d
      s|} 5 7 |dk7  r|S t        dt        j                         y	#  d}Y XxY w#  d}Y xY w)a  Detect Tesseract-OCR and return its language support folder.

    This function can be used to enable OCR via Tesseract even if the
    environment variable TESSDATA_PREFIX has not been set.
    If the value of TESSDATA_PREFIX is None, the function tries to locate
    Tesseract-OCR and fills the required variable.

    Returns:
        Folder name of tessdata if Tesseract-OCR is available, otherwise False.
    r9   Nwin32z'C:\Program Files\Tesseract-OCR\tessdataz&/usr/share/tesseract-ocr/4.00/tessdatazwhere tesseractr   zTesseract-OCR is not installedFtessdataz2unexpected: Tesseract-OCR has no 'tessdata' folderfilezwhereis tesseract-ocrr   z2unexpected: tesseract-ocr has no 'tessdata' folder)osgetenvsysplatformpathexistspopenr  stripr  dirnamer2  stderrrb  r   iterdirr   r1  )r9   r.  responser9  sub_responsesub_subs         r   get_tessdatar?    s    ii 12O$
||w?;	ww~~h ||w	xx 12779??AH 23''//(+77<<477>>(#OFSZZX883499;AACIIK 8}./ H ((* #++- 	G7|$$Z0"	
 4@	
 I	Hs   +1G- '?G7 -G47G=c                      e Zd Z ed d d      ZeZej                  Z	ddZ
d Zd Zd	 Zd
 ZddZd Zd Zd Zd Zd Zd Zd Zd ZddZd ZddZdefdZdej<                  ee f   defdZ!defdZ"dej<                  ee f   fdZ#dej<                  ee f   de$fdZ%dej<                  ee f   de&fdZ'	 	 	 	 ddej<                  ee f   de(d e)d!e)d"e)ddfd#Z*	 	 	 dd$e dejV                  d e)d!e)d"e)ddfd%Z,dd&Z-ed'        Z.ed(        Z/ed)        Z0d* Z1d+ Z2d, Z3d- Z4d. Z5d/ Z6ed0        Z7ed1        Z8dd2Z9dd3Z:dd4Z;d5 Z<d6 Z=ed7        Z>d8 Z?d9 Z@d: ZAed;        ZBed<        ZCed=        ZDd> ZEed?        ZFed@        ZGdA ZHdB ZIddCZJ	 	 	 	 	 ddDZKddEZLddFZMddGZNdH ZOdI ZPedJ        ZQdK ZRddLZSdM ZTdN ZUdO ZVdP ZWdQ ZXdR ZYdS ZZdT Z[dU Z\ddVZ]dW Z^dX Z_dY Z`dZ Zadd[Zbd\ Zcd] Zddd^Zedd_Zfd` Zgeda        Zhedb        Zidc Zjdd Zkde Zldf Zmdg Zndh Zodi Zpdj ZqddkZrddlesdmesde fdnZtdo Zudp ZvddqZwddrZxds ZyddtZzdu Z{dv Z|ddwZ}dx Z~dy Zdz Zdd{Zdd|Zdd}Zdd~Zd ZddZd ZddZd Zd Z ed       ZddedesdefdZddedesdefdZdedefdZd Zd Zd ZddedefdZddedefdZddefdZd Zd Z	 	 	 	 	 ddZddZede fd       Zde fdZede fd       Zde fdZede$fd       Zde$desfdZde fdZdesfdZddeddfdZdeddfdZddededefdZdefdZddZd Zd Zd Zd Zd Zd Zy)Documentc                 6    | j                   j                         S r-   r
   r   r  s    r   r}  zDocument.<lambda>       r#   c                 8    | j                   j                  |      S r-   rC  r  r   s     r   r}  zDocument.<lambda>      AFFJJqM r#   The membership flagr\  Nc                    d| _         d| _        d| _        d| _        g | _        i | _        i | _        i | _        t        j                         | _
        |rt        |      t        u rn>t        |d      rt        |      }n&t        |d      r|j                  }nd}t        |      |dk7  rt        |      t         u r|| _        n`t        |      t$        u rt!        |      | _        n>t        |      t&        j(                  u r|j+                         | _        nd}t        |      | j"                  }|s|s
d}nd| _        |r| j"                  dk(  r
|| _        d}	n	d}	d	| _        |	r`t,        j.                  j1                  |      sd
| d}t3        |      t,        j.                  j5                  |      sd| d}t7        |      |	r"t,        j.                  j9                  |      dk(  s3t        | j"                        t         u r%t;        | j"                        dk(  rd}t=        |      t?        j@                  | t?        jB                  |||||||             | jD                  rtF        jI                         | _%        | jL                  du rd| _        d| _        n| jO                          |r|jQ                         jS                  d      s|r%d|jQ                         v r	 | jU                         }
yyyy#  t7        d      dxY w)a.  Creates a document. Use 'open' as a synonym.

        Notes:
            Basic usages:
            open() - new PDF document
            open(filename) - string, pathlib.Path, or file object.
            open(filename, fileype=type) - overwrite filename extension.
            open(type, buffer) - type: extension, buffer: bytes object.
            open(stream=buffer, filetype=type) - keyword version of previous.
            Parameters rect, width, height, fontsize: layout reflowable
                 document on open (e.g. EPUB). Ignored if n/a.
        FNabsoluter   zbad filenamezbad type: 'stream'pdfTr   zno such file: 'r  z' is no filer   zcannot open empty documentsvgzcannot open broken document)+	is_closedis_encryptedisEncryptedmetadatar  	Graftmaps
ShownPagesInsertedImagesr  WeakValueDictionary
_page_refsr   r   r   r   	TypeErrorr  r  r"  r  r  r  r1  r5  r6  r  isfiler  getsizer   r  r   Document_swiginitnew_Documentr   r~  gen_id	_graft_id
needs_passinit_docrZ  r1  convert_to_pdf)r   r  r  filetyperY   rm  rn  ry   msg	from_file_s              r   r   zDocument.__init__  s    ! !"6684>S0Xz*8}HXv&}}H CC. T>F|u$$f*#Fmf+$oo/*n$[[F DKt+ DIIIDI77>>(+'z3',,WW^^H-(<0#C((2a74;LPU;UZ]^b^i^iZjnoZo.C %% 	e&8&868UY[`bhjr&st<<"\\^DN$&$(!#'  HNN,55e<UV^VdVdVfMfQ++-A Ng Q'(EFDPs   K1 1K?c                    | j                   s| j                  rt        d      |d}|| vrt        d      t        |      t        u r!|dk  r| j
                  }|dk  r||z  }|dk  rt        j                  | |      }d|_        t        j                  |       |_        || j                  t        |      <   t        j                         |_        ||_        |S )zLoad a page.

        'page_id' is either a 0-based page number or a tuple (chapter, pno),
        with chapter number and page number within that chapter.
        document closed or encryptedr   page not in documentT)rN  rO  r   r   r  
page_countr   Document_load_pager   r  r  rX  rV  r  rU  r  number)r   page_idnpvals       r   	load_pagezDocument.load_page3  s     >>T..;<<?G$344=CGaKBA+2 A+ &&tW5]]4(
#&3 !557
 
r#   c                 .    t        j                  | |      S r-   )r   Document__remove_links_to)r   numberss     r   _remove_links_tozDocument._remove_links_toS  s    ..tW==r#   c                 Z    | j                   rt        d      t        j                  |       S )zLoad first outline.document closed)rN  r   r   Document__loadOutliner   s    r   _loadOutlinezDocument._loadOutlineV  &    >>.//**400r#   c                 .    t        j                  | |      S r-   )r   Document__dropOutline)r   ols     r   _dropOutlinezDocument._dropOutline^  s    **444r#   c                 ^    | j                   rt        d      t        j                  | ||      S )z)Utility: insert font from file or binary.rt  )rN  r   r   Document__insert_font)r   fontfile
fontbuffers      r   _insert_fontzDocument._insert_fonta  s*    >>.//**4:FFr#   c                 Z    | j                   rt        d      t        j                  |       S )z!Get list of outline xref numbers.rt  )rN  r   r   Document_get_outline_xrefsr   s    r   get_outline_xrefszDocument.get_outline_xrefsi  &    >>.////55r#   c                 \    | j                   rt        d      t        j                  | |      S )zFGet the keys of PDF dict object at 'xref'. Use -1 for the PDF trailer.rt  )rN  r   r   Document_xref_get_keysr   rI  s     r   xref_get_keyszDocument.xref_get_keysq  (    >>.//++D$77r#   c                 ^    | j                   rt        d      t        j                  | ||      S )z+Get PDF dict key value of object at 'xref'.rt  )rN  r   r   Document_xref_get_key)r   rI  r  s      r   rq  zDocument.xref_get_keyy  s*    >>.//**4s;;r#   c                    | j                   s| j                  rt        d      |r2t        |t              r"t
        j                  |      t               dhfvrt        d      t        |t              r-|r+|d   dk(  r.t
        j                  |dd       t               k7  rt        d      t        j                  | |||      S )z&Set the value of a PDF dictionary key.rf  r  z	bad 'key'r   r   Nzbad 'value')
rN  rO  r   r   r   INVALID_NAME_CHARSintersectionr!   r   Document_xref_set_key)r   rI  r  r    s       r   rs  zDocument.xref_set_key  s     >>T..;<<*S#.2D2Q2QRU2V_b_dgjfk^l2l[))%%UeAh#oJ\JiJijopqprjsJtx{x}J}]++ **4sEBBr#   c                 \    | j                   rt        d      t        j                  | |      S )z4Add color info to all items of an extended TOC list.rt  )rN  r   r   Document__extend_toc_items)r   r  s     r   _extend_toc_itemszDocument._extend_toc_items  s(    >>.////e<<r#   c                 \    | j                   rt        d      t        j                  | |      S )z Get list of embedded file names.rt  )rN  r   r   Document__embfile_names)r   namelists     r   _embfile_nameszDocument._embfile_names  s(    >>.//,,T8<<r#   c                 .    t        j                  | |      S r-   )r   Document__embfile_delr   idxs     r   _embfile_delzDocument._embfile_del      **455r#   c                 0    t        j                  | ||      S r-   )r   Document__embfile_info)r   r  infodicts      r   _embfile_infozDocument._embfile_info  s    ++D#x@@r#   c                 6    t        j                  | |||||      S r-   )r   Document__embfile_upd)r   r  bufferr  	ufilenamedescs         r   _embfile_updzDocument._embfile_upd  s    **4fh	SWXXr#   c                 .    t        j                  | |      S r-   )r   Document__embeddedFileGetr  s     r   _embeddedFileGetzDocument._embeddedFileGet  s    ..tS99r#   c                 6    t        j                  | |||||      S r-   )r   Document__embfile_add)r   r   r  r  r  r  s         r   _embfile_addzDocument._embfile_add  s    **4vxTXYYr#   r  c                 ,    g }| j                  |       |S )z#Get list of names of EmbeddedFiles.)r  )r   	filenamess     r   embfile_nameszDocument.embfile_names  s    	I&r#   rh  c                     | j                         }dt        |      z  }||v r|j                  |      }|S |t        t	        |            v r|}|S t        |      )Nz '%s' not in EmbeddedFiles array.)r  r   indexr   r   r   )r   rh  r  rb  r  s        r   _embeddedFileIndexzDocument._embeddedFileIndex  sf    &&(	03t9<9//$'C
 
	 U3y>**C 
 S/!r#   c                 4    t        | j                               S )zGet number of EmbeddedFiles.)r   r  r   s    r   embfile_countzDocument.embfile_count  s    4%%'((r#   c                 F    | j                  |      }| j                  |      S )aT  Delete an entry from EmbeddedFiles.

        Notes:
            The argument must be name or index of an EmbeddedFiles item.
            Physical deletion of data will happen on save to a new
            file with appropriate garbage option.
        Args:
            item: name or number of item.
        Returns:
            None
        )r  r  r   rh  r  s      r   embfile_delzDocument.embfile_del  s%     %%d+  %%r#   c                    | j                  |      }d| j                         |   i}| j                  ||      }| j                  |d      \  }}|dk7  r||d<   | j                  |d      \  }}|dk7  r||d<   | j                  |d      \  }}|dk7  r4t	        j
                  |j                               j                         |d<   |S )	zGet information of an item in the EmbeddedFiles array.

        Args:
            item: number or name of item.
        Returns:
            Information dictionary.
        r   Params/CreationDater  creationDateParams/ModDatemodDatezParams/CheckSumchecksum)r  r  r  rq  binasciihexlifyencoder*  )r   rh  r  r  rI  r  datemd5s           r   embfile_infozDocument.embfile_info  s     %%d+D..056!!#x0##D*?@4;'+H^$##D*:;4;"&HY""4):;3;#+#3#3CJJL#A#H#H#JHZ r#   c                 F    | j                  |      }| j                  |      S )zGet the content of an item in the EmbeddedFiles array.

        Args:
            item: number or name of item.
        Returns:
            (bytes) The file content.
        )r  r  r  s      r   embfile_getzDocument.embfile_get  s%     %%d+$$S))r#   r  r  r  r  c                     | j                  |      }| j                  |||||      }t               }| j                  |dt	        |             |S )a  Change an item of the EmbeddedFiles array.

        Notes:
            Only provided parameters are changed. If all are omitted,
            the method is a no-op.
        Args:
            item: number or name of item.
            buffer: (binary data) the new file content.
            filename: (str) the new file name.
            ufilename: (unicode) the new filen ame.
            desc: (str) the new description.
        r  r  r  r  r  )r  r  r  rs  r,  )	r   rh  r  r  r  r  r  rI  r  s	            r   embfile_updzDocument.embfile_upd  s\    " %%d+  V.6/8*. ! 0 }$ 0+d2CDr#   r   c                 ~   | j                         }dt        |      z  }||v rt        |      ||}|t        t        u rt	        |d      n|}||}| j                  |||||      }t               }	| j                  |dd       | j                  |dt        |	             | j                  |dt        |	             |S )a[  Add an item to the EmbeddedFiles array.

        Args:
            name: name of the new item, must not already exist.
            buffer: (binary data) the file content.
            filename: (str) the file name, default: the name
            ufilename: (unicode) the file name, default: filename
            desc: (str) the description.
        zName '%s' already exists.utf8r  Typez/EmbeddedFiler  r  )	r  r   r   r  unicoder  r  rs  r,  )
r   r   r  r  r  r  r  rb  rI  r  s
             r   embfile_addzDocument.embfile_add  s     &&(	)CI59S/!H58E\&1xI<D  f.6/8*. ! 0 }$8$ 5{47HI$ 0+d2CDr#   c                 x    | j                   s| j                  rt        d      t        j                  | |||      S )z[Convert document to a PDF, selecting page range and optional rotation. Output bytes object.rf  )rN  rO  r   r   Document_convert_to_pdf)r   	from_pageto_pagerotates       r   r`  zDocument.convert_to_pdf0  s8     >>T..;<< ,,T9gvNNr#   c                 Z    | j                   rt        d      t        j                  |       S )zNumber of pages.rt  )rN  r   r   Document_page_countr   s    r   rh  zDocument.page_count9  (     >>.//((..r#   c                 Z    | j                   rt        d      t        j                  |       S )zNumber of chapters.rt  )rN  r   r   Document_chapter_countr   s    r   chapter_countzDocument.chapter_countB  (     >>.//++D11r#   c                 Z    | j                   rt        d      t        j                  |       S )z Id (chapter, page) of last page.rt  )rN  r   r   Document_last_locationr   s    r   last_locationzDocument.last_locationK  r  r#   c                 \    | j                   rt        d      t        j                  | |      S )zPage count of chapter.rt  )rN  r   r   Document_chapter_page_count)r   chapters     r   chapter_page_countzDocument.chapter_page_countU  s(    >>.//00w??r#   c                     | j                   s| j                  rt        d      t        |      t        u rd|f}|| vrt        d      |dk(  ryt        j                  | |      S )z%Get (chapter, page) of previous page.rf  r   page id not in documentr   r   r$   )rN  rO  r   r   r  r   Document_prev_locationr   rk  s     r   prev_locationzDocument.prev_location]  sh     >>T..;<<=C'lG$677v ++D'::r#   c                     | j                   s| j                  rt        d      t        |      t        u rd|f}|| vrt        d      t        |      | j                  k(  ryt        j                  | |      S )z!Get (chapter, page) of next page.rf  r   r  r$   )	rN  rO  r   r   r  r   r  r   Document_next_locationr  s     r   next_locationzDocument.next_locationm  sr     >>T..;<<=C'lG$677>d000 ++D'::r#   c                 \    | j                   rt        d      t        j                  | |      S )zConvert pno to (chapter, page).rt  )rN  r   r   "Document_location_from_page_numberr   pnos     r   location_from_page_numberz"Document.location_from_page_number}  s(    >>.//77cBBr#   c                     t        |      t        u r | j                  }|dk  r||z  }|dk  rd|f}|| vrt        d      t	        j
                  | |      S )z&Convert (chapter, pno) to page number.r   r  )r   r  rh  r   r   "Document_page_number_from_location)r   rk  rl  s      r   page_number_from_locationz"Document.page_number_from_location  sd     =CBA+2 A+'lG$677 77gFFr#   c                 \    | j                   rt        d      t        j                  | |      S )zGet metadata.rt  )rN  r   r   Document__getMetadatar   r  s     r   _getMetadatazDocument._getMetadata  s(    >>.//**455r#   c                 Z    | j                   rt        d      t        j                  |       S )zIndicate password required.rt  )rN  r   r   Document_needs_passr   s    r   r^  zDocument.needs_pass  r  r#   c                 Z    | j                   rt        d      t        j                  |       S )zDocument language.rt  )rN  r   r   Document_languager   s    r   languagezDocument.language  (     >>.//&&t,,r#   c                 .    t        j                  | |      S r-   )r   Document_set_languager   r  s     r   set_languagezDocument.set_language  s    **4::r#   c                 0    t        j                  | ||      S )aM  Calculate internal link destination.

        Args:
            uri: (str) some Link.uri
            chapters: (bool) whether to use (chapter, page) format
        Returns:
            (page_id, x, y) where x, y are point coordinates on the page.
            page_id is either page number (if chapters=0), or (chapter, pno).
        )r   Document_resolve_link)r   r  chapterss      r   resolve_linkzDocument.resolve_link  s     **4h??r#   c                     | j                   s| j                  rt        d      t        j                  | ||||      }| j                          | j                          |S )z Re-layout a reflowable document.rf  )rN  rO  r   r   Document_layout_reset_page_refsr_  )r   rY   rm  rn  ry   rm  s         r   layoutzDocument.layout  sO    >>T..;<<##D$vxH
r#   c                 t    | j                   s| j                  rt        d      t        j                  | |      S )z.Make a page pointer before layouting document.rf  )rN  rO  r   r   Document_make_bookmark)r   locs     r   make_bookmarkzDocument.make_bookmark  s0    >>T..;<<++D#66r#   c                 t    | j                   s| j                  rt        d      t        j                  | |      S )z-Find new location after layouting a document.rf  )rN  rO  r   r   Document_find_bookmark)r   bms     r   find_bookmarkzDocument.find_bookmark  s0    >>T..;<<++D"55r#   c                 Z    | j                   rt        d      t        j                  |       S )z Check if document is layoutable.rt  )rN  r   r   Document_is_reflowabler   s    r   is_reflowablezDocument.is_reflowable  r  r#   c                 \    | j                   rt        d      t        j                  | |      S )zDelete object.rt  )rN  r   r   Document__deleteObjectr  s     r   _deleteObjectzDocument._deleteObject  r  r#   c                 Z    | j                   rt        d      t        j                  |       S )zGet xref of PDF catalog.rt  )rN  r   r   Document_pdf_catalogr   s    r   pdf_catalogzDocument.pdf_catalog  &    >>.//))$//r#   c                 Z    | j                   rt        d      t        j                  |       S )zGet PDF file id.rt  )rN  r   r   Document__getPDFfileidr   s    r   _getPDFfileidzDocument._getPDFfileid  s&    >>.//++D11r#   c                 Z    | j                   rt        d      t        j                  |       S )zCount versions of PDF document.rt  )rN  r   r   Document_version_countr   s    r   version_countzDocument.version_count  r  r#   c                 Z    | j                   rt        d      t        j                  |       S )zCheck for PDF.rt  )rN  r   r   Document_is_pdfr   s    r   r  zDocument.is_pdf  s(     >>.//$$T**r#   c                 Z    | j                   rt        d      t        j                  |       S )z True if PDF has unsaved changes.rt  )rN  r   r   Document_is_dirtyr   s    r   is_dirtyzDocument.is_dirty  r  r#   c                 Z    | j                   rt        d      t        j                  |       S )z-Check whether incremental saves are possible.rt  )rN  r   r   Document_can_save_incrementallyr   s    r   can_save_incrementallyzDocument.can_save_incrementally  s&    >>.//44T::r#   c                 Z    | j                   rt        d      t        j                  |       S )z'Check whether we have a linearized PDF.rt  )rN  r   r   Document_is_fast_webaccessr   s    r   is_fast_webaccesszDocument.is_fast_webaccess!  s(     >>.////55r#   c                 Z    | j                   rt        d      t        j                  |       S )zCheck whether PDF was repaired.rt  )rN  r   r   Document_is_repairedr   s    r   is_repairedzDocument.is_repaired*  (     >>.//))$//r#   c                 .   | j                   rt        d      t        |      t        k(  rn<t	        |d      rt        |      }n$t	        |d      r|j
                  }nt        d      || j
                  k(  rt        d      t        j                  | |      S )z.Save a file snapshot suitable for journalling.zdoc is closedopenr   )filename must be str, Path or file objectzcannot snapshot to original)rN  r   r   r   r   r   r   Document_save_snapshotr   r  s     r   save_snapshotzDocument.save_snapshot4  s     >>_-->S Xv&8}HXv&}}HHIItyy :;; ++D(;;r#   c                     | j                   rt        d      t        j                  | |      }|r%d| _        d| _        | j                          d| _        |S )zDecrypt document.rt  FT)rN  r   r   Document_authenticaterO  rP  r_  r   )r   passwordrm  s      r   authenticatezDocument.authenticateH  sQ    >>.//))$9 %D$DMMODL 
r#   c                 \   | j                   s| j                  rt        d      t        |      t        k(  rnHt        |d      rt	        |      }n0t        |d      r|j                  }nt        |d      st        d      || j                  k(  r|st        d      | j                  dk  rt        d      |r&| j                  |k7  s| j                  rt        d	      |rt        |      d
kD  s|rt        |      d
kD  rt        d      t        j                  | |||||||||	|
|||||||      S )z/Save PDF to file, pathlib.Path or file pointer.rf  r0  r   seekr1  z$save to original must be incrementalr   zcannot save with zero pageszincremental needs original filer  z"password length must not exceed 40)rN  rO  r   r   r   r   r   rh  r  r   r   Document_save)r   r  garbagecleandeflatedeflate_imagesdeflate_fontsincrementalasciiexpandlinear	no_new_id
appearancepretty
encryptionpermissionsowner_pwuser_pws                     r   savezDocument.saveY  sO    >>T..;<<>S Xv&8}HXv&}}H6*HIItyy CDD??Q:;;yyH$ !BCCs7|b(HX9KABB ""47E7N\ikvx}  @F  HN  PY  [e  gm  oy  {F  HP  RY  Z  	Zr#   c                     ddl m}  |       }| j                  ||||
||||||||	|||||       |j                         S )Nr   r  )r<  r=  rE  rF  r>  r?  r@  rA  rB  rC  rD  rG  rH  rI  rJ  rK  )r  r  rL  r  )r   r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  r  bios                      r   writezDocument.writet  sT    
 	i		#we
muVF*+7 	 	, ||~r#   c                    | j                   s| j                  rt        d      | j                  |j                  k(  rt        d      |}|dk  r| j                  }t        |      |cxkD  rdkD  ron nlt        j                  j                  |j                        }|sd}t        j                  j                  | j                        }|sd}t        d|d|d       |j                  }| j                  j                  |d      }
|
t        |       }
|
| j                  |<   t        j                  | |||||||||	|
      }| j!                          |r| j#                  ||||	       |	d
k(  rd| j                  |<   |S )a,  Insert a page range from another PDF.

        Args:
            docsrc: PDF to copy from. Must be different object, but may be same file.
            from_page: (int) first source page to copy, 0-based, default 0.
            to_page: (int) last source page to copy, 0-based, default last page.
            start_at: (int) from_page will become this page number in target.
            rotate: (int) rotate copied pages, default -1 is no change.
            links: (int/bool) whether to also copy links.
            annots: (int/bool) whether to also copy annotations.
            show_progress: (int) progress message interval, 0 is no messages.
            final: (bool) indicates last insertion from this source PDF.
            _gmap: internal use only

        Copy sequence reversed if from_page > to_page.rf  z'source and target cannot be same objectr   z
memory PDFzInserting 'z' at 'r  N)r  r  start_atr   )rN  rO  r   r]  rh  r   r1  r5  r  r   r  rR  r  Graftmapr   Document_insert_pdfr  	_do_links)r   docsrcr  r  rR  r  linksannotsshow_progressfinal_gmapsainnameoutnameisrtrm  s                   r   
insert_pdfzDocument.insert_pdf  se   $ >>T..;<<>>V---FGG6Bv;**WW%%fkk2F%gg&&tyy1G&fg>? ""4.=TNE#(DNN4  ''fi(TZ\acikxz  BG  HNN6yG#%  'A:#'DNN4 
r#   c
                    d}
t        |t              rD|j                  j                  dkD  rt        t        |      }t        d|j                               }
nt        |t
              r|}
nt        |      }
|
st        d      |
j                  s|
j                         }t        d|      }
| j                  |
||||||||		      S )zInsert an arbitrary supported document to an existing PDF.

        The infile may be given as a filename, a Document or a Pixmap.
        Other paramters - where applicable - equal those of insert_pdf().
        Nr   pngzbad infile parameterrL  )r  r  rR  r  rW  rX  rY  rZ  )r   Pixmap
colorspacer  csRGBrA  tobytesr   r  r`  r`  )r   infiler  r  rR  r  rW  rX  rY  rZ  r   pdfbytess               r   insert_filezDocument.insert_file  s     ff%  ""Q&v.5&.."23C)C6"C344zz))+H5(+CsiS[djqv  @F  Vc  kp  q  	qr#   c                     | j                   s| j                  rt        d      t        j                  | |||      }| j                          |S )zMake a new PDF page.rf  )rN  rO  r   r   Document__newPager  )r   r  rm  rn  rm  s        r   _newPagezDocument._newPage  sD    >>T..;<<%%dC?
r#   c                    | j                   s| j                  rt        d      | j                  st        d      t	        |d      st        d      t        |      dk(  s>t        |      t        t        |             vst        |      t        t        |             vrt        d      t        j                  | |      }| j                          |S )z,Build sub-pdf with page numbers in the list.rf  r  r   zsequence requiredr   bad page number(s))rN  rO  r   r  r   r   r   r   r   r   Document_selectr  )r   pylisterm  s      r   selectzDocument.select  s    >>T..;<<{{[))w.011w<1GE#d)4D DG\abefjbk\lHl122##D'2
r#   c                 .    t        j                  | |      S r-   )r   Document__delete_pager  s     r   _delete_pagezDocument._delete_page  r  r#   c                 F    | j                   ryt        j                  |       S )zDocument permissions.r   )rO  r   Document_permissionsr   s    r   rI  zDocument.permissions  s#      ))$//r#   c                 r    | j                   s| j                  rt        d      t        j                  |       S )zActivate document journalling.rf  )rN  rO  r   r   Document_journal_enabler   s    r   journal_enablezDocument.journal_enable  .    >>T..;<<,,T22r#   c                 t    | j                   s| j                  rt        d      t        j                  | |      S )zBegin a journalling operation.rf  )rN  rO  r   r   Document_journal_start_opr   r   s     r   journal_start_opzDocument.journal_start_op  s0    >>T..;<<..tT::r#   c                 r    | j                   s| j                  rt        d      t        j                  |       S )zEnd a journalling operation.rf  )rN  rO  r   r   Document_journal_stop_opr   s    r   journal_stop_opzDocument.journal_stop_op  s.    >>T..;<<--d33r#   c                 r    | j                   s| j                  rt        d      t        j                  |       S )zShow journalling state.rf  )rN  rO  r   r   Document_journal_positionr   s    r   journal_positionzDocument.journal_position  .    >>T..;<<..t44r#   c                 t    | j                   s| j                  rt        d      t        j                  | |      S )z#Show operation name for given step.rf  )rN  rO  r   r   Document_journal_op_name)r   steps     r   journal_op_namezDocument.journal_op_name  0    >>T..;<<--dD99r#   c                 r    | j                   s| j                  rt        d      t        j                  |       S )z(Show if undo and / or redo are possible.rf  )rN  rO  r   r   Document_journal_can_dor   s    r   journal_can_dozDocument.journal_can_do$  rz  r#   c                 r    | j                   s| j                  rt        d      t        j                  |       S )zMove backwards in the journal.rf  )rN  rO  r   r   Document_journal_undor   s    r   journal_undozDocument.journal_undo,  .    >>T..;<<**400r#   c                 r    | j                   s| j                  rt        d      t        j                  |       S )zMove forward in the journal.rf  )rN  rO  r   r   Document_journal_redor   s    r   journal_redozDocument.journal_redo4  r  r#   c                 t    | j                   s| j                  rt        d      t        j                  | |      S )zSave journal to a file.rf  )rN  rO  r   r   Document_journal_saver3  s     r   journal_savezDocument.journal_save<  0    >>T..;<<**4::r#   c                 t    | j                   s| j                  rt        d      t        j                  | |      S )zLoad a journal from a file.rf  )rN  rO  r   r   Document_journal_loadr3  s     r   journal_loadzDocument.journal_loadD  r  r#   c                 r    | j                   s| j                  rt        d      t        j                  |       S )z Check if journalling is enabled.rf  )rN  rO  r   r   Document_journal_is_enabledr   s    r   journal_is_enabledzDocument.journal_is_enabledL  s.    >>T..;<<0066r#   c           	      ~    | j                   s| j                  rt        d      t        j                  | ||||||      S )z1Return list of glyphs and glyph widths of a font.rf  )rN  rO  r   r   Document__get_char_widths)r   rI  bfnameextr.  limitr  s          r   _get_char_widthszDocument._get_char_widthsT  s<    >>T..;<<..tT63RWY\]]r#   c                 \    | j                   rt        d      t        j                  | |      S )zGet xref of page number.rt  )rN  r   r   Document_page_xrefr  s     r   	page_xrefzDocument.page_xref\  s(    >>.//''c22r#   c                 \    | j                   rt        d      t        j                  | |      S )z$Get list annotations of page number.rt  )rN  r   r   Document_page_annot_xrefsr  s     r   page_annot_xrefszDocument.page_annot_xrefsd  s(    >>.//..tS99r#   c                     | j                   rt        d      t        j                  | |      }t	        t        |            }|S )z2Get CropBox of page number (without loading page).rt  )rN  r   r   Document_page_cropboxr  r  )r   r  rm  s      r   page_cropboxzDocument.page_cropboxl  s:    >>.//))$49S>"
r#   c                 v    | j                   s| j                  rt        d      t        j                  | ||      S )z,List fonts, images, XObjects used on a page.rf  )rN  rO  r   r   Document__getPageInfo)r   r  whats      r   _getPageInfozDocument._getPageInfow  s2    >>T..;<<**4d;;r#   c                 x    | j                   s| j                  rt        d      t        j                  | |||      S )z2Get a font by xref. Returns a tuple or dictionary.rf  )rN  rO  r   r   Document_extract_font)r   rI  	info_onlyr  s       r   extract_fontzDocument.extract_font  s4    >>T..;<<**4y%HHr#   c                 t    | j                   s| j                  rt        d      t        j                  | |      S )z(Get image by xref. Returns a dictionary.rf  )rN  rO  r   r   Document_extract_imager  s     r   extract_imagezDocument.extract_image  s0    >>T..;<<++D$77r#   c                     | j                   s| j                  rt        d      t        j                  |       }| j                          |S )zDelete the TOC.rf  )rN  rO  r   r   Document__delToCr_  r   rm  s     r   _delToCzDocument._delToC  s;    >>T..;<<$$T*
r#   c                 \    | j                   rt        d      t        j                  | |      S )z!Check if xref is a stream object.rt  )rN  r   r   Document_xref_is_streamr  s     r   xref_is_streamzDocument.xref_is_stream  s(    >>.//,,T488r#   c                 v    | j                   rt        d      | j                  syt        j                  | |      S )z"Get/set the NeedAppearances value.rt  N)rN  r   is_form_pdfr   Document_need_appearances)r   r    s     r   need_appearanceszDocument.need_appearances  s6    >>.// ..tU;;r#   c                 Z    | j                   rt        d      t        j                  |       S )zGet the /SigFlags value.rt  )rN  r   r   Document_get_sigflagsr   s    r   get_sigflagszDocument.get_sigflags  rw  r#   c                 Z    | j                   rt        d      t        j                  |       S )z Either False or PDF field count.rt  )rN  r   r   Document_is_form_pdfr   s    r   r  zDocument.is_form_pdf  r.  r#   c                 Z    | j                   rt        d      t        j                  |       S )z&Get list of field font resource names.rt  )rN  r   r   Document_FormFontsr   s    r   rY  zDocument.FormFonts  s(     >>.//''--r#   c                 v    | j                   s| j                  rt        d      t        j                  | ||      S )zAdd new form font.rf  )rN  rO  r   r   Document__addFormFont)r   r   rd  s      r   _addFormFontzDocument._addFormFont  s2    >>T..;<<**4t<<r#   c                 r    | j                   s| j                  rt        d      t        j                  |       S )z/Get xref of Outline Root, create it if missing.rf  )rN  rO  r   r   Document__getOLRootNumberr   s    r   _getOLRootNumberzDocument._getOLRootNumber  r  r#   c                 r    | j                   s| j                  rt        d      t        j                  |       S )zMake a new xref.rf  )rN  rO  r   r   Document_get_new_xrefr   s    r   get_new_xrefzDocument.get_new_xref  r  r#   c                 Z    | j                   rt        d      t        j                  |       S )zGet length of xref table.rt  )rN  r   r   Document_xref_lengthr   s    r   xref_lengthzDocument.xref_length  r  r#   c                 Z    | j                   rt        d      t        j                  |       S )zGet document XML metadata.rt  )rN  r   r   Document_get_xml_metadatar   s    r   get_xml_metadatazDocument.get_xml_metadata  &    >>.//..t44r#   c                 Z    | j                   rt        d      t        j                  |       S )z"Get xref of document XML metadata.rt  )rN  r   r   Document_xref_xml_metadatar   s    r   xref_xml_metadatazDocument.xref_xml_metadata  r  r#   c                 r    | j                   s| j                  rt        d      t        j                  |       S )zDelete XML metadata.rf  )rN  rO  r   r   Document_del_xml_metadatar   s    r   del_xml_metadatazDocument.del_xml_metadata  r  r#   c                 t    | j                   s| j                  rt        d      t        j                  | |      S )z"Store XML document level metadata.rf  )rN  rO  r   r   Document_set_xml_metadata)r   rQ  s     r   set_xml_metadatazDocument.set_xml_metadata  s0    >>T..;<<..tX>>r#   c                 `    | j                   rt        d      t        j                  | |||      S )z#Get xref object source as a string.rt  )rN  r   r   Document_xref_object)r   rI  
compressedrB  s       r   xref_objectzDocument.xref_object  s,    >>.//))$j%HHr#   r  rB  c                 *    | j                  d||      S )zGet PDF trailer as a string.rn  )r  rB  )r  )r   r  rB  s      r   pdf_trailerzDocument.pdf_trailer  s    zGGr#   c                 t    | j                   s| j                  rt        d      t        j                  | |      S )z&Get xref stream without decompression.rf  )rN  rO  r   r   Document_xref_stream_rawr  s     r   xref_stream_rawzDocument.xref_stream_raw  r  r#   c                 t    | j                   s| j                  rt        d      t        j                  | |      S )zGet decompressed xref stream.rf  )rN  rO  r   r   Document_xref_streamr  s     r   xref_streamzDocument.xref_stream  s0    >>T..;<<))$55r#   c                 x    | j                   s| j                  rt        d      t        j                  | |||      S )z!Replace object definition source.rf  )rN  rO  r   r   Document_update_object)r   rI  rw   r   s       r   update_objectzDocument.update_object#  s4    >>T..;<<++D$dCCr#   c                 z    | j                   s| j                  rt        d      t        j                  | ||||      S )zReplace xref stream part.rf  )rN  rO  r   r   Document_update_stream)r   rI  r  newcompresss        r   update_streamzDocument.update_stream+  s6    >>T..;<<++D$XNNr#   c                 Z    | j                   rt        d      t        j                  |       S )z)Make an array page number -> page object.rt  )rN  r   r   Document__make_page_mapr   s    r   _make_page_mapzDocument._make_page_map3  s&    >>.//,,T22r#   c                     | j                   rt        d      t        j                  | ||      }| j	                          |S )zMake a full page duplicate.rt  )rN  r   r   Document_fullcopy_pager  )r   r  torm  s       r   fullcopy_pagezDocument.fullcopy_page;  s:    >>.//**4b9
r#   c                     | j                   rt        d      t        j                  | ||||      }| j	                          |S )z"Move or copy a PDF page reference.rt  )rN  r   r   Document__move_copy_pager  )r   r  nbbeforer0   rm  s         r   _move_copy_pagezDocument._move_copy_pageF  s>    >>.//,,T3FDI
r#   c                 .    t        j                  | |      S r-   )r   Document__remove_toc_itemr  s     r   _remove_toc_itemzDocument._remove_toc_itemQ  s    ..tT::r#   c           	      8    t        j                  | ||||||      S r-   )r   Document__update_toc_item)r   rI  actiontitler  collapsecolors          r   _update_toc_itemzDocument._update_toc_itemT  s!    ..tT65%QY[`aar#   c                 ,    t        j                  |       S r-   )r   Document__get_page_labelsr   s    r   _get_page_labelszDocument._get_page_labelsW  s    ..t44r#   c                     t        j                  | |      }| j                         }| j                  |d      }|j	                  dd|z        }| j                  ||       |S )NTr  z/Nums[]z	/Nums[%s])r   Document__set_page_labelsr  r  rr  r  )r   labelsrm  rI  rw   s        r   _set_page_labelszDocument._set_page_labelsZ  sa    --dF;!6||I{V';<4&
r#   c                 Z    | j                   rt        d      t        j                  |       S )zShow optional OC layers.rt  )rN  r   r   Document_get_layersr   s    r   
get_layerszDocument.get_layerse  s&    >>.//((..r#   c                 ^    | j                   rt        d      t        j                  | ||      S )zActivate an OC layer.rt  )rN  r   r   Document_switch_layer)r   config
as_defaults      r   switch_layerzDocument.switch_layerm  s*    >>.//**4DDr#   c                 \    | j                   rt        d      t        j                  | |      S )z,Content of ON, OFF, RBGroups of an OC layer.rt  )rN  r   r   Document_get_layer)r   r  s     r   	get_layerzDocument.get_layeru  s(    >>.//''f55r#   c           	      f   | j                   rt        d      t        | j                         j	                               }|t               k(  rt        d      |rWt        |      t        t        fvrt        d      t        |      j                  |      }|t               k7  rt        d|z        |rWt        |      t        t        fvrt        d      t        |      j                  |      }|t               k7  rt        d|z        |rWt        |      t        t        fvrt        d      t        |      j                  |      }|t               k7  rt        d|z        |rt        |      t        t        fvrt        d	      |D ]\  }	t        |	      t        t        fvrt        d
|	z        t        |	      j                  |      }|t               k7  sPt        d|z         |r/t        |      j                         }|dk(  rd}|dvrt        d      t        j                  | ||||||      S )z5Set the PDF keys /ON, /OFF, /RBGroups of an OC layer.rt  z document has no optional contentzbad type: 'on'zbad OCGs in 'on': %szbad type: 'off'zbad OCGs in 'off': %szbad type: 'locked'zbad OCGs in 'locked': %szbad type: 'rbgroups'zbad RBGroup '%s'zbad OCGs in RBGroup: %s	UNCHANGED	Unchanged)ONOFFr#  zbad 'basestate')rN  r   r!   get_ocgsr  r   r  r   
differencer   rM  r   Document_set_layer)
r   r  	basestateonoffrbgroupslockedocgsr   r  s
             r   	set_layerzDocument.set_layer}  s   >>.//4==?'')*35=?@@Bxe}, !122B""4(ACEz !7!!;<<Cyu- !233C##D)ACEz !81!<==F|D%=0 !566F&&t,ACEz !;a!?@@H~dE]2 !788 DAw4-/$%7!%;<<F%%d+:$%>%BCCD I,,.IK''	 :: !233 ''fiS(TZ[[r#   c                 `    | j                   rt        d      t        j                  | |||      S )zAdd a new OC layer.rt  )rN  r   r   Document_add_layer)r   r   creatorr*  s       r   	add_layerzDocument.add_layer  s,    >>.//''dGR@@r#   c                 Z    | j                   rt        d      t        j                  |       S )z-Show OC visibility status modifiable by user.rt  )rN  r   r   Document_layer_ui_configsr   s    r   layer_ui_configszDocument.layer_ui_configs  r  r#   c                     t        |t              rB| j                         D cg c]  }|d   |k(  s|d    }}|g k(  rt        d| d      |d   }t	        j
                  | ||      S c c}w )z$Set / unset OC intent configuration.rw   rj  z	bad OCG ''.r   )r   r   r6  r   r   Document_set_layer_ui_config)r   rj  r	  uirq  s        r   set_layer_ui_configzDocument.set_layer_ui_config  s{    
 fc"-1-B-B-D]r6
V\H\bl]F]| 9VHB!788AYF 11$GG ^s
   A*A*c                 Z    | j                   rt        d      t        j                  |       S )z&Show existing optional content groups.rt  )rN  r   r   Document_get_ocgsr   s    r   r&  zDocument.get_ocgs  s&    >>.//&&t,,r#   c                 d    | j                   rt        d      t        j                  | |||||      S )zAdd new optional content group.rt  )rN  r   r   Document_add_ocg)r   r   r  r*  intentusages         r   add_ocgzDocument.add_ocg  s0    >>.//%%dD&"feLLr#   c                 .    t        j                  | |      S r-   )r   Document_internal_keep_annotr   rO   s     r   internal_keep_annotzDocument.internal_keep_annot  s    11$>>r#   c                    | j                   rt        d      | j                         | _        | j                  rd| j                  _        t        ddddddd	d
ddd
j                         D cg c]  \  }}|| j                  |      f c}}      | _        | j                  d      dk(  rd n| j                  d      | j                  d<   y c c}}w )Nz,cannot initialize - document still encryptedTr|  z
info:Titlezinfo:Authorzinfo:Subjectzinfo:Keywordszinfo:Creatorzinfo:Producerzinfo:CreationDatezinfo:ModDatezinfo:Trapped)
r|  r
  authorsubjectkeywordsr2  producerr  r  trappedrH  None)	rO  r   rv  _outliner   r  r  r  rQ  )r   r  r   s      r   r_  zDocument.init_doc  s    KLL))+==$(DMM!H^j  vC  N\  ix  CQ  ^m  ~Q  ]k  wE  CF  CL  CL  CN  O31Qq!2!21!56  O  P.2.?.?.Mv.Ud[_[l[lmy[zl# Os   -C
c                     | j                   S r-   )rN  r   s    r   r}  zDocument.<lambda>  s
    DMM r#   r  fullc                    | j                   s| j                  rt        d      | j                  syt	        |      t
        ur	 |j                  }| j                  |d      }|du r|D cg c]  }|dd 	 c}S |S #  t        d      xY wc c}w )z1Retrieve a list of fonts used on a page.
        rf  r$   need a Page or page numberr   FNrn  rN  rO  r   r  r   r  rj  r  r   r  rP  rm  r   s        r   get_page_fontszDocument.get_page_fonts       >>T..;<<{{9C?jj Q'5=$'(qAcrF((
? !=>> )   A: )B
:Bc                    | j                   s| j                  rt        d      | j                  syt	        |      t
        ur	 |j                  }| j                  |d      }|du r|D cg c]  }|dd 	 c}S |S #  t        d      xY wc c}w )z2Retrieve a list of images used on a page.
        rf  r$   rR  r   FNrn  rS  rT  s        r   get_page_imageszDocument.get_page_images  rV  rW  c           
      @   | j                   s| j                  rt        d      | j                  syt	        |      t
        ur	 |j                  }| j                  |d      }|D cg c]  }|d   |d   |d   t        |d         f }}|S #  t        d      xY wc c}w )z4Retrieve a list of XObjects used on a page.
        rf  r$   rR  r   r   r   r   )	rN  rO  r   r  r   r  rj  r  r  )r   r  rm  r   rx  s        r   get_page_xobjectszDocument.get_page_xobjects  s     >>T..;<<{{9C?jj Q'69:qtQqT1Q4ad,::		? !=>>:s   B %"BBc                 |    | j                   s| j                  rt        d      | j                  |d      d   dk(  ryy)z!Check if xref is an image object.rf  Subtyper   z/ImageTFrN  rO  r   rq  r  s     r   xref_is_imagezDocument.xref_is_image"  s=    >>T..;<<T9-a0H<r#   c                 |    | j                   s| j                  rt        d      | j                  |d      d   dk(  ryy)zCheck if xref is a font object.rf  r  r   z/FontTFr^  r  s     r   xref_is_fontzDocument.xref_is_font*  s=    >>T..;<<T6*1-8r#   c                 |    | j                   s| j                  rt        d      | j                  |d      d   dk(  ryy)z Check if xref is a form xobject.rf  r]  r   z/FormTFr^  r  s     r   xref_is_xobjectzDocument.xref_is_xobject2  s=    >>T..;<<T9-a0G;r#   r  c                     | j                   rt        d      t        |       }|t        |      vs|t        d|      vrt        d      d}d}|dk(  r|dz
  }d}| j	                  ||||      S )zCopy a page within a PDF document.

        This will only create another reference of the same page object.
        Args:
            pno: source page number
            to: put before this page, '-1' means after last page.
        rt  rn  rn  r   r   rN  r   r   r   r  r   r  r  rh  r  r0   s         r   	copy_pagezDocument.copy_page:  s~     >>.//Y
uZ((eB
++1228aBF##CVT::r#   c                     | j                   rt        d      t        |       }|t        |      vs|t        d|      vrt        d      d}d}|dk(  r|dz
  }d}| j	                  ||||      S )zMove a page within a PDF document.

        Args:
            pno: source page number.
            to: put before this page, '-1' means after last page.
        rt  rn  rn  r   r   re  rf  s         r   	move_pagezDocument.move_pageS  s~     >>.//Y
uZ((eB
++1228aBF##CVT::r#   c                    | j                   st        d      | j                  rt        d      | j                  }|dk  r||z  }|dk  r||k\  rt        d      | j	                         }| j                         }t        |      D ]%  \  }}|d   |dz   k(  s| j                  ||          ' | j                  t        |f             | j                  |       | j                          y)z% Delete one page from a PDF.
        r  rt  r   rn  r   r   N)r  r   rN  rh  get_tocr  rc  r  rr  	frozensetrt  r  )r   r  rh  tocol_xrefsr   rh  s          r   delete_pagezDocument.delete_pagek  s     {{[))>>.//__
Ag:C Ag *122 lln))+ ~ 	3GAtAw#'!%%hqk2	3 	i/0#r#   c                 N   | j                   st        d      | j                  rt        d      | j                  }dx}}|r|rt        d      |j	                  dd      }|j	                  dd      }|dk  r||z  }|dk  r|dk  r||z  }|dk  r||cxk  r|k  st        d       t        d      t        t        ||d	z               }nt        |      d
kD  s|g k(  rt        d      t        |      d
k(  rv|\  }}t        |      t        u rt        |      t        u st        d      ||kD  r||}}||cxk  r|k  st        d       t        d      t        t        ||d	z               }n<|d   }t        |      t        t        t        t
        fvrt        d      t        |      }t        t        t        t        |                  }|g k(  rt        d       y|j                          |d   dk  s|d   |k\  rt        d      t        |      }| j!                         }	t#        | j%                               D ]$  \  }
}|	|
   d
   d	z
  |v s| j'                  |       & | j)                  |       t+        |      D ]  }
| j-                  |
        | j/                          y)a	  Delete pages from a PDF.

        Args:
            Either keywords 'from_page'/'to_page', or two integers to
            specify the first/last page to delete.
            Or a list/tuple/range object, which can contain arbitrary
            page numbers.
        r  rt  rn  z*cannot mix keyword and positional argumentr  r  r   rn  r   r   z need 1 or 2 positional argumentszboth arguments must be intz$need int or sequence if one argumentznothing to deleteN)r  r   rN  rh  r  r   r   r   r   r  r  r   r!   r  r  rl  rk  rc  r  r  rr  reversedrt  r  )r   r   r  rh  r   r  rq  re   frozen_numbersrm  r   rI  s               r   delete_pageszDocument.delete_pages  s    {{[))>>.//__

A !MNN{B'Ay"%Aa%Z a%a%Z a%&J& !566 ' !566E!QUO,G4y1}
 !CDD4yA~1Q347c>$%ABBq5aqAA*
*$%9:: +$%9::aQ0G73tU";;$%KLL(s3G-.b=%&1:>WR[J6122"7+lln !7!7!9: 	,GAt1vay1}.%%d+	, 	n-'" 	!Aa 	! 	r#   c                 F    | j                  | j                  dt              S )z Save PDF incrementallyT)rA  rH  )rL  r   PDF_ENCRYPT_KEEPr   s    r   saveIncrzDocument.saveIncr  s    yyAQyRRr#   c                 D    | j                  |||||||||	|
||||||      S )z' Save PDF using some different defaults)r<  r=  r>  r?  r@  rA  rB  rC  rD  rG  rH  rI  rJ  rK  rE  )rL  )r   r  r<  r=  r>  r?  r@  rA  rB  rC  rD  rG  rH  rI  rJ  rK  rE  s                    r   ez_savezDocument.ez_save  sH     yy7%#   	r#   c                    i }|j                   }|j                  j                         D ]  \  }}| j                  |       |||<    |j	                          d}t
        j                  d       | j                  |      }t        j                  |      }|j                         D ]   \  }}||   }||_
        ||j                  |<   " |S )zMake a fresh copy of a page.NrT  )rj  r  r  rF  _eraser~  store_shrinkrn  r  r  rX  )r   r   
old_annotsr  r  r   
page_proxyrO   s           r   reload_pagezDocument.reload_page  s    
kk$$**, 	DAq $$Q'JqM	 	3~~c" ]]4(
$$& 	(DAqqME%EL"'DQ	( r#   c                     | j                         }|dk(  ry| j                  |d      }|d   dk(  ry|d   dk(  r|d   dd S y)z'Return the PDF PageMode value.
        r   NPageModer  UseNoner   r   r  rq  r   rI  rx  s      r   pagemodezDocument.pagemode  sZ     !19tZ0a5F?a5F?a59r#   r  c                    d}| j                         }|dk(  rt        d      |st        d      |d   dk(  r|dd }|D ];  }|j                         |j                         k(  s%| j                  |dd|         y	 t        d      )
zSet the PDF PageMode value.)r  UseOutlines	UseThumbs
FullScreenUseOCUseAttachmentsr   	not a PDFzbad PageMode valuer  r   Nr  Tr  r   rZ  rs  )r   r  validrI  r   s        r   set_pagemodezDocument.set_pagemode  s    `!19[))122A;#|H 	A~~1779,!!$
asG<	 -..r#   c                     | j                         }|dk(  ry| j                  |d      }|d   dk(  ry|d   dk(  r|d   dd S y)z)Return the PDF PageLayout value.
        r   N
PageLayoutr  
SinglePager   r   r  r  s      r   
pagelayoutzDocument.pagelayout  sZ     !19t\2a5F?a5F?a59r#   r  c                    d}| j                         }|dk(  rt        d      |st        d      |d   dk(  r|dd }|D ];  }|j                         |j                         k(  s%| j                  |dd|         y	 t        d      )
zSet the PDF PageLayout value.)r  	OneColumnTwoColumnLeftTwoColumnRightTwoPageLeftTwoPageRightr   r  zbad PageLayout valuer  r   Nr  Tr  )r   r  r  rI  r   s        r   set_pagelayoutzDocument.set_pagelayout,  s    m!19[))344a=C#ABJ 	A!QWWY.!!$!g>	 /00r#   c                    | j                         }|dk(  ry| j                  |d      }|d   dk(  ri S |d   dk(  r3t        |d   j                         d         }| j	                  |d      }n|d   d	k(  r|d   }nd}|dk(  s|dd
 dk(  r|dd dk(  si S dddd}|d
d j                  d      }|dd D ]!  }	 |j                         \  }}|dk(  sd||<   # |S #  |cY c S xY w)zReturn the PDF MarkInfo value.r   NMarkInfor  rI  r   Tr  r  r   <<r  >>FMarkedUserPropertiesSuspectsr  true)r  rq  r  rb  r  )r   rI  rx  rm  r  r   r  r    s           r   markinfozDocument.markinfo=  s#    !19tZ0a5F?Ia5F?r!u{{}Q'(D""4D"9CUf_Q%CC$;s2Aw$3rs8t3CI EuM!Biooc"QR 	"AWWY
U !c
	" 	s   8CC"r  c                 d   | j                         }|dk(  rt        d      |rt        |t              sydddd}t	        |j                               j                  |j                               sDdt	        |j                               j                  |j                                }t        |      d}|j                  |       |j                         D ]?  \  }}t        |      j                         }|dvrt        d| d	| d
      |d| d| z  }A |dz  }| j                  |d|       y)zSet the PDF MarkInfo values.r   r  Fr  zbad MarkInfo key(s): r  )r  falsezbad key value 'z': 'r  r  r  r  r  T)r  r   r   r  r!   r  
issupersetr'  r  r  r   rZ  rs  )r   r  rI  r  badkeyspdfdictr  r    s           r   set_markinfozDocument.set_markinfo[  s&   !19[))z(D9 EuM5::< ++HMMO<-c(--/.B.M.Mejjl.[-\]GW%%X++- 	)JCe*""$E-- ?3%tE7!!DEE3%q((G		)
 	4$
G4r#   c                     | j                   rdnd}| j                  4| j                  dk(  r|d| j                  z  z   S |d| j                  dz   S |d| j                  | j                  fz  z   S )Nzclosed r   zDocument(<new PDF, doc# %i>)z
Document('z')z!Document('%s', <memory, doc# %i>))rN  r  r   r]  r   s     r   r   zDocument.__repr__s  si    IR;;yyB9DNNJJJ4996666$))T^^9TTTTr#   c                 D   t        |      t        u r|| j                  k  ryyt        |      t        t        fvst        |      dk7  ry|\  }}t        |      t        k7  s|dk  s|| j                  k\  ryt        |      t        k7  s|dk  s|| j                  |      k\  ryy)NTFr   r   )r   r  rh  r   r  r   r  r  )r   r
  r  r  s       r   r  zDocument.__contains__|  s    9T__$9UDM)SX]MS aKt)))I!G4**733r#   r   r  c                 B    || vrt        d      | j                  |      S )Nrg  )r   rn  r   s     r   r   zDocument.__getitem__  s$    D=344~~a  r#   c                 r   | j                   st        d      t        |      t        u r| j	                  |      S t        |      t
        t        t        fv r| j                  |      S t        |      t        urt        d      | j                  }|j                  r|j                  nd}|j                  r|j                  n|}|j                  r|j                  nd}|dk  r||z  }|dk  r||k\  rt        d      |dk  r||z  }|dk  r||kD  rt        d      | j                  t        |||            S )Nr  zbad argument typer   r   rn  )r  r   r   r  ro  r  r   r   rs  slicerh  r  r  r  )r   r   pcr  r  r  s         r   __delitem__zDocument.__delitem__  s   {{[))7c>##A&&7tUE**$$Q''7%011__77qvvRqvvQaiRKE aiB;122QhBJD Qh"9122  udD!9::r#   r  r  r  c              #   P  K   |xs d}|dk  r|| j                   z  }|dk  r|t        | j                         vrt        d      ||| j                   k  r|n| j                   }|dk(  rt        d      |
||kD  rd}nd}t        |||      D ]  }| j                  |        yw)z}Return a generator iterator over a page range.

        Arguments have the same meaning as for the range() built-in.
        r   zbad start page numberNzarg 3 must not be zerorn  r   )rh  r   r   rn  )r   r  r  r  r  s        r   pageszDocument.pages  s      
aiT__$E aidoo..455 'DDOO,Ct 19566<t|d+ 	(C>>#&'	(s    B&BB&c                     | j                   S r-   )rh  r   s    r   r   zDocument.__len__  s    r#   c                 V    t        |      }|| j                  v rd| j                  |<   yy)z&Remove a page from document page dict.N)r  rV  )r   r   pids      r   _forget_pagezDocument._forget_page  s*    h$//!#'DOOC  "r#   c                     t        | dd      ry| j                  j                         D ]  }|s|j                          d} | j                  j	                          y)z,Invalidate all pages in document dictionary.rN  TN)r   rV  r#  rz  clearr   r   s     r   r  zDocument._reset_page_refs  sP    4d+OO**, 	D	 	r#   c                     | j                          | j                  j                         D ]  }d | j                  |<    i | _        i | _        i | _        g | _        d | _        d | _        d| _        y NT)	r  rR  r  rS  rT  r  rQ  r  rN  )r   r  s     r   _cleanupzDocument._cleanup  sj    $$& 	%A $DNN1	%!r#   c                     t        | dd      rt        d      | j                          t        | dd      r| j                  |        yt	        d      )zClose the document.rN  Frt  r   Nzdocument object unavailable)r   r   r  __swig_destroy__r  r   s    r   closezDocument.close  sL    4e,.//4E*!!$'<==r#   c                     t        |       t        ury | j                          t        | dd      r| j	                  |        y y Nr   F)r   rA  r  r   r  r   s    r   r  zDocument.__del__  s9    DzX%4E*!!$' +r#   c                     | S r-   r$   r   s    r   	__enter__zDocument.__enter__      r#   c                 $    | j                          y r-   r  r>  s     r   __exit__zDocument.__exit__      

r#   )NNNNr   r   r  NNNNNNNNN)r   rn  r   r-   r   )Nr   r   r  )r   r   r   r   r   r   r   r   r   r   r   r   r     NN)FFFFFFFFFFFFr   r  NN)	rn  rn  rn  rn  r   r   r   r   N)rn  rn  rn  rn  TTr   r   )rn  r@  r>  r   )r   r   Nr  )FF)r   Nr   r   )rn  NNr   NN)NNNNN)rn  r   NNF)r   FTTTFFFFFr   r  NNT)r   r  r  r  )r   r  )r   r   r6   r   r   r   r   r   delete_Documentr  r   rn  rr  rv  r{  r  r  r  rq  rs  r  r  r  r  r  r  r  r  r  typingUnionr  r   r  r  r  r  r  r  r  OptBytesOptStrr  
ByteStringr  r`  rh  r  r  r  r  r  r  r  r  r^  r  r  r  r  r  r  r  r  r  r  r  r  r$  r'  r*  r-  r4  r8  rL  rP  r`  ri  rl  rq  rt  rI  ry  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rY  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r/  r3  r6  r;  r&  rB  rF  r_  outlinerU  rY  r[  r_  ra  rc  rg  ri  ro  rs  rv  rx  r~  r  r  r  r  r  r  r  r   AnyTyper  OptIntr  r   r  r  r  r  r  r  r  r$   r#   r   rA  rA    sS   -/IOdeGH,,TQr@>15G68<C==6AY:Zt 	v||CH'= 	# 	)s )&S#X 6 &c3h!7 D ,	*S#X 6 	*5 	* 04/304+/	S#X 6 %-'- )/ $*	 6:	6 1515,0   V->->  (. )/  %+  7; FO / / 2 2 2 2@; ; CG6 / / - -;@ 
76 2 2802 2 2 + + - -; 6 6 0 0<("Z6 */;@=BSW#	 3lq."60 03;45:311;;7^3:<I89<1 0 0 . .=510565?IHd H HS H:6DO3;b5/E6/\dA5H-M?{ 12G# T T $3 d d $S T ";S ;c ;2;S ;c ;0 s  6@ FS
 27599>,0+/	.0 #  /S /" C  1 1" $  :T d 0U# U4 .!S !f !;W ;t ;0(6 (v (6 (8 ( 
	>(r#   rA  c                   |   e Zd Z ed d d      Zd ZeZej                  Z
d Z eed      ZddZd	 ZddZddZddededdfdZed        ZddZddZddZd ZddZd ZddZd ZddZddZd Zd Z d Z!dd Z"ede#fd!       Z$ede#fd"       Z%d#e&dd$fd%Z'ddd&Z(ddd'Z)	 	 d	 dd(Z*	 	 d	 dd)Z+d*edd$fd+Z,d*edd$fd,Z-dd#e&d-e.d.e.dd$fd/Z/d0e&d1e&dd$fd2Z0d3e1dd$fd4Z2d3e1dd$fd5Z3dd*ed6edd$fd7Z4d8e1dd$fd9Z5	 	 	 dd#e&d:e6jn                  d;e.d<e8d=e8d.e8dd$fd>Z9	 	 	 	 dd*ed-e.d?e:d@e8dAe;dBe;dCe;dDedEedd$fdFZ<	 	 	 dd-e8d@e8d?e:dDedGe;dBe;dHe=dd$fdIZ>dJ Z?dK Z@dL ZAdM ZBdNeCde8fdOZDde1fdPZEdQ ZFdR ZGdSe6j                  e.ef   dd$fdTZIdUeJdd$fdVZKdW ZLddXZMddYe=de1fdZZN G d[ d\eO      ZP G d] d^eO      ZQdeOfd_ZRdd`ZSddaZTdb ZUdc ZVdddZWde ZXdf ZY eeYdg      ZZedh        Z[edi        Z\dj Z]dk Z^edl        Z_edm        Z`dn Zaedo        Zbedp        Zcedq        Zdedr        Zeds Zfdt Zgdu Zhdv Zidw Zjedx        Zkdy Zldz Zmdd{Zndd|Zodd}Zpd~ Zq	 	 ddZrd Zsed        Ztd Zudedd
fdZved        Zwd ZxddZyddZzddZ{d Z|d Zd Z}ed        Z~d Zd ZddZddZd Zd Zed        Zy
)r  c                 6    | j                   j                         S r-   rC  r  s    r   r}  zPage.<lambda>  rD  r#   c                 8    | j                   j                  |      S r-   rC  rF  s     r   r}  zPage.<lambda>  rG  r#   rH  rI  c                     t        d      NzNo constructor definedr   r   r   kwargss      r   r   zPage.__init__      566r#   c                    t        |        t        j                  |       }t        |      }|j                  r| j
                  j                  r| j                  }|j                  |j                  }}| j                  dvr||}}t        dd||      }t        j                  d      j                         d   }t        |t        j                          |S )zGet page rectangle.)r   r  r   F)r  rn  r/  )r  r   
Page_boundr  rQ  rX  r  cropboxrm  rn  r  r~  mupdf_warningsr+  r  r3  r:  )r   rm  cbr  r   rb  s         r   boundz
Page.bound  s    Dt$3i??t{{11B88RYYqA}}H,!1q!Q"C&&U&3>>@DC#CJJ' 
r#   zpage rectanglec           	      >   t        |        | j                  }|j                  s|j                  rt	        d      t        dddd      }t               }|r||f}n|}t        |      t        t        fv r"t        |d         t        urt	        d      |}nd|j                  | j                  d      D cg c]  }||d   k(  s| }	}t        |	      dk(  r|	d   }n|	g k(  rt	        d      t	        d	|z        |d   }
|
dk7  s|dk(  r	 | j                  ||
      d   S t        j                   | ||      }t#        |      s|S |D ]  }|d   |d   k7  rt%        |d         }|j&                  }|dk(  r|} |}|S t        t)        |j*                  |j,                              }t/        |j*                  |j0                  z
        }t/        |j2                  |j0                  z
        }t        d|z  ddd|z  dd      }||z   }||f} |}|S  |}|S c c}w #  |cY S xY w)zGet rectangle occupied by image 'name'.

        'name' is either an item of the image list, or the referencing
        name string - elem[7] of the resp. item.
        Option 'transform' also returns the image transformation matrix.
        rf  r   rn  z!need item of full page image listTr  r   zbad image namez!found multiple images named '%s'.)r  )r  rX  rN  rO  r   r  r|   r   r  r   r  rY  rj  r   get_image_rectsr   Page_get_image_bboxr   rc  rY   rL   r  r  r   r  r  )r   r   r  r\  inf_rectnull_matrx  rh  r   imglistrI  rm  r   r  r  hmr   r  m0r   s                       r   get_image_bboxzPage.get_image_bbox'  sC    	Dkk==C,,;<<1b"%8H%BB:$&R>S( !DEED"%"5"5dkk4"HYQDTUVWTXLqYGY7|q qzB !122 !Dt!KLLBx19	T) ++DI+FqII
 ''dI>CyI 	AttBxQqT
A66DA~ 
 add34BADD144K AADD144K AAq!QUAq1Br'
AB
%	  
M Z s   3HH	H Hc                 F    t        |        t        j                  | ||      S )zRun page through a device.)r  r   Page_run)r   dwr   s      r   runzPage.runi  s    D~~dB**r#   Nc                 2    t        j                  | |||      S r-   )r   Page_extend_textpage)r   tpager  r\   s       r   extend_textpagezPage.extend_textpagep  s    ))$ufEEr#   c                 D    t        j                  | |||      }d|_        |S r  )r   Page__get_textpager   )r   r  r  r\   rm  s        r   _get_textpagezPage._get_textpages  s$    &&tT5&A
r#   r  r  r  TextPagec                 @   t        |        |t        dd      }| j                  }|dk7  r| j                  d       	 | j	                  |||      }|dk7  r| j                  |       	 t        j                  |       |_        |S # |dk7  r| j                  |       w w xY w)Nr   r   )r  r\   )r  r|   r  r  r  r  r  rX  )r   r  r  r\   r  textpages         r   get_textpagezPage.get_textpagez  s    D>Aq\F}}1a 	0))$eF)KHq !!,/!--- q !!,/ !s   B Bc                 ,    t        j                  |       S )zPage language.)r   Page_languager   s    r   r  zPage.language      
 ""4((r#   c                 D    t        |        t        j                  | |      S )zSet PDF page default language.)r  r   Page_set_languager  s     r   r  zPage.set_language      D&&tX66r#   c                 F    t        |        t        j                  | ||      S )zMake SVG image from page.)r  r   Page_get_svg_image)r   r\   text_as_paths      r   get_svg_imagezPage.get_svg_image  s    D''flCCr#   c                    |dk\  r|dk\  r|d k(  ry t        t        t        |d      dz              }|dk\  rd}t        t        t        |d      dz              }|dk\  rd}d||fz  }t        j                  | ||||      S )Nr   r   rT  rS  zfitzca%02i%02i)r  r   r   r   Page__set_opacity)r   gstateCAca	blendmodetCAtcas          r   _set_opacityzPage._set_opacity  s    7rQw9#4%Bc)*+#:C%B
S()*#:C!S#J. &&tVRYGGr#   c                 .    t        j                  | |      S r-   )r   Page__add_caret_annot)r   rl   s     r   _add_caret_annotzPage._add_caret_annot  s    **477r#   c           	      8    t        j                  | ||||||      S r-   )r   Page__add_redact_annot)r   rh  rw   da_stralignfillr<  s          r   _add_redact_annotzPage._add_redact_annot  s     ++D$feTS]^^r#   c                 0    t        j                  | ||      S r-   )r   Page__add_line_annot)r   r  r  s      r   _add_line_annotzPage._add_line_annot  s    ))$B77r#   c                 2    t        j                  | |||      S r-   )r   Page__add_text_annot)r   rl   rw   icons       r   _add_text_annotzPage._add_text_annot  s    ))$tTBBr#   c                 .    t        j                  | |      S r-   )r   Page__add_ink_annot)r   r  s     r   _add_ink_annotzPage._add_ink_annot  s    ((t44r#   c                 0    t        j                  | ||      S r-   )r   Page__add_stamp_annot)r   rY   stamps      r   _add_stamp_annotzPage._add_stamp_annot  s    **4u==r#   c           	      8    t        j                  | ||||||      S r-   )r   Page__add_file_annot)r   rl   r  r  r  r  r"  s          r   _add_file_annotzPage._add_file_annot  s!    ))$vxTXZ^__r#   c                     t        |        | j                  j                  st        d      t	        j
                  | ||      }|sy t        j                  |       |_        || j                  t        |      <   |S )Nr  )
r  rX  r  r   r   Page__add_text_markerr  r  r  r  )r   r  
annot_typerm  s       r   _add_text_markerzPage._add_text_marker  se    D{{!![))))$zB]]4(
$'C!
r#   c                 0    t        j                  | ||      S r-   )r   Page__add_square_or_circle)r   rY   r0  s      r   _add_square_or_circlezPage._add_square_or_circle  s    //dJGGr#   c                 0    t        j                  | ||      S r-   )r   Page__add_multiline)r   pointsr0  s      r   _add_multilinezPage._add_multiline  s    ((vzBBr#   c
                    t        j                  | |||||||||	
      }
|
j                         }|j                  d      }|j                  d      dz   }||| }|d   |d   z
  }|d   |d   z
  }|	dv r||}}d||fz  }|d	z   |z   }d }d
}t	        |d      j                         }|r|dz  }d}t	        |d      j                         }|r	|dz  }d}d}|r|rd}|d k7  r||z   |z   |z   dz   |z   dz   |z   }|
j                  |       |
S )N   BT   ETr   r   r   r   )rI  i     0 0 %g %g re   
W
n
r#   r      
   fr   s   1 w
   S   B)r   Page__add_freetext_annot_getAPfindr  r  _setAP)r   rY   rw   ry   rx   r<  r9  r,  r  r  rm  apBTETr  r   r  opebwidthfill_stringstroke_strings                        r   _add_freetext_annotzPage._add_freetext_annot  s^   ,,T4xS]_ikwy~  AG  HZZ\WWU^WWU^a2YGDGOGDGO^#aqA1v%+"
C07795 KC!,4;;=U"MFC=C$;+%5:UBSH5PSUUB

2 
r#   c                 >    t        t        j                  |             S )zReflects page rotation.)r|   r~  _rotate_matrixr   s    r   rotation_matrixzPage.rotation_matrix  s     e**4011r#   c                 >    t        t        j                  |             S )zReflects page de-rotation.)r|   r~  _derotate_matrixr   s    r   derotation_matrixzPage.derotation_matrix  s     e,,T233r#   rl   struct Annot *c                     t        |       }	 | j                  |      }|dk7  r| j                  |       	 t        | |       |S # |dk7  r| j                  |       w w xY w)zAdd a 'Caret' annotation.r   )r  r  r  r  )r   rl   r  rO   s       r   add_caret_annotzPage.add_caret_annot  se    '-	0))%0Eq !!,/$& q !!,/ !   A Ac                 h    |t        | |||      }nt        |      }| j                  |t              S )zAdd a 'StrikeOut' annotation.r  r  r  )r  r  r1  PDF_ANNOT_STRIKE_OUTr   r  r  r  r  r  s         r   add_strikeout_annotzPage.add_strikeout_annot  s5    ='E4PAu%A$$Q(<==r#   c                 h    |t        | |||      }nt        |      }| j                  |t              S )zAdd a 'Underline' annotation.rZ  )r  r  r1  PDF_ANNOT_UNDERLINEr\  s         r   add_underline_annotzPage.add_underline_annot  s5    ='E4PAu%A$$Q(;<<r#   c                 h    |t        | |||      }nt        |      }| j                  |t              S )zAdd a 'Squiggly' annotation.rZ  )r  r  r1  PDF_ANNOT_SQUIGGLYr\  s         r   add_squiggly_annotzPage.add_squiggly_annot$  s7     ='E4PAu%A$$Q(:;;r#   c                 h    |t        | |||      }nt        |      }| j                  |t              S )zAdd a 'Highlight' annotation.rZ  )r  r  r1  PDF_ANNOT_HIGHLIGHTr\  s         r   add_highlight_annotzPage.add_highlight_annot.  s7     ='E4PAu%A$$Q(;<<r#   rY   c                     t        |       }	 | j                  |t              }|dk7  r| j                  |       	 t	        | |       |S # |dk7  r| j                  |       w w xY w)z&Add a 'Square' (rectangle) annotation.r   )r  r4  PDF_ANNOT_SQUAREr  r  r   rY   r  rO   s       r   add_rect_annotzPage.add_rect_annot8  h    '-	0..t5EFEq !!,/$& q !!,/ !   A A!c                     t        |       }	 | j                  |t              }|dk7  r| j                  |       	 t	        | |       |S # |dk7  r| j                  |       w w xY w)z*Add a 'Circle' (ellipse, oval) annotation.r   )r  r4  PDF_ANNOT_CIRCLEr  r  ri  s       r   add_circle_annotzPage.add_circle_annotD  rk  rl  rw   r"  c                     t        |       }	 | j                  |||      }|dk7  r| j                  |       	 t        | |       |S # |dk7  r| j                  |       w w xY w)z&Add a 'Text' (sticky note) annotation.)r"  r   )r  r#  r  r  )r   rl   rw   r"  r  rO   s         r   add_text_annotzPage.add_text_annotP  sl    '-	0((4(@Eq !!,/$& q !!,/ !s   A Ar  r  c                     t        |       }	 | j                  ||      }|dk7  r| j                  |       	 t        | |       |S # |dk7  r| j                  |       w w xY w)zAdd a 'Line' annotation.r   )r  r  r  r  )r   r  r  r  rO   s        r   add_line_annotzPage.add_line_annot\  sg    '-	0((R0Eq !!,/$& q !!,/ !   A Ar7  c                     t        |       }	 | j                  |t              }|dk7  r| j                  |       	 t	        | |       |S # |dk7  r| j                  |       w w xY w)zAdd a 'PolyLine' annotation.r   )r  r8  PDF_ANNOT_POLY_LINEr  r  r   r7  r  rO   s       r   add_polyline_annotzPage.add_polyline_annoth  sh    '-	0''0CDEq !!,/$& q !!,/ !rl  c                     t        |       }	 | j                  |t              }|dk7  r| j                  |       	 t	        | |       |S # |dk7  r| j                  |       w w xY w)zAdd a 'Polygon' annotation.r   )r  r8  PDF_ANNOT_POLYGONr  r  rw  s       r   add_polygon_annotzPage.add_polygon_annott  sh    '-	0''0ABEq !!,/$& q !!,/ !rl  r)  c                     t        |       }	 | j                  ||      }|dk7  r| j                  |       	 t        | |       |S # |dk7  r| j                  |       w w xY w)z$Add a ('rubber') 'Stamp' annotation.r   )r  r*  r  r  )r   rY   r)  r  rO   s        r   add_stamp_annotzPage.add_stamp_annot  sg    '-	0))$6Eq !!,/$& q !!,/ !rt  handwritingc                     t        |       }	 | j                  |      }|dk7  r| j                  |       	 t        | |       |S # |dk7  r| j                  |       w w xY w)znAdd a 'Ink' ('handwriting') annotation.

        The argument must be a list of lists of point_likes.
        r   )r  r&  r  r  )r   r~  r  rO   s       r   add_ink_annotzPage.add_ink_annot  sg    
 (-	0''4Eq !!,/$& q !!,/ !rX  r  r  r  r  c                     t        |       }	 | j                  ||||||      }|dk7  r| j                  |       	 t        | |       |S # |dk7  r| j                  |       w w xY w)z"Add a 'FileAttachment' annotation.)r  r  r"  r   )r  r-  r  r  )	r   rl   r  r  r  r  r"  r  rO   s	            r   add_file_annotzPage.add_file_annot  s     (-		0(( "+!! ) #E q !!,/$& q !!,/ !s   A	 	A"ry   rx   r,  r<  r9  r  r  c
                     t        |       }
	 | j                  |||||||||		      }|
dk7  r| j                  |
       	 t        | |       |S # |
dk7  r| j                  |
       w w xY w)zAdd a 'FreeText' annotation.)ry   rx   r,  r<  r9  r  r  r   )r  rN  r  r  )r   rY   rw   ry   rx   r,  r<  r9  r  r  r  rO   s               r   add_freetext_annotzPage.add_freetext_annot  s     (-	0,,T4(%LJ)v - GE q !!,/$& q !!,/ !s   A A%r  	cross_outc	                 B   d}	|rt        |       t        |       |sd}|sd}|sd}t        |d      r|||f}t        |      dkD  r|dd }d}
 |
j                  |||d}	|d	}|r$t        |d      r|||f}t        |      dkD  r|dd }t	        |       }	 | j                  |||	||
      }|dk7  r| j                  |       	 t        | |       |r|j                         j                         dd }|\  }}}}}|j                  |       |j                  |       |j                  |       |j                  |       |j                  |       |j                  d       dj                  |      }|j                  |d       |S # |dk7  r| j                  |       w w xY w)zAdd a 'Redact' annotation.Nr+  r  r*  r   r   rx  r{  r   r   r   )rw   r  r  r  r   rn  rA  r?  )rL  r   r   r|  r  r  r  r  rD  r+  r  r2  rF  )r   rh  rw   rx   ry   r  r  r<  r  r  r  r  rO   ap_tabrd  LLLRURULrG  s                       r   add_redact_annotzPage.add_redact_annot  s    tz"!&
z;/(*jA
:"'^
5CSZZx8DF| 4- $-Dt9q=8D'-	0**4d6" + /E q !!,/$& \\^..0"5F &Ar2r2MM"MM"MM"MM"MM"MM$F#BLLQ# q !!,/ !s   F Fc                 0    t        j                  | ||      S r-   )r   Page__load_annotr   r   rI  s      r   _load_annotzPage._load_annot  s    %%dD$77r#   c                    t        |        t        j                  | |      }|s|S d|_        t	        j
                  |       |_        || j                  t        |      <   t               }t        j                  ||       |}|S )zLoad a widget by its xref.T)r  r   Page_load_widgetr   r  r  rX  r  r  r'  r~  _fill_widget)r   rI  rm  widgets       r   load_widgetzPage.load_widget  sv     	D $$T40J]]4(
$'C!3' 
r#   c                 ,    t        j                  |       S r-   )r   Page__get_resource_propertiesr   s    r   _get_resource_propertieszPage._get_resource_properties  s    22488r#   c                 0    t        j                  | ||      S r-   )r   Page__set_resource_propertyr  s      r   _set_resource_propertyzPage._set_resource_property  s    00tTBBr#   r+  c                 |   |d k(  s|dk(  ry | j                   }|j                  |d      }d|v sd|v st        d      i }| j                         D ]
  \  }}|||<    ||j	                         v r||   S d}d|z  }||j                         v r|dz  }d|z  }||j                         v r| j                  ||       |S )	Nr   Tr  	/Type/OCG
/Type/OCMDzbad optional content: 'oc'zMC%ir   )rX  r  r   r  r  r#  r  )	r   r+  r\  checkpropsrd   r  r   mcs	            r   _get_optional_contentzPage._get_optional_content  s    :qkkt4u$(=9::113 	DAqE!H	9aZELLN"FA!B ELLN" 	##B+	r#   c                     g }| j                         D ]E  \  }}| j                  j                  |d      }d|v rd}nd|v rd}n2|j                  |||f       G |S )zGet OCGs and OCMDs used in the page's contents.

        Returns:
            List of items (name, xref, type), where type is one of "ocg" / "ocmd",
            and name is the property name.
        Tr  r  ocgr  ocmd)r  rX  r  r  )r   rx  pnamerI  rw   octypes         r   get_oc_itemszPage.get_oc_items+  su     88: 	-KE4;;**4D*ADd"%IIudF+,	- 	r#   c                 B    t        |        t        j                  |       S )z/List of names of annotations, fields and links.)r  r   Page_annot_namesr   s    r   annot_nameszPage.annot_names?      D%%d++r#   c                 B    t        |        t        j                  |       S )z6List of xref numbers of annotations, fields and links.)r  r   Page_annot_xrefsr   s    r   annot_xrefszPage.annot_xrefsF  r  r#   identc                 (   t        |        t        |      t        u rd}|}n!t        |      t        u r|}d}nt	        d      | j                  ||      }|s|S d|_        t        j                  |       |_	        || j                  t        |      <   |S )zLoad an annot by name (/NM key) or xref.

        Args:
            ident: identifier, either name (str) or xref (int).
        r   Nz$identifier must be string or integerT)r  r   r   r  r   r  r   r  r  rX  r  r  )r   r  rI  r   rm  s        r   
load_annotzPage.load_annotM  s     	D;#DD%[CDDCDDtT*J]]4(
$'C!
r#   r  c                    t        |        | j                  }|j                  st        d      |j	                          | j                  |j                  |j                        }|syd|_        t        j                  |       |_        || j                  t        |      <   |j                  |_        ||_        |j                          |S )zAdd a 'Widget' (form field).r  NT)r  rX  r  r   rS  
_addWidgetr7  r2  r   r  r  r  r  r}  r  )r   r  r\  rO   s       r   
add_widgetzPage.add_widgeti  s    Dkkzz[)) 1 163D3DE}}T*&+E#r#   c                 0    t        j                  | ||      S r-   )r   Page__addWidget)r   r7  r2  s      r   r  zPage._addWidget|  s    $$T:zBBr#   c                 V    t        |        t        j                  | |      }d|_        |S )zjMake a DisplayList from the page for Pixmap generation.

        Include (default) or exclude annotations.T)r  r   Page_get_displaylistr   )r   rX  rm  s      r   get_displaylistzPage.get_displaylist  s,     	D ((v6
r#   extendedc                 H   d}| j                  |      }t        t        |            D ]  }||   }|d   j                  d      st	        |d         |d<   nt	        |d         |d<   |d   dk7  r|d   }g }|D ]s  }|d	   }	|d
d }
|	dk(  rdt	        |
d	         |
d
   f}n<|	dk(  rdt        |
d	         f}n&t        |	g|
D cg c]  }t        |       c}z         }|j                  |       u ||d<   |d   dv r|D ]  }|j                  |      ||<    ||<    |S c c}w )a@  Retrieve vector graphics. The extended version includes clips.

        Note:
        For greater comfort, this method converts point-like, rect-like, quad-like
        tuples of the C version to respective Point / Rect / Quad objects.
        It also adds default items that are missing in original path types.
        )
	closePathr  r  rm  lineCaplineJoindashesstroke_opacityfill_opacityeven_oddr  r   r  rY   scissorr  r  r   r   Nr  qur{  )
get_cdrawingsr   r   r  r  rc  r   r  r  r  )r   r  allkeysrm  r   npathr  newitemsrh  cmdrestr  s               r   get_drawingszPage.get_drawings  sd      ( 3s3x 	AFE=++F3 $U6] 3f#'i(8#9i V}g%g! 	*Dq'C8Dt $d47mT!W= $d47m4$cU-E1eAh-E%EFOOD)	* "*gV}
*  ,A$yy|E!H,CF/	0 
 .Fs   Dc                       e Zd ZdZd Zy)Page.Drawpathz0Reflects a path dictionary from get_cdrawings().c                 :    | j                   j                  |       y r-   )r/   r  r>  s     r   r   zPage.Drawpath.__init__  s    MM  &r#   Nr  r$   r#   r   Drawpathr    s
    >	'r#   r  c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	Page.Drawpathlistz9List of Path objects representing get_cdrawings() output.c                 f    g | _         d| _        d| _        d| _        d| _        d| _        d| _        y r   )paths
path_countgroup_count
clip_count
fill_countstroke_countfillstroke_countr   s    r   r   zPage.Drawpathlist.__init__  s6    DJDO DDODO !D$%D!r#   c                    | j                   j                  |       | xj                  dz  c_        |j                  dk(  r| xj                  dz  c_        y |j                  dk(  r| xj
                  dz  c_        y |j                  dk(  r| xj                  dz  c_        y |j                  dk(  r| xj                  dz  c_        y |j                  dk(  r| xj                  dz  c_        y y )Nr   r  r  r   r   fs)	r  r  r  r   r  r  r  r  r  )r   r5  s     r   r  zPage.Drawpathlist.append  s    JJd#OOq OyyF"1$g%  A% c!1$c!!!Q&!d"%%*% #r#   c           	         || j                   k\  rt        d      |dk  r|| j                   z  }|dk  r| j                  |   j                  }t	        t        | j                  d| D cg c]"  }|j                  dk(  r|j                  |k  r|$ c}            }|g k(  rg S |d   g}|dd D ]0  }|j                  |d   j                  k\  r |j                  |       2 |S c c}w )zReturn list of parent clip paths.

            Args:
                i: (int) return parents of this path.
            Returns:
                List of the clip parents.bad path indexr   Nr  r   rn  r  r   r  levelr  rq  r   r  )r   r   lvlrd   clipsnclipss         r   clip_parentszPage.Drawpathlist.clip_parents  s     DOO# !122a%T__$ a%**Q-%%C "&BQ66V+# E {	AhZF12Y !77fRj...a ! M   )'C"c           	         || j                   k\  rt        d      |dk  r|| j                   z  }|dk  r| j                  |   j                  }t	        t        | j                  d| D cg c]"  }|j                  dk(  r|j                  |k  r|$ c}            }|g k(  rg S |d   g}|dd D ]0  }|j                  |d   j                  k\  r |j                  |       2 |S c c}w )zReturn list of parent group paths.

            Args:
                i: (int) return parents of this path.
            Returns:
                List of the group parents.r  r   Nr  r   rn  r  )r   r   r  rd   groupsngroupss         r   group_parentszPage.Drawpathlist.group_parents  s     DOO# !122a%T__$ a%**Q-%%C "&BQ66W,3 F |	aykGABZ "77gbk///q!" Nr  c                 8    | j                   j                  |      S r-   )r  r   )r   rh  s     r   r   zPage.Drawpathlist.__getitem__  s    ::))$//r#   c                 6    | j                   j                         S r-   )r  r   r   s    r   r   zPage.Drawpathlist.__len__  s    ::%%''r#   N)
r   r   r6   r7   r   r  r  r  r   r   r$   r#   r   Drawpathlistr    s#    G	&	+	<	<	0	(r#   r  c                    | j                  d      }| j                         }|D ]*  } | j                  di |}|j                  dk7  rt	        |d         |_        nt	        |d         |_        |j                  dk7  r|d   }g }|D ]s  }|d   }|d	d
 }	|dk(  rdt	        |	d         |	d	   f}n<|dk(  rdt        |	d         f}n&t        |g|	D 
cg c]  }
t        |
       c}
z         }|j                  |       u ||_        |j                  dk(  r*d
|_        d
|_        d
|_        d
|_        d
|_        d
|_        |j                  |       - d
}|S c c}
w )aX  Get page drawings paths.

        Note:
        For greater comfort, this method converts point-like, rect-like, quad-like
        tuples of the C version to respective Point / Rect / Quad objects.
        Also adds default items that are missing in original path types.
        In contrast to get_drawings(), this output is an object.
        Tr  r  rY   r  r  r  r   r   Nr  r  r   r$   )r  r  r  r   r  rY   r  rc  r   r  r  r  r  r  r  r  r  rm  )r   rm  r  r5  r  r  r  rh  r  r  r   s              r   get_lineartzPage.get_lineart  sr      $ /!!# 	 D!DMM)D)EzzV#!$v,/
 $T)_ 5zzW$W! 	*Dq'C8Dt $d47mT!W= $d47m4$cU-E1eAh-E%EFOOD)	* 'zzS '+$#!% $""LL;	 >  .Fs   Ec                     t        |        | j                  }|dk7  r| j                  d       t        j                  | |||      }|dk7  r| j                  |       |S )z3Extract vector graphics ("line art") from the page.r   )r  r  r  r   Page_get_cdrawings)r   r  callbackmethodr  rm  s         r   r  zPage.get_cdrawingsE  s`     	D}}1a  &&tXxH1l+ 
r#   c                     t        |        | j                  }|dk7  r| j                  d       t        j                  | |      }|dk7  r| j                  |       |S r   )r  r  r  r   Page_get_bboxlog)r   layersr  rm  s       r   get_bboxlogzPage.get_bboxlogW  sZ    D}}1a  $$T621l+ 
r#   c                     t        |        | j                  }|dk7  r| j                  d       t        j                  |       }|dk7  r| j                  |       |S r   )r  r  r  r   Page_get_texttrace)r   r  rm  s      r   get_texttracezPage.get_texttraceh  sX    D}}1a  &&t,1l+ 
r#   c                 .    t        j                  | g| S r-   )r   Page__apply_redactionsr>  s     r   _apply_redactionszPage._apply_redactionsy  s    ++D8488r#   c           	      8    t        j                  | ||||||      S r-   )r   Page__makePixmap)r   r\  ctmcsalpharX  r  s          r   _makePixmapzPage._makePixmap|  s    %%dCb%NNr#   c                 D    t        |        t        j                  | |      S )zSet the MediaBox.)r  r   Page_set_mediaboxr   rY   s     r   set_mediaboxzPage.set_mediabox  s    D&&tT22r#   c                    t        |        t        j                  |       }|rd|_        t	        j
                  |       |_        || j                  t        |      <   | j                  j                  rD| j                         D cg c]  }|d   t        k(  s| c}d   }|d   |_        |d   |_        |S d|_        d|_        |S c c}w )zGet first Link.Tr   r   r   r   )r  r   Page_load_linksr   r  r  rX  r  r  r  r  PDF_ANNOT_LINKrI  )r   rm  r  link_ids       r   
load_linkszPage.load_links  s    D##D)CK t,CJ(+DRW%{{!!&*&6&6&8SAaDN<R1STUV"1:  
	  
 Ts   CCzFirst link on pagec                     t        |        t        j                  |       }|r9d|_        t	        j
                  |       |_        || j                  t        |      <   |S )zFirst annotation.T)	r  r   Page_first_annotr   r  r  rX  r  r  r  s     r   first_annotzPage.first_annot  sQ     	D$$T*CK t,CJ(+DRW% 
r#   c                     t        |        t        j                  |       }|r[d|_        t	        j
                  |       |_        || j                  t        |      <   t               }t        j                  ||       |}|S )zFirst widget/field.T)r  r   Page_first_widgetr   r  r  rX  r  r  r'  r~  r  r   rm  r  s      r   first_widgetzPage.first_widget  sm     	D%%d+CK t,CJ(+DRW%XFsF+C 
r#   c                     t        |        t        j                  | |      }|d   dk(  ry	 |d   }| j                  |   }|j	                          |S #  Y |S xY w)zDelete a Link.rI  r   Nr  )r  r   Page_delete_linkr  rz  )r   linkdictrm  linkidlinkobjs        r   delete_linkzPage.delete_link  sk    D$$T84Fq &	d^F&&v.GNN
 
		 
s   $A Ac                     t        |        t        |       t        j                  | |      }|rCd|_        t	        j
                  |       |_        ||j                  j                  t        |      <   |S )z!Delete annot and return next one.T)	r  r   Page_delete_annotr   r  r  rX  r  r  )r   rO   rm  s      r   delete_annotzPage.delete_annot  s_     	DE%%dE2CK t,CJ.1CJJ""2c7+ 
r#   c                 n    t        |        t        j                  |       }t        t	        |            }|S )zThe MediaBox.)r  r   Page_mediaboxr  r  r  s     r   mediaboxzPage.mediabox  s/     	D!!$'9S>"
r#   c                 n    t        |        t        j                  |       }t        t	        |            }|S )zThe CropBox.)r  r   Page_cropboxr  r  r  s     r   r  zPage.cropbox  s/     	D  &9S>"
r#   c                 .    t        j                  | |      S r-   )r   Page__other_box)r   boxtypes     r   
_other_boxzPage._other_box  s    $$T733r#   c                 .    | j                   j                  S r-   )r  rd  r   s    r   cropbox_positionzPage.cropbox_position  s    ||r#   c                     | j                  d      }|dk(  r| j                  S | j                  }t        |d   |j                  |d   z
  |d   |j                  |d   z
        S )z
The ArtBoxArtBoxNr   r   r   r   r&	  r  r 	  r  r  r   rY   mbs      r   artboxzPage.artbox   s]     x(4<<<]]DGRUUT!W_d1gruutAwGGr#   c                     | j                  d      }|dk(  r| j                  S | j                  }t        |d   |j                  |d   z
  |d   |j                  |d   z
        S )zThe TrimBoxTrimBoxNr   r   r   r   r+	  r,	  s      r   trimboxzPage.trimbox	  s]     y)4<<<]]DGRUUT!W_d1gruutAwGGr#   c                     | j                  d      }|dk(  r| j                  S | j                  }t        |d   |j                  |d   z
  |d   |j                  |d   z
        S )zThe BleedBoxBleedBoxNr   r   r   r   r+	  r,	  s      r   bleedboxzPage.bleedbox  s]     z*4<<<]]DGRUUT!W_d1gruutAwGGr#   c                 ~   | j                   }|d k(  rt        d      |j                  st        d      d}||vrt        d      t        |      }| j                  }t        |d   |j
                  |d   z
  |d   |j
                  |d   z
        }|j                  |j                  cxk  r|j                  cxk  r|j                  k  r>n n;|j                  |j                  cxk  r|j
                  cxk  r|j
                  k  sn t        | d	      |j                  | j                  |d
t        |      z         y )Nr~  r  )CropBoxr3	  r0	  r*	  zbad boxtyper   r   r   r   z not in MediaBox[%g %g %g %g])rX  r   r  r  r 	  r  r   r  r  rs  rI  r   )r   r%	  rY   r\  valid_boxesr-	  s         r   _set_pageboxzPage._set_pagebox  s   kk$;>??zz[))B+%]++Dz]]DGRUUT!W_d1gruutAwG34773bee38[4778[VXV[V[8[y(89::G_uT{-JKr#   c                 &    | j                  d|      S )z,Set the CropBox. Will also change Page.rect.r6	  r9	  r	  s     r   set_cropboxzPage.set_cropbox1        D11r#   c                 &    | j                  d|      S )zSet the ArtBox.r*	  r;	  r	  s     r   
set_artboxzPage.set_artbox5  s      400r#   c                 &    | j                  d|      S )zSet the BleedBox.r3	  r;	  r	  s     r   set_bleedboxzPage.set_bleedbox9  s      T22r#   c                 &    | j                  d|      S )zSet the TrimBox.r0	  r;	  r	  s     r   set_trimboxzPage.set_trimbox=  r=	  r#   c                 B    t        |        t        j                  |       S )zPage rotation.)r  r   Page_rotationr   s    r   r  zPage.rotationA       	D""4((r#   c                 D    t        |        t        j                  | |      S )zSet page rotation.)r  r   Page_set_rotation)r   r  s     r   r  zPage.set_rotationJ  r  r#   c                 D    t        |        t        j                  | |      S )z&Add links from list of object sources.)r  r   Page__addAnnot_FromString)r   linklists     r   _addAnnot_FromStringzPage._addAnnot_FromStringQ  s    D..tX>>r#   c                     t        |        |s| j                  s| j                          t        j                  | |      S )z%Clean page /Contents into one object.)r  
is_wrappedwrap_contentsr   Page_clean_contentsr   sanitizes     r   clean_contentszPage.clean_contentsX  s2    D ((x88r#   c	                 <    t        j                  | ||||||||	      S r-   )r   Page__show_pdf_page)	r   
fz_srcpageoverlayr\   rI  r+  r  graftmap_imgnames	            r   _show_pdf_pagezPage._show_pdf_pagea  s'    ((z7FDRTVZ\dfnoor#   c                 J    t        j                  | |||||||||	|
|||||      S r-   )r   Page__insert_image)r   r  pixmapr  imaskr  rW	  r  keep_proportionr+  rm  rn  rI  r	  rY	  digestss                   r   _insert_imagezPage._insert_imaged  sY    ''htU\^dfuwy  |A  CI  KO  QV  X`  bi  j  	jr#   c                 B    | j                   }|j                  |       }|} y r-   )rX  r~  )r   r\  r   s      r   refreshzPage.refreshg  s    kkt$r#   c                    | j                   }|t        d      d}|j                  d      r|dd  }t        j	                  |      }	|	t               k7  rt        d|	       t        | |      }
|
&|
d   }t        ||      r|S |j                  |       |S t        j                  |j                         d       }d}d}g d}g d}	 |j                  |      }d}|dk  r	 |j                  |      }d}|j                         t        j                         v rdd l}|j!                  |      }~|d k7  rPt#        |      t$        u r|}n>t'        |d	      rt%        |      }n&t'        |d
      r|j(                  }nt        d      d }| j+                  ||||||||||
      }|s|S |d   }|d   }t        ||      r|S |j                  ||       |S #  Y xY w#  Y xY w)Nr~  r   r  r   zbad fontname chars rn  )r  r  r  r  )r  r  r  r  rK  r   zbad fontfile)fontdict)rX  r   r  r  r  r!   r  r  get_char_widthsr  r  rZ  r  r  r  pymupdf_fontsmyfontr   r   r   r   _insertFont)r   rx   r~  r  
set_simplewmoderz   r\  r  	inv_charsrd  rI  r  serif
CJK_number
CJK_list_n
CJK_list_srg	  fontfile_strrm  re	  s                        r   insert_fontzPage.insert_fontm  s   kk;>??s#|H&33H=	29+>??x(7DS$'%K !$$X^^%5t<
=
C
	#))(3JE >'--h7
 >>388:: &--h7J tH~$':."8}6*'}} 00Lxz:WZ$eXzC J1vq6d#K 	D84S	s   G  G GGc                 @    t        j                  | |||||||||	|
      S r-   )r   Page__insertFont)r   rx   r  r~  r  rj	  r  rk	  rm	  rz   r.  s              r   ri	  zPage._insertFont  s7    %%dHfh
T^`cejlqs{  ~F  G  	Gr#   c                     t        |        t        j                  |       }| j                  dz  dk(  rt	        |      }|S t	        ddddd| j
                  j                        }|S )zPage transformation matrix.r   r   r   rn  )r  r   Page_transformation_matrixr  r|   r  rn  r  s     r   transformation_matrixzPage.transformation_matrix  sd     	D..t4==3!#+C
 
 Aq"a)<)<=C 
r#   c                 B    t        |        t        j                  |       S )zGet xrefs of /Contents objects.)r  r   Page_get_contentsr   s    r   get_contentszPage.get_contents  s    D&&t,,r#   rI  c                 T   t        |        | j                  }|j                  rt        d      |j                  st        d      |t        d|j                               vrt        d      |j                  |      st        d      |j                  | j                  dd|z         y)	z-Set object at 'xref' as the page's /Contents.rt  r  r   zbad xrefzxref is no streamContentsz%i 0 RN)
r  rX  rN  r   r  r   r  r  rs  rI  )r   rI  r\  s      r   set_contentszPage.set_contents  s    Dkk==.//zz[))uQ 122Z((!!$'011J4@r#   c                     t        | dd      ry| j                         j                         }|g k(  rd| _        y|d   dk7  s|d   dk7  ryd| _        y)z9Check if /Contents is wrapped with string pair "q" / "Q".was_wrappedFTr      qrn     Q)r   read_contentsrb  r	  )r   conts     r   rN	  zPage.is_wrapped  s`     4.!!#))+2:#D7d?d2h$.r#   c                     | j                   ry t        j                  | dd       t        j                  | dd       d| _        y )N   q
Fs   
QT)rN	  r~  _insert_contentsr	  r   s    r   rO	  zPage.wrap_contents  s8    ??tVU3tVT2r#   c              #   V   K   | j                         }|D ]  }||d   |v s|  yw)z Generator over the links of a page.

        Args:
            kinds: (list) link kinds to subselect from. If none,
                   all links are returned. E.g. kinds=[LINK_URI]
                   will only yield URI links.
        Nr  )	get_links)r   kinds	all_linkslinks       r   rW  z
Page.links  s8      NN$	 	D}V 5	s   ))c              #   R  K   t         t        t        f}t        |d      s)| j	                         D cg c]  }|d   |vs|d    }}n0| j	                         D cg c]  }|d   |v s|d   |vs|d    }}|D ]  }| j                  |      }d|_        |   yc c}w c c}w w)a   Generator over the annotations of a page.

        Args:
            types: (list) annotation types to subselect from. If none,
                   all annotations are returned. E.g. types=[PDF_ANNOT_LINE]
                   will only yield line annotations.
        r   r   r   TN)r	  PDF_ANNOT_POPUPPDF_ANNOT_WIDGETr   r  r  _yielded)r   types
skip_typesrS   r  rI  rO   s          r   rX  zPage.annots  s      %o7GH
um,)-)9)9);VAqt:?U1Q4VKV)-)9)9);hAqtu}QRSTQU]gQg1Q4hKh 	DOOD)EENK	 Whs-   0B'BBB'B"(B"0B"70B'c              #      K   | j                         D cg c]  }|d   t        k(  s|d    }}|D ]+  }| j                  |      }|dk(  s|j                  |v s(| - yc c}w w)a    Generator over the widgets of a page.

        Args:
            types: (list) field types to subselect from. If none,
                    all fields are returned. E.g. types=[PDF_WIDGET_TYPE_TEXT]
                    will only yield text fields.
        r   r   N)r  r	  r  r7  )r   r	  rS   widget_xrefsrI  r  s         r   widgetszPage.widgets  sr      '+&6&6&8UAaDDT<T!UU  	D%%d+F} 1 1U :	 Vs   A&A!A!+A&A&c                    t        |        | j                  j                  }| j                  j                  d| j                  j                  fz  }|dk(  rd| j                  j                  z  }d| j
                  d|S Nz<memory, doc# %i>r   z<new PDF, doc# %i>zpage z of r  rX  r   r  r]  rj  r  s     r   r  zPage.__str__.  k    DKK;;)#t{{'<'<&>>A7$t{{'<'<<A"&++q11r#   c                    t        |        | j                  j                  }| j                  j                  d| j                  j                  fz  }|dk(  rd| j                  j                  z  }d| j
                  d|S r	  r	  r  s     r   r   zPage.__repr__7  r	  r#   c                     | j                   j                         D ]  }|s|j                           | j                   j                          y)z,Invalidate / delete all annots of this page.N)r  r#  rz  r  rE  s     r   _reset_annot_refszPage._reset_annot_refs@  s@    %%,,. 	E	 	 r#   c                 b    t        |        | j                  j                  | j                        S )zPDF xref number of page.)r  rX  r  rj  r   s    r   rI  z	Page.xrefG  s%     	D{{$$T[[11r#   c                     | j                          d | _        	 | j                  j                  |        t	        | dd      r| j                  |        d | _        d | _        y #  Y 1xY wr  )r	  _image_infosrX  r  r   r  rj  r   s    r   rz  zPage._eraseM  sa      	KK$$T* 4E*!!$'	s   A! !A%c                 $    | j                          y r-   rz  r   s    r   r  zPage.__del__Z      r#   c                 f    t        |        | j                  j                  | j                  |      S )z)List of fonts defined in the page object.rP  )r  rX  rU  rj  )r   rP  s     r   r  zPage.get_fonts^  s(    D{{))$++D)AAr#   c                 j    t        |        | j                  j                  | j                  |      }|S )z*List of images defined in the page object.r	  )r  rX  rY  rj  )r   rP  r  s      r   
get_imageszPage.get_imagesd  s,    Dkk))$++D)A
r#   c                 b    t        |        | j                  j                  | j                        S )z,List of xobjects defined in the page object.)r  rX  r[  rj  r   s    r   get_xobjectszPage.get_xobjectsk  s#    D{{,,T[[99r#   c                 ,    t         j                  |       S )z7All /Contents streams concatenated to one bytes object.)r~  _get_all_contentsr   s    r   r	  zPage.read_contentsq  s    &&t,,r#   c                 j    t        | j                  j                  | j                  j                        S r-   )r  r 	  r  r  r   s    r   mediabox_sizezPage.mediabox_sizev  s#    T]]%%t}}'7'788r#   r  r   N)Nr   Nr-   )Nr   )Nr   r   Nr  r  )r  NNNNr   r   r  )r  rU  )Note)NNr  r   NNTr   r  )r   r   N)r   Nr   r   NNN)NNNNNr   r   r   r   r   r   r   rn  NN)r  NNFr   r   )r   r   r6   r   r   r   r   r   r   delete_Pager  r  rY   r  r  r  r  r;   r  r   r  r  r
  r  r  r  r  r#  r&  r*  r-  r1  r4  r8  rN  r|   rQ  rT  r:   rW  r]  r`  rc  rf  rj  ro  r   rq  rs  r  rx  r{  r}  r  r  r  r  r  r   OptSeqr  r   r  r  r  r  r  r  r  r  r  r  r  r  r'  r  r  r  r  objectr  r  r  r  r  r  r  r	  r	  r	  
first_linkr	  r	  r	  r	  r 	  r  r&	  r(	  r.	  r1	  r4	  r9	  r<	  r?	  rA	  rC	  r  r  rL	  rS	  rZ	  ra	  rc	  rr	  ri	  rw	  rz	  r}	  rN	  rO	  rW  rX  r	  r  r	  rI  rz  r  r  r	  r	  r	  r	  r$   r#   r   r  r  
  s   -/IOdeG7H((& E/0D?D+F # S]  ) )7DH 8_8C5>` HCD 2 2 2 46 4 4	Z 	4D 	>= 48)-<2B< 59*.=3C=	9 	1A 		Y 	3C 		J 	c 	 	Qa 		 	 	@P 		 	2B 		 	1A 		I 	c 	AQ 	 2B $  J !!  	
 
  0. OQGK-1OPy  u #)?E%+ &, ;> KN Vf$ LPcg(,26 26 2!&2362AG2[a2"&21A2j8*9C 6 (d (,,S#X 6 ;K 8 ,< &C%T %d %N'6 '
Y(v Y(x,V ,^$""9O3* **>?J   $$     4   H H H H H HL,2132 ) )7?9pj FJ78MbG -A At A   &22! 2 2

B:-
 9 9r#   c                   :   e Zd Z ed d d      ZeZej                  Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd8dZd Zd9dZd:dZd;dZd Zd<dZdddZdddZd=dZd Zd Zd Zd Zd Zed        Z ed        Z!d>d Z"d=d!Z#ed"        Z$ed#        Z%ed$        Z&ed%        Z'ed&        Z(ed'        Z)ed(        Z*ed)        Z+ed*        Z,ed+        Z-ed,        Z.ed-        Z/ed.        Z0ed/        Z1ed0        Z2ed1e3fd2       Z4e(Z5e)Z6d3 Z7d4 Zd5 Z8d6 Z9d7 Z:y)?rc  c                 6    | j                   j                         S r-   rC  r  s    r   r}  zPixmap.<lambda>~  rD  r#   c                 8    | j                   j                  |      S r-   rC  rF  s     r   r}  zPixmap.<lambda>~  rG  r#   rH  rI  c                 P    t        j                  | t        j                  |        y)a<  Pixmap(colorspace, irect, alpha) - empty pixmap.
        Pixmap(colorspace, src) - copy changing colorspace.
        Pixmap(src, width, height,[clip]) - scaled copy, float dimensions.
        Pixmap(src, alpha=True) - copy adding / dropping alpha.
        Pixmap(source, mask) - from a non-alpha and a mask pixmap.
        Pixmap(file) - from an image file.
        Pixmap(memory) - from an image in memory (bytes).
        Pixmap(colorspace, width, height, samples, alpha) - from samples data.
        Pixmap(PDFdoc, xref) - from an image xref in a PDF document.
        N)r   Pixmap_swiginit
new_Pixmapr>  s     r   r   zPixmap.__init__  s     	dE$4$4d$;<r#   c                 v    t        |        |j                  st        d      t        j                  | |||      S )z!Return pixmap from a warped quad.zquad must be convex)r  r  r   r   Pixmap_warp)r   rh  rm  rn  s       r   warpzPixmap.warp  s5     	~~Z0E%FF  tUF;;r#   c                 D    t        |        t        j                  | |      S )zoDivide width and height by 2**factor.
                E.g. factor=1 shrinks to 25% of original size (in place).)r  r   Pixmap_shrink)r   factors     r   shrinkzPixmap.shrink  s     	""400r#   c                 D    t        |        t        j                  | |      S )z=Apply correction with some float.
        gamma=1 is a no-op.)r  r   Pixmap_gamma_with)r   gammas     r   
gamma_withzPixmap.gamma_with  s     	&&tU33r#   c                     t        |        | j                  r| j                  j                  dkD  rt        d       yt	        j
                  | ||      S )z/Tint colors with modifiers for black and white.r   z(warning: colorspace invalid for functionN)r  rd  r  r  r   Pixmap_tint_with)r   blackwhites      r   	tint_withzPixmap.tint_with  sC    $//"3"3a"7<=%%dE599r#   c                 D    t        |        t        j                  | g| S )z*Fill all color components with same value.)r  r   Pixmap_clear_withr>  s     r   
clear_withzPixmap.clear_with  s     &&t3d33r#   c                 F    t        |        t        j                  | ||      S )zCopy bbox from another Pixmap.)r  r   Pixmap_copy)r   r   r  s      r   r0   zPixmap.copy  s      sD11r#   Nc                 J    t        |        t        j                  | ||||      S )a  Set alpha channel to values contained in a byte array.
        If None, all alphas are 255.

        Args:
            alphavalues: (bytes) with length (width * height) or 'None'.
            premultiply: (bool, True) premultiply colors with alpha values.
            opaque: (tuple, length colorspace.n) this color receives opacity 0.
            matte: (tuple, length colorspace.n) preblending background color.
        )r  r   Pixmap_set_alpha)r   alphavaluespremultiplyopaquemattes        r   	set_alphazPixmap.set_alpha  s%     	%%dKfeTTr#   c                 0    t        j                  | ||      S r-   )r   Pixmap__tobytes)r   r|  jpg_qualitys      r   _tobyteszPixmap._tobytes  s    $$T6;??r#   c                    t        |        ddddddddddd
}|j                  |j                         d      }|dk(  r(t        d	| d
t	        |j                                      | j                  r|dv rt        d|z        | j                  r+| j                  j                  dkD  r|dv rt        d|z        |dk(  r&| j                  | j                  | j                         | j                  ||      }|S )a0  Convert to binary image stream of desired type.

        Can be used as input to GUI packages like tkinter.

        Args:
            output: (str) image type, default is PNG. Others are JPG, JPEG, PNM, PGM, PPM,
                    PBM, PAM, PSD, PS.
        Returns:
            Bytes object.
        r   r   r   r   r   r  
rb  pnmpgmppmpbmpampsdpsjpgjpegNImage format  not in r   r   r  '%s' cannot have alphar   r   r   unsupported colorspace for '%s')r  r  rZ  r   r   r  r	  rd  r  set_dpixresyresr	  )r   outputr	  valid_formatsr  barrays         r   rf  zPixmap.tobytes  s     	 !!Aa !!1QK 59}VHHU=CUCUCW=X<YZ[[::#*5>????t0014	9I>GHH!8LLDII.sK0r#   c                 J    t        |        t        j                  | ||||      S r-   )r  r   Pixmap_pdfocr_save)r   r  r  r  r.  s        r   pdfocr_savezPixmap.pdfocr_save  s#    ''h(HUUr#   c                     t        j                  d      s|st        d      t        |        ddlm}  |       }| j                  ||||       |j                         S )a  Save pixmap as an OCR-ed PDF page.

        Args:
            compress: (bool) compress, default 1 (True).
            language: (str) language(s) occurring on page, default "eng" (English),
                    multiples like "eng+ger" for English and German.
            tessdata: (str) folder name of Tesseract's language support. Must be
                    given if environment variable TESSDATA_PREFIX is not set.
        Notes:
            On failure, make sure Tesseract is installed and you have set the
            environment variable "TESSDATA_PREFIX" to the folder containing your
            Tesseract's language support data.
        r9   z'No OCR support: TESSDATA_PREFIX not setr   rN  )r  r  r.  )r1  r2  r  r  r  r  r	  r  )r   r  r  r.  r  rO  s         r   pdfocr_tobyteszPixmap.pdfocr_tobytes  sT     yy*+HHIIix(XV||~r#   c                 2    t        j                  | |||      S r-   )r   Pixmap__writeIMG)r   r  r|  r	  s       r   	_writeIMGzPixmap._writeIMG  s    %%dHfkJJr#   c                    t        |        ddddddddddd
}t        |      t        u rn0t        |d      rt        |      }nt        |d	      r|j                  }|'t
        j                  j                  |      \  }}|dd
 }|j                  |j                         d
      }|d
k(  r(t        d| dt        |j                                      | j                  r|dv rt        d|z        | j                  r+| j                  j                  dkD  r|dv rt        d|z        |dk(  r&| j!                  | j"                  | j$                         | j'                  |||      S )zOutput as image in format determined by filename extension.

        Args:
            output: (str) only use to overrule filename extension. Default is PNG.
                    Others are JPEG, JPG, PNM, PGM, PPM, PBM, PAM, PSD, PS.
        r   r   r   r   r   r  r	  rK  r   Nr	  r	  r	  r	  r	  r	  )r  r   r   r   r   r1  r5  splitextr  rZ  r   r   r  r	  rd  r  r	  r	  r	  r	  )r   r  r	  r	  r	  rd  r  r  s           r   rL  zPixmap.save  sN    	 !!Aa !!1QK >S Xz*8}HXv&}}H>WW%%h/FAsWF5$;}VHHU=CUCUCW=X<YZ[[::#*5>????t0014	9I>GHH!8LLDII.~~h[99r#   F)
unmultiplyc                   t        |        	 ddlm} | j
                  }|d}nQ|j                  dk(  r| j                  dk(  rdnd}n.|j                  dk(  r| j                  dk(  rd	nd
}|d
k(  r|rd}nd}|j                  || j                  | j                  f| j                        }d|j                         vr| j                  | j                  f|d<    |j                  |i | y# t        $ r t	        d        w xY w)aF  Write to image file using Pillow.

        Args are passed to Pillow's Image.save method, see their documentation.
        Use instead of save when other output formats are desired.

        :arg bool unmultiply: generates Pillow mode "RGBa" instead of "RGBA".
            Relevant for colorspace RGB with alpha only.
        r   )ImagezPillow not installedNLr   LAr   RGBRGBARGBaCMYKdpi)r  PILr	  ImportErrorr  rd  r  r	  	frombytesrm  rn  samplesr  r	  r	  rL  )r   r	  r   r  r	  cspacemoder  s           r   pil_savezPixmap.pil_save0  s     		!
 >DXX]**/3tDXX] JJ!O5Dv~*DoodTZZ$=t||L%!YY		2F5M$!&!+  	()	s   C( (C>c                    t        |        ddlm}  |       } | j                  |g|d|i| |j	                         S )zConvert to binary image stream using pillow.

        Args are passed to Pillow's Image.save method, see their documentation.
        Use instead of 'tobytes' when other output formats are needed.
        r   rN  r	  )r  r  r  r

  r  )r   r	  r   r  r  	bytes_outs         r   pil_tobyteszPixmap.pil_tobytesS  sB     	I	iH$H:HH!!##r#   c                 .    t        j                  | |      S )z Invert the colors inside a bbox.)r   Pixmap_invert_irect)r   r  s     r   invert_irectzPixmap.invert_irecta  s     ((t44r#   c                 F    t        |        t        j                  | ||      S )zKGet color tuple of pixel (x, y).
        Includes alpha byte if applicable.)r  r   Pixmap_pixelr   r  r  s      r   pixelzPixmap.pixelg  s!     	!!$1--r#   c                 H    t        |        t        j                  | |||      S )zSet color of pixel (x, y).)r  r   Pixmap_set_pixel)r   r  r  r  s       r   	set_pixelzPixmap.set_pixelo  s!    %%dAq%88r#   c                 F    t        |        t        j                  | ||      S )zSet top-left coordinates.)r  r   Pixmap_set_originr
  s      r   
set_originzPixmap.set_originv  s    &&tQ22r#   c                 F    t        |        t        j                  | ||      S )z"Set resolution in both dimensions.)r  r   Pixmap_set_dpi)r   r	  r	  s      r   r	  zPixmap.set_dpi}  s    ##D$55r#   c                 F    t        |        t        j                  | ||      S )z Set color of all pixels in bbox.)r  r   Pixmap_set_rect)r   r  r  s      r   set_rectzPixmap.set_rect  s    $$T477r#   c                 B    t        |        t        j                  |       S )zCheck if pixmap is monochrome.)r  r   Pixmap_is_monochromer   s    r   is_monochromezPixmap.is_monochrome  s     	))$//r#   c                 B    t        |        t        j                  |       S )z#Check if pixmap has only one color.)r  r   Pixmap_is_unicolorr   s    r   is_unicolorzPixmap.is_unicolor       	''--r#   c                 F    t        |        t        j                  | ||      S )zReturn count of each color.)r  r   Pixmap_color_count)r   colorsr  s      r   color_countzPixmap.color_count  s    ''fd;;r#   c                 (   t        |        d}d}|dk7  r#| j                  t        |      v r| j                  }| j                  d|      j	                         D ]  \  }}||z  }||kD  s|}|} |sdt        dg| j                  z        fS ||z  fS )z/Return most frequent color and its usage ratio.r   NT)r)
  r  r   r   )r  r  r  r*
  r  r  r  )r   r  	allpixelscntr
  countmaxpixels          r   color_topusagezPixmap.color_topusage  s    	4<DJJ$t*4::D ,,Dd,CIIK 	!LE5Is{ 		!
 ucUTVV^,--i**r#   c                 B    t        |        t        j                  |       S )zMD5 digest of pixmap (bytes).)r  r   Pixmap_digestr   s    r   digestzPixmap.digest       	""4((r#   c                 B    t        |        t        j                  |       S )z%Length of one image line (width * n).)r  r   Pixmap_strider   s    r   stridezPixmap.stride  r4
  r#   c                 B    t        |        t        j                  |       S )zResolution in x direction.)r  r   Pixmap_xresr   s    r   r	  zPixmap.xres       	  &&r#   c                 B    t        |        t        j                  |       S )zResolution in y direction.)r  r   Pixmap_yresr   s    r   r	  zPixmap.yres  r:
  r#   c                 B    t        |        t        j                  |       S )z
The width.)r  r   Pixmap_wr   s    r   r  zPixmap.w       	~~d##r#   c                 B    t        |        t        j                  |       S )zThe height.)r  r   Pixmap_hr   s    r   r   zPixmap.h  r?
  r#   c                 B    t        |        t        j                  |       S )zx component of Pixmap origin.)r  r   Pixmap_xr   s    r   r  zPixmap.x  r?
  r#   c                 B    t        |        t        j                  |       S )zy component of Pixmap origin.)r  r   Pixmap_yr   s    r   r  zPixmap.y  r?
  r#   c                 B    t        |        t        j                  |       S )zThe size of one pixel.)r  r   Pixmap_nr   s    r   r  zPixmap.n  r?
  r#   c                 B    t        |        t        j                  |       S )z$Indicates presence of alpha channel.)r  r   Pixmap_alphar   s    r   r	  zPixmap.alpha  s     	!!$''r#   c                 B    t        |        t        j                  |       S )zPixmap Colorspace.)r  r   Pixmap_colorspacer   s    r   rd  zPixmap.colorspace       	&&t,,r#   c                 \    t        |        t        j                  |       }t        |      }|S )zPixmap bbox - an IRect object.)r  r   Pixmap_irectrz  r  s     r   r  zPixmap.irect  s*     	  &Cj
r#   c                 B    t        |        t        j                  |       S )zPixmap size.)r  r   Pixmap_sizer   s    r   rw  zPixmap.size  r:
  r#   c                 B    t        |        t        j                  |       S )zPixmap samples memoryview.)r  r   Pixmap_samples_mvr   s    r   
samples_mvzPixmap.samples_mv  rL
  r#   c                 B    t        |        t        j                  |       S )zPixmap samples pointer.)r  r   Pixmap_samples_ptrr   s    r   samples_ptrzPixmap.samples_ptr&  r&
  r#   r  c                 ,    t        | j                        S r-   )r  rS
  r   s    r   r
  zPixmap.samples/  s    T__%%r#   c                     | j                   S r-   )rw  r   s    r   r   zPixmap.__len__6  s    yyr#   c                     t        |        t        |       t        ury | j                  r4d| j                  j                  d| j
                  d| j                  dS ddd| j
                  d| j                  dS )NzPixmap(z, r(  rM  )r  r   rc  rd  r   r  r	  r   s    r   r   zPixmap.__repr__9  sZ    DzV#V??+/??+?+?TZZXX  ,24::tzzJJr#   c                     | S r-   r$   r   s    r   r  zPixmap.__enter__A  r  r#   c                 B    t        | dd      r| j                  |        y y r  )r   r  r>  s     r   r  zPixmap.__exit__D  s!    4E*!!$' +r#   c                 f    t        |       t        ury t        | dd      r| j                  |        y y r  )r   rc  r   r  r   s    r   r  zPixmap.__del__H  s0    DzV#4E*!!$' +r#   )Nr   NN)rb  rO  )r   NN)TengN)NrO  r-   r	  );r   r   r6   r   r   r   r   r   delete_Pixmapr  r   r	  r	  r	  r	  r	  r0   r	  r	  rf  r	  r	  r	  rL  r

  r
  r
  r
  r
  r
  r	  r
  r"
  r%
  r*
  r0
  r3
  r7
  r	  r	  r  r   r  r  r  r	  rd  r  rw  rS
  rV
  r  r
  rm  rn  r   r  r  r  r$   r#   r   rc  rc  }  sA   -/IOdeGH**=<14:42U@8V.K:@ */ !"F -2 
$5.9368 0 0 . .<+" ) ) ) ) ' ' ' ' $ $ $ $ $ $ $ $ $ $ ( ( - -   ' ' - - . . &u & & EFK((r#   rc  c                   t    e Zd Z ed d d      ZeZej                  Z	d Z
ed        Zd Zed        Zd	 Zy
)
Colorspacec                 6    | j                   j                         S r-   rC  r  s    r   r}  zColorspace.<lambda>S  rD  r#   c                 8    | j                   j                  |      S r-   rC  rF  s     r   r}  zColorspace.<lambda>S  rG  r#   rH  rI  c                 V    t        j                  | t        j                  |             y)z!Supported are GRAY, RGB and CMYK.N)r   Colorspace_swiginitnew_Colorspace)r   r   s     r   r   zColorspace.__init__W  s     	!!$(<(<T(BCr#   c                 ,    t        j                  |       S )zSize of one pixel.)r   Colorspace_nr   s    r   r  zColorspace.n[  s    
 !!$''r#   c                 ,    t        j                  |       S r-   )r   Colorspace__namer   s    r   _namezColorspace._namec  s    %%d++r#   c                     | j                   dk(  rt        j                         S | j                   dk(  rt        j                         S | j                   dk(  rt        j                         S | j                         S )zName of the Colorspace.r   r   r   )r  csGRAYrj
  re  csCMYKr   s    r   r   zColorspace.namef  sU     66Q;<<>!VVq[;;= VVq[<<>!zz|r#   c                 D    d| j                      }d|d| j                  S )N)r   GRAYr   r	  r
  zColorspace(CS_z) - )r  r   r  s     r   r   zColorspace.__repr__r  s    +DFF3+,dii88r#   N)r   r   r6   r   r   r   r   r   delete_Colorspacer  r   r  rj
  r   r$   r#   r   r`
  r`
  R  s\    -/IOdeGH..D ( (, 	 	9r#   r`
  c                   H    e Zd Z ed d d      ZeZd Zej                  Z
y)Devicec                 6    | j                   j                         S r-   rC  r  s    r   r}  zDevice.<lambda>z  rD  r#   c                 8    | j                   j                  |      S r-   rC  rF  s     r   r}  zDevice.<lambda>z  rG  r#   rH  rI  c                 P    t        j                  | t        j                  |        y r-   )r   Device_swiginit
new_Devicer>  s     r   r   zDevice.__init__}  s    dE$4$4d$;<r#   N)r   r   r6   r   r   r   r   r   r   delete_Devicer  r$   r#   r   rr
  rr
  y  s)    -/IOdeGH=**r#   rr
  c                       e Zd Z ed d d      Zd ZeZej                  Z
ed        Zed        Zed        Zed	        Zed
        Zed        Zed        Zed        Zed        Zed        Zd Zy)Outlinec                 6    | j                   j                         S r-   rC  r  s    r   r}  zOutline.<lambda>  rD  r#   c                 8    | j                   j                  |      S r-   rC  rF  s     r   r}  zOutline.<lambda>  rG  r#   rH  rI  c                     t        d      r  r  r  s      r   r   zOutline.__init__  r  r#   c                 ,    t        j                  |       S r-   )r   Outline_urir   s    r   r  zOutline.uri         &&r#   c                 ,    t        j                  |       S r-   )r   Outline_nextr   s    r   r  zOutline.next       !!$''r#   c                 ,    t        j                  |       S r-   )r   Outline_downr   s    r   r  zOutline.down  r
  r#   c                 ,    t        j                  |       S r-   )r   Outline_is_externalr   s    r   r  zOutline.is_external       ((..r#   c                 ,    t        j                  |       S r-   )r   Outline_pager   s    r   r   zOutline.page  r
  r#   c                 ,    t        j                  |       S r-   )r   	Outline_xr   s    r   r  z	Outline.x       t$$r#   c                 ,    t        j                  |       S r-   )r   	Outline_yr   s    r   r  z	Outline.y  r
  r#   c                 ,    t        j                  |       S r-   )r   Outline_titler   s    r   r
  zOutline.title       ""4((r#   c                 ,    t        j                  |       S r-   )r   Outline_is_openr   s    r   is_openzOutline.is_open       $$T**r#   c                     t        | d      S )zoutline destination detailsN)r  r   s    r   r  zOutline.dest  s     d##r#   c                 d    t        | t              sy t        | dd      r| j                  |        y y r  )r   rz
  r   r  r   s    r   r  zOutline.__del__  s.    $(4E*!!$' +r#   N)r   r   r6   r   r   r   r   r   r   delete_Outliner  r  r  r  r  r   r  r  r
  r
  r  r  r$   r#   r   rz
  rz
    s    -/IOdeG7H++' '( (( (/ /( (% %% %) )+ + $ $(r#   rz
  c                      e Zd Z ed d d      Zd ZeZej                  Z
ed        Zed        Zed        Zed	        Zd
 Zed        Zed        Zd Zd Zed        Zd Zd Zd Zed        Zed        Zd Zed        Zed        ZdIdZed        ZdJdZd Z dIdZ!d Z"dKdZ#d  Z$d! Z%dId"Z&ed#        Z'ed$        Z(ed%        Z)dLd&Z*	 	 	 	 	 	 	 	 	 dMd'e+d(e,d)e-d*e+d+e.d,e.d-e.d.e/d/e0fd0Z1dNd1Z2ed2        Z3d3 Z4ed4        Z5ed5        Z6d6 Z7ed7        Z8d8 Z9d9 Z:dOd:Z;ed;        Z<dPd<Z=ed=        Z>dQd>Z?ed?        Z@dRd@ZAdA ZBdB ZCedC        ZDdSdDZEdE ZFdF ZGdG ZdH ZHy)Tr  c                 6    | j                   j                         S r-   rC  r  s    r   r}  zAnnot.<lambda>  rD  r#   c                 8    | j                   j                  |      S r-   rC  rF  s     r   r}  zAnnot.<lambda>  rG  r#   rH  rI  c                     t        d      r  r  r  s      r   r   zAnnot.__init__  r  r#   c                     t        |        t        j                  |       }t        |      }|| j                  j
                  z  }|S )zannotation rectangle)r  r   
Annot_rectr  rX  rT  r  s     r   rY   z
Annot.rect  s@     	Dt$3it{{,,, 
r#   c                 B    t        |        t        j                  |       S )z$annotation delta values to rectangle)r  r   Annot_rect_deltar   s    r   
rect_deltazAnnot.rect_delta       	D%%d++r#   c                 B    t        |        t        j                  |       S )zannotation xref)r  r   
Annot_xrefr   s    r   rI  z
Annot.xref       	D%%r#   c                 B    t        |        t        j                  |       S )zannotation IRT xref)r  r   Annot_irt_xrefr   s    r   irt_xrefzAnnot.irt_xref       	D##D))r#   c                 D    t        |        t        j                  | |      S )zSet annotation IRT xref)r  r   Annot_set_irt_xrefr  s     r   set_irt_xrefzAnnot.set_irt_xref  s    D''d33r#   c                 \    t        |        t        j                  |       }t        |      }|S )zannotation appearance matrix)r  r   Annot_apn_matrixr|   r  s     r   
apn_matrixzAnnot.apn_matrix  s*     	D$$T*Sk
r#   c                     t        |        t        j                  |       }t        |      | j                  j
                  z  }|| j                  j                  z  }|S )zannotation appearance bbox)r  r   Annot_apn_bboxr  rX  rw	  rT  r  s     r   apn_bboxzAnnot.apn_bbox  sM     	D""4(3i$++;;;t{{,,,
r#   c                 D    t        |        t        j                  | |      S )z!Set annotation appearance matrix.)r  r   Annot_set_apn_matrix)r   r\   s     r   set_apn_matrixzAnnot.set_apn_matrix
  s    D))$77r#   c                     t        |        | j                  }|j                  }|j                  }||| z  z  }t	        j
                  | |      S )zSet annotation appearance bbox.)r  rX  rQ  rw	  r   Annot_set_apn_bbox)r   r  r   rotr   s        r   set_apn_bboxzAnnot.set_apn_bbox  sP     	D{{""((sd
 ''d33r#   c                 B    t        |        t        j                  |       S )zannotation BlendMode)r  r   Annot_blendmoder   s    r   r  zAnnot.blendmode       	D$$T**r#   c                 D    t        |        t        j                  | |      S )zSet annotation BlendMode.)r  r   Annot_set_blendmode)r   
blend_modes     r   set_blendmodezAnnot.set_blendmode'  s    D((z::r#   c                 B    t        |        t        j                  |       S )z*Get annotation optional content reference.)r  r   Annot_get_ocr   s    r   get_oczAnnot.get_oc.  s    D!!$''r#   c                 D    t        |        t        j                  | |      S )z-Set 'open' status of annotation or its Popup.)r  r   Annot_set_open)r   r
  s     r   set_openzAnnot.set_open5  s    D##D'22r#   c                 B    t        |        t        j                  |       S )z-Get 'open' status of annotation or its Popup.)r  r   Annot_is_openr   s    r   r
  zAnnot.is_open;  rF	  r#   c                 B    t        |        t        j                  |       S )z Check if annotation has a Popup.)r  r   Annot_has_popupr   s    r   	has_popupzAnnot.has_popupC  r
  r#   c                 D    t        |        t        j                  | |      S )z.Create annotation 'Popup' or update rectangle.)r  r   Annot_set_popupr	  s     r   	set_popupzAnnot.set_popupL  s    D$$T400r#   c                     t        |        t        j                  |       }t        |      | j                  j
                  z  }|| j                  j                  z  }|S )zannotation 'Popup' rectangle)r  r   Annot_popup_rectr  rX  rw	  rT  r  s     r   
popup_rectzAnnot.popup_rectR  sM     	D$$T*3i$++;;;t{{,,,
r#   c                 B    t        |        t        j                  |       S )zannotation 'Popup' xref)r  r   Annot_popup_xrefr   s    r   
popup_xrefzAnnot.popup_xref_  r
  r#   c                 D    t        |        t        j                  | |      S )z Set / remove annotation OC xref.)r  r   Annot_set_oc)r   r+  s     r   set_oczAnnot.set_och  s    D!!$++r#   c                 ,    t        j                  |       S )zannotation language)r   Annot_languager   s    r   r  zAnnot.languagen      
 ##D))r#   Nc                 D    t        |        t        j                  | |      S )zSet annotation language.)r  r   Annot_set_languager  s     r   r  zAnnot.set_languagev  s    D''h77r#   c                 ,    t        j                  |       S r-   )r   Annot__getAPr   s    r   rD  zAnnot._getAP}  s    !!$''r#   c                 0    t        j                  | ||      S r-   )r   Annot__setAP)r   r  rY   s      r   rF  zAnnot._setAP  s    !!$55r#   c                     t        j                  |       }|s|S | j                  |d<   t        j	                  |       \  }}}||d<   ||d<   ||d<   | j
                  d   }||d<   |S )NrY   r<  rx   ry   r  )r   Annot__get_redact_valuesrY   r~  ri  r)
  )r   rm  r<  rx   ry   r  s         r   _get_redact_valueszAnnot._get_redact_values  sv    ,,T2JiiF).)>&
Hh&L"J"J{{6"F 
r#   c                 \    t        |        t        j                  | ||      }|rd|_        |S )zMake annotation TextPage.T)r  r   Annot_get_textpager   )r   r  r  rm  s       r   r   zAnnot.get_textpage  s/    D&&tT59CK 
r#   c                 D    t        |        t        j                  | |      S )zSet /Name (icon) of annotation.)r  r   Annot_set_namer}  s     r   set_namezAnnot.set_name      D##D$//r#   c                 D    t        |        t        j                  | |      S )zSet annotation rectangle.)r  r   Annot_set_rectr	  s     r   r
  zAnnot.set_rect  r
  r#   c                 D    t        |        t        j                  | |      S )zSet annotation rotation.)r  r   Annot_set_rotation)r   r  s     r   r  zAnnot.set_rotation  s    D''f55r#   c                 B    t        |        t        j                  |       S )zannotation rotation)r  r   Annot_rotationr   s    r   r  zAnnot.rotation  r
  r#   c                 B    t        |        t        j                  |       S )zannotation vertex points)r  r   Annot_verticesr   s    r   verticeszAnnot.vertices  r
  r#   c                 B    t        |        t        j                  |       S )zColor definitions.)r  r   Annot_colorsr   s    r   r)
  zAnnot.colors  s     	D!!$''r#   c                 4    t        j                  | ||||      S r-   )r   Annot__update_appearance)r   opacityr
  r9  r  s        r   _update_appearancezAnnot._update_appearance  s    --dGZU[\\r#   r
  r
  ry   rx   r<  r,  r9  r  r  c
                 >   t        |        d }
| j                  d   }| j                  j                  dd      }| j                  j                  dd      }| j                  d   }|dk7  r|}n| j                  d   }d}| j
                  }|	dk7  r3|	dk  r|	d	z  }	|	dk  r|	d	k\  r|	d	z  }	|	d	k\  r|t        k(  r
|	d
z  dk7  rd}	|| j                  }t        |d      s| j                  }d|cxk  rdk  sn |d}nd}|t        k(  rt        |       t        |       t        |       t        j                  |       \  }}}d}|dk  rd}d}||}d}||}d}|dkD  r|}d}|r]d}t        |      dk(  rd}n!t        |      dk(  rd}nt        |      dk(  rd} j                  |||d}t        j                  | |       | j!                  ||||	      }|dk(  rt#        d       |
|d      } |
|d      }| j$                  j&                  }| }|r7ddj)                  t+        t,        |            z   dz   }|j/                  d      }nd}| j0                  r| j0                  \  }} nd \  }} | j3                         }!|!j5                         }"d}#|t6        k(  r|rud}#|"dd }"|"\  }$}%}&}'}(|"j9                  |&       |"j9                  |%       |"j9                  |'       |"j9                  |%       |"j9                  |(       |"j9                  d!       |dkD  s|d"k7  rVd}#|dkD  rd#|z  gng })|"D ]@  }*|*j;                  d$      r|*j;                  d%      r
|d"k7  r|dd }*|)j9                  |*       B |)}"d&j)                  |"      }!|t        k(  r|!j=                  d'      }+|!j=                  d(      d)z   },|!|+|, }!| j>                  j@                  | j>                  jB                  }.}-|	d*v s!|jD                  |jF                  cxk(  rdk(  sn |.|-}.}-d+|-|.fz  }/|/d,z   |!z   }!d}0 |
|d      }1|1rd-}0 |
|d      }2|2r|dkD  rd!}0d.|z  }nd"x}}2|1r|2rd/}0|0dk7  r||1z   |2z   |/z   d&z   |0z   d&z   |!z   }!|dk7  r
|d&z   |!z   }!d}d}#|tH        tJ        fv r\d&j)                  |"dd       d&z   }!d}#|d"k7  r!|tH        k(  r	|!|z   d0z   }!n,|tJ        k(  r#|!d!z   }!n|tH        k(  r|!d1z   }!n|tJ        k(  r|!d!z   }!|||!z   }!|!jM                  d2d3d      }!d}#|r|j/                  d      |!z   }!d}#d4|!z   d5z   }!|| z   dkD  r}|tH        tJ        fv rndt        jN                  t        jP                  t        jR                  t        jT                  t        jV                  t        jX                  t        jZ                  t        j\                  t        j^                  f
}3ta        dt        |3            }4d)tc        d| j                  d         z  }5| j>                  |5 |5 |5|5fz   }d}#| jd                  }6||4v rDtg        |6d         |z  }7tg        |6d         |z  }8 |3|   | |7|8d|      }9|!|9j/                         z  }!| |4v rDtg        |6d6         |z  }7tg        |6d         |z  }8 |3|    | |7|8d|      }9|!|9j/                         z  }!|#r:|r%| ji                  |       | jk                  |!d7       n| jk                  |!d7       |tl        tn        tp        tr        tt        tJ        tH        tv        tx        tz        f
vry| j|                  }:|:dk(  ry| j>                  j~                  | j>                  j                  z   d)z  };|:dk(  rpt        |t        dd      z
        d8k  ry| j>                  j                  |;|       }<| ji                  |<j>                         | j                  t        dd             yt        |:      }=| j>                  j                  |;|=      }<| ji                  |<j>                         | j                  ||=z         y)9a"  Update annot appearance.

        Notes:
            Depending on the annot type, some parameters make no sense,
            while others are only available in this method to achieve the
            desired result. This is especially true for 'FreeText' annots.
        Args:
            blend_mode: set the blend mode, all annotations.
            opacity: set the opacity, all annotations.
            fontsize: set fontsize, 'FreeText' only.
            fontname: set the font, 'FreeText' only.
            border_color: set border color, 'FreeText' only.
            text_color: set text color, 'FreeText' only.
            fill_color: set fill color, all annotations.
            cross_out: draw diagonal lines, 'Redact' only.
            rotate: set rotation, 'FreeText' and some others.
        c                 F    t        | |      }|sy|dz   j                         S )zHReturn valid PDF color operator for a given color sequence.
            r#   
)r  r  )r	  codeccs      r   color_stringz"Annot.update.<locals>.color_string  s)     2t$BI%%''r#   r   r  Nrm  rn  stroker  r   rI  r   r   /H gs
r   Fr   Tr   rx  ry  r   rz  r{  )r
  r
  r9  r  zError updating annotation.r   r   [r  z] 0 d
utf-8r  rA  r#   s   %g w   ws   RGr?  r:  r;  r   rI  r<  r=  r>  r@  s   %g w
rB     b   ss   
S
s
   
S
[] 0 d
r	  s   
Q
r  rX   gh㈵>)Er  r   borderr  r)
  r
  PDF_ANNOT_FREE_TEXTr  r   r
  rL  r~  ri  r   r|  
_update_dar
  r  rX  rw	  r2  r   r   r  	line_endsrD  r+  PDF_ANNOT_REDACTr  r1  rE  rY   rm  rn  r   r   rz  rv  rr  
_le_square
_le_circle_le_diamond_le_openarrow_le_closedarrow_le_butt_le_ropenarrow_le_rclosedarrow	_le_slashr   r   r
  r  r
  rF  PDF_ANNOT_CARETrn  PDF_ANNOT_FILE_ATTACHMENTPDF_ANNOT_INKPDF_ANNOT_LINErh  PDF_ANNOT_STAMPPDF_ANNOT_TEXTr  rd  rg  r   r|   rv  r
  )>r   r
  r
  ry   rx   r<  r,  r9  r  r  r
  r0  dtrK  r   r  rY   apnmatopa_codetcolfnamere  update_default_appearancer  r  rm  bfillbstrokep_ctmimatr  line_end_leline_end_rirG  r  
ap_updatedrd  r  r  r  r  ntabr  rH  rI  r  r   r  rJ  rL  rM  le_funcsle_funcs_ranger   r7  r  r  leftr
  Mrh  r   s>                                                                 r   r  zAnnot.update  sd   : 	D	( YYq\
[[__Xt,"-X&D;;v&DR<1*# 1*C-# C-00Vb[A5E
 Jw,llG!z5 HH,,|$z"z"!&!6D% ).%z,0)%!,0)# ,0)!| ,0)(t9>=CY!^2CY!^AC#TUe<  v.
 %%!	 & 
 %<;<<T3'vs+11v388CRL11I=F]]7+FF>>'+~~$K'+$K [[]
))!
$*!2r2rb!b!b!b!b!d#zW^!
-3aZ&()R" &D}}T* }}U+3&s|KK%& F#B,,B!#BBrB99??DII$4$4qA"688vxx+D1+D!1 Aq6)Bk!B&BC&tS1K(s;M!"V+),,}d{k)M9B>FLuTWYY~e^b(J+-@AAF3BK(50BJ|!22ed*B#66dB!22dB#66dB"BH&6:BJ)B.BJb[8# $q(Z<MOb;c-ce..0@0@))5+>+>--u~~,,e.D.D	)H
 #1c(m4NC4;;w/00A99QB1~-DJ]]Fn,6!9%,6!9%,,x,T2r5*Mdkkm#n,6":&-6":&-,x,T2r4Ldkkm#d#BQ'BQ'
 %  mm"9YY\\DIILL(A-!86F1aL()D099??1vg.DMM$))$q!-Skyyq#&dii FSL)r#   c                    t        |        | j                  j                  }t        |      t        ur||d}|j	                  d      }|j	                  d      }t
        t        t        t        t        t        f}|g dfv r|j                  | j                  dd       n|t        |d      rt        |      g}t        |       t!        |      d	k(  r	d
|d   z  }n+t!        |      dk(  rdt#        |      z  }ndt#        |      z  }|j                  | j                  d|       |r-| j                  d   |vrt%        d| j                  d	   z         y|g dfv r|j                  | j                  dd       y|t        |d      rt        |      g}t        |       t!        |      d	k(  r	d
|d   z  }n+t!        |      dk(  rdt#        |      z  }ndt#        |      z  }|j                  | j                  d|       yy)z\Set 'stroke' and 'fill' colors.

        Use either a dict or the direct arguments.
        r  r   r  r   r$   rH   []Nr   r   [%g]r   r   
[%g %g %g]r7	  z0Warning: fill color ignored for annot type '%s'.IC)r  rX  r   r  r  rn  rh  r  rv  rz  r  rs  rI  r   r   rL  r   r   r  )r   r)
  r   r  r\  fill_annotsr   s          r   
set_colorszAnnot.set_colors   s   
 	Dkk  <t#"f5Fzz&!H%')9>K^`q'*b"XTYYT2v{+-v6{aVAY&V! 5=0#eFm3TYYQ/DIIaL3DtyyQR|STB8TYYd3t[)d}t4yA~T!W$Ta 5;.#eDk1TYYa0 r#   c                 B    t        |        t        j                  |       S )zLine end codes.)r  r   Annot_line_endsr   s    r   r  zAnnot.line_ends!  r
  r#   c                 F    t        |        t        j                  | ||      S )zSet line end codes.)r  r   Annot_set_line_ends)r   r  ends      r   set_line_endszAnnot.set_line_ends%!  s    D((uc::r#   c                 B    t        |        t        j                  |       S )zannotation type)r  r   
Annot_typer   s    r   r   z
Annot.type+!  r
  r#   c                 B    t        |        t        j                  |       S )zOpacity.)r  r   Annot_opacityr   s    r   r
  zAnnot.opacity3!  rF	  r#   c                 D    t        |        t        j                  | |      S )zSet opacity.)r  r   Annot_set_opacity)r   r
  s     r   set_opacityzAnnot.set_opacity<!  s    D&&tW55r#   c                 B    t        |        t        j                  |       S )zAttached file information.)r  r   Annot_file_infor   s    r   	file_infozAnnot.file_infoB!  r
  r#   c                 B    t        |        t        j                  |       S )zRetrieve attached file content.)r  r   Annot_get_filer   s    r   get_filezAnnot.get_fileK!  s    D##D))r#   c                 B    t        |        t        j                  |       S )zRetrieve sound stream.)r  r   Annot_get_soundr   s    r   	get_soundzAnnot.get_soundR!  s    D$$T**r#   c                 J    t        |        t        j                  | ||||      S )zUpdate attached file.)r  r   Annot_update_file)r   r  r  r  r  s        r   update_filezAnnot.update_fileY!  s#    D&&tVXy$OOr#   c                 B    t        |        t        j                  |       S )zVarious information details.)r  r   
Annot_infor   s    r   r  z
Annot.info_!  r
  r#   c           	      (   t        |        t        |      t        u r\|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }d}t	        j
                  | ||||||      S )zSet various properties.contentNr
  r  r  rI  )r  r   r  r  r   Annot_set_info)r   r  rR  r
  r  r  rI  s          r   set_infozAnnot.set_infoh!  s     	D:hhy$/GHHWd+E88ND9Lhhy$/Ghhy$/GD ##D$gW^__r#   c                     t        |        | j                  d   }|t        t        t        t
        t        t        t        fvri S t        j                  |       S )zBorder information.r   )r  r   rn  r	  r  r  rv  rz  rh  r   Annot_border)r   atypes     r   r  zAnnot.borderw!  s[    
 	D		!)+>~_r  tE  GW  X  XI !!$''r#   c                    t        |        | j                  dd \  }}|t        t        t        t
        t        t        t        fvrt        d| d       y|t        t        t        t        fvr|dkD  rt        d| d       d}t        |      t        ur||||d}|j                  d	d       |j                  d
d       |j                  dd       |j                  dd       |d	   dk(  rd|d	<   |d   dk(  rd|d<   t        |d   d      r2t        |d         |d<   |d   D ]  }t        |t              rd|d<    n t!        j"                  | |||||      S )zbSet border properties.

        Either a dict, or direct arguments width, style, dashes or clouds.Nr   zCannot set border for 'r8  r   zCannot set cloudy border for 'rn  )rm  styler  cloudsrm  rY  r  rZ  r   )r  r   rn  r	  r  r  rv  rz  rh  r  r  
setdefaultr   r   r   r  r   Annot_set_border)	r   r  rm  rY  r  rZ  rW  atnamerh  s	            r   
set_borderzAnnot.set_border!  s    	D		"1v)+>~_r  tE  GW  X  X+F8267)+>?PRbccz6vhbAB<t#$uRXYF'2&'4((D)(B''?d" F7O(t#!F86(#]3$VH%56F8x( !$,'+F8$ %%dFE5&&QQr#   c                 B    t        |        t        j                  |       S )zFlags field.)r  r   Annot_flagsr   s    r   r  zAnnot.flags!  s     	D  &&r#   c                 D    t        |        t        j                  | |      S )z!Clean appearance contents stream.)r  r   Annot_clean_contentsrQ	  s     r   rS	  zAnnot.clean_contents!  s    D))$99r#   c                 D    t        |        t        j                  | |      S )zSet annotation flags.)r  r   Annot_set_flags)r   r  s     r   	set_flagszAnnot.set_flags!  s    D$$T511r#   c                 B    t        |        t        j                  |       S )z*Delete 'Popup' and responding annotations.)r  r   Annot_delete_responsesr   s    r   delete_responseszAnnot.delete_responses!  s    D++D11r#   c                 0   t        |        t        j                  |       }|syd|_        | j                  |_        ||j                  j
                  t        |      <   |j                  d   t        k(  r"t               }t        j                  ||       |}|S )zNext annotation.NTr   )r  r   
Annot_nextr   rX  r  r  r   r	  r'  r~  r  r	  s      r   r  z
Annot.next!  s     	Dt$[[
*-

r#w'88A;**XFsF+C 
r#   c                 2   t        |        t        t        t        d}t	        |      t
        u r |j                  |j                         d      }|rt        |dz  |dz        }t        j                  | ||||      }d|_        |r|j                  ||       |S )zannotation Pixmap)grayrgbcmykNr0  T)r  rl
  re  rm
  r   r   r  rZ  r|   r   Annot_get_pixmapr   r	  )r   r\   r
  rd  r	  cspacesrm  s          r   
get_pixmapzAnnot.get_pixmap!  s     	D!%@
s" Z%5%5%7>JC"HcBh/F $$T63
EJKKS! 
r#   c                 4    | j                  |        d | _        y r-   r  rX  r   s    r   rz  zAnnot._erase!      d#r#   c                 h    t        |        d| j                  d   dt        | j                        S Nr  r   z' annotation on r  r   r   rX  r   s    r   r  zAnnot.__str__!  &    D*.))A,DKK8HIIr#   c                 h    t        |        d| j                  d   dt        | j                        S rv  rw  r   s    r   r   zAnnot.__repr__!  rx  r#   c                 >    | j                   y | j                          y r-   )rX  rz  r   s    r   r  zAnnot.__del__!  s    ;;r#   r  r-   r   )rn  NNrn  )	NNr   NNNNTrn  r  r  )NNNNNN)Nrn  NNrn  r	  )NNNr   )Ir   r   r6   r   r   r   r   r   r   delete_Annotr  rY   r
  rI  r
  r
  r
  r
  r
  r
  r  r
  r
  r
  r
  r
  r
  r
  r
  r
  r  r  rD  rF  r
  r   r
  r
  r  r  r
  r)
  r
  r  OptFloatr   r	  r   r  r  r5  r  r;  r   r
  rB  rE  rH  rK  rN  r  rT  r  r^  r  rS	  re  rh  r  rq  rz  r  r  r$   r#   r   r  r    s#   -/IOdeG7H))
 
 , , & & * *4   	 	84 + +;(3 ) ) + +1 	 	 , ,, * *8(6$
006 * * * * ( (] $("& !!%#'%)#' $[*![* [* [*  	[*
 "[* $[* "[* [* [*|*1X + +; & & ) )6 + +*+P & &` 	( 	(!RF ' ':22  **JJr#   c                      e Zd Z ed d d      Zd ZeZej                  Z
d Zd Zd Zed	        Zed
efd       Zd ZddZed        ZddZed        Zed        ZdZed        Zed        Zed        Zd Zd Zd Zd Zy)Linkc                 6    | j                   j                         S r-   rC  r  s    r   r}  zLink.<lambda>"  rD  r#   c                 8    | j                   j                  |      S r-   rC  rF  s     r   r}  zLink.<lambda>"  rG  r#   rH  rI  c                     t        d      r  r  r  s      r   r   zLink.__init__"  r  r#   c                 0    t        j                  | ||      S r-   )r   Link__borderr   r\  rI  s      r   _borderzLink._border"      !!$T22r#   c                 2    t        j                  | |||      S r-   )r   Link__setBorder)r   r  r\  rI  s       r   
_setBorderzLink._setBorder"  s    $$T63==r#   c                 0    t        j                  | ||      S r-   )r   Link__colorsr  s      r   _colorszLink._colors"  r  r#   c                 v    | j                  | j                  j                  j                  | j                        S r-   )r  rX  r
   rI  r   s    r   r  zLink.border"  '    ||DKK..33TYY??r#   r  c                     t        |        | j                  j                  }|j                  sy|j                  | j                  d      }|d   dk7  rt        |d         S y)Nr   r  r   r  )r  rX  r  rq  rI  r  r[  s      r   r  z
Link.flags"  sU    Dkk  zzTYY,Q46>qt9r#   c                     t        |        | j                  j                  }|j                  st        d      t	        |      t
        urt        d      |j                  | j                  dt        |             y )Nr  zbad 'flags' valuer  )	r  rX  r  r   r   r  rs  rI  r   )r   r  r\  s      r   re  zLink.set_flags$"  s`    Dkk  zz[))E{c!011CU4r#   Nc                     t        |      t        ur|||d}| j                  || j                  j                  j                  | j
                        S )N)rm  rY  r  )r   r  r  rX  r
   rI  )r   r  rm  r  rY  s        r   r^  zLink.set_border."  sA    <t#$uGFvt{{'9'9'>'>		JJr#   c                 v    | j                  | j                  j                  j                  | j                        S r-   )r  rX  r
   rI  r   s    r   r)
  zLink.colors3"  r  r#   c                    t        |        | j                  j                  }t        |      t        ur||d}|j	                  d      }|j	                  d      }|t        d       |g dfv r|j                  | j                  dd       yt        |d	      rt        |      g}t        |       t        |      d
k(  r	d|d   z  }n+t        |      dk(  rdt        |      z  }ndt        |      z  }|j                  | j                  d|       y)zSet border colors.r/  r  r   Nz!warning: links have no fill colorr$   rH   r0  r   r   r1  r   r   r2  r7	  )r  rX  r   r  r  r  rs  rI  r   r   rL  r   r   )r   r)
  r   r  r\  r   s         r   r5  zLink.set_colors7"  s    Dkk  <t#"f5Fzz&!H%56b"XTYYT26;'Fm_F6v;!"A[AuV},A%-/AC+r#   c                 B    t        |        t        j                  |       S )zUri string.)r  r   Link_urir   s    r   r  zLink.uriO"  s     	D~~d##r#   c                 B    t        |        t        j                  |       S )zFlag the link as external.)r  r   Link_is_externalr   s    r   r  zLink.is_externalW"  r
  r#   rn  c                    t        | d      r| j                  t        d      | j                  j                  j                  s | j                  j                  j                  rt        d      | j                  j                  }| j
                  s| j                  j                  d      rd}n|j                  | j                        }t        | |      S )z Create link destination details.rX  Nr~  rf  r  )
r   rX  r   rN  rO  r  r  r  r  r  )r   r\  r  s      r   r  z	Link.desta"  s     4"t{{':>??;;''4;;+=+=+J+J;<<kk  txx2237C""488,Cc""r#   c                 \    t        |        t        j                  |       }t        |      }|S )zRectangle ('hot area').)r  r   	Link_rectr  r  s     r   rY   z	Link.rectq"  s(     	Dood#3i
r#   c                 V   t        |        t        j                  |       }|rd|_        | j                  |_        ||j                  j
                  t        |      <   | j                  dkD  r| j                  j                         D cg c]  }|d   t        k(  s|d    }}| j                  j                         D cg c]  }|d   t        k(  s|d    }}|j                  | j                        }||dz      |_        ||dz      |_        |S d|_        d|_        |S c c}w c c}w )z
Next link.Tr   r   r   r   )r  r   	Link_nextr   rX  r  r  rI  r  r	  r  )r   rm  r  
link_xrefslink_idsr  s         r   r  z	Link.next|"  s    	Dood#CKCJ.1CJJ""2c7+yy1},0KK,C,C,E`q1Q_I_ad`
`*.++*A*A*C^Qqt~G]AaD^^ &&tyy1%cAg.!#'* 
	  
 a^s   D!D!?D&D&c                 4    | j                  |        d | _        y r-   rs  r   s    r   rz  zLink._erase"  rt  r#   c                 H    t        |        dt        | j                        z   S Nzlink on r  r   rX  r   s    r   r  zLink.__str__"      DC,,,r#   c                 H    t        |        dt        | j                        z   S r  r  r   s    r   r   zLink.__repr__"  r  r#   c                 $    | j                          y r-   r	  r   s    r   r  zLink.__del__"  r	  r#   )Nr   NNr  )r   r   r6   r   r   r   r   r   r   delete_Linkr  r  r  r  r  r  r  re  r^  r)
  r5  r  r  r   r  rY   r  rz  r  r  r$   r#   r   r~  r~  "  s   -/IOdeG7H((3>3 @ @ S  K
 @ @,0 $ $ , , D# #    0--r#   r~  c                   t    e Zd Z ed d d      ZeZej                  Z	d Z
d Zed        Zdd	Zdd
Zd Zy)DisplayListc                 6    | j                   j                         S r-   rC  r  s    r   r}  zDisplayList.<lambda>"  rD  r#   c                 8    | j                   j                  |      S r-   rC  rF  s     r   r}  zDisplayList.<lambda>"  rG  r#   rH  rI  c                 V    t        j                  | t        j                  |             y r-   )r   DisplayList_swiginitnew_DisplayListr   r 	  s     r   r   zDisplayList.__init__"  s    ""4)>)>x)HIr#   c                 2    t        j                  | |||      S r-   )r   DisplayList_run)r   r  r   areas       r   r  zDisplayList.run"  s    $$T2q$77r#   c                 F    t        j                  |       }t        |      }|S r-   )r   DisplayList_rectr  r  s     r   rY   zDisplayList.rect"  "     $$T*3i
r#   Nc                 F    t        j                  | ||||      }d|_        |S r  )r   DisplayList_get_pixmapr   )r   r\   rd  r	  r  rm  s         r   rq  zDisplayList.get_pixmap"  s&    **4UDQ
r#   c                 @    t        j                  | |      }d|_        |S r  )r   DisplayList_get_textpager   )r   r  rm  s      r   r   zDisplayList.get_textpage"  s     ,,T59
r#   c                 f    t        |       t        ury t        | dd      r| j                  |        y y r  )r   r  r   r  r   s    r   r  zDisplayList.__del__"  s0    Dz[(4E*!!$' +r#   )NNr   N)r   )r   r   r6   r   r   r   r   r   delete_DisplayListr  r   r  rY   rq  r   r  r$   r#   r   r  r  "  sP    -/IOdeGH//J8 (r#   r  c                      e Zd Z ed d d      ZeZej                  Z	d Z
ddZd ZddZdd	Zd
 ZddZd Zed        Zd Zd Zd ZddefdZdefdZd defdZd defdZdefdZdefdZd defdZd defdZd Z y)!r  c                 6    | j                   j                         S r-   rC  r  s    r   r}  zTextPage.<lambda>"  rD  r#   c                 8    | j                   j                  |      S r-   rC  rF  s     r   r}  zTextPage.<lambda>"  rG  r#   rH  rI  c                 d    t        j                  | t        j                  |             d| _        y r  )r   TextPage_swiginitnew_TextPager   r  s     r   r   zTextPage.__init__"  s$    e&8&8&BCr#   c                    t        j                  | |||      }|s|S t        |      }t        |      D ]'  }t	        ||         }|r|||<   |j
                  ||<   ) |r|S d}||dz
  k  rW||   }||dz      }	|j                  |	j                  k7  s||	z  j                  r|dz  }C||	z  ||<   ||dz   = |dz  }||dz
  k  rW|S )z)Locate 'needle' returning rects or quads.r   r   )r   TextPage_searchr   r   rc  rY   r  rG  )
r   needlehit_maxr  rm  r  r   r  v1v2s
             r   searchzTextPage.search"  s     ##D&'5AJCu 	 ASVAAA	  J%!)mQBQUBuu~"r'!3!3Q"WCFAE
QJE %!)m 
r#   c                 0    t        j                  | ||      S r-   )r   TextPage__getNewBlockList)r   	page_dictraws      r   _getNewBlockListzTextPage._getNewBlockList"  s    ..tYDDr#   c                     | j                   j                  | j                   j                  d}| j                  ||       |S )N)rm  rn  )rY   rm  rn  r  )r   r  r  s      r   _textpage_dictzTextPage._textpage_dict"  s4    "iioo9I9IJ	i-r#   c                 .    t        j                  | |      S )z*Return a list with image meta information.)r   TextPage_extractIMGINFO)r   hashess     r   extractIMGINFOzTextPage.extractIMGINFO#       ,,T6::r#   c                 ,    t        j                  |       S )z*Return a list with text block information.)r   TextPage_extractBLOCKSr   s    r   extractBLOCKSzTextPage.extractBLOCKS
#  s     ++D11r#   Nc                 .    t        j                  | |      S )z)Return a list with text word information.)r   TextPage_extractWORDS)r   
delimiterss     r   extractWORDSzTextPage.extractWORDS#  s     **4<<r#   c                 ,    t        j                  |       S )zTextPage current poolsize.)r   TextPage_poolsizer   s    r   poolsizezTextPage.poolsize#  s     &&t,,r#   c                 F    t        j                  |       }t        |      }|S )zTextPage rectangle.)r   TextPage_rectr  r  s     r   rY   zTextPage.rect#  s"    
 !!$'3i
r#   c                 .    t        j                  | |      S r-   )r   TextPage__extractText)r   r|  s     r   _extractTextzTextPage._extractText&#  s    **488r#   c                 .    t        j                  | |      S r-   )r   TextPage_extractTextboxr	  s     r   extractTextboxzTextPage.extractTextbox)#  s    ,,T488r#   c                 0    t        j                  | ||      S r-   )r   TextPage_extractSelection)r   pointapointbs      r   extractSelectionzTextPage.extractSelection,#  s    ..tVVDDr#   r  c                     |du r| j                  d      S | j                         dd }|j                  d        dj                  |D cg c]  }|d   	 c}      S c c}w )z%Return simple, bare text on the page.Fr   Nc                     | d   | d   fS )Nr   r   r$   r   s    r   r}  z&TextPage.extractText.<locals>.<lambda>4#  s    1Q41, r#   r  r   r   )r  r  r  r2  )r   r  r  r   s       r   extractTextzTextPage.extractText/#  s]    5=$$Q''##%a(./wwf-!-..-s   Ac                 $    | j                  d      S )z%Return page content as a HTML string.r   r  r   s    r   extractHTMLzTextPage.extractHTML7#  r  r#   c                    ddl ddl}| j                  d      } G fdd|j                        }||j                  |d<   |j
                  |d<   |d	u r|d
   }|j                  d        ||d
<   |j                  |d|d      }|S )z.Return 'extractDICT' converted to JSON format.r   NFr  c                       e Zd Z fdZy)'TextPage.extractJSON.<locals>.b64encodec                 t    t        |      t        t        fv r  j                  |      j	                         S y r-   r   r  r"  	b64encoder*  r   r   r(  s     r   defaultz/TextPage.extractJSON.<locals>.b64encode.defaultA#  5    7ui00+6++A.5577 1r#   Nr   r   r6   r  r(  s   r   r  r  @#      8r#   r  rm  rn  Tr  c                 "    | d   d   | d   d   fS Nr  r   r   r$   r  s    r   r}  z&TextPage.extractJSON.<locals>.<lambda>J#      qy|QvYq\&B r#   r  ,:r   
separatorsr(   indentr(  r  r  JSONEncoderrm  rn  r  dumpsr   r  r  r  rm  r  r  r(  s          @r   extractJSONzTextPage.extractJSON;#  s    !!e!,	8(( 	8
 >88CLIICM4<]FKKBKC"CMjj1jM
r#   c                    ddl ddl}| j                  d      } G fdd|j                        }||j                  |d<   |j
                  |d<   |du r|d	   }|j                  d
        ||d	<   |j                  |d|d      }|S )z1Return 'extractRAWDICT' converted to JSON format.r   NTr  c                       e Zd Z fdZy)*TextPage.extractRAWJSON.<locals>.b64encodec                 t    t        |      t        t        fv r  j                  |      j	                         S y r-   r  r  s     r   r  z2TextPage.extractRAWJSON.<locals>.b64encode.defaultU#  r  r#   Nr  r  s   r   r  r  T#  r  r#   r  rm  rn  r  c                 "    | d   d   | d   d   fS r   r$   r  s    r   r}  z)TextPage.extractRAWJSON.<locals>.<lambda>^#  r  r#   r  r  r   r  r  r  s          @r   extractRAWJSONzTextPage.extractRAWJSONO#  s    !!d!+	8(( 	8
 >88CLIICM4<]FKKBKC"CMjj1jM
r#   c                 $    | j                  d      S )z$Return page content as a XML string.r   r  r   s    r   
extractXMLzTextPage.extractXMLc#  r  r#   c                 $    | j                  d      S )z&Return page content as a XHTML string.r   r  r   s    r   extractXHTMLzTextPage.extractXHTMLg#  r  r#   c                     | j                  d      }||j                  |d<   |j                  |d<   |du r|d   }|j                  d        ||d<   |S )	z>Return page content as a Python dict of images and text spans.Fr  rm  rn  Tr  c                 "    | d   d   | d   d   fS r   r$   r  s    r   r}  z&TextPage.extractDICT.<locals>.<lambda>s#  r  r#   r  r  rm  rn  r  r   r  r  rm  r  s        r   extractDICTzTextPage.extractDICTk#  sa    !!e!,>88CLIICM4<]FKKBKC"CM
r#   c                     | j                  d      }||j                  |d<   |j                  |d<   |du r|d   }|j                  d        ||d<   |S )zCReturn page content as a Python dict of images and text characters.Tr  rm  rn  r  c                 "    | d   d   | d   d   fS r   r$   r  s    r   r}  z)TextPage.extractRAWDICT.<locals>.<lambda>#  r  r#   r  r  r  s        r   extractRAWDICTzTextPage.extractRAWDICTw#  sa    ""t",>88CLIICM4<]FKKBKC"CM
r#   c                 f    t        |       t        ury t        | dd      r| j                  |        y y r  )r   r  r   r  r   s    r   r  zTextPage.__del__#  0    DzX%4E*!!$' +r#   )r   r   r  r  r-   NF)!r   r   r6   r   r   r   r   r   delete_TextPager  r   r  r  r  r  r  r  r  rY   r  r  r  r   r  r  r  r  r  r  r  r  r  r  r$   r#   r   r  r  "  s    -/IOdeGH,,>E;2=-
  99E/ /$S $# (S ($C $$c $
$ 

T 
(r#   r  c                   N    e Zd Z ed d d      ZeZej                  Z	d Z
d Zy)rS  c                 6    | j                   j                         S r-   rC  r  s    r   r}  zGraftmap.<lambda>#  rD  r#   c                 8    | j                   j                  |      S r-   rC  rF  s     r   r}  zGraftmap.<lambda>#  rG  r#   rH  rI  c                 V    t        j                  | t        j                  |             y r-   )r   Graftmap_swiginitnew_Graftmap)r   r\  s     r   r   zGraftmap.__init__#  s    e&8&8&=>r#   c                 f    t        |       t        ury t        | dd      r| j                  |        y y r  )r   rS  r   r  r   s    r   r  zGraftmap.__del__#  r   r#   N)r   r   r6   r   r   r   r   r   delete_Graftmapr  r   r  r$   r#   r   rS  rS  #  s.    -/IOdeGH,,?(r#   rS  c                       e Zd Z ed d d      ZeZej                  Z	ddZ
ddZ	 	 ddZd	 Zed
        ZddZd Zy)
TextWriterc                 6    | j                   j                         S r-   rC  r  s    r   r}  zTextWriter.<lambda>#  rD  r#   c                 8    | j                   j                  |      S r-   rC  rF  s     r   r}  zTextWriter.<lambda>#  rG  r#   rH  rI  Nc                    t        j                  | t        j                  |||             || _        || _        t        |      | _        t        ddddd| j                  j                        | _	        | j                   | _
        t               | _        d| j                  _        t               | _        d| j                  _        t               | _        d| _        y)z;Stores text spans for later output on compatible PDF pages.r   r   rn  z'Position following last text insertion.zAccumulated area of text spans.TN)r   TextWriter_swiginitnew_TextWriterr
  r  r  rY   r|   rn  r	  ictmr  
last_pointr7   	text_rectr!   
used_fontsr   )r   	page_rectr
  r  s       r   r   zTextWriter.__init__#  s     	!!$(<(<YQV(WX
O	!Q2q$))*:*:;XXI	'"K!B%r#   c           
      4   t        |      | j                  z  }|t        d      }|j                  st	        d|j
                  z        |r-| j                  |      }dj                  t        |            }d}t        j                  | |||||||      }t        |dd       | j                  z  | _        | j                  | j                  z  | _        | j                  | j                  f}|j                  d   dk(  r| j                   j#                  |       |S )	z8Store 'text' at point 'pos' using 'font' and 'fontsize'.Nr  zUnsupported font '%s'.r   r   r  r  r   )r  r2  r  is_writabler   r   	clean_rtlr2  rq  r   TextWriter_appendr	  r3  _bboxr4  r  r5  r  )	r   posrw   rd  ry   r  right_to_left
small_capsrm  s	            r   r  zTextWriter.append#  s     Cj499$<<D5		ABB>>$'D778D>*DM %%dCtXxQ^`jkBC/DHH4dhh.nndoo-::f"OO% 
r#   c           	          |dz  }|D ].  }| j                  ||||||       |xj                  |z  c_        0 | j                  | j                  fS )z#Append text in vertical write mode.g333333?)rd  ry   r  r>  )r  r  r4  r3  )	r   r<  rw   rd  ry   r  r>  lheightr   s	            r   appendvzTextWriter.appendv#  s]     S. 	AKKQTH!j  :EEWE	 ~~t..r#   c           	         |s|S |j                  d      }g }t        t        |            D ]j  }||   }t        |      dk  rt        |D cg c]  }t	        |       c}      dkD  r=dj                  t        |            ||<   |j                  |       l g }t        t        |            D ]  }|g k(  r|j                  ||          ||   |d   dz   kD  r8t        |      dkD  r#t        ||d   |d   dz          ||d   |d   dz    ||   g}c||   |d   dz   k(  sr|j                  ||           dj                  |      }|S c c}w )a)  Revert the sequence of Latin text parts.

        Text with right-to-left writing direction (Arabic, Hebrew) often
        contains Latin parts, which are written in left-to-right: numbers, names,
        etc. For output as PDF text we need *everything* in right-to-left.
        E.g. an input like "<arabic> ABCDE FG HIJ <arabic> KL <arabic>" will be
        converted to "<arabic> JIH GF EDCBA <arabic> LK <arabic>". The Arabic
        parts remain untouched.

        Args:
            text: str
        Returns:
            Massaged string.
        r  r   r   r   rn  r   r   )rb  r   r   r   r  r2  rq  r  )r   rw   wordsr  r   r  r   idx2s           r   r9  zTextWriter.clean_rtl#  sW    K

3s5z" 	AaAFQJ#q&9!s1v&9":S"@778A;/a

1	 s3x 	$ArzCF#Q$r(Q,&t9q=4<d1gR155E$q'DHqL1 AxQ48a<'CF#	$ xx+ ':s   E

c                 F    t        j                  |       }t        |      }|S r-   )r   TextWriter__bboxr  r  s     r   r;  zTextWriter._bbox$  r  r#   c	                 	   t        |       t        | j                  |j                  z
        dkD  rt        d      |dk7  rJt	        |      t
        t        fvs(t	        |d         t        ust	        |d         t        urt        d      |dk7  r|dk7  rt        d      t        |dd      |d	k(  r| j                  }|| j                  }t        j                  | ||||||||	      }	|	d   }
|	d   }|
\  }}|j                         }|j                  |      }|dk7  rd
|z  }d}ndx}}dg}|r|j!                  |       |j"                  }|j$                  dv r.|j                  j&                  |j                  j(                  z
  }nd}|j*                  }t-        |      s|j.                  dk7  s|dk7  r:|j!                  d|j0                  |j2                  |j.                  z   |z
  fz         |rN|d   | j4                  z  }t        dd      j7                  |j0                  |j2                        }| |d   z  |z  }|s|r|j!                  dt9        |      z         |D ]  }|j;                  d      r|dk(  r&|j!                  |       |j!                  d|z         A|j;                  d      r)t=        |j?                         d   dd       |z   }d|z  }n|j;                  d      ro|j?                         }tA        |d         }|dk7  r|dz  }nd}|j!                  d|z         t=        |d   dd       |z   }djC                  d|z  g|dd z         }n|j;                  d      r"|j!                  |jE                  dd             ne|j;                  d       r"|j!                  |jE                  d d!             n2|j;                  d"      r!|j!                  |jE                  d"d#             |j!                  |        |r|j!                  |       |j!                  d$       d%jC                  |      jG                  d&      }tH        jK                  |||'       d}	| jL                  D ]  }tO        ||        |	S )(a  Write the text to a PDF page having the TextWriter's page size.

        Args:
            page: a PDF page having same size.
            color: override text color.
            opacity: override transparency.
            overlay: put in foreground or background.
            morph: tuple(Point, Matrix), apply a matrix with a fixpoint.
            matrix: Matrix to be used instead of 'morph' argument.
            render_mode: (int) PDF render mode operator 'Tr'.
        r  zincompatible page rectNr   r   z%morph must be (Point, Matrix) or Nonez$only one of matrix, morph is allowedr   rn  z/OC /%s BDCEMCr   r  r  z1 0 0 1 %g %g cmz%g %g %g %g %g %g cmz cmrH  z%i Trz gsr   z	/Alp%i gsz Tfg?z%g wr   r  z/F%iz rgra  RGz gz Gz kz KzQ
r
  r  )rW	  )(r  r   rY   r   r   r   r  r  r|   r   r
  r  r   TextWriter_write_textr+  r  r  r(	  r  rn  rm  r 	  r   r  r  r  r2  r   r  r1  r  rb  r   r2  rr  r  r~  r	  r5  r  )r   r   r  r
  rW	  rv  r\   render_moder+  rm  max_numsrR  max_alpmax_fontold_cont_linesoptcontbdcemcnew_cont_linesr  r  r-	  rd   r  alptempre  r  rd  s                                r   
write_textzTextWriter.write_text$  s6    	Dtyy499$%,566D=UE4=0a>.a>/ !HIIT>etmCDD7K.6'R-llG=JJE ))$eWguV\^ikmnq6a&$ ++-,,R0d?')CCNC#!!#&""==I%II$$tyy6EE]]8ruuzUaZ!!"4bddRUUlU>R7S"STa499$A1aL--acc1337EVeAh&.FF!!"88F;K"KL" 	(D}}U#t|%%d+%%g&;<}}U#$**,q/!"-.8"S(u%zz|d1g!#AA%%fqj14712;'(2xx$$qr( :;u%%%dll4&>?t$%%dll4&>?t$%%dll4&>?!!$'5	(6 !!#&e$))N+227;tWg>OO 	)DT4(	) 
r#   c                 f    t        |       t        ury t        | dd      r| j                  |        y y r  )r   r,  r   r  r   s    r   r  zTextWriter.__del__}$  s0    DzZ'4E*!!$' +r#   r   N)Nr  Nr   r   )Nr  NF)Nrn  r   NNr   r   )r   r   r6   r   r   r   r   r   delete_TextWriterr  r   r  rA  r9  r;  rV  r  r$   r#   r   r,  r,  #  sa    -/IOdeGH..*6 68"'/,\  fR(r#   r,  c                   V   e Zd Z ed d d      ZeZej                  Z	ddZ
ddZd dZd d	Zd!d
ZddZd Zd Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zd Zd Zd Zd Z y)"r  c                 6    | j                   j                         S r-   rC  r  s    r   r}  zFont.<lambda>$  rD  r#   c                 8    | j                   j                  |      S r-   rC  rF  s     r   r}  zFont.<lambda>$  rG  r#   rH  rI  Nc                    |rSt        |d      r|j                         }nt        |t              rt	        |      }t        |t              st        d      t        |t              r|j                         }d|v sd|v sd|v rt        d       |dv rd}n|j                  d	      rd
}nr|j                  d      rd}n^|j                  d      rd}nJ|t        j                         v rdd l}|j                  |      }d }~n|dk  rt        j                  ||      }t!        j"                  | t!        j$                  |||||||||	|

             d| _        y )Nr  zbad type: 'fontbuffer'r  r)  r   z!Warning: did you mean a fontfile?)cjkr  r  r   r  r   r  r   r  r   T)r   r  r   r"  r  r   r   rZ  r  r  r  r  rg	  rh	  r  r  r   Font_swiginitnew_Fontr   )r   rx   r~  r  rB  r  r.  is_bold	is_italicis_serifembedfname_lowerrg	  s                r   r   zFont.__init__$  sR   z:.'002
J	2":.
j%0 !9::h$"..*Kk!T[%8C;<N9:<<''	2''0''0 4 9 9 ;;$*11+>
!A*..xB 	D%..8ZQWYackmtv  BJ  LQ  #R  	Sr#   c                 6    t        j                  | |||||      S )z2Return the glyph width of a unicode (font size 1).)r   Font_glyph_advance)r   chrr  rB  rk	  r>  s         r   r
  zFont.glyph_advance$  s     ''c8VUJWWr#   c           	      8    t        j                  | ||||||      S )z1Return length of unicode 'text' under a fontsize.)r   Font_text_lengthr   rw   ry   r  rB  rk	  r>  s          r   text_lengthzFont.text_length$  s"     %%dD(HfeU_``r#   c           	      8    t        j                  | ||||||      S )z@Return tuple of char lengths of unicode 'text' under a fontsize.)r   Font_char_lengthsrk  s          r   char_lengthszFont.char_lengths$  s"     &&tT8XvuV`aar#   c                 N    t        j                  | ||||      }t        |      }|S )z1Return the glyph bbox of a unicode (font size 1).)r   Font_glyph_bboxr  )r   rh  r  rB  r>  rm  s         r   
glyph_bboxzFont.glyph_bbox$  s*     ##D#xL3i
r#   c                 6    t        j                  | |||||      S )z0Check whether font has a glyph for this unicode.)r   Font_has_glyph)r   rh  r  rB  fallbackr>  s         r   	has_glyphzFont.has_glyph$  s     ##D#x:VVr#   c                     ddl m } | j                  } |dd|z        }|j                         }| j                  |        |dt	        t        |            dd        S )Nr   )rm  r
  r  r   )rm  glyph_countbuffer_info_valid_unicodessortedr!   )r   rm  gcr  arrs        r   r	  zFont.valid_codepoints$  sV    3r	"nnS!S&R/!"-..r#   c                 .    t        j                  | |      S r-   )r   Font__valid_unicodes)r   r}  s     r   rz  zFont._valid_unicodes$      ))$44r#   c                 ,    t        j                  |       S r-   )r   
Font_flagsr   s    r   r  z
Font.flags$       %%r#   c                 ,    t        j                  |       S r-   )r   Font_is_boldr   s    r   ra  zFont.is_bold$  r
  r#   c                 ,    t        j                  |       S r-   )r   Font_is_serifr   s    r   rc  zFont.is_serif$  r
  r#   c                 ,    t        j                  |       S r-   )r   Font_is_italicr   s    r   rb  zFont.is_italic$  s     ##D))r#   c                 ,    t        j                  |       S r-   )r   Font_is_monospacedr   s    r   is_monospacedzFont.is_monospaced$  s     ''--r#   c                 ,    t        j                  |       S r-   )r   	Font_namer   s    r   r   z	Font.name$  r
  r#   c                 ,    t        j                  |       S r-   )r   Font_glyph_countr   s    r   rx  zFont.glyph_count$  s     %%d++r#   c                 ,    t        j                  |       S r-   )r   Font_bufferr   s    r   r  zFont.buffer$  r
  r#   c                 F    t        j                  |       }t        |      }|S r-   )r   	Font_bboxr  r  s     r   r  z	Font.bbox$  s      ood#3i
r#   c                 ,    t        j                  |       S )z Return the glyph ascender value.)r   Font_ascenderr   s    r   ascenderzFont.ascender%  r  r#   c                 ,    t        j                  |       S )z!Return the glyph descender value.)r   Font_descenderr   s    r   	descenderzFont.descender%  r
  r#   c                      yr  r$   r   s    r   r8  zFont.is_writable%  s    r#   c                     t        |      S )z$Return the unicode for a glyph name.)r  r}  s     r   r  zFont.glyph_name_to_unicode%  s    $T**r#   c                     t        |      S )z$Return the glyph name for a unicode.)r  )r   r  s     r   r  zFont.unicode_to_glyph_name%  s    $R((r#   c                      d| j                   z  S )Nz
Font('%s'))r   r   s    r   r   zFont.__repr__!%  s    dii''r#   c                 f    t        |       t        ury t        | dd      r| j                  |        y y r  )r   r  r   r  r   s    r   r  zFont.__del__$%  s0    DzT!4E*!!$' +r#   )
NNNr   Nrn  r   r   r   r   )Nr   r   r   )r  Nr   r   r   )Nr   r   )!r   r   r6   r   r   r   r   r   delete_Fontr  r   r
  rl  ro  rr  rv  r	  rz  r  ra  rc  rb  r  r   rx  r  r  r  r  r8  r  r  r  r$   r#   r   r  r  $  sC   -/IOdeGH(("LXabW/5& &( () )* *. .% %, ,' '  ) )
 * *  +)((r#   c                   n    e Zd Z ed d d      ZeZej                  Z	ddZ
d Zd Zd	 Zd
 Zd Zd Zy)DocumentWriterc                 6    | j                   j                         S r-   rC  r  s    r   r}  zDocumentWriter.<lambda>.%  rD  r#   c                 8    | j                   j                  |      S r-   rC  rF  s     r   r}  zDocumentWriter.<lambda>.%  rG  r#   rH  rI  Nc                     t        |      t        u rn0t        |d      rt        |      }nt        |d      r|j                  }|d k(  rd}t	        j
                  | t	        j                  ||             y )NrK  r   r   )r   r   r   r   r   DocumentWriter_swiginitnew_DocumentWriter)r   r5  optionss      r   r   zDocumentWriter.__init__2%  sb    :T:&t9DT6"99DD=G 	%%dE,D,DT7,STr#   c                 .    t        j                  | |      S r-   )r   DocumentWriter_begin_pager  s     r   
begin_pagezDocumentWriter.begin_pageD%  s    ..tX>>r#   c                 ,    t        j                  |       S r-   )r   DocumentWriter_end_pager   s    r   end_pagezDocumentWriter.end_pageG%  s    ,,T22r#   c                 ,    t        j                  |       S r-   )r   DocumentWriter_closer   s    r   r  zDocumentWriter.closeJ%  s    ))$//r#   c                 f    t        |       t        ury t        | dd      r| j                  |        y y r  )r   r  r   r  r   s    r   r  zDocumentWriter.__del__M%  s0    Dz^+4E*!!$' +r#   c                     | S r-   r$   r   s    r   r  zDocumentWriter.__enter__S%  r  r#   c                 $    | j                          y r-   r  r>  s     r   r  zDocumentWriter.__exit__V%  r  r#   r-   )r   r   r6   r   r   r   r   r   delete_DocumentWriterr  r   r  r  r  r  r  r  r$   r#   r   r  r  -%  sH    -/IOdeGH22U$?30(r#   r  c                       e Zd Z ed d d      ZeZej                  Z	d Z
d Zd Zdd	Zdd
ZddZddZddZddZdZed        Zd Zd Zy)r  c                 6    | j                   j                         S r-   rC  r  s    r   r}  zArchive.<lambda>]%  rD  r#   c                 8    | j                   j                  |      S r-   rC  rF  s     r   r}  zArchive.<lambda>]%  rG  r#   rH  rI  c                     g | _         t        j                  | t        j                  |        d| _        |dk7  r | j
                  |  y y )NTr$   )_subarchivesr   Archive_swiginitnew_Archiver   r  r>  s     r   r   zArchive.__init__a%  sG     	tU%6%6%=>2:DHHdO r#   c                 .    t        j                  | |      S r-   )r   Archive_has_entryr}  s     r   	has_entryzArchive.has_entryo%      &&tT22r#   c                 .    t        j                  | |      S r-   )r   Archive_read_entryr}  s     r   
read_entryzArchive.read_entryr%  s    ''d33r#   Nc                 0    t        j                  | ||      S r-   )r   Archive__add_dir)r   folderr5  s      r   _add_dirzArchive._add_diru%  s    %%dFD99r#   c                 0    t        j                  | ||      S r-   )r   Archive__add_arch)r   subarchr5  s      r   	_add_archzArchive._add_archx%  s    &&tWd;;r#   c                 2    t        j                  | |||      S r-   )r   Archive__add_ziptarfile)r   filepathr   r5  s       r   _add_ziptarfilezArchive._add_ziptarfile{%  s    ,,T8T4HHr#   c                 2    t        j                  | |||      S r-   )r   Archive__add_ziptarmemory)r   memoryr   r5  s       r   _add_ziptarmemoryzArchive._add_ziptarmemory~%  s    ..tVT4HHr#   c                 2    t        j                  | |||      S r-   )r   Archive__add_treeitem)r   r  r   r5  s       r   _add_treeitemzArchive._add_treeitem%  s    **4tDDr#   c                 ^    d }g dd fd}t        |t        j                        rrd|j                         |t	        |dd      }t	        |dd      }|r j                  |d|        |       S  j                  |j                         d|        |       S t        |t        j                        rd|j                         |t	        |j                  d	d      }|j                  }t        |t        j                        s|s|j                  }|r j                  |d
|        |       S  j                  |j                         d
|        |       S t        |t              rd| j                  ||        |       S  ||      r>|rt!        |      t"        u st%        d      dd|g j'                  ||        |       S t)        |d	      r|j*                  }n%t        |t,        j.                        rt#        |      }t0        j2                  j5                  t#        |            r=t#        |      }d|t1        j6                  |       j9                  ||        |       S t0        j2                  j;                  t#        |            ru|rt!        |      t"        u st%        d      t#        |      }t=        |d      }|j?                         }	|jA                          dd|g j'                  |	|        |       S t!        |      t"        u st	        |dd      st%        d      tC        |      dk(  r|\  }
} ||
      s(t0        j2                  j;                  t#        |
            rt!        |      t"        urt%        d|       |d ||
      r j'                  |
|       nMt=        t#        |
      d      }|j?                         }	|jA                          tD        j'                  |	|       |g |       S |D ]  } jG                  ||        y)a  Add a sub-archive.

        Args:
            content: content to be added. May be one of Archive, folder
                 name, file name, raw bytes (bytes, bytearray), zipfile,
                 tarfile, or a sequence of any of these types.
            path: (str) a "virtual" path name, under which the elements
                of content can be retrieved. Use it to e.g. cope with
                duplicate element names.
        c                 L    t        | t        t        t        j                  f      S r-   )r   r  r"  r  r  r  s    r   r}  zArchive.add.<locals>.<lambda>%  s    :a%BJJ)GH r#   Nc                  :   d} dk7  sj                   g k(  rj                   j                  |        y j                   d   }|d   dk7  s|d   | d   k7  rj                   j                  |        y |d   j                  | d          |j                   d<   y )N)r  entriesr5  treern  r  r5  r  )r  r  extend)r  ltreer  r  mountr   s     r   make_subarchz!Archive.add.<locals>.make_subarch%  s    !guEGf} 1 1R 7!!((1  ))"-<6)U6]gfo-M%%,,W5  )$++GI,>?,1D%%b)r#   zipr  fpr   tarr   r   multizneed name for binary contentr  dirr  r   zbad archive contentr   zbad item name )r5  )$r   zipfileZipFiler  r   r  r  r  tarfileTarFilegetnamesfileobjr  r  r  r  r   r   r   r  r   r   pathlibPathr1  r5  isdirlistdirr  rX  r0  r  r  r   seldr  )r   rR  r5  bin_okr  r  r  r6  rd  ffdatar   rh  r  r  r  s   `            @@@r   r  zArchive.add%  s    I	 gw/C&&(GEw
D9H$-B$$Xq$7  >! &&r{{}a>>!gw/C&&(GEw=HBb"**-hZZ$$Xq$7  >! &&r{{}a>>!gw'CENN7D)>!'?T$Z3. !?@@CEfGw->!7F#llG.'lG77==W&WBCEjjnGMM"d#>!77>>#g,'T$Z3. !?@@WBRABGGICEfGr4(>!=Cwwt'L233 w<1 JD$d|rww~~c$i8DzS($~dV%<==$<&&tT&>SY-ABGGI&&r4e&<&#~%  	!DHHT4 	!r#   zArchive(dirname [, path]) - from folder
    Archive(file [, path]) - from file name or object
    Archive(data, name) - from memory item
    Archive() - empty archive
    Archive(archive [, path]) - from archive
    c                     | j                   S )zList of sub archives.)r  r   s    r   
entry_listzArchive.entry_list&  s        r#   c                 2    dt        | j                         S )NzArchive, sub-archives: )r   r  r   s    r   r   zArchive.__repr__&  s    (T->->)?(@AAr#   c                 f    t        |       t        ury t        | dd      r| j                  |        y y r  )r   r  r   r  r   s    r   r  zArchive.__del__&  s0    DzW$4E*!!$' +r#   r-   )r   r   r6   r   r   r   r   r   delete_Archiver  r   r  r  r  r  r  r  r  r  r7   r  r  r$   r#   r   r  r  \%  s|    -/IOdeGH++	34:<IIE{!zG ! !B(r#   r  c                      e Zd Z ed d d      ZeZej                  Z	d Z
ed        Zd Zd Zd	 Zd
 Zd Zd Zed        Zed        Zd Zd Zd Zd Zd Zd Zd Zed        Zed        Zd Zed        Zed        Zd Z d Z!ed        Z"ed        Z#e$d        Z%dMd!Z&d" Z'dNd#Z(d$ Z)d% Z*d& Z+d' Z,dOd(Z-d) Z.d* Z/dPd+Z0dPd,Z1e1Z2e1Z3e1Z4dPd-Z5dPd.Z6d/ Z7d0 Z8d1 Z9d2 Z:d3 Z;d4 Z<d5 Z=d6 Z>d7 Z?d8 Z@dQd9ZAd: ZBd; ZCd< ZDd= ZEd> ZFd? ZGd@ ZHdA ZIdRdBZJdRdCZK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dSdDZLdE ZMdF ZNdG ZOdH ZPdI ZQdJ ZRdK ZSdL ZTy )TXmlc                 6    | j                   j                         S r-   rC  r  s    r   r}  zXml.<lambda>&  rD  r#   c                 8    | j                   j                  |      S r-   rC  rF  s     r   r}  zXml.<lambda>&  rG  r#   rH  rI  c                 P    t        j                  | t        j                  |        y r-   )r   Xml_swiginitnew_Xmlr>  s     r   r   zXml.__init__&  s    4!56r#   c                 ,    t        j                  |       S r-   )r   Xml_rootr   s    r   rootzXml.root &       ~~d##r#   c                 ,    t        j                  |       S r-   )r   Xml_bodytagr   s    r   bodytagzXml.bodytag%&        &&r#   c                 .    t        j                  | |      S r-   )r   Xml_append_childr   childs     r   append_childzXml.append_child(&  s    %%dE22r#   c                 .    t        j                  | |      S r-   )r   Xml_create_text_noder   rw   s     r   create_text_nodezXml.create_text_node+&      ))$55r#   c                 .    t        j                  | |      S r-   )r   Xml_create_element)r   tags     r   create_elementzXml.create_element.&  s    ''c22r#   c                 2    t        j                  | |||      S r-   )r   Xml_findr   r  attr  s       r   rE  zXml.find1&  s    ~~dCe44r#   c                 2    t        j                  | |||      S r-   )r   Xml_find_nextr  s       r   	find_nextzXml.find_next4&  s    ""4c599r#   c                 ,    t        j                  |       S r-   )r   Xml_nextr   s    r   r  zXml.next6&  r  r#   c                 ,    t        j                  |       S r-   )r   Xml_previousr   s    r   previouszXml.previous:&  r
  r#   c                 0    t        j                  | ||      S r-   )r   Xml_set_attribute)r   r  r    s      r   set_attributezXml.set_attribute?&  s    &&tS%88r#   c                 .    t        j                  | |      S r-   )r   Xml_remove_attributer  s     r   remove_attributezXml.remove_attributeB&  r  r#   c                 .    t        j                  | |      S r-   )r   Xml_get_attribute_valuer  s     r   get_attribute_valuezXml.get_attribute_valueE&  s    ,,T377r#   c                 ,    t        j                  |       S r-   )r   Xml_get_attributesr   s    r   get_attributeszXml.get_attributesH&  s    ''--r#   c                 .    t        j                  | |      S r-   )r   Xml_insert_beforer   nodes     r   insert_beforezXml.insert_beforeK&  r  r#   c                 .    t        j                  | |      S r-   )r   Xml_insert_afterr.  s     r   insert_afterzXml.insert_afterN&  s    %%dD11r#   c                 ,    t        j                  |       S r-   )r   	Xml_cloner   s    r   clonez	Xml.cloneQ&  s    t$$r#   c                 ,    t        j                  |       S r-   )r   
Xml_parentr   s    r   rX  z
Xml.parentS&  r  r#   c                 ,    t        j                  |       S r-   )r   Xml_first_childr   s    r   first_childzXml.first_childW&  r
  r#   c                 ,    t        j                  |       S r-   )r   
Xml_remover   s    r   removez
Xml.remove\&  s    %%r#   c                 ,    t        j                  |       S r-   )r   Xml_textr   s    r   rw   zXml.text^&  r  r#   c                 ,    t        j                  |       S r-   )r   Xml_tagnamer   s    r   tagnamezXml.tagnameb&  r
  r#   c                 .    fdd}g } | ||      }|S )Nc           	         | d k7  r| j                   r.|j                  |d| j                   df       | j                  } ?|j                  |d| j                   f       | j                         j                         D ]  \  }}|j                  |d| d| df       ! | j                  }|r |||dz         }|j                  |d| j                   f       | j                  } | d k7  r|S )N"r'  r  z 'r  r   r(  )is_textr  rw   r  rC  r+  r  r;  )r/  r  shiftr  r   r	  	show_nodes         r   rI  z%Xml._get_node_tree.<locals>.show_nodeh&  s    $,<<LL%1TYYKq)9!:;99Deq%789 //1779 9DAqLL%1QCr!A!789((%eUEAI>Eeq%789yy $, Lr#   r   r$   )r   rH  r  rI  s      @r   _get_node_treezXml._get_node_treeg&  s'    	  $u-r#   c                     | j                         }|D ])  }t        d|d   z  |d   j                  dd      z          + y)z)Print a list of the node tree below self.z  r   r   r
  r*  N)rJ  r  rr  )r   r  rh  s      r   debugz	Xml.debug}&  sE    ##% 	AD$a.47??4#??@	Ar#   c                      | j                   dk7  S )zCheck if this is a text node.N)rw   r   s    r   rG  zXml.is_text&  s     yyD  r#   c                 d    | j                   }|dk(  ry	 |j                  dk(  r|S |j                  })zReturn last child node.N)r;  r  r  s     r   
last_childzXml.last_child&  s;       $;zzT!JJE r#   c                     t        |       t        u r| S t        |       t        u rdt        |        dS t        |       t        t
        fv rdt	        |        S | S )Nzrgb(r(  rm  )r   r   r  r  r   r  )r  s    r   
color_textzXml.color_text&  sZ    ;#L;#+e,-Q//;5$-'u''r#   Nc                     | j                  d      }|dkD  r|j                  dt        |             |dk7  r|j                  d|       | j                  |       |S )zAdd numbered list ("ol" tag)rz  r   r  Nr   )r  r"  r   r
  )r   r  numtyper	  s       r   add_number_listzXml.add_number_list&  sW    ##D)19U4d?0% r#   c                 J    | j                  d      }| j                  |       |S )zAdd description list ("dl" tag)dlr  r
  r  s     r   add_description_listzXml.add_description_list&  %    ##D)% r#   c                 4   | j                  d      }|dk7  r|j                  d|        |dk7  r|j                  d|        |dk7  r|j                  dd|        |dk7  r|j                  d|        |j                  d|        | j                  |       |S )	zAdd image node (tag "img").r  Nrm  rn  rY  zfloat: r  r   )r  r"  r
  )r   r   rm  rn  imgfloatr  r	  s          r   	add_imagezXml.add_image&  s    ##E*D=E74T>VH6t78*)=>D=E74EdV-% r#   c                 J    | j                  d      }| j                  |       |S )zAdd bulleted list ("ul" tag)r  rW  r  s     r   add_bullet_listzXml.add_bullet_list&  rY  r#   c                     | j                   dvrt        d| j                         | j                  d      }| j                  |       |S )z8Add item ("li" tag) under a (numbered or bulleted) list.)rz  r  zcannot add list item toli)rC  r   r  r
  r  s     r   add_list_itemzXml.add_list_item&  sC    <<|+6EE##D)% r#   c                 J    | j                  d      }| j                  |       |S NspanrW  r  s     r   add_spanzXml.add_span&  s%    ##F+% r#   c                     | j                  d      }| j                  dk7  r| j                  |       |S | j                  j                  |       |S )zAdd "p" tagrd   )r  rC  r
  rX  r  s     r   add_paragraphzXml.add_paragraph&  sL    ##C(<<3e$  KK$$U+r#   c                     |t        dd      vrt        d      | j                  }d| }| j                  |      }| }|dvr| j	                  |       |S | j
                  j	                  |       |S )zAdd header tagr   r  zHeader level must be in [1, 6]r   )h1h2h3h4h5h6rd   )r   r   rC  r  r
  rX  )r   r  this_tagnew_tagr	  prevs         r   
add_headerzXml.add_header&  sx    a#=>><<eW+##G,DDe$L  'r#   c                 J    | j                  d      }| j                  |       |S )zAdd "div" tagdivrW  r  s     r   add_divisionzXml.add_division&  %    ##E*% r#   c                 J    | j                  d      }| j                  |       |S )zAdd horizontal line ("hr" tag)hrrW  r  s     r   add_horizontal_linezXml.add_horizontal_line&  rY  r#   c                     | j                  d      }t        |t              s|}|j                  d|       |j	                  | j                  |             | j                         }|dk(  r| }|j	                  |       | S )zAdd a hyperlink ("a" tag)rS   hrefN)r  r   r   r"  r
  r  span_bottom)r   r{  rw   r	  rq  s        r   add_linkzXml.add_link&  sw    ##C($$DFD)40067!4<D% r#   c                     | j                  d      }t        |      t        u r |j                  | j	                  |             | j                         }|dk(  r| }|j                  |       | S )zAdd a "code" tagr
  Nr  r   r   r
  r  r|  r   rw   r	  rq  s       r   add_codezXml.add_code&  sd    ##F+:d33D9:!4<D% r#   c                     | j                  d      }t        |      t        u r |j                  | j	                  |             | j                         }|dk(  r| }|j                  |       | S )zAdd a superscript ("sup" tag)supNr  r  s       r   add_superscriptzXml.add_superscript'  d    ##E*:d33D9:!4<D% r#   c                     | j                  d      }t        |      t        u r |j                  | j	                  |             | j                         }|dk(  r| }|j                  |       | S )zAdd a subscript ("sub" tag)subNr  r  s       r   add_subscriptzXml.add_subscript'  r  r#   c                 J    | j                  d      }| j                  |       |S )z!Add monospaced lines ("pre" node)prerW  r  s     r   add_codeblockzXml.add_codeblock$'  rv  r#   c                 J   | }| j                   }|dk(  ry|j                  r|j                  }|dk(  rn|j                  r|dk(  s|j                  dk7  ry	 |dk(  r|S |j                  dv s|j                  r|j                  }/|j                  dk(  r|}|j
                  }n|S O)z$Find deepest level in stacked spans.Nrd  )rS   r  r  body)rO  rG  r  rC  r  r;  )r   rX  r	  s      r   r|  zXml.span_bottom*'  s    D=mmNNE} mm D=EMMV3}}} 99U]]

}}&)) r#   c                     | j                  d      }|j                  |       | j                         }|d k(  r| }|j                  |       |S rc  )r  	add_styler|  r
  )r   rY  rd  rq  s       r   append_styled_spanzXml.append_styled_spanC'  sK    ""6*u!4<D$r#   c                 2    d|z  }| j                  |       | S )zSet margin values via CSS stylezmargins: %sr  r   rm  rw   s      r   set_marginszXml.set_marginsL'  s    s"%r#   c                 2    d|z  }| j                  |       | S )z"Set font-family name via CSS stylezfont-family: %sr  )r   rd  rw   s      r   set_fontzXml.set_fontR'  s     4'%r#   c                 P    d| j                  |      z  }| j                  |       | S )zSet text color via CSS stylez	color: %s)rQ  r  r   r  rw   s      r   	set_colorzXml.set_colorX'  s(    dooe44%r#   c                 2    d| }| j                  |       | S )z(Set number of text columns via CSS stylez	columns: r  )r   r  rw   s      r   set_columnszXml.set_columns^'  s!    4&!%r#   c                 P    d| j                  |      z  }| j                  |       | S )z"Set background color via CSS stylezbackground-color: %s)rQ  r  r  s      r   set_bgcolorzXml.set_bgcolord'  s&    %)??tr#   c                 2    d| }| j                  |       | S )zSet opacity via CSS stylez	opacity: r  )r   r
  rw   s      r   rB  zXml.set_opacityj'  s!    7)$%r#   c                     d}t        |t              r|}n>|t        k(  rd}n2|t        k(  rd}n&|t        k(  rd}n|t
        k(  rd}nt        d|       ||z  }| j                  |       | S )z Set text alignment via CSS styleztext-align: %sr,  centerrightjustifyzUnrecognised align=)r   r   TEXT_ALIGN_LEFTTEXT_ALIGN_CENTERTEXT_ALIGN_RIGHTTEXT_ALIGN_JUSTIFYr   r  )r   r  rw   r  s       r   	set_alignzXml.set_alignp'  sz    uc"Ao%A''A&&A((A25':;;axtr#   c                 2    d|z  }| j                  |       | S )Nztext-decoration: %sr  r  s      r   set_underlinezXml.set_underline'  s    $s*%r#   c                 ,    d}| j                  |       | S )z%Insert a page break before this node.zpage-break-before: alwaysr  r  s     r   set_pagebreak_beforezXml.set_pagebreak_before'  s    *tr#   c                 ,    d}| j                  |       | S )z$Insert a page break after this node.zpage-break-after: alwaysr  r  s     r   set_pagebreak_afterzXml.set_pagebreak_after'  s    )tr#   c                 b    t        |      t        u rd}nd}d| | }| j                  |       | S )z Set font size name via CSS styler   r  zfont-size: )r   r   r  )r   ry   r  rw   s       r   set_fontsizezXml.set_fontsize'  s;    >S BBXJrd+%r#   c                 2    d| }| j                  |       | S )z6Set line height name via CSS style - block-level only.zline-height: r  )r   
lineheightrw   s      r   set_lineheightzXml.set_lineheight'  s    zl+tr#   c                 2    d| }| j                  |       | S )z>Set inter-line spacing value via CSS style - block-level only.z-mupdf-leading: r  )r   leadingrw   s      r   set_leadingzXml.set_leading'  s    !'+tr#   c                 2    d| }| j                  |       | S )z*Set inter-word spacing value via CSS stylezword-spacing: r  r   spacingrw   s      r   set_word_spacingzXml.set_word_spacing'  s!    y)%r#   c                 2    d| }| j                  |       | S )z,Set inter-letter spacing value via CSS stylezletter-spacing: r  r  s      r   set_letter_spacingzXml.set_letter_spacing'  s!    !'+%r#   c                 2    d| }| j                  |       | S )z;Set text indentation name via CSS style - block-level only.ztext-indent: r  )r   r  rw   s      r   set_text_indentzXml.set_text_indent'  s    vh'tr#   c                 @    |rd}nd}d|z  }| j                  |       | S )zSet bold on / off via CSS styler  r  zfont-weight: %sr  r  s      r   set_boldzXml.set_bold'  s,    CC 3&%r#   c                 @    |rd}nd}d|z  }| j                  |       | S )z!Set italic on / off via CSS styler  r  zfont-style: %sr  r  s      r   
set_italiczXml.set_italic'  s,    CC#%%r#   c                    | j                   }|j                         }||j                  |       ||j                  |       ||j	                  |       ||j                  |       ||j                  |       ||j                  |       ||j                  |       ||j                  |       |	|j                  |	       |
|j                  |
       ||j                  |       ||j                  |       ||j                  |       ||j                          ||j!                          ||j#                  |       || j%                  |       || j'                  |       g }|j)                  d      }||j+                  |       |j,                  }|r/|j+                  |j)                  d             |j,                  }|r/| j/                  ddj1                  |             |j3                          | S )zaSet any or all properties of a node.

        To be used for existing nodes preferrably.
        rY  r  )r   ru  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  set_id	add_classr(  r  r;  r"  r2  r>  )r   r  bgcolorr  r  columnsrd  ry   r  r  r  letter_spacingr  marginspagebreak_afterpagebreak_beforeword_spacingunqidr(   r   rU  styles	top_styler	  s                           r   set_propertieszXml.set_properties'  s   2 yy  "NN5!W%MM$NN5!W%MM$h'  (OOF#W%%##N3!
+W%&$$&'%%'#!!,/KK?NN3,,W5	 MM)$  MM%33G<=%%E  	7CHHV$45r#   c                     | j                   }| j                  }|j                  dd|      rt        d| d      | j	                  d|       | S )zSet a unique id.Nr  zid 'z' already exists)rC  r   rE  r   r"  )r   uniquerC  r   s       r   r  z
Xml.set_id(  sP     ,,yy99T4(tF8+;<==4(r#   c                 "   |j                         }t        |      }| j                         }|dk(  r| }t        |      D ]N  \  }}|j	                  | j                  |             ||dz
  k  s/|j	                  | j                  d             P | S )z"Add text. Line breaks are honored.Nr   rg  )r+  r   r|  rc  r
  r  r  )r   rw   r  
line_countrq  r   r  s          r   add_textzXml.add_text&(  s    !Z
!4<D ' 	=GAtd33D9::>!!!$"5"5d";<	= r#   c                     | j                  d      }|dk7  r||v r| S | j                  d       |dk(  r|}n|d|z   z  }| j                  d|       | S )z;Set some style via CSS style. Replaces complete style spec.rY  Nr  r(  r%  r"  )r   rw   rY  s      r   r  zXml.add_style4(  sa    ((1D=TU]Kg&D=ES4ZE7E*r#   c                     | j                  d      }|dk7  r||v r| S | j                  d       |dk(  r|}n|d|z   z  }| j                  d|       | S )z5Set some class via CSS. Replaces complete class spec.classNr  r  )r   rw   r(   s      r   r  zXml.add_classA(  sa    &&w/$;43;Kg&$;C3:C7C(r#   c                     |j                         }t        |      }t        |      D ]N  \  }}| j                  | j	                  |             ||dz
  k  s/| j                  | j                  d             P | S )Nr   rg  )r+  r   rc  r
  r  r  )r   rw   r  r  r   r  s         r   insert_textzXml.insert_textN(  st    !Z
 ' 	=GAtd33D9::>!!!$"5"5d";<	= r#   c                     | S r-   r$   r   s    r   r  zXml.__enter__W(  r  r#   c                      y r-   r$   r>  s     r   r  zXml.__exit__Z(  r  r#   c                 f    t        |       t        ury t        | dd      r| j                  |        y y r  )r   r  r   r  r   s    r   r  zXml.__del__](  s0    DzS 4E*!!$' +r#   rX  r  r	  r-   )	underline)T)NNNNNNNNNNNNNNNNNN)Ur   r   r6   r   r   r   r   r   
delete_Xmlr  r   r   r  r
  r  r  rE  r  r  r  r"  r%  r(  r+  r0  r3  r6  rX  r;  r>  rw   rC  rJ  rL  rG  rO  staticmethodrQ  rT  rX  r\  r^  ra  re  rg  rr  ru  ry  r}  r  add_varadd_sampadd_kbdr  r  r  r|  r  r  r  r  r  r  rB  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$   r#   r   r  r  &  s[   -/IOdeGH''7$ $'3635:$ $( (958.32%& &+ +&$ $' ',A ! !    
	 GHG		2&
 'JX(r#   r  c                       e Zd Z ed d d      ZeZej                  Z	ddZ
d Zd Zdd	Zd
 Zd ZddZedd       Zd ZddZedd       Zed        Zed        Zd Zy)Storyc                 6    | j                   j                         S r-   rC  r  s    r   r}  zStory.<lambda>g(  rD  r#   c                 8    | j                   j                  |      S r-   rC  rF  s     r   r}  zStory.<lambda>g(  rG  r#   rH  rI  Nc           	          |d k7  rt        |t              dk(  rt        |      }t        j                  | t        j                  ||||             y r!  )r   r  r   Story_swiginit	new_Story)r   r  user_cssemr  s        r   r   zStory.__init__k(  sB    d?z'7;uDg&G 	T5??42w#OPr#   c                 ,    t        j                  |       S r-   )r   Story_resetr   s    r   r  zStory.resets(  r  r#   c                 .    t        j                  | |      S r-   )r   Story_place)r   wheres     r   placezStory.placev(  s      u--r#   c                 0    t        j                  | ||      S r-   )r   
Story_draw)r   devicer\   s      r   drawz
Story.drawy(  s    ff55r#   c                 ,    t        j                  |       S r-   )r   Story_documentr   s    r   documentzStory.document|(  s    ##D))r#   c                 @   t        |      t        u rF|j                         D ]2  }t        |      t        u r|j	                         r%t        d| d       ni }t        |      r|j                  j                  dk7  rt        d      t        j                  | ||      S )zTrigger a callback function to record where items have been placed.

        Args:
            function: a function accepting exactly one argument.
            args: an optional dictionary for passing additional data.
        zinvalid key 'r  r   z@callback 'function' must be a callable with exactly one argument)r   r  r  r   isidentifierr   callable__code__co_argcountr   Story_element_positions)r   functionr   r  s       r   element_positionszStory.element_positions(  s     :YY[ ;Q31>>+;$}QCq%9::; D!X%6%6%B%Ba%G_`` ,,T8TBBr#   c                    d }dd}t        dddd      }	  |||      \  }}	}
|dz  }|rdz  | j                  |	      \  }}rfd}| j                  |i        |ru|rA|r!|r |t        |d       |j	                          |j                  |      }|r |||d       | j                  ||
       |s0|r |||d       |j	                          n| j                  d |
       |sy )Nr   r   c                 $    | _          |        y r-   )page_num)positionr  
positionfns    r   positionfn2z Story.write.<locals>.positionfn2(  s     )1H%x(r#   )r  r  r  mediboxr  r  r  )r   writerrectfnr  pagefndevrect_numfilledr 	  rY   r	  morer  r  s      `         @r   rP  zStory.write(  s   aAq!"(6":HdCMHA::t,LD&) &&{B7!"8Wc1=) ++X6Cx3:		3$(C;OO%		$$E r#   c	                     t               d }		 |	}
 |      }	d|	|
k(  rd|	}t        ||||      }|r|j                          t               fd}|j                  r| nd |||       ry b)NFTc                 D    j                  |        rr	 |        y y y r-   r  )r  r  	positionsstables    r   r  z+Story.write_stabilized.<locals>.positionfn2(  s%      *jx( )6r#   )r  r  add_header_idsrP  )r
  	contentfnr  r  r  r  r  r  r  rR  content_prevcontent2storyr  r  r  s        `        @@r   write_stabilizedzStory.write_stabilized(  s    F	"L+GF,&H(Hb':E$$&I)
 KK$F$	 3 r#   c                 (   | j                   }d}|j                  ddd      }|ro|j                  }t        |      dk(  r>|d   dk(  r6|d   dv r/|j	                  d      }|sd| }|j                  d|       |dz  }|j                  ddd      }|rnyy)	zt
        Look for `<h1..6>` items in `self` and adds unique `id`
        attributes if not already present.
        r   Nr   r   r   123456r  h_id_)r  rE  rC  r   r(  r"  r  )r   domr   r  r   attrid_s          r   r  zStory.add_header_ids(  s    
 iiHHT4&99D4yA~$q'3,47h3F,,T2!!+COOD#.FAD$-A r#   c                     t        j                         }t        |      }g fd}| j                  ||||       |j	                          |j                  d       t        j                  |      S )Nc                 >    j                  |        r	 |        y y r-   r  r  r  r  s    r   r  z+Story.write_with_links.<locals>.positionfn2(  !    X&8$ r#   )r  r  r   )r  r  r  rP  r  r:  r  add_pdf_links)r   r  r  r  r  r
  r  r  s     `    @r   write_with_linkszStory.write_with_links(  s_    '		%
 	

66k&
IA""6955r#   c                     t        j                         }t        |      }	g fd}
t        j	                  |	| ||||
|||	       |	j                          |j                  d       t        j                  |      S )Nc                 >    j                  |        r	 |        y y r-   r  r$  s    r   r  z6Story.write_stabilized_with_links.<locals>.positionfn2)  r%  r#   r   )r  r  r  r  r  r  r:  r&  )r  r  r  r  r  r  r  r  r  r
  r  r  s       `      @r   write_stabilized_with_linksz!Story.write_stabilized_with_links(  sn     '		%
 	vy&(BU[]dftuA""6955r#   c                    t        | t              r| }nt        d|       }t               }|D ]=  }|j                  dz  s|j                  s |j                  |v r/|||j                  <   ? |D ]  }|j                  dz  s|j
                  s |j
                  j                  d      s<|j
                  dd }	 ||   }	 t               }	t        |	d<   t        |j                        |	d<   |j                  \  }
}}}t        |
|      |	d	<   |j                  dz
  |	d
<   ||j                  dz
     j                  |	        |S # t        $ r}t        d| d|       d}~ww xY w)a  
        Adds links to PDF document.
        Args:
            document_or_stream:
                A PDF `Document` or raw PDF content, for example an
                `io.BytesIO` instance.
            positions:
                List of `ElementPosition`'s for `document_or_stream`,
                typically from Story.element_positions(). We raise an
                exception if two or more positions have same id.
        Returns:
            `document_or_stream` if a `Document` instance, otherwise a
            new `Document` instance.
        We raise an exception if an `href` in `positions` refers to an
        internal position `#<name>` but no item in `postions` has `id =
        name`.
        rL  r   r  NzNo destination with id=z, required by position_from: r  fromr  r   )r   rA  r  
open_closer  r{  r  r   r  r  r  r  rY   r  r  insert_link)document_or_streamr  r  id_to_positionr  position_from	target_idposition_tor   r	  r   r  r  r  s                 r   r&  zStory.add_pdf_links)  s   & ((3)H'9:H
 ! 	<H##a'X[[;;.03;NHKK0	< ' 	GM))A-%**%**55c: *..qr2	z"0)"<K
 
 v(V#M$6$67V!,!1!1BB #2r]T
*33a7V//!34@@F7	G8 % ! z&)@Khivhw'xyyzs   :E	E!EE!c                 B    | j                         }|j                         S r-   )r  r  )r   r  s     r   r  z
Story.bodyW)  s    mmo{{}r#   c                 f    t        |       t        ury t        | dd      r| j                  |        y y r  )r   r  r   r  r   s    r   r  zStory.__del__\)  0    DzU"4E*!!$' +r#   )NNr   Nr-   r  )Nr   NNNT)r   r   r6   r   r   r   r   r   delete_Storyr  r   r  r  r  r  r  rP  r  r  r  r'  r*  r&  r  r  r$   r#   r   r  r  f(  s    -/IOdeGH))Q'.6*C*'R  >.&6 6 6 E EN  (r#   r  c                      e Zd Z ed d d      ZeZd Zej                  Z
d Zd3dZd4d	Zd4d
Zd4dZd4dZd4dZd Zed        Zed        Zd Zd Zd Zd3dZd Zd Zed        Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d5d Z$d! Z%d5d"Z&d# Z'd$ Z(d4d%Z)d4d&Z*d' Z+d( Z,d) Z-d* Z.d+ Z/d, Z0d- Z1d. Z2d/ Z3d0 Z4d1 Z5d2 Z6y)6Toolsc                 6    | j                   j                         S r-   rC  r  s    r   r}  zTools.<lambda>f)  rD  r#   c                 8    | j                   j                  |      S r-   rC  rF  s     r   r}  zTools.<lambda>f)  rG  r#   rH  rI  c                 T    t        j                  | t        j                                y r-   )r   Tools_swiginit	new_Toolsr   s    r   r   zTools.__init__i)  s    T5??#45r#   c                 ,    t        j                  |       S )z!Return a unique positive integer.)r   Tools_gen_idr   s    r   r\  zTools.gen_idm)  r
  r#   c                 .    t        j                  | |      S )z!Set ICC color handling on or off.)r   Tools_set_iccr   r*  s     r   set_icczTools.set_iccs)  s     ""4,,r#   Nc                 .    t        j                  | |      S )z$Get / set id prefix for annotations.)r   Tools_set_annot_stem)r   stems     r   set_annot_stemzTools.set_annot_stemy)  s     ))$55r#   c                 .    t        j                  | |      S )z Set / unset small glyph heights.)r   Tools_set_small_glyph_heightsrC  s     r   set_small_glyph_heightszTools.set_small_glyph_heights)  s     224<<r#   c                 .    t        j                  | |      S )z9Set / unset returning fontnames with their subset prefix.)r   Tools_set_subset_fontnamesrC  s     r   set_subset_fontnameszTools.set_subset_fontnames)       //b99r#   c                 .    t        j                  | |      S )z!Set / unset MuPDF device caching.)r   Tools_set_low_memoryrC  s     r   set_low_memoryzTools.set_low_memory)  s     ))$33r#   c                 .    t        j                  | |      S )z/Set ascender / descender corrections on or off.)r   Tools_unset_quad_correctionsrC  s     r   unset_quad_correctionszTools.unset_quad_corrections)       11$;;r#   c                 .    t        j                  | |      S )z%Free 'percent' of current store size.)r   Tools_store_shrink)r   percents     r   r{  zTools.store_shrink)  s     ''g66r#   c                 ,    t        j                  |       S )zMuPDF current store size.)r   Tools_store_sizer   s    r   
store_sizezTools.store_size)  s    
 %%d++r#   c                 ,    t        j                  |       S )zMuPDF store size limit.)r   Tools_store_maxsizer   s    r   store_maxsizezTools.store_maxsize)  s    
 ((..r#   c                 R    t        j                  |       }|d   |d   |d   d}|}|S )zShow anti-aliasing values.r   r   r   )graphicsrw   graphics_min_line_width)r   Tools_show_aa_level)r   rm  rU  s      r   show_aa_levelzTools.show_aa_level)  s7     ''-FCFsSTvV
r#   c                 .    t        j                  | |      S )zSet anti-aliasing level.)r   Tools_set_aa_level)r   r  s     r   set_aa_levelzTools.set_aa_level)  s     ''e44r#   c                 .    t        j                  | |      S )z$Set the graphics minimum line width.)r   !Tools_set_graphics_min_line_width)r   min_line_widths     r   set_graphics_min_line_widthz!Tools.set_graphics_min_line_width)  s     66t^LLr#   c                 0    t        j                  | ||      S )z#Metadata of an image binary stream.)r   Tools_image_profile)r   r  
keep_images      r   r  zTools.image_profile)  s     ((vzBBr#   c                 .    t        j                  | |      S r-   )r   Tools__rotate_matrixr  s     r   rP  zTools._rotate_matrix)  r  r#   c                 .    t        j                  | |      S r-   )r   Tools__derotate_matrixr  s     r   rS  zTools._derotate_matrix)  s    ++D$77r#   c                 ,    t        j                  |       S )z!PyMuPDF configuration parameters.)r   Tools_fitz_configr   s    r   fitz_configzTools.fitz_config)  s    
 &&t,,r#   c                 ,    t        j                  |       S )zEmpty the glyph cache.)r   Tools_glyph_cache_emptyr   s    r   glyph_cache_emptyzTools.glyph_cache_empty)  s     ,,T22r#   c                    t        j                  | ||      }t        |j                        |_        |j                  |_        |j
                  |_        ||_        |j                  sd |_        |j                  sd |_        |j                  sd |_	        |j                  sd |_
        |j                  sd |_        |j                  sd |_        |j                  sd |_        |S r-   )r   Tools__fill_widgetr  rY   rI  rX  r}  rB  rC  rD  rE  rF  rG  rH  )r   rO   r  rm  s       r   r  zTools._fill_widget)  s    &&tUF;5::&jj}} FM###'F ###'F ###'F !!!%F!!!%F"""&F 
r#   c                 0    t        j                  | ||      S r-   )r   Tools__save_widget)r   rO   r  s      r   r  zTools._save_widget)  s    ''eV<<r#   c                 .    t        j                  | |      S r-   )r   Tools__reset_widgetrE  s     r   r  zTools._reset_widget)  s    ((u55r#   c                 .    t        j                  | |      S r-   )r   Tools__ensure_widget_calcrE  s     r   _ensure_widget_calczTools._ensure_widget_calc)  s    ..tU;;r#   c                 t   t        j                  | |      }|syd}d}d}|j                         }t        |      D ]  \  }}|dk(  r2||dz
     dd  }t	        ||dz
           }dx||<   x||dz
  <   ||dz
  <   =|d	k(  r t	        ||dz
           g}dx||<   ||dz
  <   b|d
k(  r<||dz
  | D 	cg c]  }	t	        |	       }}	dx||<   x||dz
  <   x||dz
  <   ||dz
  <   |dk(  s||dz
  | D 	cg c]  }	t	        |	       }}	dx||<   x||dz
  <   x||dz
  <   x||dz
  <   ||dz
  <    |||f}|S c c}	w c c}	w )N)r  r   r   r+  r   r*  r_  r   r   r   r`  ra  r   r  r   )r   Tools__parse_darb  rc  r   )
r   rO   rm  rd  re  rf  rg  r   rh  r   s
             r   ri  zTools._parse_da)  s   ##D%0 iik ~ 	GAtt|1q5z!"~c!a%j)/11A1QqSC!Hs{c!a%j)+$&&AQqSt|),QU16AuQx66:<<A<QqS<C!Hs1Q3xs{),QU16AuQx66EGGAGQqSGC!HGs1Q3x#ac(#	& D%  
 7 7s   ,D0.D5c                 0    t        j                  | ||      S r-   )r   Tools__update_da)r   rO   r  s      r   r
  zTools._update_da *  s    %%dE6::r#   c                 .    t        j                  | |      S )z@Concatenate all /Contents objects of a page into a bytes object.)r   Tools__get_all_contents)r   fzpages     r   r	  zTools._get_all_contents#*  r  r#   c                 2    t        j                  | |||      S )zDAdd bytes as a new /Contents object for a page, and return its xref.)r   Tools__insert_contents)r   r   newcontrW	  s       r   r	  zTools._insert_contents)*  s     ++D$IIr#   c                 ,    t        j                  |       S )z"Get version of MuPDF binary build.)r   Tools_mupdf_versionr   s    r   mupdf_versionzTools.mupdf_version/*  r
  r#   c                 x    t        j                  | |      }dj                  |      }|r| j                          |S )z<Get the MuPDF warnings/errors with optional reset (default).r
  )r   Tools_mupdf_warningsr2  reset_mupdf_warnings)r   r  rm  s      r   r  zTools.mupdf_warnings5*  s7     ((u5iin%%'
r#   c                 .    t        j                  | |      S r-   )r   Tools__int_from_languager  s     r   _int_from_languagezTools._int_from_languageA*  s    --dH==r#   c                 ,    t        j                  |       S )z&Empty the MuPDF warnings/errors store.)r   Tools_reset_mupdf_warningsr   s    r   r  zTools.reset_mupdf_warningsD*  s     //55r#   c                 .    t        j                  | |      S )z)Set MuPDF error display to True or False.)r   Tools_mupdf_display_errorsrC  s     r   mupdf_display_errorszTools.mupdf_display_errorsJ*  rO  r#   c                 .    t        j                  | |      S )z,Set MuPDF warnings display to True or False.)r   Tools_mupdf_display_warningsrC  s     r   mupdf_display_warningszTools.mupdf_display_warningsP*  rV  r#   c                    |j                   d   }|j                  d   }|sd}dj                  t        t        |            dz   }|r|}n|j                  d   }|sd}dj                  t        t        |            dz   }	|}
|}t        t        |
|            }| }|
|z  }||z  }d	|j                  cxk  rd
k  rn nd}nd}|||||||	|fS )as  Get common parameters for making annot line end symbols.

        Returns:
            m: matrix that maps p1, p2 to points L, P on the x-axis
            im: its inverse
            L, P: transformed p1, p2
            w: line width
            scol: stroke color string
            fcol: fill color store_shrink
            opacity: opacity string (gs command)
        rm  r   r*  r  z RG
r  r  z rg
r   r   r  r   )r  r)
  r2  r   r   r|   rL   r
  )r   rO   r  r  r9  r  scscolfcfcolnp1np2r   r  r	  Rr
  s                    r   _le_annot_parmszTools._le_annot_parmsV*  s     LL!\\(#BxxC%/Bf%BBxxC%/?3,-R!G!G!!GG"aAtT722r#   c                    d }d}|||z
  dz  z   }|||z
  dz  z   }|||z
  dz  z   }	|||z
  dz  z   }
|||z
  |z  z   }|||z
  |z  z   }|||z
  |z  z   }|	||	z
  |z  z   }|	||	z
  |z  z   }|
||
z
  |z  z   }|
||
z
  |z  z   }|||z
  |z  z   }d|j                   |j                  fz  }| ||||      z  }| ||||	      z  }| ||||
      z  }| ||||      z  }|S )zQReturn /AP string defining an oval within a 4-polygon provided as points
        c                     d}|| j                   | j                  |j                   |j                  |j                   |j                  fz  S )Nz%f %f %f %f %f %f c
r$  )rd   r  re   r   s       r   bezierz"Tools._oval_string.<locals>.bezier~*  s7    'AQSS!##qssACC555r#   g7.SQ?r  z%f %f m
r$  )r   r  r  p3p4r  kappamlmomrmuol1ol2or1or2ur1ur2ul1ul2rG  s                       r   _oval_stringzTools._oval_string{*  sU   	6 27c/!27c/!27c/!27c/!BGu$$BGu$$BGu$$BGu$$BGu$$BGu$$BGu$$BGu$$BDD"$$<'
fS#r""
fS#r""
fS#r""
fS#r""	r#   c                 *   | j                  ||||      \  }}}}	}
}}}d}|t        d|
      z  }|r
|	|dz  dfz
  n	||dz  dfz   }t        ||      | | ||fz   }|j                  |j                  |j                  z
  dz  z   |z  }d||j
                  |j                  fz  }|j                  |j                  |j                  z
  dz  z   |z  }|d|j
                  |j                  fz  z  }|j                  |j                  |j                  z
  dz  z   |z  }|d|j
                  |j                  fz  z  }|j                  |j                  |j                  z
  dz  z   |z  }|d|j
                  |j                  fz  z  }|d|
z  z  }|||z   d	z   z  }|S )
zdMake stream commands for diamond line end symbol. "lr" denotes left (False) or right point.
              @r          @r   r  q
%s%f %f m
%f %f l
%g w
b
Q
)	r  r   r  rd  rf  r  r  re  rg  r   rO   r  r  r  r9  r   r  r	  r  r  r  r  r
  rH  r   r-  re   rd   rG  s                       r   r  zTools._le_diamond*  s    /3.B.B5"bR\.]+2q!QdGC1IA2q	MQ!B$]AJ1"qb!Q'TTQTTADD[C''2-!##qss 33TTQTTADD[C''2-
kqssACCj((TTQTTADD[C''2-
kqssACCj((TTQTTADD[C''2-
kqssACCj((
hl
dTkH$$	r#   c                 B   | j                  ||||      \  }}}}	}
}}}d}|t        d|
      z  }|r
|	|dz  dfz
  n	||dz  dfz   }t        ||      | | ||fz   }|j                  |z  }d||j                  |j
                  fz  }|j                  |z  }|d|j                  |j
                  fz  z  }|j                  |z  }|d|j                  |j
                  fz  z  }|j                  |z  }|d|j                  |j
                  fz  z  }|d|
z  z  }|||z   dz   z  }|S )	zcMake stream commands for square line end symbol. "lr" denotes left (False) or right point.
        r  r   r  r   r  r  r  r  )	r  r   r  rd  r  r  re  rg  rf  r  s                       r   r  zTools._le_square*  sB    /3.B.B5"bR\.]+2q!QdGC1IA2q	MQ!B$]AJ1"qb!Q'DD2I!##qss 33DD2I
kqssACCj((DD2I
kqssACCj((DD2I
kqssACCj((
hl
dTkH$$	r#   c                 z   | j                  ||||      \  }}}}	}
}}}d}|t        d|
      z  }|r
|	|dz  dfz
  n	||dz  dfz   }t        ||      | | ||fz   }d|z   | j                  |j                  |z  |j
                  |z  |j                  |z  |j                  |z        z   }|d|
z  z  }|||z   dz   z  }|S )zcMake stream commands for circle line end symbol. "lr" denotes left (False) or right point.
        r  r   r  r   zq
r  r  )r  r   r  r  rd  re  rg  rf  )r   rO   r  r  r  r9  r   r  r	  r  r  r  r  r
  rH  r   r-  re   rG  s                      r   r  zTools._le_circle*  s     /3.B.B5"bR\.]+2q!QdGC1IA2q	MQ!B$]AJ1"qb!Q'W_t00ADD2IqttbyRSRVRVY[R[\\
hl
dTkH$$	r#   c                 8   | j                  ||||      \  }}}}	}
}}}d}|t        d|
      z  }|r|	n|}|d| dz  fz   |z  }|d|dz  fz   |z  }d||j                  |j                  fz  }|d|j                  |j                  fz  z  }|d|
z  z  }||dz   z  }|S )	zaMake stream commands for butt line end symbol. "lr" denotes left (False) or right point.
        r   r   r   r  
q
%s%f %f m
r  r  s
Q
r  r   r  r  )r   rO   r  r  r  r9  r   r  r	  r  r  r  r  r
  rH  r   r-  topbotrG  s                       r   r  zTools._le_butt*  s     /3.B.B5"bR\.]+2q!QdGC1IAAr"u:~#Aqt9}"7CEE355"99
kSUUCEEN**
hl
dXo	r#   c                    | j                  ||||      \  }}}}	}
}}}dt        d|
      z  dz  }|r|	n|}t        |j                  |z
  |j                  d|
z  z
  |j                  |z   |j                  d|
z  z         }|j
                  |z  }|j                  |z  }d||j                  |j                  fz  }|d|j                  |j                  fz  z  }|d|
z  z  }||dz   z  }|S )	zbMake stream commands for slash line end symbol. "lr" denotes left (False) or right point.
        g(y?r   r   r   r  r  r  r  )r  r   r  r  r  rd  rg  )r   rO   r  r  r  r9  r   r  r	  r  r  r  r  r
  rwr-  re   r  r  rG  s                       r   r  zTools._le_slash*  s     /3.B.B5"bR\.]+2q!QdGc!Qi#%Ar133Q;b!##A+>ddRiddRi7CEE355"99
kSUUCEEN**
hl
dXo	r#   c                    | j                  ||||      \  }}}}	}
}}}d}|t        d|
      z  }|r
|	|dz  dfz   n	||dz  dfz
  }|r|d|z  | fz   n
|d|z  | fz   }|r
|d|z  |fz   n	|d|z  |fz   }||z  }||z  }||z  }d||j                  |j                  fz  }|d|j                  |j                  fz  z  }|d|j                  |j                  fz  z  }|d	|
z  z  }||d
z   z  }|S )zgMake stream commands for open arrow line end symbol. "lr" denotes left (False) or right point.
        r  r   r  r   r  r   r  r  r  S
Q
r  r   rO   r  r  r  r9  r   r  r	  r  r  r  r  r
  rH  r   r  rG  s                     r   r  zTools._le_openarrow*  s3    /3.B.B5"bR\.]+2q!QdGC1I Q!B$]a1R4)m "R2a4!*_acA2Y!R2a4)^rQqS!H}
b
b
b7BDD"$$"77
kRTT244L((
kRTT244L((
hl
dXo	r#   c                    | j                  ||||      \  }}}}	}
}}}d}|t        d|
      z  }|r
|	|dz  dfz   n	||dz  dfz
  }|r|d|z  | fz   n
|d|z  | fz   }|r
|d|z  |fz   n	|d|z  |fz   }||z  }||z  }||z  }d||j                  |j                  fz  }|d|j                  |j                  fz  z  }|d|j                  |j                  fz  z  }|d	|
z  z  }|||z   d
z   z  }|S )ziMake stream commands for closed arrow line end symbol. "lr" denotes left (False) or right point.
        r  r   r  r   r  r   r  r  r  r  r  r  s                     r   r  zTools._le_closedarrow*  s8    /3.B.B5"bR\.]+2q!QdGC1I Q!B$]a1R4)m "R2a4!*_acA2Y!R2a4)^rQqS!H}
b
b
b7BDD"$$"77
kRTT244L((
kRTT244L((
hl
dTkH$$	r#   c                    | j                  ||||      \  }}}}	}
}}}d}|t        d|
      z  }|r
|	|dz  dfz
  n	||dz  dfz   }|r|d|z  | fz   n
|d|z  | fz   }|r
|d|z  |fz   n	|d|z  |fz   }||z  }||z  }||z  }d||j                  |j                  fz  }|d|j                  |j                  fz  z  }|d|j                  |j                  fz  z  }|d	|
z  z  }|||z   d
z   z  }|S )zmMake stream commands for right open arrow line end symbol. "lr" denotes left (False) or right point.
        r  r   g      @r   r   r  r  r  r  r  r  r  s                     r   r  zTools._le_ropenarrow+  s8    /3.B.B5"bR\.]+2q!QdGC1I Q!B$]a1R4)m!R1Q3)^rRTA2J R1Q3(]bBqD!9n
b
b
b7BDD"$$"77
kRTT244L((
kRTT244L((
hl
dTkH$$	r#   c                    | j                  ||||      \  }}}}	}
}}}d}|t        d|
      z  }|r
|	d|z  dfz
  n	|d|z  dfz   }|r|d|z  | fz   n
|d|z  | fz   }|r
|d|z  |fz   n	|d|z  |fz   }||z  }||z  }||z  }d||j                  |j                  fz  }|d|j                  |j                  fz  z  }|d|j                  |j                  fz  z  }|d|
z  z  }|||z   d	z   z  }|S )
zoMake stream commands for right closed arrow line end symbol. "lr" denotes left (False) or right point.
        r  r   r   r   r  r  r  r  r  r  r  s                     r   r  zTools._le_rclosedarrow%+  s8    /3.B.B5"bR\.]+2q!QdGC1IQ!A#q\Q!A#q\!R1Q3)^rRTA2J R1Q3(]bBqD!9n
b
b
b7BDD"$$"77
kRTT244L((
kRTT244L((
hl
dTkH$$	r#   c                 f    t        |       t        ury t        | dd      r| j                  |        y y r  )r   r9  r   r  r   s    r   r  zTools.__del__8+  r6  r#   r  r-   r	  )7r   r   r6   r   r   r   r   r   r   delete_Toolsr  r\  rD  rH  rK  rN  rR  rU  r{  r\  r_  rd  rg  rk  r  rP  rS  ru  rx  r  r  r  r  ri  r
  r	  r	  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$   r#   r   r9  r9  e)  s5   -/IOdeGH6))(-6=:4<7
 , ,
 / /5MC68- -34=6<D;;J/	>6:<#3J8**&&&&(r#   r9  )r  r  r   )unknownr  )r   r  rO   r  r  N))r   r   r   r   r   r   )r   r  rd  r  r  N(1  r3  r   _swig_python_version_info__package__r   r   r   builtinsr   r
  r   r%   r*   r3   r   r5   
FZ_VERSIONFZ_VERSION_MAJORFZ_VERSION_MINORFZ_VERSION_PATCHr  r   r1  r  hashlibr  r  r  r  r  r  stringr!   
whitespacerh  r  r2  r9   r:   r;   r<   r=   Anyr  r  r  r  Optionalr   r|  r   r  r  OptDictr  r  Sequencer	  rg	  r>   r?   r0   r  r  r  VersionFitzVersionBindVersionDateversionr   rb  pymupdf_version_tuplepymupdf_git_shapymupdf_git_commentpymupdf_git_diffpymupdf_git_branchmupdf_git_shamupdf_git_commentmupdf_git_diffmupdf_git_branchr   r  r	  r	  r  rh  rn  rz  rv  re  r_  rb  r[  r  r  r  r  r	  r  PDF_ANNOT_SOUNDPDF_ANNOT_MOVIEPDF_ANNOT_RICH_MEDIAr	  PDF_ANNOT_SCREENPDF_ANNOT_PRINTER_MARKPDF_ANNOT_TRAP_NETPDF_ANNOT_WATERMARKPDF_ANNOT_3DPDF_ANNOT_PROJECTIONPDF_ANNOT_UNKNOWNPDF_REDACT_IMAGE_NONEPDF_REDACT_IMAGE_REMOVEPDF_REDACT_IMAGE_PIXELSPDF_ANNOT_IS_INVISIBLEPDF_ANNOT_IS_HIDDENPDF_ANNOT_IS_PRINTPDF_ANNOT_IS_NO_ZOOMPDF_ANNOT_IS_NO_ROTATEPDF_ANNOT_IS_NO_VIEWPDF_ANNOT_IS_READ_ONLYPDF_ANNOT_IS_LOCKEDPDF_ANNOT_IS_TOGGLE_NO_VIEWPDF_ANNOT_IS_LOCKED_CONTENTSPDF_ANNOT_LE_NONEPDF_ANNOT_LE_SQUAREPDF_ANNOT_LE_CIRCLEPDF_ANNOT_LE_DIAMONDPDF_ANNOT_LE_OPEN_ARROWPDF_ANNOT_LE_CLOSED_ARROWPDF_ANNOT_LE_BUTTPDF_ANNOT_LE_R_OPEN_ARROWPDF_ANNOT_LE_R_CLOSED_ARROWPDF_ANNOT_LE_SLASHPDF_WIDGET_TYPE_UNKNOWNrN  rO  PDF_WIDGET_TYPE_COMBOBOXPDF_WIDGET_TYPE_LISTBOXrP  PDF_WIDGET_TYPE_SIGNATUREPDF_WIDGET_TYPE_TEXTPDF_WIDGET_TX_FORMAT_NONEPDF_WIDGET_TX_FORMAT_NUMBERPDF_WIDGET_TX_FORMAT_SPECIALPDF_WIDGET_TX_FORMAT_DATEPDF_WIDGET_TX_FORMAT_TIMEPDF_FIELD_IS_READ_ONLYPDF_FIELD_IS_REQUIREDPDF_FIELD_IS_NO_EXPORTPDF_TX_FIELD_IS_MULTILINEPDF_TX_FIELD_IS_PASSWORDPDF_TX_FIELD_IS_FILE_SELECT"PDF_TX_FIELD_IS_DO_NOT_SPELL_CHECKPDF_TX_FIELD_IS_DO_NOT_SCROLLPDF_TX_FIELD_IS_COMBPDF_TX_FIELD_IS_RICH_TEXT!PDF_BTN_FIELD_IS_NO_TOGGLE_TO_OFFPDF_BTN_FIELD_IS_RADIOPDF_BTN_FIELD_IS_PUSHBUTTON!PDF_BTN_FIELD_IS_RADIOS_IN_UNISONPDF_CH_FIELD_IS_COMBOPDF_CH_FIELD_IS_EDITPDF_CH_FIELD_IS_SORTPDF_CH_FIELD_IS_MULTI_SELECT"PDF_CH_FIELD_IS_DO_NOT_SPELL_CHECK$PDF_CH_FIELD_IS_COMMIT_ON_SEL_CHANGEPDF_SIGNATURE_ERROR_OKAY!PDF_SIGNATURE_ERROR_NO_SIGNATURES"PDF_SIGNATURE_ERROR_NO_CERTIFICATE"PDF_SIGNATURE_ERROR_DIGEST_FAILUREPDF_SIGNATURE_ERROR_SELF_SIGNED(PDF_SIGNATURE_ERROR_SELF_SIGNED_IN_CHAINPDF_SIGNATURE_ERROR_NOT_TRUSTEDPDF_SIGNATURE_ERROR_UNKNOWNPDF_SIGNATURE_SHOW_LABELSPDF_SIGNATURE_SHOW_DNPDF_SIGNATURE_SHOW_DATEPDF_SIGNATURE_SHOW_TEXT_NAMEPDF_SIGNATURE_SHOW_GRAPHIC_NAMEPDF_SIGNATURE_SHOW_LOGO PDF_SIGNATURE_DEFAULT_APPEARANCECS_RGBCS_GRAYCS_CMYKru  PDF_ENCRYPT_NONEPDF_ENCRYPT_RC4_40PDF_ENCRYPT_RC4_128PDF_ENCRYPT_AES_128PDF_ENCRYPT_AES_256PDF_ENCRYPT_UNKNOWNPDF_PERM_PRINTPDF_PERM_MODIFYPDF_PERM_COPYPDF_PERM_ANNOTATEPDF_PERM_FORMPDF_PERM_ACCESSIBILITYPDF_PERM_ASSEMBLEPDF_PERM_PRINT_HQPDF_BM_ColorPDF_BM_ColorBurnPDF_BM_ColorDodgePDF_BM_DarkenPDF_BM_DifferencePDF_BM_ExclusionPDF_BM_HardLight
PDF_BM_HuePDF_BM_LightenPDF_BM_LuminosityPDF_BM_MultiplyPDF_BM_NormalPDF_BM_OverlayPDF_BM_SaturationPDF_BM_ScreenPDF_BM_SoftLightTEXT_FONT_SUPERSCRIPTTEXT_FONT_ITALICTEXT_FONT_SERIFEDTEXT_FONT_MONOSPACEDTEXT_FONT_BOLDUCDN_SCRIPT_COMMONUCDN_SCRIPT_LATINUCDN_SCRIPT_GREEKUCDN_SCRIPT_CYRILLICUCDN_SCRIPT_ARMENIANUCDN_SCRIPT_HEBREWUCDN_SCRIPT_ARABICUCDN_SCRIPT_SYRIACUCDN_SCRIPT_THAANAUCDN_SCRIPT_DEVANAGARIUCDN_SCRIPT_BENGALIUCDN_SCRIPT_GURMUKHIUCDN_SCRIPT_GUJARATIUCDN_SCRIPT_ORIYAUCDN_SCRIPT_TAMILUCDN_SCRIPT_TELUGUUCDN_SCRIPT_KANNADAUCDN_SCRIPT_MALAYALAMUCDN_SCRIPT_SINHALAUCDN_SCRIPT_THAIUCDN_SCRIPT_LAOUCDN_SCRIPT_TIBETANUCDN_SCRIPT_MYANMARUCDN_SCRIPT_GEORGIANUCDN_SCRIPT_HANGULUCDN_SCRIPT_ETHIOPICUCDN_SCRIPT_CHEROKEEUCDN_SCRIPT_CANADIAN_ABORIGINALUCDN_SCRIPT_OGHAMUCDN_SCRIPT_RUNICUCDN_SCRIPT_KHMERUCDN_SCRIPT_MONGOLIANUCDN_SCRIPT_HIRAGANAUCDN_SCRIPT_KATAKANAUCDN_SCRIPT_BOPOMOFOUCDN_SCRIPT_HANUCDN_SCRIPT_YIUCDN_SCRIPT_OLD_ITALICUCDN_SCRIPT_GOTHICUCDN_SCRIPT_DESERETUCDN_SCRIPT_INHERITEDUCDN_SCRIPT_TAGALOGUCDN_SCRIPT_HANUNOOUCDN_SCRIPT_BUHIDUCDN_SCRIPT_TAGBANWAUCDN_SCRIPT_LIMBUUCDN_SCRIPT_TAI_LEUCDN_SCRIPT_LINEAR_BUCDN_SCRIPT_UGARITICUCDN_SCRIPT_SHAVIANUCDN_SCRIPT_OSMANYAUCDN_SCRIPT_CYPRIOTUCDN_SCRIPT_BRAILLEUCDN_SCRIPT_BUGINESEUCDN_SCRIPT_COPTICUCDN_SCRIPT_NEW_TAI_LUEUCDN_SCRIPT_GLAGOLITICUCDN_SCRIPT_TIFINAGHUCDN_SCRIPT_SYLOTI_NAGRIUCDN_SCRIPT_OLD_PERSIANUCDN_SCRIPT_KHAROSHTHIUCDN_SCRIPT_BALINESEUCDN_SCRIPT_CUNEIFORMUCDN_SCRIPT_PHOENICIANUCDN_SCRIPT_PHAGS_PAUCDN_SCRIPT_NKOUCDN_SCRIPT_SUNDANESEUCDN_SCRIPT_LEPCHAUCDN_SCRIPT_OL_CHIKIUCDN_SCRIPT_VAIUCDN_SCRIPT_SAURASHTRAUCDN_SCRIPT_KAYAH_LIUCDN_SCRIPT_REJANGUCDN_SCRIPT_LYCIANUCDN_SCRIPT_CARIANUCDN_SCRIPT_LYDIANUCDN_SCRIPT_CHAMUCDN_SCRIPT_TAI_THAMUCDN_SCRIPT_TAI_VIETUCDN_SCRIPT_AVESTAN UCDN_SCRIPT_EGYPTIAN_HIEROGLYPHSUCDN_SCRIPT_SAMARITANUCDN_SCRIPT_LISUUCDN_SCRIPT_BAMUMUCDN_SCRIPT_JAVANESEUCDN_SCRIPT_MEETEI_MAYEKUCDN_SCRIPT_IMPERIAL_ARAMAICUCDN_SCRIPT_OLD_SOUTH_ARABIAN"UCDN_SCRIPT_INSCRIPTIONAL_PARTHIAN!UCDN_SCRIPT_INSCRIPTIONAL_PAHLAVIUCDN_SCRIPT_OLD_TURKICUCDN_SCRIPT_KAITHIUCDN_SCRIPT_BATAKUCDN_SCRIPT_BRAHMIUCDN_SCRIPT_MANDAICUCDN_SCRIPT_CHAKMAUCDN_SCRIPT_MEROITIC_CURSIVE UCDN_SCRIPT_MEROITIC_HIEROGLYPHSUCDN_SCRIPT_MIAOUCDN_SCRIPT_SHARADAUCDN_SCRIPT_SORA_SOMPENGUCDN_SCRIPT_TAKRIUCDN_SCRIPT_UNKNOWNUCDN_SCRIPT_BASSA_VAHUCDN_SCRIPT_CAUCASIAN_ALBANIANUCDN_SCRIPT_DUPLOYANUCDN_SCRIPT_ELBASANUCDN_SCRIPT_GRANTHAUCDN_SCRIPT_KHOJKIUCDN_SCRIPT_KHUDAWADIUCDN_SCRIPT_LINEAR_AUCDN_SCRIPT_MAHAJANIUCDN_SCRIPT_MANICHAEANUCDN_SCRIPT_MENDE_KIKAKUIUCDN_SCRIPT_MODIUCDN_SCRIPT_MROUCDN_SCRIPT_NABATAEANUCDN_SCRIPT_OLD_NORTH_ARABIANUCDN_SCRIPT_OLD_PERMICUCDN_SCRIPT_PAHAWH_HMONGUCDN_SCRIPT_PALMYRENEUCDN_SCRIPT_PAU_CIN_HAUUCDN_SCRIPT_PSALTER_PAHLAVIUCDN_SCRIPT_SIDDHAMUCDN_SCRIPT_TIRHUTAUCDN_SCRIPT_WARANG_CITIUCDN_SCRIPT_AHOM!UCDN_SCRIPT_ANATOLIAN_HIEROGLYPHSUCDN_SCRIPT_HATRANUCDN_SCRIPT_MULTANIUCDN_SCRIPT_OLD_HUNGARIANUCDN_SCRIPT_SIGNWRITINGUCDN_SCRIPT_ADLAMUCDN_SCRIPT_BHAIKSUKIUCDN_SCRIPT_MARCHENUCDN_SCRIPT_NEWAUCDN_SCRIPT_OSAGEUCDN_SCRIPT_TANGUTUCDN_SCRIPT_MASARAM_GONDIUCDN_SCRIPT_NUSHUUCDN_SCRIPT_SOYOMBOUCDN_SCRIPT_ZANABAZAR_SQUAREUCDN_SCRIPT_DOGRAUCDN_SCRIPT_GUNJALA_GONDIUCDN_SCRIPT_HANIFI_ROHINGYAUCDN_SCRIPT_MAKASARUCDN_SCRIPT_MEDEFAIDRINUCDN_SCRIPT_OLD_SOGDIANUCDN_SCRIPT_SOGDIANUCDN_SCRIPT_ELYMAICUCDN_SCRIPT_NANDINAGARI"UCDN_SCRIPT_NYIAKENG_PUACHUE_HMONGUCDN_SCRIPT_WANCHOrE   rG   rL   rN   rQ   rU   rW   r[   r^   rc   rg   ri   rk   rn   rp   rt   rv   rO  rP  r	  r|   r   r  r  r  rz  rc  r  r  r  r"  ru  r%  r'  	PDF_OC_ONPDF_OC_TOGGLE
PDF_OC_OFFr  r  r  r
  r	  r  r  r  LINK_FLAG_R_VALIDLINK_FLAG_B_VALIDLINK_FLAG_FIT_HLINK_FLAG_FIT_VLINK_FLAG_R_IS_ZOOMr  r  r  r  TEXT_OUTPUT_TEXTTEXT_OUTPUT_HTMLTEXT_OUTPUT_JSONTEXT_OUTPUT_XMLTEXT_OUTPUT_XHTMLTEXT_PRESERVE_LIGATURESTEXT_PRESERVE_WHITESPACETEXT_PRESERVE_IMAGESTEXT_INHIBIT_SPACESTEXT_DEHYPHENATETEXT_PRESERVE_SPANSTEXT_MEDIABOX_CLIPTEXTFLAGS_WORDSTEXTFLAGS_BLOCKSTEXTFLAGS_DICTTEXTFLAGS_RAWDICTTEXTFLAGS_SEARCHTEXTFLAGS_HTMLTEXTFLAGS_XHTMLTEXTFLAGS_XMLTEXTFLAGS_TEXTTEXT_ENCODING_LATINTEXT_ENCODING_GREEKTEXT_ENCODING_CYRILLICSTAMP_Approved
STAMP_AsIsSTAMP_ConfidentialSTAMP_DepartmentalSTAMP_ExperimentalSTAMP_ExpiredSTAMP_FinalSTAMP_ForCommentSTAMP_ForPublicReleaseSTAMP_NotApprovedSTAMP_NotForPublicRelease
STAMP_SoldSTAMP_TopSecretSTAMP_DraftBase14_fontnamesr  r   rZ  
annot_skelr  r  r  r  r  r  r  r  r  r  r,  r  r   r4  ru  ry  r{  r  r  rL  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r(  r&  r  r  r  r  r!  r$  r  r  r?  rA  Document_swigregisterr  Page_swigregisterrc  Pixmap_swigregisterr`
  Colorspace_swigregisterrr
  Device_swigregisterrz
  Outline_swigregisterr  Annot_swigregisterr~  Link_swigregisterr  DisplayList_swigregisterr  TextPage_swigregisterrS  Graftmap_swigregisterr,  TextWriter_swigregisterr  Font_swigregisterr  DocumentWriter_swigregisterr  Archive_swigregisterr  Xml_swigregisterr  Story_swigregisterr9  Tools_swigregister)r   s   0r   <module>r>     s   :#/"[
L$ L
 
)) )) ))  
 	  	     	     **\9CFBC "))-.
		
**	c4i	 ??5!		
//$
??6,,-		):/?//1!&&( ;,7NQ);
 #%5
60A0A#0FG1AGH  =>   :<   --%%%%// %%)) )) ++ // // // -- 11 )) ''''##''!;; ''''11 )) )) 55 -- // !!11 ++ 33 77 77 55 // -- 11 55 11 55 // #?? $AA ++ // // 11 77 !;; ++ !;; #?? -- 77 55  99  99 77 #?? !;; 11 !;; #?? $AA !;; !;; 55 33 55 !;;  99 #?? %*%M%M " % C C 11 !;; $)$K$K !55 #?? $)$K$K !33 11 11 $AA %*%M%M "','Q'Q $ 99 $)$K$K !%*%M%M "%*%M%M ""'"G"G +0+Y+Y ("'"G"G #?? !;; 33 77 $AA "'"G"G 77 #(#I#I  	
--
--)) )) -- // // // // %%''##++ ##55 ++ ++ !!)) ++ ##++ )) )) 
%%++ ''##%%++ ##)) 33 )) ++ 11 %%-- ++ ++ 11 11 -- -- -- -- 55 // 11 11 ++ ++ -- // 33 // )) ''// // 11 -- 11 11 "'"G"G ++ ++ ++ 33 11 11 11 ''%%55 -- // 33 // // ++ 11 ++ -- 11 11 // // // // 11 -- 77 55 11  99 77 55 11 33 55 11 ''33 -- 11 ''55 11 -- -- -- -- )) 11 11 // #(#I#I  33 )) ++ 11  99 $AA  % C C %*%M%M "$)$K$K !55 -- ++ -- // -- $AA #(#I#I  )) //  99 ++ // 33 !&!E!E 11 // // -- 33 11 11 55 !;; )) ''33  % C C 55  99 33 77 #?? // // 77 )) $)$K$K !-- // !;; 77 ++ 33 // )) ++ -- !;; ++ // $AA ++ !;; #?? // 77 77 // // 77 %*%M%M "-- +,'0#$'3--2*5),,I ^?V ^?B#V #: k!F k!ZL!6 L!\x!F x!v_!6 _!FTTUU \ V \ V	 	

 		

     
                       #                  
       

 " 	 
A!"OAGGI	
 & - * 1 # + ( / ' & ( , " (  YExMeFS
	L 		 		] 	
 = ! %)TRVBB!B3:BIOBBJ'<# '< '< '<UX '<`e '<ZALAH?(v ?(JS "23 23 2j"3 "T5$-> ? " "Y\ "ad "J6r# % ()# )$ )<6:: <
/vzz /
P& P.dE5$67 .C .C .$I IE II IU I	- 	- 	-	 	 		&** 	 		&** 	 	O s u * # $ 
#+ 
#6?? 
#+Z +Z +F + 'v(( 'T ',- -v -` (f F F FYb Fmq FR6 c c e  4c 4e 4(Y (C (# (T (V)NZ  
,c 
,c 
,, , ,)5 )+e +Q QhCc CLpv ph9   H %n96 n9d+    O(V O(h   & !"9 "9L   j )+V +   & !5(f 5(r   7 #CF CL    _6 _D    %(& %(R   { +v(v v(t   H %(v (    H %d( d(P   j )b(6 b(L    *V *\ " ! !. 1x(f x(x   7 #H	(& H	(X   s z(F z(|    W(F W(v    YY  n    Hs4   A_9 ;A`	 (A`_9	A``A``	A``A`