
    kf                    .   d Z dZdZddlmZ ddlmZ ddlmZ ddl	m
Z
mZ ddlmZmZmZmZ dd	lmZ dd
lmZ ddlmZmZmZmZ ddlmZ ddlmZmZ ddl m!Z! ddl"m#Z# ddl$m%Z% ddl&m'Z'm(Z(m)Z)m*Z* ddl+m,Z,m-Z-m.Z. ddl/m0Z0 ddl1Z1ddl2m3Z3 	 ddl4Z4n	#  dZ4Y nxY wd5                    d          Z6 e1j7        d e1j8        e6          z            j9        Z: e1j7        d e1j8        e6          z            j;        Z<ddZ=ddZ9d Z>d Z?d Z@ G d d e%          ZA G d! d"e%          ZBd# ZCdd%ZDd& ZEd' ZFdd(ZGdd)ZHdd*ZIdd+ZJdd,ZKd- ZLd. ZMd/ ZNd0ZOd1ZPd2 ZQdd4ZRdd5ZSdd6ZTdd7ZUdd8ZVdd9ZWd: ZX G d; d<eY          ZZ G d= d>eY          Z[ G d? d@eY          Z\ G dA dBe\          Z] G dC dDe]          Z^ G dE dFe\eZ          Z_ G dG dHe_          Z` G dI dJea          ZbddKZc G dL dMeY          Zd G dN dOede^          Ze G dP dQede_          ZfdR ZgdZhdSZidTZjdUZkdV ZldW ZmddXZndY ZodZ Zp e1j7        d[e1jq                  Zrd\ Zsd] Ztd^Zud_Zvd`Zw e1j7        da          Zx e1j7        db          Zy e1j7        d5                    dceuddf                    Zz e1j7        d5                    dceweuddf                    Z{ e1j7        d5                    deewdff                    Z|dg Z}dh Z~di Zdj Ze*fdkZ G dl dmea          Z G dn doe          Z G dp dqe          Z G dr dse          Z G dt duea          Z G dv dwea          Z G dx dyee          Z G dz d{ee          Ze*fd|Zdd~Zd Zd Zd Zd Zd Zd Zd Zd Zd Z e1j7        d          Zd Zd Zd Zd Z G d dea          Zd ZddZd Z G d de          Zedk    r>d Zd Zd ZddZddl mZm!Z! ddlmZ ddlZej        dSd         Zeg k    rdgZefdZ e            Zed         Z e!de          Zde_         edS          rdZ eee          Z ee           d\  ZZe                    ee          \  ZZ ee           e9                    ee          ZeD ]%Ze                    ee            ee           dZ& edT          rA eded                   Z ee           e                    dd          \  ZZ ee            edU          rCdZ eeed                   Z ee           e                    dd          \  ZZ ee            ed          rdZdZdZ eee          Z ee           e                    ee          \  ZZ edee            ee           e9                    ee          Z eed                    ed                             ee          \  ZZ edee            eed                     ed          r\d ed          d ed          dZ eeed                   Z ee           e                    dd          \  ZZ ee            ed          rHdD ]EZ eeed         d          Z ee           e                    dd          \  ZZ ee           F ed          rCdZ eeed                   Z ee           e                    dd          \  ZZ ee            ed          rdZ eeed                   Z ee           e                    dd          \  ZZ ee           e9                    dedz            Z e ee                      eed                     eed                    edS                             dd            eedS                     eedS                     ed          rUdZ ee e!ded         eæ                    Z ee           e                    dez  dz
  d          \  ZZ ee            edŦ          rUdZ ee e!ded         eæ                    Z ee           e                    dez  dz
  d          \  ZZ ee            edǦ          rNdZ ee e!dddŬ˦          ̦          Z ee           e                    ddΦ          \  ZZ ee           dS dS dS ))	ParagraphcleanBlockQuotedText	ParaLinesFragLinez3.5.20z%The standard paragraph implementation    )
whitespace)truth)category)stringWidthgetAscentDescent)
ParaParser_PCT_num_re_us_value)Flowable)Color)TA_LEFTTA_RIGHT	TA_CENTER
TA_JUSTIFY)normalizeTRBL)	wordSplitALL_CANNOT_START)ParagraphStyle)deepcopy)ABag)decimalSymbol_FUZZparaFontSizeHeightOffsethyphenationMinWordLength)
_classNameisBytesisStr)sameFragN)
MethodType )	
    u    u    u    u    u    u    u    u    u    u    u    u    u   ​u    u    u    u    u   　z[%s]+z[%s]+$c                 "   t          |           r|                                 } | ret          j        |           }|r>t	          |                    d                    ||                    d                   z  S t          | d          S |r|S | S )z/convert a strike/underline distance to a number      F)allowRelative)r"   stripr   matchfloatgroup_parser_num)svMapdefaultms       \/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/reportlab/platypus/paragraph.py_usConvr?   J   s    Qxx 	GGII 	"1%%A :QWWQZZ((aggajj)999"159999 	NH    c                     t          |           r|                     d          } |$t          |          r|                    d          }d |d| v rt          |           n|                     |          D             S )Nutf8c                     g | ]}|S  rD   ).0uwords     r>   
<listcomp>zsplit.<locals>.<listcomp>[   s    qqqeEqqqr@       )r!   decode_wsc_re_splitsplit)textdelims     r>   rK   rK   X   s}    t}}0T[[00dWU^^U\\&5I5IUqqu}TXd 3 3 3^b^h^hin^o^oqqqqr@   c                 ~    t          |           r|                     d          } |                     t                    S NrB   )r!   rI   r5   _wscrL   s    r>   r5   r5   ]   s0    t}}0T[[00d::dr@   c                 ~    t          |           r|                     d          } |                     t                    S rO   )r!   rI   lstriprP   rQ   s    r>   rS   rS   a   0    t}}0T[[00d;;tr@   c                 ~    t          |           r|                     d          } |                     t                    S rO   )r!   rI   rstriprP   rQ   s    r>   rV   rV   e   rT   r@   c                       e Zd ZdZdS )r   a/  
    class ParaLines contains the broken into lines representation of Paragraphs
        kind=0  Simple
        fontName, fontSize, textColor apply to whole Paragraph
        lines   [(extraSpace1,words1),....,(extraspaceN,wordsN)]

        kind==1 Complex
        lines   [FragLine1,...,FragLineN]
    N__name__
__module____qualname____doc__rD   r@   r>   r   r   i              r@   r   c                       e Zd ZdZdS )r   a  
    class FragLine contains a styled line (ie a line with more than one style)::

        extraSpace  unused space for justification only
        wordCount   1+spaces in line for justification purposes
        words       [ParaFrags] style text lumps to be concatenated together
        fontSize    maximum fontSize seen on the line; not used at present,
                    but could be used for line spacing.
    NrX   rD   r@   r>   r   r   t   r]   r@   r   c                     d                     t          t          t          t	          t          |                                                   S )Nr/   )joinlistfilterr   rK   r5   Ls    r>   
_lineCleanre      s2    88DeE!HHoo6677888r@   r/   c                     t          t          t          t          t          t          t          | d                                                  }|                    |          S )zThis is an internal utility which takes triple-
    quoted text form within the document and returns
    (hopefully) the paragraph the user intended originally.r'   )ra   rb   r   mapre   rK   r`   )rL   joinerrd   s      r>   r   r      sG     6%SU4->->??@@AABBA;;q>>r@   c                 L    |dk    s|dk     r|                      |           d S d S )Ngư>gư)setXPos)txdxs     r>   rj   rj      s-    	$ww"U((


2 (r@   c                 t    t          |           r|                     d          S |                     d          S )Ns    rH   )r!   count)ws    r>   
_nbspCountrp      s4    qzz  ww{###wwwr@   c                    |dk    pt          | dd          }d                    |          }t          | |           |s(t          |          t	          |          z   dz
  }|dk    }|r|                     |d           nP|                     |t          |          z             |                     |d           |                     d           t          | |            |S N:0yEpreformattedFr/   r2   r   )getattrr`   rj   lenrp   _textOutsetWordSpacer7   )rk   offset
extraspacewordslastsimplerL   nSpacess           r>   _leftDrawParaLiner      s    AN5!A!AF88E??DBv e**Z---a/! 
D

U7^^3444
D
BwMr@   c                    |dk    pt          | dd          }d                    |          }|s(t          |          t          |          z   dz
  }|dk    }|r/|d|z  z   }t	          | |           |                     |d           nb|}|                     |t          |          z             t	          | |           |                     |d           |                     d           t	          | |            |S )Nrs   rt   Fr/   r2   r         ?ru   r`   rv   rp   rj   rw   rx   r7   	rk   ry   rz   r{   r|   r}   rL   r~   r=   s	            r>   _centerDrawParaLiner      s    AN5!A!AF88E??D e**Z---a/! 	S:%%1
D

U7^^34441
D
BrNNNHr@   c                    |dk    pt          | dd          }d                    |          }|s(t          |          t          |          z   dz
  }|dk    }|r?||z   }t	          | |           |                     d                    |          d           nb|}|                     |t          |          z             t	          | |           |                     |d           |                     d           t	          | |            |S rr   r   r   s	            r>   _rightDrawParaLiner      s   AN5!A!AF88E??D e**Z---a/! 	Z1
CHHUOOA&&&&

U7^^34441
D
BrNNNHr@   c                    t          | |           d                    |          }t          | dd          pd|cxk     odk    nc p|o|dk    }|s(t          |          t	          |          z   dz
  }|dk    }|r|                     |d           nP|                     |t          |          z             |                     |d           |                     d           t          | |            |S )Nr/   rt   Frs   :0yE>r2   r   )rj   r`   ru   rv   rp   rw   rx   r7   )rk   ry   rz   r{   r|   rL   r}   r~   s           r>   _justifyDrawParaLiner      s   BvHHUOODb..i53I3I3I3IT3I3I3I3IitOhXbchXhF e**Z---a/! 
D

U7^^3444
D
BwMr@   c                 <     |rt           nt          | ||||          S N)r   r   )rk   ry   rz   r{   r|   s        r>   _justifyDrawParaLineRTLr      s(    @$@,@"fjZ_aefffr@   c                     |dk    rd}nl|dv r|| z
  }nb|dk    r|d|z  | z   dz  z
  }nM|dv r	|d|z  z
  }n@|dk    rd|z  }n4|d	k    rd
|z  }n(t          |d          r|                    |          }n|}||| z   fS )z1return bottom,top offsets relative to baseline(0)baseliner   )ztext-toptopmiddle333333?r   )ztext-bottombottomsupersubg      normalizedValuehasattrr   )hvafontSizeiyos       r>   	imgVRanger      s    	:~~	!	!	!qj	X#h,q.#--	'	'	'X%	W(l	U8m	%	&	&   **s1u9r@   c                 P    t          | d          r|                     |          S | S )Nr   r   )vnvs     r>   imgNormVr      s.    q"##   $$$r@   c                 t   | j         }t          |          r!|}| j        }| j        }| j        }| j        }d}nzt          |dd          }t          |d| j                  }t          |d| j                  }t          |d| j                  }t          |d| j                  }t          |dd          }||||||fS )	Nr   rL   .fontNamer   	textColor	backColordy)endDotsr"   r   r   r   r   ru   )styledotsrL   r   r   r   r   r   s           r>   _getDotsInfor      s    =DT{{ ">>O	O	tF3''4
5>::4
5>::DU_==	DU_==	T$q!!)Ib88r@   g?gUUUUUU?c           
      <   t          |dd           }|j        }|j        }|j        }|j        }	|j        }
|j        }| |j        z  } |
dv }|rV|
dk    r<t          t          |z  |j
                  }t          t          |z  |j                   }n|j
        }|j         }||z   }|j        |k    r|                    |           |rl|j        }|R||z
  }|j        |k    r|||j        z
  z  }t#          ||z
            dk    r|}|                    |	|           ||_        ||z
  |_        ||_        t          |dd          }d}|j        }g }g }|j        }|j        }t-          |          D ]:\  }}t/          |d          r|j        }|j        }|d	k    r|j        }||j        j        }t;          |j        |j                  }t;          |j         |          }tC          ||j"        |          \  }} | ||z  z   }!|j#        $                    |j%        |!||z   ||d
           | |z  } |!|z  }!tM          ||!|j        z
             n|j'        }"|dk    r |j#        (                    |"| ||z              nt          |j#        |"d           }#|#stS          d|d|"d          tU          || |||j                  |j#        _+        	  |#|j#        |t          |dd                      |j#        `+n# |j#        `+w xY w||d         u rG|j,        s*|-                    |j        j.        |j        j                   |/                    dd           | ||z  z   }!|!}$|j        }%|j0        }&|j1        }'|dk    r%|!|rdnte          ||dz
           j3        |          z
  }$|j,        |j        f|j.        |%fk    r|4                    |j.        |%           |j0        |&k    r|&|_0        |5                    |&           |j1        |'k    r|'|_1        |6                    |'           ||j        k    r?to          |          }(to          |j                  })|)|(z
  }*|(|)z
  }+|+D ]},||,         |$f||,<   ||j8        k    rKto          |          }(to          |j8                  })|)|(z
  }-|(|)z
  }.|.D ]},||,         |$f||,<    ||,d           |j3        }/|/                    |/||d         u            ||j        k    r|*D ]},|,|%|&|!f|%f||,<   |j        }|r|D ]},||,         \  }0}1|%|1k    r|0|%f||,<   |'d|%z  z
  }2|'|%z   }3||j8        k    r"|-D ]},|,| f|2|3f||,<    ||,d           |j8        }|rA|D ]>},||,         \  }0}4}5|2|4k     s|3|5k    r$|0ts          |2|4          t          |3|5          f||,<   ?t          |dd           }6|6r|j:        s|6|_:        |!|_;        n|j:        r|6s/|j<        =                    |j;        |$|j:        f           d |_:        nU|j:        |j:        k    s|j0        |j:        k    r5|j<        =                    |j;        |$|j:        f           |6|_:        |!|_;        |j#        >                    |/|j,        |j                  }7| |7z  } ||/?                    d          t          |/          z   z  }<| |dz
  |z  z   }!|r`|j        jA        rT|j        jB        dk    r|dk    rt          | |!|jD        ||           n%|dk    r|jE        }8t          |8|8|	|8z
  ||d           |r|D ]},||,         |!f||,<   |r|D ]},||,         |!f||,<    ||,d           |j:        r'|j<        =                    |j;        |!|j:        f           |j        |	k    rtM          ||	|j        z
             d S d S )N_linkRecordc                      d S r   rD   )argskwdss     r>   <lambda>z_putFragLine.<locals>.<lambda>  s     r@   )minmaxr   r   
_wordSpacer   cbDefnimgauto)maskanchorzMissing z callback attribute '')rk   cur_xcur_yleadingxslabelr%   r2   endg?startr   r/   RTLrightleftF)r   )Fru   rt   	XtraStater   _x0autoLeadingr   
leftIndentr   _56ascent_16descent_leading
setLeading_olb	_oleadingabssetTextOriginr{   us_lineslinks	enumerater   r   kind	_fontsizer   r   r   width	paraWidthheightr   valign_canvas	drawImageimagerj   namebookmarkHorizontalAttributeErrordict_curr_tx_info	_fontnamesetFontr   rw   r   rise_trailingSpaceLengthrL   _setFontsetFillColorsetRisesetlinkr   r   backColor_x
backColorsappendr
   rn   rp   r   wordWrap_do_dots_fragmaxWidth	_x_offset)9r   rk   liner|   pKind
linkRecordrt   r   r   x0r   r   dalr   r   olbxcywsr~   r{   ALLLr   r   ifr   r   txfsro   r   iy0iy1cur_x_sr   funcend_xr   r   r   SNSnLLeLLlnALeALrL   l0fsmaxnlonhilohibgtxtlenr   s9                                                            r>   _putFragLiner    s   M*D*DEEJ?L	BHE	B.KjG	R]E

&C
 !WT[11F#g+t|m44GG[F|mG.	{G
g
 g?f*C|W$$2<//3u9~~d""  E*** '/	L	#	#BGJE	B	B{HHE%   k8 k811X j	8XF;DU{{|<8,DV\",77V]400#AfmD99C'"*,
$$V\'%)AaV$TTT
1726>****{>>J11$uU7]KKKK"2:d488D a,nUYUYUYZ^Z^Z^-_```-1Re%X_ceco-p-p-pBJ,5RZWVGD-I-IJJJJ44BJ44444E"I~~| DJJrx01BCCCBq!!!gbj(GEzHI6D1uu#c11:NuUVWXUXz`b:c:cdR\*QZ,AAAAJ111|Y&&(	***w}}

4    QZGG__1f"f 4 4A"*1+e"3HQKKQV||GG[[1f"f ( (A$Qx~E!HJq''''6DKKQ%)^,,,QZ J JA#$Xi"@"IHQKKZ 3 3 3A (IB~~&((lX%C/CQV|| * *A !%yS0E!HJq))))V > > >A!&qJBB2vvR#%c#bkk#c"++#=a;t,,B 
-", 
-!!( - -M((2>5",*OQQQ#'BLL[",..",2L2LM((2>5",*OQQQ#%BL%,BNZ++D",MMFVOEtzz#z$'7'777GGWQYN"G H  H8e##g~~eGDM"R@@@F]]LE%U
BGGGG	 / 	/ 	/A"1+w.HQKK	   	  	 AQx(E!HJq	| H
r~wEGGG	vrzz2bf9 zs   !K//	K8Tc                    t          |j                  \  }}}}	}
}|j                            |||          }||z   |k    r"|j        |k    s|j        |k    r|                    ||           |r|t          |d|j                  z  }|	                    d|j
        |z              t          ||| z
             t          ||z
  |z            }t          ||||z  z
             |j        |	k    r|                    |	           |
r|j                            | ||
f           |                    ||z  d           |r'|	                    |j        |j
        |z
             d S d S d S )N_dotsOffsetXr   r2   )r   r   r   r
   r   r   r   ru   r   r   r   rj   intr   r   r   r   rw   )r   r  r   r   rk   r   rL   r   r   r   r   r   r  ns                 r>   r   r     s   4@4J4J1D(9YrZ##D(H==Fv~x<!!R\8%;%;JJx)))>WRrv>>>
28B;'''75=!!!'!6)**8fQh&'''<""OOI&&&Fbm**E(9+EFFF
AdF13rrx{33333   	43r@   c                    || _         t          | |           |j        }|dk    pt          |dd          }|s/|j        t          d |j        D                       z   dz
  }|dk    }|rt          || ||d           nM|                     |t          |          z             t          || ||d           |                     d           t          | |            d S )Nrs   rt   Fc                 V    g | ]&}t          |d           t          |j                  'S r   r   rp   rL   rE   ro   s     r>   rG   z&_leftDrawParaLineX.<locals>.<listcomp>  4    %h%h%hQT[\]^fTgTg%hj&8&8%h%h%hr@   r2   r   r   )
r   rj   
extraSpaceru   	wordCountsumr{   r  rx   r7   rk   ry   r   r|   r   r}   r~   s          r>   _leftDrawParaLineXr$    s    BLBvJCnU!C!CF .%h%h$*%h%h%h!i!iijkk! VRtV4444

U7^^3444VRtV444
Bwr@   c                 
   || _         || j        z   | _        	 |j        }|dk    pt	          |dd          }|s/|j        t          d |j        D                       z   dz
  }|dk    }|r1|d|j        z  z   }t          | |           t          || ||d           nO|}| 
                    |t          |          z             t          || ||d           | 
                    d           t          | |            | `d S # | `w xY w)	Nrs   rt   Fc                 V    g | ]&}t          |d           t          |j                  'S r  r  r  s     r>   rG   z(_centerDrawParaLineX.<locals>.<listcomp>  s4    )l)l)lX_`abjXkXk)l*QV*<*<)l)l)lr@   r2   r   r   center)r   r   r  r   ru   r!  r"  r{   rj   r  rx   r7   rk   ry   r   r|   r   r}   r~   r=   s           r>   _centerDrawParaLineXr)    s+   BLrvoBO_
E!GWT.%G%G 	 nS)l)ldj)l)l)l%m%mmnooGaZF 	s4?**ABqMMMBd84444AOOJw7888BdH555OOAA2OOOBOs   C"C> >Dc                    || _         |j        }|dk    pt          |dd          }|s/|j        t	          d |j        D                       z   dz
  }|dk    }|r.||j        z   }t          | |           t          || ||d           nO|}|                     |t          |          z             t          || ||d           |                     d           t          | |            d S )Nrs   rt   Fc                 V    g | ]&}t          |d           t          |j                  'S r  r  r  s     r>   rG   z'_rightDrawParaLineX.<locals>.<listcomp>  r  r@   r2   r   r   )
r   r   ru   r!  r"  r{   rj   r  rx   r7   r(  s           r>   _rightDrawParaLineXr,    s    BLJCnU!C!CF .%h%h$*%h%h%h!i!iijkk! 4?"1Qr4w////

U7^^3444QD$000
BrNNNNNr@   c                    || _         t          | |           |j        }|j        pd|cxk     odk    nc p|o|dk    }|s/|j        t          d |j        D                       z   dz
  }|dk    }|sN|                     |t          |          z             t          || ||d           |                     d           nt          || ||d           t          | |            d S )Nrs   r   c                 V    g | ]&}t          |d           t          |j                  'S r  r  r  s     r>   rG   z)_justifyDrawParaLineX.<locals>.<listcomp>  r  r@   r2   r   justify)
r   rj   r   	lineBreakr!  r"  r{   rx   r7   r  r#  s          r>   _justifyDrawParaLineXr1    s   BLBvJ^Vj 6 6 6 6$ 6 6 6 6VD<UZPUEUF .%h%h$*%h%h%h!i!iijkk! 8

U7^^3444VRtY777
VRtY777Bwr@   c                 :     |rt           nt          | |||          S r   )r,  r1  )rk   ry   r   r|   s       r>   _justifyDrawParaLineXRTLr3    s&    B4B-BRQUW[\\\r@   c                     t          |           }|r8|j                            |                                |j        |j                  ndS Nr   )_wsc_end_searchr   r
   r8   r   r   )rL   rk   r   s      r>   r   r     s@    			BMOV2:!!"((**blBLIIIUVVr@   c                       e Zd ZdZdS )_HSFragz!a frag that's followed by a spaceNrX   rD   r@   r>   r8  r8    s        ++Dr@   r8  c                       e Zd ZdZdS )_InjectedFragzHa frag that's injected in breaklines and must be removed on reprocessingNrX   rD   r@   r>   r:  r:    s        RRDr@   r:  c                       e Zd ZdZdS )
_SplitFragza split fragNrX   rD   r@   r>   r<  r<    s        Dr@   r<  c                       e Zd ZdZdS )_SplitFragHz.a split frag that's the head part of the splitNrX   rD   r@   r>   r>  r>  "  s        88Dr@   r>  c                       e Zd ZdZdS )_SplitFragHYz:a head split frag that needs '-' removing before rejoiningNrX   rD   r@   r>   r@  r@  '  s        DDDr@   r@  c                       e Zd ZdZdS )_SplitFragHSz'a split frag that's followed by a spaceNrX   rD   r@   r>   rB  rB  +  s        11Dr@   rB  c                       e Zd ZdZdS )_SplitFragLLz<a frag that is forced to end in - because of paragraph splitNrX   rD   r@   r>   rD  rD  /  s        FFDr@   rD  c                       e Zd ZddZdS )_SHYIndexedStrNc                    |sf|                     t                    }g }|j        }d}|D ]}|t          |          z  } ||            d                    |          }|d d         }t
                              | |          }||_        |S )Nr   r%   r   )rK   _shyr   rv   r`   str__new___shyIndices)clsuXaxr:   selfs          r>   rJ  z_SHYIndexedStr.__new__4  s     		AAAA  SVV!A#2#A{{3q!!r@   r   )rY   rZ   r[   rJ  rD   r@   r>   rF  rF  3  s(             r@   rF  c                    |                      d          }t          | t                    rd| j        dd         }|d         |r;t	          |d          r&|                    fd|j        D                        ||z  }t          ||          S |rK||z  }t	          |d          r6|                    fd|j        D                        t          ||          S |S )zDrejoin two parts of an original _SHYIndexedStr or str that was split-Nr   rK  c                     g | ]}|z   S rD   rD   rE   _rP  s     r>   rG   z_shyUnsplit.<locals>.<listcomp>K  s    666!!A#666r@   c                     g | ]}|z   S rD   rD   rU  s     r>   rG   z_shyUnsplit.<locals>.<listcomp>Q  s    222aac222r@   )rV   
isinstancerF  rK  r   extend)r:   ssrM  rN  rP  s       @r>   _shyUnsplitr[  C  s    	A!N## 'M!!!bE 	r-(( 86666r~666777GAa"""	 '	R2m$$ 	'HH22222>222333!!A&&&Hr@   c                       e Zd ZdZd ZdS )_SHYWordzIa fragword containing soft hyphens some of its strings are _SHYIndexedStrc           	         | d         }d| _         |dk    rg S d }d}||z
  x}}d }t          | dd                    D ]\  }	\  }
fd}t          |
t                    rr |d          }||z   }t          |
j                  D ]>\  }|
d          |
d          }}| ||          z   }||}||k    }|r n
|	|||||f}?| ||
          z  }n| ||
          z  }||k    }|r| n|||z
  nd| _         |sg S |\  }	}}}}}|	dz   }| |         \  }
|
j        }t          |dz   |d |dz                      }| d |         |fgz   }||z
  |d<   ||d         z
  |z   g|sg n)t          |fd||dz   d          D                       fgz   | |dz   d          z   }t          |          t          |          fS )Nr   Fr2   c                 :    t          | j        j                  S r   r
   r   r   )r:   r   s    r>   r   z%_SHYWord.shyphenate.<locals>.<lambda>`  s    ;q!*ajAA r@   rS  c                     g | ]}|z
  S rD   rD   rU  s     r>   rG   z'_SHYWord.shyphenate.<locals>.<listcomp>z  s    LbLbLbUVQqSLbLbLbr@   )_fswwr   rX  rF  rK  _SplitFragSHY
_SHYWordHS)rQ  newWidthr   wwpossibleexceeded	baseWidth
baseWidth0fswwr   tsWshyLenbwjr   r   leftwi1rN  leftsrd   Rr   rP  s                          @@r>   
shyphenatez_SHYWord.shyphenateW  sy   !W
q55)!)B.	J abb** 	4 	4GAeqAAAAB!N++ 0D'%am44 C CDAq"#BQB%122%Drr$xxKE|ET$x/H& !QtUFBHHRRUU"		RRUU"	$x/3D,ee(,(8T*__j
".6+1aeVqSBx1MtDy4AaC411"I!E#z!!!WV^ebbQ~eLbLbLbLbZ[\]^_\_\`\`ZaLbLbLb7c7c4d3efimnpqrnrnsnsittQA..r@   N)rY   rZ   r[   r\   rv  rD   r@   r>   r]  r]  U  s)        SS$/ $/ $/ $/ $/r@   r]  c                       e Zd ZdZdS )rd  zOa head split frag that requires removal of a hyphen at the end before rejoiningNrX   rD   r@   r>   rd  rd  }  s        YYYYr@   rd  c                       e Zd ZdZdS )re  z=a fragword containing soft hyphens that's followed by a spaceNrX   rD   r@   r>   re  re            GGDr@   re  c                 d    	 t          | d         d         t          t          f          S #  Y dS xY w)Nr   F)rX  r7   r  )fragss    r>   _processed_fragsr|    s3    %(1+uSk222uus   '* /r2   r3      c                    dg}|j         }d}d}| D ]}||d         z  }t          |t                    }|dd         D ]~}|\  }}	|r@||d         u r6|t          |	d         |j        |j                  dz   z  }t          |	          }	||u r"|t          |d         d         |	          f|d<   o |||	f           |}||d<    t          |          |          S )z!F should be a list of _SplitFragsr   Nr2   r   r   )r   rX  r@  r
   r   r   r[  _reconstructSplitFrags)
Fru  aRwLenpstyr   rmhyffstyrm  s
             r>   _rejoinSplitFragWordsr    s   	
A	
BDD  !!L))ABB% 		 		BFC #aeAbE#,s|DDtKKNNs{{k!B%(1556"C7		 AaD$!!$$Q'''r@   c                     t          | t                    r#t          | t                    rt          nEt          n>t          | t                    r#t          | t                    rt          nt          nt
          S r   )rX  r]  r8  re  rD  ra   )r   s    r>   r  r    s_    CMaPXCYCY p:a00>ZZhhOYZ[\cOdOdn:a#=#=J<<77jnqr@   c                 $
   fd}g }|j         }g }t          |           r|j         }	 | D ]}t          |t                    r ||           t          |t                    r> ||           t          |t
                    r |t          |                     |dd= v|r |t          |                     |dd=  ||           |r |t          |                     n	d}d}d}d}| D ]}|j        }|d	k    r6t          |_        |rt!          |          }|s1d}t#          |          }|d         t$          v s|sx|r=|                    d|            ||rt)          |          n|           |}g }d}d}d}n|ot          |d         t
                    }|s|                    dd	           n|s|dd         D ]}t*          |v rt-          |          }d}|                     ||f           |t          ||j	        |j
                  z  }|                    d|            ||st          |t(                    rt/          |          nt          |                     g }d}d}d}|d         }t*          |v rt-          |          }d}|                     ||f           |t          ||j	        |j
                  z  }|ri|d         t$          v rZ|                    d|            ||st          |t(                    rt)          |          nt          |                     g }d}d}Gt1          |d
          r|j        }t5          |dd          }|rt1          |d          r|_        |                              }|r:|                    d|            ||rt          |          n|           g }d}d}d}t:          |_         |||d	fg           d}t<          |_        |s<|r:t          |d         t
                    r|d                              |d	f           C|                     |d	f           \t1          |d          rH|r)|                    d|            ||           g }d}d}d}t>          |_         |d|d	fg           d}|rG|                    d|            ||st          |t(                    rt)          |          n|           |s| r| d         }t          |_        d|d	fgg}|S )z given a Parafrag list return a list of fragwords
        [[size, (f00,w00), ..., (f0n,w0n)],....,[size, (fm0,wm0), ..., (f0n,wmn)]]
        each pair f,w represents a style and some string
        each sublist represents a word
    c                     | d         }t          |t                    r.|j        k    r%|_        |                              }|| d<   d S d S d S r5  )rX  r   _normalizerr   )r   ro   r   s     r>   _rescaleFragz#_getFragWords.<locals>._rescaleFrag  sb    aDa 	}h&& (%%h//!		 	&&r@   TNr   r   r   r2   Fr%   r   r   r   r0  ) r   r|  rX  r:  r<  r8  r  r@  r
   r   r   r[  r  rL   _FK_TEXT_fkindrS   rK   r   insertr]  rH  rF  re  r   r   ru   r  r   _FK_IMG
_FK_APPEND	_FK_BREAK)r{  r   r  ru  r  WaWr   f0Wlenr  lfrm  tshangingSpacer  hangingStrip
shyIndicesrL   r  whsro   cbs    `                     r>   _getFragWordsr    s        	A	
B
A bKX9	9  a..8Qa
++ 	BqEEE!!W-- !033444aaaD !033444aaaDBqEEEE -(++,,,d 
 T	$ T	$A6DRxx# )!$<<D)#(L$KK7j((( 	>1*;8A;;;!<<<*%*
',=JquW$=$= !2 ! 3B3 
 
Aqyy*1--%)
HHaUOOOQ
AJ???AHHQqMMMB
\j86L6L\z!}}}RYZ[R\R\]]]A!&JAA$bE199&q))A!%J!A[AJ
;;; DH
22HHQqMMMBjZJq4J4JZx{{{PWXYPZPZ[[[A!&JA8$$ "$XBwq)) )q!233 8(0--h77 1<71:::1===%*
',&AHB1R&zNNN#(LL)AH ) )z!B%'@'@ )"aV,,,,!B((((K(( $ )HHQqMMMBqEEEAA!&J#(L$Aqf:# 	KHHQqMMMBjIJq,B,BIx{{{JJJ  	aAAHQsGA
 Hr@   c              #   (  K   | dd          D ]\  }}t          |d          r|t          |j        dd          |fV  1|rJt          |          r|                    d          }|D ]"}|t          ||j        |j                  |fV  #}|d|fV  d S )Nr2   r   r   r   rB   )r   ru   r   r!   rI   r
   r   r   )ro   r   r:   cs       r>   _fragWordIterr  g  s      !"" 	 	11X 	WQXga00!33333 	qzz %HHV$$ B BQqz1:>>AAAAAB Q'MMMM	 	r@   c                    g }t          |          dz
  }g }d}d}d}	| d         d         }
t          |           D ]\  }}}||z   }||k    }||
us|r|
                                }
t          |
d          r||
_        |                    |
|f           |rIt          |	g|z             }|                    |           |dz  }|t          ||                   }g }|}d}	d}|}
|	|z  }	||z  }|}|                    |
|f            t          | t                    rt          nt          |	g|z             }|                    |           |S )aD  given a frag word, w, as returned by getFragWords
    split it into frag words that fit in lines of length
    maxWidth
    maxWidths[lineno+1]
    .....
    maxWidths[lineno+n]

    return the new word list which is either 
    _SplitFrag....._SPlitFrag or
    _SplitFrag....._SplitFragHS if the word is hanging space.
    r2   r   r%   rL   )rv   r  cloner   rL   r   r<  r   rX  r8  rB  r>  )ro   r   	maxWidthslinenoru  	maxlinenor  	lineWidthfragText	wordWidthr   gcwr  newLineWidthtooLongs                   r>   _splitFragWordr  s  s~    	AIq I
AIHI	!QA"" ! !"Q |x'A:::		Aq   "!HHa\""" 	{1}--!$S6%:%:;!	HAR	A 		HHa\	?Ag..	?K)QOOAHHQKKKHr@   uK  (^(?:[a-z0-9\.\-\+]*)://)(?:\S+(?::\S*)?@)?(?:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|\[[0-9a-f:\.]+\]|([a-z¡-￿0-9](?:[a-z¡-￿0-9-]{0,61}[a-z¡-￿0-9])?(?:\.(?!-)[a-z¡-￿0-9-]{1,63}(?<!-))*\.(?!-)(?:[a-z¡-￿-]{2,63}|xn--[a-z0-9]{1,59})(?<!-)\.?|localhost))(?::\d{2,5})?(?:[/?#][^\s]*)?\Zc              #     K   d}|                      |          r$||z  }| d d         } |                      |          $d}	 |                     ||          }|dk     rd S |dz  }|| d |         z   | |d          |z   fV  @)Nr%   r   r3   Tr   r2   )endswithfind)urischemeslashtailr   s        r>   _slash_partsr    s      D
,,u

 #2#h ,,u

  	
A*HHU1Q33	QS!WnSWT\))))	*r@   c                 r   t          |           r|                     d          } t                              |           }|sd S |                    d          }| t          |          d          } |sd| vrdnd}|r| r|| fgng t          t          | ||                    z   }|                                 |S )NrB   r2   /\)	r!   rI   uri_patr6   r8   rv   ra   r  reverse)r  r=   r  r  ru  s        r>   _uri_split_pairsr    s    s||-3::f--ScATTWWQZZF
c&kkll
C  T__UU 
"	2s	263-d<FSX;Y;Y6Z6ZZAIIKKKHr@   u[   A-Za-zÀ-ÖØ-öø-ɏẀ-ẅḀ-ỿА-яḂḃḊḋḞḟṀṁṖṗṠṡṪṫẛỲỳ   ­u   -­u   ^['"([{¿‘‚“„]+u   []'")}?!.,;:’‛”‟]+$z^[z]+$([z])c
                    t          |          r|                    d          }t                              |          }
|
r-|
                    d          }|t          |          d          }nd}t          |t                    r|d         dk    rd}|d d         }nLt          	                    |          }
|
r.|
                    d          }|d t          |                    }nd}t          |          |	k     rd S ||z
  }t          |          }|Q||k    s|rG|d|z
  |z  k    r;|D ]8\  }}||z   }||z   }t          |||          }||z   }||k    rdd|||z
  ||fc S 9d S t                              |          }| rt                              |          st                              |          rd|vrt          d||          } | |          D ]d\  }}||z   }t                              |d                   sd}|}nd}d}||z   }t          |||          }||z   |z   }||k    r|||||z
  ||fc S et          |          }|dk    r|rd|vrt                              |          rt!          t#          d|d                    D ]s}|d                    |d |                   z   }d                    ||d                    |z   }t          |||          }||z   }||k    rdd|||z
  ||fc S ld S d S d S d S d S )	NrB   r   r%   r   rS  r2   r}  r3   )r!   rI   _hy_pfx_patr6   r8   rv   rX  _SplitWordLL_hy_sfx_patsearchr  r
   _hy_shy_patrK   _hy_letters_pat_hy_shy_letters_patreversedranger`   )
hyphenatorr:   rg  rf  r   r   r   uriWasteReduceembeddedHyphenationhymwlr=   pfxsfxw0ru  r   rm  hwtwHhylenjcjclenr  r   s                            r>   
_hyGenPairr    s   qzz'qxx''1!A ggajjc#hhiiL!L!! 	aeSjjcrcFq!! 	''!**C*CHH9*AAC
1vv~~vv	BBA}h;;>;bQ~5Ex4O.O.O . .1EG 8H55"Wx<<qBrE!A----  !A ---a00 -5H5N5Nq5Q5Q -VYabVbVbD(33:a== 	- 	-CAaaA$$QrU++ CAQx11BBB8||%2b51,,,, 
 	AA!tt#t19L9R9RST9U9U%!A,,'' 	* 	*Abggaenn$A!""$AQx11BBB8||1R2a))))  ttt	* 	*r@   c                    dx}}g }|j         }g }|j        }t          dt          |                     D ]}| |         \  }}	|j        dk    r dS t          |d          rt          |j        dd          r dS |	sGt          |	          r|		                    d          }	 ||	            |t          |	          ||fgz             |t          |	          z  }d
                    |          t          |          fS )ztakes a frag word and assembles a unicode word from it
    if a rise is seen or a non-zerowidth cbdefn then we return
    None. Otherwise we return (uword,([i1,c1],[i2,c2],...])
    where each ii is the index of the word fragment in the word
    r   r2   Nr   r   rB   r%   )rY  r   r  rv   r   r   ru   r   r!   rI   r`   tuple)
FWccplenrN  eXUaUr   r   rm  s
             r>   _fragWordSplitRepr    s    MB
A	
B
A	
B1SWW  !u16199TTT1XF718GA#>#>F(1::+188F++q
1
3q66Ab6(?
c!ff88A;;uQxxr@   c                 <    t          d | D                       g| z   S )zF are the fragsc              3   R   K   | ]"\  }}t          ||j        |j                  V  #d S r   ra  )rE   r:   rM  s      r>   	<genexpr>z#_rebuildFragWord.<locals>.<genexpr>%  s6      CC#!AQqz!*55CCCCCCr@   )r"  )r  s    r>   _rebuildFragWordr  #  s'    CCCCCDDEaGGr@   c           	      X	   t          |          }|sd S |\  }}t          |          r|                    d          }t                              |          }	|	r-|	                    d          }
|t          |
          d          }nd}
t          |t                    r%|d         d         d         dk    rd}|d d         }nLt          
                    |          }	|	r.|	                    d          }|d t          |                    }nd}t          |          |k     rd S |d         }||z
  }t          |          }|||k    s|r|d|z
  |z  k    r|D ]\  }}|
|z   }t          |          }||         \  }}|d|         }||         \  }}|d ||z
           }|r|                    ||f           |||z
  d          }||dz   d          }|r|                    d||f           t          |          }||d         z   |k    rd|t          |          fc S d S t                              |          }| r3t"                              |          st$                              |          rd|vr | |          D ]\  }}|
|z   }t          |          }||         \  }}|d|         }||         \  }}|d ||z
           }t                              |d                   sd}nd}|s|r|                    |||z   f           |||z
  d          }||dz   d          }|r|                    d||f           t          |          }||d         z   |k    r||t          |          fc S t          |          }|dk    r|rd|vrt$                              |          r t'          t)          d|d                    D ]}t          |
d                    |d |                   z             }||         \  }}|d|         }||         \  }}|d ||z
           }|r|                    ||f           |||z
  d          }||dz   d          }|r|                    d||f           t          |          }||d         z   |k    rd|t          |          fc S d S d S d S d S d S )	NrB   r   r%   r   r2   rS  r}  r3   )r  r!   rI   r  r6   r8   rv   rX  rD  r  r  r  r   r  r  r  rK   r  r  r  r  r`   )r  r  rf  r   r  r  r  rN  r:   r=   r  r  rg  r  ru  r   rm  posfxr  FLffxsfxlsfxrFRr  r  r  r   s                                r>   _hyGenFragsPairr  '  sQ   "AffDAqqzz'qxx''1!A ggajjc#hhiiL"\"" 	r"vay}c'9'9crcFq!! 	''!**C*CHH9*AAC
1vv~~vv	AB	BB 	A}h;;>;bQ~5Ex4O.O.O 6 61E!ff3B"Xb6S7CF7|.C:...3r677|1Y01c$Z000$R((ad7H$$q!1"!5!55555 %!A 1,,Q// 14G4M4Ma4P4P 1UX`aUaUa:a== 	1 	1CAaAAa&&CsVFBAbDB"vHCwBw<D$$QrU++  )r )		3tBw-(((s2vww<DBqDEEB,RYYq#d,,, $$A!A$w  !,R000000 !
 	AA!tt#t19L9R9RST9U9U%!A,,'' 	2 	2AcCHHQrrUOO+,,CsVFBAbDB"vHCwBw<D*RYYDz***s2vww<DBqDEEB,RYYq#d,,, $$A!A$w  1-b111111 ! ttt	2 	2r@   c                 p   |d         }|dk    rg S t          |          dk    r|d         \  }}	t          |t                    rt          |	          }	t	          | |	||||j        |j        |||
  
        }
|
r\|
\  }}}}}} |rt          nt          ||z   |||z   fg           t          |t                    rt          nt          |||fg          gS nbt          | ||||||          }
|
rK|
\  }}} |rt          nt          |           t          |t                    rt          nt          |          gS d S )Nr   r3   r2   )rv   rX  rD  r  r  r   r   r@  r>  r8  rB  r<  r  )r  r  rf  r   r  r  r  rg  r   r:   ru  r  r  r  r  r   rm  s                    r>   _hyphenateFragWordr    s   	AB	1uuRi
2wwzz!u1b&& 	 QAz1b(Haj!*Ucdwy~ 	U&'#Br2q!8R8\\[2e8QqtH:MNN  QG`jkmnu`v`v  QGP\P\  }G  JL  NO  PQ  MR  IS  PT  PT  U  U	U JHh~Nachii 	zHB18R8\\[!<<>tjY[\cNdNd>tlljtvw=x=xyy4r@   c                       e Zd ZdS )
_SplitWordNrY   rZ   r[   rD   r@   r>   r  r            Dr@   r  c                       e Zd ZdS )_SplitWordEndNr  rD   r@   r>   r  r    r  r@   r  c                       e Zd ZdS )_SplitWordHNr  rD   r@   r>   r  r    r  r@   r  c                       e Zd ZdZdS )_SplitWordHYz$head part of a hyphenation word pairNrX   rD   r@   r>   r  r    s        ..Dr@   r  c                       e Zd ZdZdS )r  z=a word that's forced to end with - because of paragraph splitNrX   rD   r@   r>   r  r    ry  r@   r  c                        e Zd ZdZd ZddZdS )_SHYStrz for simple soft hyphenated wordsc                    |                     t                    }t          |          dk    rnt                              | d                    |                    }dg}|j        }|D ]#} ||d         t          |          z              $|dd         |_        n"t                              | |          }g |_        |S )Nr2   r%   r   r   )rK   rH  rv   rI  rJ  r`   r   __sp__)rL  r:   r  rQ  spasprZ  s          r>   rJ  z_SHYStr.__new__  s    GGDMMq66!88;;sCHHQKK00DB)C $ $BrF3r77N####QrT(DKK;;sA&&DDKr@   rB   c                     d _         t          t          t           j                                      D ]\  }} d|         }t          ||||          }	|s|	 _         ||	z   }
|
|k    r j        |d         t                     gz    fdt          t                    dz
            D             }t          |dz             } j        d|         |_        |t          t          
                    |                    gc S dS )z{
            baseWidth = currentWidth + spaceWidth + hyphenWidth
            limWidth = maxWidth + spaceShrink
            r_  Nc                 B    g | ]}|         |d z                     S )r2   rD   )rE   rq  TrQ  s     r>   rG   z(_SHYStr.__shysplit__.<locals>.<listcomp>  s.    DDDqad1QqS6k*DDDr@   r2   rS  )rc  r  ra   r   r  r
   rv   r  r  rH  r`   )rQ  r   r   rj  limWidthencodingr   r  swswwswnwr  r  s   `           @r>   __shysplit__z_SHYStr.__shysplit__  s   
 $DJ!$y'='=">">?? 6 62 #2#Y!"h(CC*s$* 38##ABB3t99+5ADDDDDE#a&&(OODDDA D))B $BQBBIwtyy||445555 $6 6r@   NrB   )rY   rZ   r[   r\   rJ  r  rD   r@   r>   r  r    s=        **  6 6 6 6 6 6r@   r  c                       e Zd ZdS )_SHYSplitHYNr  rD   r@   r>   r  r    r  r@   r  c                       e Zd ZdS )	_SHYSplitNr  rD   r@   r>   r  r    r  r@   r  c
                     |dk    rg S t          | |||||||||	
  
        }
|
r4|
\  }}}}}} |rt          nt          ||z             t          |          gS d S r5  )r  r  r  r  )r  r   r   ro   rg  rf  r   r  r  r  ru  hyr  r  r  r   rm  s                    r>   _hyphenateWordr    s    	1uuRi:q"h(Hn]prwxxA N"#E2r1a44ad;;M!<L<LMMN Nr@   rB   c                    g }|j         }t          |          dz
  }	d}
|t          |	|                   }t          |           r|                     |          } | D ]]}t          ||||          }||z   }||k    r7 |t          |
                     |dz  }|t          |	|                   }|}d}
|
|z  }
|}^ |t          |
                     |S )z
    split w into words that fit in lines of length
    maxWidth
    maxWidths[lineno+1]
    .....
    maxWidths[lineno+n]

    then push those new words onto words
    r2   r%   )r   rv   r   r!   rI   r
   r  r  )ro   r  r  r  r   r   r  ru  r  r  wordTextr   r  r  r  s                  r>   
_splitWordr    s     	A	
BIq IHYv../Hqzz HHX 
! 
!8HX66 |  Bz(##$$$aKF Yv!6!67HLHA 		B}XHr@   c                    t          | d         t                    r'| d         }| dd         D ]}t          ||          }|S t          | d         t                    rwt          | d         t                    rt
          nt          }d                    d | D                       }t          | d         t                    r|nt          |dz             S d                    |           S )z-R can be a list of pure _SplitWord or _SHYStrr   Nr   r%   c              3   X   K   | ]%}t          |t                    r
|d d         n|V  &d S Nr   )rX  r  rE   rV  s     r>   r  z$_rejoinSplitWords.<locals>.<genexpr>  s=      MMa
1\ : :AaffMMMMMMr@   rS  )rX  r  r[  r  r  rI  r`   )ru  rrV  cfr:   s        r>   _rejoinSplitWordsr    s    !A$w 
aD111 	! 	!AAa  AA	AaD	&	& qum44FSS,HHMM1MMMNNqum44Nqq,qv:N:NNwwqzzr@   c              #   P  K   g }|j         }| j        ||         D ]u}|d         D ]j}t          |t                    r7 ||           t          |t                    rt          |          V  |d d = N|rt          |          V  |d d = |V  kv|rt          |          V  d S d S )Nr2   )r   linesrX  r  r  r  )blParar   stopru  r  r
  ro   s          r>   _yieldBLParaWordsr    s      
A	
B\%*%  1 	 	A!J'' 	1a.. +A.....!!! +A.....!!!GGGG	 	 #"""""""# #r@   c                 |   |                                  }dD ]"}t          ||          rt          ||           #t          t	          | ||                    |_        t          |j        d         t                    r>t          |j        d         t                    rt          nt          |j        d         _        |gS )N)r  r   rL   r   )r  r   delattrra   r  r{   rX  r  r  r  r  	__class__)r  r   r  r   rO  s        r>   _split_blParaSimpler#    s    A& & &1Q<<%1$VE$7788AG!'"+l++ _-7G-L-L ^		R^3Jr@   c                    g }| j         ||         }|D ]}|j        D ]}|                    |           ||d         urt          |          dz
  }|dk    rot	          ||         d          rYt          ||         j        dd          s=|dz  }|dk    r2t	          ||         d          rt          ||         j        dd          =|dk    r8||         }|j        sd|_        |j        d         dk    r|xj        dz  c_        |S )Nr   r2   r   r   r   r/   )r  r{   r   rv   r   ru   r   rL   )	r  r   r  r   r  r
  ro   r   r  s	            r>   _split_blParaHardr%  $  s   
ALt$E 	4 	4 	 	AHHQKKKKE"IAqAQ$$71Q411$'!A$+gVW:X:X$Z[_`Z`Z[!Q$$71Q411$'!A$+gVW:X:X$!ttaDv 4qvvVBZ__affmffHr@   c                 d   |j         }|s|j         dk    r|dk    }t          |          ru|}|ot          |v }	|	r"|d|                    t                             }t	          ||j        |j                  }
|	r&|
dt	          t          |j        |j                  z  z  }
nd}
|D ]}|j        }|ot          |v }	|	rH|d|                    t                             }|
dt	          t          |j        |j	                  z  z  }
|
t	          ||j        |j	                  z  }
|	r nnd}
|dk    r|
dz  }
|t          |dd          z  }|s|                     |j        |
z
  |          }n3|d         }||j        z   |j        |
z   z
  }|                     ||          }|                    |j        |j                   |                    t          |d|j                             t          |          r|                    |           nY|D ]V}|                    |j        |j	                   |                    |j                   |                    |j                   W|                     |           |s7|                                |j        d	z  z   }t)          |||j        z
            }|S )
z:draw a bullet text could be a simple string or a frag listr   numericNr   r   r   bulletOffsetYbulletColor333333?)bulletAnchorr"   r   indexr
   bulletFontNamebulletFontSizerL   r   r   ru   	beginTextbulletIndentrightIndentr   r   r   textOutdrawTextgetXr   r   )canvasry   r   
bulletTextr   rtlr+  r'  rm  qbulletWidthr   tx2r   bulletStart	bulletEnds                   r>   _drawBulletr=  3  s   %L
 e '))	) 	A.MQ.A0a////0!%a)=u?STTKm+{=%BVX]Xl'm'm!mm+ K  F2 2 \1177=1112A3]AJPQPZ)[)[#[[K{1aj!*EEE E X{c1{	WU?1---E 3u1+=eDDAE--u/A+/MN{E22KK$e&:;;;WU=AABBBZ  J 	  	 AKK
AJ///Q[)))KK
OOC : HHJJ!5!;;	VI(8899Mr@   c                 l   | rt          |           rt          | |j        |j                  }n*d}| D ]%}|t          |j        |j        |j                  z  }&|j        |z   d|j        z  z   }|j        dk    r|j	        |j
        z   }n|j        |j
        z   }||k    r|dxx         ||z
  z  cc<   dS dS dS )z@work out bullet width and adjust maxWidths[0] if neccessary
    r   r*  r   N)r"   r
   r-  r.  rL   r   r   r0  r   r1  firstLineIndentr   )r6  r   r  r9  r   	bulletLenindents          r>   _handleBulletWidthrB  f  s      1 	K%z53GI]^^KK K K K{161:qzJJJ&4sU=Q7QQ	>5  &u'<<FF%e&;;FvaLLLY/0LLLLL1 1 r@   c                    g }d}||         }d}t          |           }dx}}	 ||k     rc||k     r#|	|         dk    r|dz  }||k     r|	|         dk    ||k    r-|dz  }||k    rn(d}| |         }
|
j        }	t          |	          }nn||k     c||k    rdS d}g }d}d}||k     r|	                    d|          }|dk     r||k     t          |	||         |
j        |
j                  }||z  }||k    r8|g k    r2||z
  }|j        |         dk    r|dz
  }|dz
  }|j        |         dk    nC|dk     r|}|d         |
u r||d<   n|
||f}|                    |           ||k    r|dz  }||k     ːL)z
    given a list of ParaFrags we return a list of ParaLines

    each ParaLine has
    1)  ExtraSpace
    2)  blankCount
    3)  [textDefns....]
    each text definition is a (ParaFrag, start, limit) triplet
    r   r   r2   r/   )NNNr3   N)rv   rL   r  r
   r   r   r   )r{  widthsr  lineNummaxWr   r
  limr   rL   r   r  r   cLenr~   rq  ro   s                    r>   splitLines0rI  z  s    EGWoDA%jjACe'cc))US 0 0%1*%%))US 0 0czzQa44!Hv$ii cc #::uu #4ii		#e$$AssAsFFDqM!*QZ@@AAIDDyyT2XXAvfSk3&&'C%aiG fSk3&& ssAtqyy!A$$uQKA#vvQ% 4ii+'r@   c                     | j         }|j        }||k    r|                    |           |j        }	||	k    r|                    |           |                    ||||           d S r   )r   
_lineWidthsetLineWidth_strokeColorObjsetStrokeColorr   )
rk   x1y1x2y2nlwnsccanvolwoscs
             r>   _do_linerX    sp    :D
/C
Cxx#

C
CxxC   IIb"b"r@   c           	      |   |j         }|j        }|j        | |j        z  z
  }|j        }|j        }	|j        }
t          |	|	|	          }|j        }||j	        
                    d                    |j         j        |          d                   |j        |	          z   |z   }|D ]\  }}}}}}}}|dk    }t          |||j                  }t          ||d          }||z   }|s| }||z   t          |dk    r|rdndn||          z   }|s|
}|d	k    r*|                    ||||||           ||z  }|dz  }|d	k    *d S )
N)rd   r  r   r/   r2   	underliner<   r%   -0.125*L0.25*Lr   )r   r   r   r   r   r   r   r   _defaultLineWidthr   r
   r`   r  r   r?   rX  )r   rO  r   rk   r   r   r   y0r   fstcvaluesdwrQ  r  kr  ro   or  r=   r  rZ  lwlgr   ys                              r>   _do_under_lineri    s   	BHE	AemO	#B
A	
B	
BBb!!!F		B	bj$$SXXbl.@.CA.F%G%GWYZZ	Z]_	_B#  !Aa!Aa{N	Qvb&:;;;Qva(((U"s"FW2ICjj88STU[\\\b!ccKKAr1b!,,,GAFA cc r@   z^[a-zA-Z][-+a-zA-Z0-9]+$c                 n   |sd S |                     d          r(| j                            d|dd          |d           d S |                    dd          }t	          |          dk    r|d                                         pd}|dk    r&| j                            d|d         |d           d S t                              |          rJ|                                d	k    rd
pd}|d
k    r|d         }| j                            ||d|           d S | j                            ||dd           d S )N#r%   r2   )relative:r3   r   documentpdfGoToRURI)rl  r   )	
startswithr   linkRectrK   rv   lower
_scheme_rer6   linkURL)rk   r   rectpartsr  r   s         r>   _doLinkry    sJ   s C

BQRR$;;;;;

3q!!UQ358>>#3#39r:JE!HdQ?????f%% 	C&27;eDW}}U1XdJtTADAAAAAJtTAEBBBBBr@   c           
      N   |j         }|j        j        }|j        | |z  z
  |j        j        dz  z
  }d                    |j        |          d                   }|j        	                    ||j
        |j                  }|j        D ] \  }	}
t          ||
||||z   ||z   f           !d S )Ng       @r/   r2   )r   r   r   r   r   r   r`   r  r   r
   r   r   r   ry  )r   t_offr   rk   r   r   rh  rL   textlenr  r   s              r>   _do_link_liner}    s    	BhG
1W9rt}S00A88BHQKN##Dj$$T2<FFG7 @ @4D5!U7]AgI>????@ @r@   c                 H   | j         }|j        }|j        }|j        j        }|j        }|j        }|dk    rt          |d|z            }n|dk    rd|z  }|j        rc||z   }||z
  }|j        D ]C\  }	}
}| j	        
                    |           | j	                            |	||
|	z
  |dd           Dg |_        d |_        t          |j                                                  D ]*\  \  \  \  }}}	}}}
t!          | ||	||z   |
||z   f           +i |_        |j        r| j        }t'          |          }t          |j                                                  D ]\  \  \  \  }}}}}}}}}}}	}}
|dk    }||d	<   ||d
<   t)          ||| j                  }t)          ||d          }||z   }|s| }||z   t)          |dk    r|n|rdnd|          z   }|s|}|dk    r*|                     |	||
|||           ||z  }|dz  }|dk    *i |_        |xj        |z  c_        d S )Nr   r   r   r   r2   )strokefillrc   rZ  r   r  r[  r%   r\  r]  )r   r   r   r   r   r   r   r   r   r   r   rw  r   sortedr   rb  ry  r   r^  r   r?   rX  ) rk   r   r_  r   r   r   r   ylydescrO  rQ  r  r  r   r  r  rc  rb  rd  ro   re  r  r=   r  r`  ra  r  rZ  rf  rg  r   rh  s                                    r>   _do_post_textr    s   	B	B
AhG.KzHEgc(l++	e		h,	} (]W} 	D 	DGBr!J##A&&&JOOBuRU7!OCCCC$*28??+<+<$=$= 2 2 (1T2r"bD2r"ub"R%01111BH	{ !!!!7=bk>P>P>R>R7S7S 	 	30)q1Qq1Q2b%;IF3KF3K6"*>???B6!,,,BBB&B3bQaee	2W**xY_```A"aA##B2q"a000RQ A## HHHHHHr@   c                    |j         }|r\|                                }|dk    rt          j        }nE|dk    rt          j        }n2|dk    rt          j        }n|dk    rd S t          d|j         z            t          |           }|dk    r# || d         j                  | d         _        d S |t          j        u rd}| D ]}|j        }|s|                    d	          s|r ||          }n9|	                    d	          }|dk    r|d |          |||d                    z   }|
                    d	          }||_        d S | D ]}|j        }|s ||          |_        d S d S )
N	lowercase	uppercase
capitalizenonez+ParaStyle.textTransform value %r is invalidr2   r   Tr/   )textTransformrt  rI  uppertitle
ValueErrorrv   rL   rr  r  r  )r{  r   ttr  pbr   rM  r   s           r>   textTransformFragsr     s   		B	 !88::{??BB__BB,BBZZFJUM``aaaJJa44BuQx}--E!HMMM39__B 
 
F"(<<%% , ,1AAtA!ttbqbE""QqrrU))OZZ%%
 
   F"(AC! !< r@   c                   H    e Zd ZdZd Z ed           Z ed           ZdS )cjkUz4simple class to hold the frag corresponding to a strc                     t                               | |          }||_        t          |d          rt	          |j        dd          }||_        n t          ||j        |j	                  |_        |S )Nr   r   r   )
rI  rJ  _fragr   ru   r   _widthr
   r   r   )rL  valuefragr  rQ  ro   s         r>   rJ  zcjkU.__new__G  sg    {{3u%%
4!! 	IGA..ADKK%eDM$-HHDKr@   c                     | j         S r   )r  rQ  s    r>   r   zcjkU.<lambda>P  s     r@   c                     | j         S r   )r  r  s    r>   r   zcjkU.<lambda>Q  s    $+ r@   N)rY   rZ   r[   r\   rJ  propertyr  r   rD   r@   r>   r  r  E  sK        >>   8++,,DH--..EEEr@   r  c                 d   g }g }t                      }dx}	x}
}| D ]/}|j        }|j        }|rht          |dd           }t          |dd          r-t	          t          |j        |          |j        |          \  }}n1t          |j	        |          \  }}nt          |j	        |          \  }}t          |	|          }	t          |
|          }
t          ||          }t          ||          sG|                                }d                    |          |_        |                    |           g }|}|                    |           1|rC|                                }d                    |          |_        |                    |           t          d|d|dd          |	|
||||
  
        S )Nr   r   r   r%   r2   )
r   r   r!  r{   r   r   r   r   currentWidthr0  )r   r  r   ru   r   r   r   r   r   r   r   r   r#   r  r`   rL   r   )r  r   	widthUsedr   r0  
calcBoundsr{   CWr  maxSize	maxAscent
minDescentrM  r   r   r   r   r   s                     r>   makeCJKParaLiner  S  s   E	B	B'((G(i*  F: 	DQx--Fvga(( H"+HV]8,L,LV][c"d"d"21:h"G"G.qz(CCOFGgh''	&))	G,,
1~~ 	xxzzBhhrllBGLLBB
		!	 88::((2,,Rj159V]en  xB  LT  bk  v  @  @  @  @r@   c           
      H   g | D ]vj         }t          |          r|                              }|r#                    fd|D                        R                    t          |                     wg }dx}x}}|d         }	t                    }
||
k     r|         }|dz  }|j        }t          |d          r|	|_	        |
                    |	          }||z  }t          |j        d          }||	t          z   k    r|dk    p|}|r<|	|z
  }|st          |          dk     r||z   dz	  }t          |dz
  |d          D ]}|         }|rt          |          dk    st          |          dk    rU|dz   }||k     rJ|dz   }|t!          fd	t          ||          D                       z  }|         j        }|         }|} n|t"          vr||dz   k    r
|dz  }||z  }|                    t%          ||         |	||||                     	 |t          |                   }	n# t&          $ r |d         }	Y nw xY w|}d}||
k     |dk    r2|                    t%          |d
         |	||	|z
  d|                     t)          d|          S )z@This attempts to be wordSplit for frags using the dumb algorithmc                 2    g | ]}t          |          S rD   )r  )rE   rm  r  r   s     r>   rG   z cjkFragSplit.<locals>.<listcomp>{  s%    777Qd1Qx((777r@   r   r2   r   r0  i 0  r   Zsc              3   2   K   | ]}|         j         V  d S r   )r   )rE   iir  s     r>   r  zcjkFragSplit.<locals>.<genexpr>  s)      1S1S"!B%+1S1S1S1S1S1Sr@   NFr   r  )rL   r!   rI   rY  r   r  rv   r   r   r  r   r  r   ordr  r	   r"  r   r  
IndexErrorr   )r{  r  r  r  rL   r  r   r  lineStartPosr   nUrM  ro   r0  endLiner   
limitCheckrq  ujrd  r  r   s      `                @@r>   cjkFragSplitr  s  s>   
A , ,v4== 	);;x((D 	,HH77777$7778888HHT$q**++++E#$$A$	L|H	QB
B$$aD	QG1&'' 	,$AM!!(++AQ	AF;//	X--=)A+K) 0	!I-J &$q66&== #/q.1!4J"1Q3z"55 
& 
&qT &(2,,"4"4B !!A ss$%aC *c1S1S1S1SaPQ

1S1S1S.S.S S
$%aDJ$%aD$% % ,,,<>1A1A FA!OJLL<>):8IjYbcmnnooo)$SZZ0 ) ) )$R=) LIu B$$z 1}}_Q|}}%5hyR[I[\ablmmnnn!%((((s   "H8 8IIc                 .   |j         | _        t          |dd          | _        t          |dd          | _        t          |dd          pd| _        t          |dd          | _        t          |dd          | _        t          |dd          pd	| _        d S )
NunderlineColorr%   underlineWidthunderlineOffsetz-0.125fstrikeColorstrikeWidthstrikeOffsetz0.25f)	rK  r^  ru   _underlineColor_underlineWidth_underlineOffset_strikeColor_strikeWidth_strikeOffset)rk   r5  r   s      r>   _setTXLinePropsr    s    !,B '7;;B '7;;B!%(9"==JBeM"55BOeM"55BOu^B77B7Br@   c                       e 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d ZddZddZd Zedd            ZdS )r   a   Paragraph(text, style, bulletText=None, caseSensitive=1)
        text a string of stuff to go into the paragraph.
        style is a style definition as in reportlab.lib.styles.
        bulletText is an optional bullet defintion.
        caseSensitive set this to 0 if you want the markup tags and their attributes to be case-insensitive.

        This class is a flowable that can format a block of text
        into a paragraph with a given style.

        The paragraph Text can contain XML-like markup including the tags:
        <b> ... </b> - bold
        < u [color="red"] [width="pts"] [offset="pts"]> < /u > - underline
            width and offset can be empty meaning use existing canvas line width
            or with an f/F suffix regarded as a fraction of the font size
        < strike > < /strike > - strike through has the same parameters as underline
        <i> ... </i> - italics
        <u> ... </u> - underline
        <strike> ... </strike> - strike through
        <super> ... </super> - superscript
        <sub> ... </sub> - subscript
        <font name=fontfamily/fontname color=colorname size=float>
        <span name=fontfamily/fontname color=colorname backcolor=colorname size=float style=stylename>
        <onDraw name=callable label="a label"/>
        <index [name="callablecanvasattribute"] label="a label"/>
        <link>link text</link>
            attributes of links
                size/fontSize/uwidth/uoffset=num
                name/face/fontName=name
                fg/textColor/color/ucolor=color
                backcolor/backColor/bgcolor=color
                dest/destination/target/href/link=target
                underline=bool turn on underline
        <a>anchor text</a>
            attributes of anchors
                size/fontSize/uwidth/uoffset=num
                fontName=name
                fg/textColor/color/ucolor=color
                backcolor/backColor/bgcolor=color
                href=href
                underline="yes|no"
        <a name="anchorpoint"/>
        <unichar name="unicode character name"/>
        <unichar value="unicode code point"/>
        <img src="path" width="1in" height="1in" valign="bottom"/>
                width="w%" --> fontSize*w/100   idea from Roberto Alsina
                height="h%" --> linewidth*h/100 <ralsina@netmanagers.com.ar>

        The whole may be surrounded by <para> </para> tags

        The <b> and <i> tags will work for the built-in fonts (Helvetica
        /Times / Courier).  For other fonts you need to register a family
        of 4 fonts using reportlab.pdfbase.pdfmetrics.registerFont; then
        use the addMapping function to tell the library that these 4 fonts
        form a family e.g.
        from reportlab.lib.fonts import addMapping
        addMapping('Vera', 0, 0, 'Vera')    #normal
        addMapping('Vera', 0, 1, 'Vera-Italic')    #italic
        addMapping('Vera', 1, 0, 'Vera-Bold')    #bold
        addMapping('Vera', 1, 1, 'Vera-BoldItalic')    #italic and bold

        It will also be able to handle any MathML specified Greek characters.
    Nr2   rB   c           	          |t          d          }|| _        || _        |                     |||pt	          |dd           |t
                     d S )NparagraphImplicitDefaultStyle)r   r6  )r   caseSensitiver  _setupru   r   )rQ  rL   r   r6  r{  r  r  s          r>   __init__zParagraph.__init__  sZ    ="(GHHHE* D%!Owu\$/O/OQVXlmmmmmr@   c                    | j         j        }|dz   g}t          | j                                                  }|D ]}|                    t          |                              dd                              dd          dt          t          | |                                        dd                              dd                     |                    d|z              d	                    |          S )N(r'   r/     z: z) #)
r"  rY   ra   __dict__keysr   reprreplaceru   r`   )rQ  r  rd   r  rd  s        r>   __repr__zParagraph.__repr__  s   N#sUGDM&&(()) 	L 	LAHHas!;!;!C!CD!M!M!M!MdSZ[_abScScNdNdNlNlmqsvNwNwNN  AE  FI  OJ  OJ  OJ  K  L  L  L  L	qyy||r@   c                    | ||          }t                      }| j        |_        |                    ||          \  }}}|Dt          d|j        d         d|d t          dt          |                             d          t          ||           |r|}|| _        || _	        || _
        || _        d| _        d S )Nzxml parser error (r   z) in paragraph beginning
'   r   )r   r  parser  errorsr   rv   r  rL   r{  r   r6  debug)rQ  rL   r   r6  r{  cleaner_parserbulletTextFragss           r>   r  zParagraph._setup  s    
 =74==D llG$($6G!,3MM$u,E,E)E5/} j~a(((.@s2c$ii/@/@.@)A)A)A"C D D DuU+++<_
 	

$


r@   c           	      V   |t           k     rdS || _        | j        }|j        }|||j        z   z
  |j        z
  }||z
  |j        z
  }||g| _        |j        dk    r|                     | j                  }n| 	                    | j                  }|| _
        t          | dt          |dd                    }|j        }	|j        dk    r|dvrhd}
|dk    r+|j        D ]"}|
t          |j        |j        z
  |	          z  }
#n|d	k    r|j        D ]}|
|j        |j        z
  z  }
nzt%          d
|z            t'          |j                  |	z  }
nP|dk    rt          |	|j        |j        z
            }	n|d	k    r|j        |j        z
  }	t'          |j                  |	z  }
|
| _        | j        |
fS )N)r   r_  CJKr   r%   r2   r%   offr   r   r   invalid autoLeading value %r)r   r   r   r   r?  r1  _wrapWidthsr   breakLinesCJK
breakLinesr  ru   r   r   r  r   r   r   r  rv   r   )rQ  
availWidthavailHeightr   r   first_line_widthlater_widthsr  r   r   r   r
  s               r>   wrapzParagraph.wrap4  s   e =

%
%E4I)IJUM^^!J.1BB,l;>U""''(899FF__T%566Fd=}R1P1PQQ-;>>*,,%%#\ B B#ahqy&8"A"AAB %''#\ 7 7!(QY"667 %%Ck%QRRRV\**W4E!!gfmFN&BCCe## -6&&0Fz6!!r@   c                 h   | j         }t          |          }|sdS |dk    rkt          |          s\|d         }|j        |j        t          fdt          |d          rt          |j        d          n|j	        D                       S t          d t          |          D                       S )z-Attempt to determine a minimum sensible widthr   r2   c              3   :   K   | ]}t          |          V  d S r   )r
   )rE   ro   fNfSs     r>   r  z%Paragraph.minWidth.<locals>.<genexpr>f  s/      ll{1R++llllllr@   rL   r/   c              3   &   K   | ]}|d          V  dS )r   NrD   r  s     r>   r  z%Paragraph.minWidth.<locals>.<genexpr>h  s&      ::qt::::::r@   )r{  rv   r|  r   r   r   r   rK   rL   r{   r  )rQ  r{  nFragsr   r  r  s       @@r>   minWidthzParagraph.minWidth]  s    
E

aa199-e449aABBlllllGTUV\L]L]6jeAFC6H6H6Hcdcjllllll::]5%9%9::::::r@   c                    |sg S |j         }||         j        }|t          |          k    r||         j        nt          | j                  }| j        ||         }|r;t	          |d         t
                    r |d= |rt	          |d         t
                     t	          |d         t                    r4t	          |d         t                    rt          nt          |d         _
        |S r  )r  sFWrv   r{  rX  r:  r@  r]  re  rD  r"  )rQ  r  r   r  r  r  sFWNr  s           r>   _split_blParaProcessedz Paragraph._split_blParaProcessedj  s    BYEl"&E

"2"2uT{DJJs4x >Jqu]33>2a>Jqu]33>aeL)) 	Y,6quX,F,FXjjLAbEOr@   c                 t    | j         j        dk    rt          n!t          | j                  st
          n| j        S r5  )r  r   r#  r|  r{  r%  r  r  s    r>   _get_split_blParaFunczParagraph._get_split_blParaFuncu  s;    '+{'7':':##3CDJ3O3O 9++!8	;r@   c           
         t          | j                  dk    s|t          k     s|t          k     rg S t          | d          s|                     ||           | j        }| j        }t          | dt          |dd                    }|j        }|j	        }|j
        dk    r|dvrdx}}	|dk    rOt          |j	                  D ]9\  }
}t          |j        |j        z
  |          }|	|z   }||dz   k    r n|}	|
dz   }:n|d	k    r?t          |j	                  D ])\  }
}|	|j        z   |j        z
  }||dz   k    r n|}	|
dz   }*ngt          d
|z            |}|dk    rt          |d|j        z            }n|d	k    r
d|j        z  }t#          |t%          |          z            }||z  }	t          | dt          |dd                    }|s|dk    s|dk    r| `g S t          |          }t          | dt          |dd                    }||k    r| gS |s!||dz   k    r|r|dk    s|dk    r|dz  }n| `g S |                                 }|j        rt+          |          }d |_        n|}|                     d || j         ||d|                    }t1          d|j	        d|         ||          |_        t3          |j	        |dz
           t4                    o2t          |j	        |dz
           d          o|j	        |dz
           j         |_        d|_        |	|_        ||_        |j         dk    rt+          |          }d|_         |                     d |d  ||||                    }dD ]P}t          | |          r>tC          ||t          | |                     tC          ||t          | |                     Q||gS )Nr   r  r   r%   r2   r  r   r   r   r  r   allowOrphansallowWidowsr}  )r6  r{  )r   r  aHr  r0  )r   )"rv   r{  r   r   r  r  r   ru   r   r  r   r   r   r   r   r  r   r  r7   r  r   r   r"  r6  r   rX  r   r0  _JustifyLast
_splitparar   r   r?  setattr)rQ  r  r  r  r   r   r   r  r:   r   r   r
  r   r  r  r  r  style1P1P2rO  s                        r>   rK   zParagraph.splitz  sB   tz??AE!1!1[5F5Fr	 tH%% 	.IIj---
d=}R1P1PQQ-;>>k;;NAE!!$V\22  CAaAHQY.w77AqAT)))F!AAe##$V\22  CAaqx	1AT)))F!AA !?+!MNNNAE!!EN 233e##&Ka())AqSFtN75PQ3R3RSS 	A!Q$$IJJd=}Q1O1OPPa446M 	!A#vv  QTTaccFAAI))++= 	e__F!FNNF>>$vttFSTUVGWGW>XX16<!+<zZZZ	  *&,qs*;HEE  @$+FL1,={$K$K @$*L1$5$?A 	 A%%UOOE$%E!>>$u44q;K;K>LL 	. 	.AtA .1WT!__---1WT!__---2wr@   c                 :    |                      | j                   d S r   )drawParar  r  s    r>   drawzParagraph.draw  s     	dj!!!!!r@   c                 &"   d| _         t          |t          t          f          s|g}n|}g }dx| _        }t          |          dz
  }| j        }t          |dd          }|rlt          |          r;|	                                }|r"t          rt          j        |          j        }n'd}n$t          |          st          d|z            nd}|j        }|j        }	|	dk    }
|j        }|j        }|p|p|	}|rt          |dt&                    }dx| _        | _        t-          | j        ||           |d         }t          | d	t          |d	d                    }|d
v}| j        }t          |          }|dk    r|j        st5          |d         d          st5          |d         d          st7          |          s|d         }|j        }|j        }t=          ||          \  }}t5          |d          r@t          |j                  }|s|                     dg |||          S tC          |          }n?|j"        dd         }|D ]}t          |          r n|                     dg |||          S tG          d||| j$                  }||z  }g }| }tG          d||| j$                  } d}!|rF|%                    d          }"|"st          |"tL                    rd}!ntN          |"v rtQ          |"          }"tG          |"||| j$                  }#||z   |#z   }$||t          |          z  z   }%|$|%k    rt          |"tR                    s|!st          |"tP                    r|"*                    ||||z   | z   dz
  |%| j$                  }&|&r|&|dd<   | xj        dz  c_        d}!t          |          r^|tW          ||                   }'|
s|"j,        | z   dz   |'k    r5|"*                    ||d| z   dz
  |'| j$                  }&|&r|"g|dd<   d}!d}"|}$n|rt          |dd           }(t[          |(r|nd|||"|#|$|%|(r|nd|	o|(|
  
        }&|&r|&|dd<   | xj        dz  c_        d}!|
rAt          |          r2t[          |(r|nd|||"|#|#||(r|nd|	o|(|
  
        }&|&r|"g|dd<   d}!|}$d}"|r{t          |"tL                    sf|!sdtW          ||          })|#t]          ||)|)dz                      k    r6t_          |"||z   ||||| j$                  |dd<   | xj        dz  c_        d}!x|$|%k    st          |          r|!rk|"r|0                    |"           |!rOd}!|$| j         k    r|$| _         |0                    ||$z
  |f           g }| }|dz  }|tW          ||                   }nO|$}nL|| j         k    r|| _         |0                    ||z
  |f           |"g}|#}|dz  }|tW          ||                   }|F|g k    r,|| j         k    r|| _         |0                    ||z
  |f           |                     d||||          S |dk    r2tc          d|j        |j        |j2        |j        d|j        z  g           S |j3         }*g }g }+|+j0        },ti          ||          }-d}.|-
r|-%                    d          } |,|           |d         d         }|j        }|j        }|sdx}/x}}|}0t=          ||          \  }1}2|d         }#|d         d         }|#dk    r	||z   |#z   }$n|}$|j5        tl          k    }3|}%|r^|}4|D ]O}5|5j5        tn          k    r=|5j        8                    d          }6|6r!|4|6tG          d|5j        |5j                  z  z  }4P|4|z  }4|%|4z  }%|3sY|$|%k    rRt          |tr                    s<t5          |d          s+t          |tt                    r%|;                    |$|%          }&|&ro|&|-dd<   |-<                    dt{          d|                     tl          d          dfg                     |+%                    d           | xj        dz  c_        t          |+          dk    r|tW          ||                   }'|
s|j,        dz   |'k    rc|;                    |#|'          }&|&rKt{          d|                     tl          d          dfg          |g|-dd<   |+%                    d           _n&|r#t          |dd           }(t}          |(r|nd||$|%|(r|nd|	o|(|          }&|&ro|&|-dd<   |-<                    dt{          d|                     tl          d          dfg                     |+%                    d           | xj        dz  c_        |
rt          |+          dk    rlt}          |(r|nd||#||(r|nd|	o|(|          }&|&rKt{          d|                     tl          d          dfg          |g|-dd<   |+%                    d           |rt          |t~                    stW          ||          })|#t]          ||)|)dz                      k    rt          |||z
  |z
  ||          |-dd<   |-<                    dt{          d|                     tl          d          dfg                     |+%                    d           | xj        dz  c_        Q|$|%k    r|/dk    p|3}7|7s|3rf|d         d         }8|8r|/dz  }/|j        }|r`|j5        t          k    r7t          t          |jD        j        |          |jD        jE        |          \  }}n1t=          |j        |          \  }}nt=          |j        |          \  }}t]          |0|          }0t]          |1|          }1tW          |2|          }2|s|                                 }9|9g}|8|9_        nt          |9|          s|rft          |          dz
  }:|:dk    rN||:         }5|:dz  }:|5j5        tn          k    r+|5j        G                    d          s|5xj        dz  c_        n|:dk    N|                                 }9|0                    |9           |8|9_        nQ|r?|9j        G                    d          s|9xj        d|8z   z  c_        n!|9xj        |8z  c_        n|9xj        |8z  c_        t          |t                    rtG          d||          nd}d};|dd         D ]}:|:d                                          }9|:d         |9_        |9j        rd};|0                    |9           |9j        }|r`|9j5        t          k    r7t          t          |9jD        j        |          |9jD        jE        |          \  }}n1t=          |9j        |          \  }}nt=          |9j        |          \  }}t]          |0|          }0t]          |1|          }1tW          |2|          }2|8s|;r|/dz  }/|$}n|3rB|                                 }9|0                    |9           |*ot          |tz                     }<nd}<|| j         k    r|| _         |0                    t          ||z
  |/|<||0|1|2||.	  	                   t          |+          dz
  }.|dz  }|tW          ||                   }|3rg }:t          |t                    rtG          d||          nd}||z  }|#}d}/|                                 }9|9j        }0|r`|9j5        t          k    r7t          t          |9jD        j        |          |9jD        jE        |          \  }}n1t=          |9j        |0          \  }1}2nt=          |9j        |0          \  }1}2|9g}|d         d         |9_        |dd         D ]}:|:d                                          }9|:d         |9_        |0                    |9           |9j        }|r`|9j5        t          k    r7t          t          |9jD        j        |          |9jD        jE        |          \  }}n1t=          |9j        |          \  }}nt=          |9j        |          \  }}t]          |0|          }0t]          |1|          }1tW          |2|          }2|-
|r@|| j         k    r|| _         |0                    tc          ||z
  |/d||0|1|2||.	  	                   |+| _        tc          d|          S )a^  
        Returns a broken line structure. There are two cases

        A) For the simple case of a single formatting input fragment the output is
            A fragment specifier with
                - kind = 0
                - fontName, fontSize, leading, textColor
                - lines=  A list of lines

                        Each line has two items.

                        1. unused width in points
                        2. word list

        B) When there is more than one input formatting fragment the output is
            A fragment specifier with
               - kind = 1
               - lines=  A list of fragments each having fields
                            - extraspace (needed for justified)
                            - fontSize
                            - words=word list
                                each word is itself a fragment with
                                various settings
            in addition frags becomes a frag word list

        This structure can be used to easily draw paragraphs with the various alignments.
        You can supply either a single width or a list of widths; the latter will have its
        last item repeated until necessary. A 2-element list is useful when there is a
        different first line indent; a longer list could be created to facilitate custom wraps
        around irregular objects.r   r2   hyphenationLangr%   )langNzLhyphenator should be a language spec or a callable unicode -->  pairs not %rr   r   r  r   r   rL   )r   r  r   r   r   r/   rS  r   )r  nobrF皙ɿ)r   r   r   r   r   r   r  r   )r  rL   r3   )	r   r!  r0  r{   r   r   r   r   r  r  )J
_width_maxrX  r  ra   r   rv   r   ru   r"   r5   pyphenPypheniteratecallabler  r  r  spaceShrinkagesplitLongWordsr   _splitLongWordCount_hyphenationsrB  r6  r{  r   r   r|  r   r   r   rL   r  rK   r{   r
   r  popr  rH  r  r  r  r   rc  r  r   r  r   r   r   justifyBreaksr  r  r  r  rn   r>  r]  rv  r  r:  r  r<  r  r  r   r   r   r   r#   r  r8  r   )=rQ  r   r  r  r  r  r   r  r  r  hyphenation2r  r	  attemptHyphenationr  r   r   r  r{  r  r   r   r   r   r   rL   r{   ro   
spaceWidthdSpaceShrinkcLiner  hywforcedSplitwordr  rf  r  hswnMWhyOknmwnjlbvr  aFW_wordsr  r  r  r  r  r0  spaceShrinkwinsr  nTextr  r   nillbs=                                                                r>   r  zParagraph.breakLines  s   @ %t-- 	 E7yyi  f	NN1$	
U#4R88
 
	Z   ~'--//
 && &!'J!?!?!?!GJJ!%JJj)) ~ !or|!|}}}~ J-#7*1,--'P>P=P 	WE"<=UVVE899 4#5 	4?5;;;Q<d=}R1P1PQQ 
2

E

AII *1%(8*D*D HOPUVWPXYdHeHe /66  aAzHzH.xAAOFGq   eQV}} (776'[c7ddd!$KKEE
 e eAQxx&&776'[c7ddd$S(HdmLLJ)*4LE&;Lc8Xt}EECK X@yy|| )
4
 ; ; )"#KKT\\"4==D'h$-PP	'*4y@#l3u::&==H$$jk.J.J$k$!$w// .,"// (( ,z 9C ?$ F (+/=	 0 " "  <),E!A#J ..!3..*+K$ ZZ <"+C	&,A,A"BC+ <
3t0Cc/I/I&*&7&7$,h$%GdN$'/3}	 '8 '& '& $' !<26E!A#J23K+/D/;H+ ,#*1VE#:#::,4-IZZT ((D)Xx6:$ENN$7$@D%I I  ,),E!A#J ..!3..*+K$) 	,c%jj 	,"0t1M ((D)YPX6:$ENN$7$@D%#I #IC  # ,.2Vac
./+7'+% %z$z/J/J %k %!&33$S3s1u9)=%>%>>>)3Dj9PQZ[abjkstx  uB  *C  *CE!A#J 44944*+K$X%%SZZ%;%/U\\$///" 	0&'#do55th&95%ABBB "(2{!#,S6-B-B#C'/#do55tLL(\"95!ABBB!FE#,LaKF(Yv)>)>?Hq  X@v byy//<h5u=>>>77fWV^7___QYY!enu~&+oenUYZ_ZhUh"$& & & & ++EEB)C"522FC J=JJqMMAbE!H:: P455A5
\&G,<Xh,O,O)IzaD	aDGQ;;+j89DHH+H Hi/	#! ,",K# [ [9h..!#s!3!3B! [ +r+c"+bk2Z2Z/Z Z>1K+H  0%Xh%6%6z!K?X?X%6ahijksatat%6!!H-- %)ll8X>> -*-F1Q3K"MM!M1aggY\^g>_>_`b=c:d,e,efffFF2JJJ ..!3..$ WWQYY"+C	&,A,A"BC+ -qwt|S/@/@&'ll9c&B&B#& !-3@!QWWT]ceWEfEfgiDjAk3l3lmn2oF1Q3K$&FF2JJJ$,+ )#*1VE#:#::0t1M$%hx6:$ENN$7$@D%I I  )*-F1Q3K"MM!M1aggY\^g>_>_`b=c:d,e,efffFF2JJJ ..!3..$) )c"ggaii"445QZZT())H:>(IE(;(De#M #MC  # )/<aPY_aAbAbce@f=g/h/hij.kqs "r


 (% %j:.F.F %!&33$S3s1u9)=%>%>>>*88J;N|;[\efl*m*mF1Q3K"MM!M1aggY\^g>_>_`b=c:d,e,efffFF2JJJ 44944$#H,41B w= *(aDGE$a1fa zH! P8W,,-6xPX7Y7YZ[ZbZijr-s-sNGFF.>qz(.S.SOFGG*:1:h*O*O!'(33G #If 5 5I!$Z!8!8J  (GGII!"!&%a]] (% * #E

1A"#Q$$%*1X !Q#%9h#6#6+-7+;+;C+@+@ %7(*3$) #$Q$$ GGIIQ!&# ( vs33 ,FFcEk1FFFFFeOFFF%GQRST[G\G\!cS(!C!C!CbcJBqrrU = =aDJJLL t6)2Q#$:% T x001:8AHOT\;];]^_^f^mnv1w1w2B1:h2W2W.>qz(.S.SOFG"%gh"7"7$'	&$9$9	%(G%<%<

  R 1#+LL  $GGIIQ#GJq,G,G(G##DO33|T_LLXl5JVW25UW]fpz  FN,/"1 "1 "1 2 2 2 b''!)C aKF(Yv)>)>?H  ! " GQRST[G\G\!cS(!C!C!CbcJ#-n#<L#,LA		AjG! U8W,,-6xPX7Y7YZ[ZbZijr-s-sNGFF4DQZPW4X4X1Izz0@G0T0T-	:CEqT!WAFqrrU = =aDJJLL tQ#$:% T x001:8AHOT\;];]^_^f^mnv1w1w2B1:h2W2W.>qz(.S.SOFG"%gh"7"7$'	&$9$9	%(G%<%<

U  J=Z  B//<Y8l3JVWbg*/'[eow|A A A B B BDJ!51111r@   c           
         t          |t          t          f          s|g}| j        }d| _        t          | j        ||           | j        }t          |          }|dk    rt          |d         d          s|j
        s|d         }t          | d          r2t          | dd          r!|                    d| j        j                  S g }d}t          |d          r|j        }n$d                    t          |d	g                     }t#          |||j        |j                  }d
 |D             }	|                    d|	|j        d|j        z            S |dk    r2t)          d|j        |j        |j        g |j        d|j        z            S t          | d          rt          | dd          r| j        S t          | dt          |dd                    }
|
dv}t-          |||          S )zZInitially, the dumbest possible wrapping algorithm.
        Cannot handle font variations.r   r2   r   r  r  r  rL   r%   r{   c                     g | ]
\  }}||gfS rD   rD   )rE   r  r   s      r>   rG   z+Paragraph.breakLinesCJK.<locals>.<listcomp>	  s"    AAAZb$R$LAAAr@   r  )r   r  r   r   )r   r   r   r   r  r   r   r   r  )rX  ra   r  r   r   rB  r6  r{  rv   r   r   ru   r  r  r  rL   r`   r   r   r   r   r   r  )rQ  r  r   r{  r  r   r  r  rL   wrappedLinesr   r  s               r>   r  zParagraph.breakLinesCJKs	  s    )T%L11J	{9
 	4?E9===
U199WU1Xh7799aAtH%% @'$|A*F*F @wwAT[->w???EFq   6vwwwq4455dIqz1:FFE
 BA5AAAL77ajRVWXWaRa7bbbQYY!enu~&+oRu~^bchcq^qs s s s 4!! 	gd<&B&B 	;d=}R1P1PQQ 
2
E9j999r@   c                 8    | j                             ||          S r   )rU  r/  )rQ  rP  rh  s      r>   r/  zParagraph.beginText	  s    y""1a(((r@   r   c           	         | j         }| j        }| j        }|j        }|j        }t          | dt          |dd                    }|j        }|}	|r%d}
t          ddd          }t          ddd          }n)t          |dd          }
t          |d	d          }|j        }|s|r	|
r|	                                 |j
        }t          dd
          }|rR|
rP|                    |           |                    |
           d|d<   t          |dd          }|r|s|j        }||d<   |r|                    |           d|d<   t          |dd          }t!          |          \  }}}} |||z
  | | j        ||j        z   z
  |z   |z   | j        |z   |z   fi | |                                 t+          |          }| j        }|dk    rt          | ddg          }||t+          |          z
  |d         gz  z  }|	                                 |j        }|j        |d         z   }|dz
  }t          | dd           }|j        }|j        dk    }|r| j        pd}|j        dk    r|t:          k    rt<          }nA|t>          k    rt@          }n.|tB          k    rtD          }n|tF          k    r|rtH          ntJ          }|} tL          r| j        | j'        z
  }!n| j        t          | d| j'                  z
  }!|rtQ          |||!|||          }|                    | j)                   | *                    |	|!          }"d| j+        j,        -                                v |"_.        |dk    rt_          ||j0        |j1        z
            }n|dk    r|j0        |j1        z
  }| j        j        |"_2        |"3                    | j4        | j'        |           |d         d         }#|d         d         }$|o|dk    }%|%r|rt+          |$          |k    rd}% ||"||#|$|%          }&| j5        s| j6        rto          tp          |"          |"_8        ts                      x|"_:        x}'|"_;        ty          |"||           |!|'_=        | |'_>        ||'_        ||'_        | j6        |'_6        | j)        |'_)        g |'_?        |&|z   }(|tF          k    s|%rd}#| j5        rt          d|(|#|"| j5                   | j6        rt          d|(|#|"           t          d|          D ]})||)         d         }#||)         d         }$|o|)|k    }%|%r|rt+          |$          |k    rd}% ||"||)         |#|$|%          }&|&|z   }(|tF          k    s|%rd}#| j5        rt          |)|&|#|"| j5                   | j6        rt          |)|(|#|"           nt          d|          D ]R})||)         d         }$|o|)|k    }%|%r|rt+          |$          |k    rd}% ||"||)         ||)         d         |$|%           Sn|r|D ]}*|*jC        ddd         |*_C        |d         } tL          r| j        | j'        z
  }!n| j        t          | d| j'                  z
  }!t          }|r|}+tQ          |||!|||          }|t:          k    rt          }na|t>          k    rt          }nN|tB          k    rt          }n;|tF          k    r|rt          nt          }nt          dt          |          z            | *                    |	|!          }"d| j+        j,        -                                v |"_.        ty          |"||           to          tp          |"          |"_8        | j        j        |"_2        ts                      x}'|"_;        d|'_)        d|'_        d|'_K        g |'_?        i |'_5        i |'_L        i |'_6        |j        |'_        ||'_        d|"_M        d|"_N        |!|'_=        | |'_>        ||'_        ||'_O        | j        |'_P        d\  |"_Q        |"_R        |d         }*|o|dk    }%|%r|r|*jS        |k    rd}% ||"||*|%           t          |"           t          d|          D ]F})||)         }*|o|)|k    }%|%r|r|*jS        |k    rd}% ||"||)         |*|%           t          |"           G|U                    |"           |                                 dS dS )zDraws a paragraph according to the given style.
        Returns the final y position at the bottom. Not safe for
        paragraphs without spaces e.g. Japanese; wrapping
        algorithm will go infinite.r   r%   r   r2   r   g?borderWidthNborderColor)r  r  r  borderRadiusradiusr  borderPadding_offsetsr   r  Fr   r   )r7  rt   r   r   zbad align %s)NN)VrU  r   r  r  r   ru   r   r   r   	saveStaterw  r   rN  rL  	roundRectr   r   r   r1  r   restoreStaterv   r6  	alignmentr?  justifyLastLiner   r  r   r   r   r   r   r   r   r   r   r   r   r   r=  r   r/  r"  rY   rt  rt   r   r   r   	directionr   r   r   r   r$   rX  r   r   r   r  r   r   r   ri  r}  r  r{   r$  r)  r,  r3  r1  r  r  r   r   r   r   r   r   r   r   r!  r  r3  ),rQ  r  r5  r   r  r  r   r   r   r   rp  bcr  opr   brbptbprbpbbplbpnLinesr6  r-  r1  ry   rG  noJustifyLastjllwcisRTLbRTLdplr   r   rk   r   r{   lastLiner{  r   rl   r   r   oos,                                               r>   r  zParagraph.drawPara	  s	    
-d=}R1P1PQQ %
 	!Bq1Bs3s##BB}T22B}T22BB  	"" 	" 	"BQa(((D (b (%%b)))##B'''!"XU>!44 (e ()B%'DN !##B''' Vq11B!.r!2!2Cc3BzC
j1B&BCcI#Mc)#-    	     
 !!!U_
A::tJs33HH-~==HI*8A;6F(C '^E B BBM)ENE)E-T-6D{A~~''+CC)++-CC(**,CC*,,5:T11@TC+ I K!*4EE K'!HQZ*H*HHE X(uZRVWWWF ##AK000^^E511"0DN4K4Q4Q4S4S"S%%!'&-*FGGGG %''$mFN:G  $z2 

1:qz7;;;1Xa[a(6VQY # ##e**U*:*:"HRUH==: &L &L",Xb"9"9BK046BE6B#B666$BHBD$BH$BHFBG#$;BL$&BMz)B *,,,q"z B&q"b"ajAAAv;}QB;;; #1f-- @ @"1Xa[ %a#0#;QV# + +#e**U2B2B%*H #R!b% J J":-$j00H01b: I*1eRQZHHH6?=BB#?#?#?@ #1f-- L L %a#0#;QV# + +#e**U2B2B%*HR!eAhqk5(KKKKL  6 % 6 6%)Z"%5

!H+ I K!*4EE K'!HQZ*H*HHE( YB(uZSWXXXF'',CC)++.CC(**-CC*,,6;V22AVCC$^d9oo%EFFF ^^E511"0DN4K4Q4Q4S4S"SFE222("55#z2"&&&(R\!!  "]
 *"  !,#z,6)R\Qx(6VQY # #$.*>*>"HRx000b!!! q&)) & &A 8D,7CH 'E 'dnU.B.B!&CXa[$999!"%%%%OOB!!!!! :r@   c                    t          | dd          }|rg }|j        }t          |          rA|D ]=}|dd         D ]\  }} ||           t          |t                    r |d           >n%|D ]"}t          |d          r ||j                   #d                    |          S |r$t          | dd          }|t          |           }|S dS )z`Convenience function for templates which want access
        to the raw text, without XML tags. r{  Nr2   r/   rL   r%   )	ru   r   r|  rX  r8  r   rL   r`   r  )	rQ  identifyr{  plainsplains_appendr  r   rL   r  s	            r>   getPlainTextzParagraph.getPlainTextw
  s    WT** 	F"MM&& 	1! + +D&*122h , ,
d%d++++!$w// +%c***	+ " 1 1DtV,, 1%di000776??" 	4t,,D|DJJTK2r@   c                     t          | d          s
J d            | j        j        r| j        fd}n
| j        fd}t	          t          || j        j                            S )zConvenience function; tells you how wide each line
        actually is.  For justified styles, this will be
        the same as the wrap width; for others it might be
        useful for seeing if paragraphs will fit in spaces.r   z%Cannot call this method before wrap()c                     || j         z
  S r   )r   r  ro   s     r>   r   z0Paragraph.getActualLineWidths0.<locals>.<lambda>
  s    a$/.A r@   c                     || d         z
  S r5  rD   rK  s     r>   r   z0Paragraph.getActualLineWidths0.<locals>.<lambda>
  s    a$q'k r@   )r   r  r   r   ra   rg   r  )rQ  r  s     r>   getActualLineWidths0zParagraph.getActualLineWidths0
  so    
 tW%%NN'NNNN; 	:"&*AAADD"&*999DCT[.//000r@      Fc                 
   dg}|j         }t          |           D ]\  }}|r| |d|d         z             |dd          D ]Q} |dt          |d                   z              |d|d         z              |d||j        j        fz             R |d            |d	|d         d
                    d |dd          D                       ||j        j        fz             |dz  }|d|z                       |          z   S )N[z    [%r,r   r2   z        (%s,)z        %r),z    ], #%d %sz    ]z[%r, %s], #%d %s, c              3   T   K   | ]#}d |d         j         j        d|d         dV  $dS )r  r   ,r2   )N)r"  rY   )rE   r  s     r>   r  z&Paragraph.dumpFrags.<locals>.<genexpr>
  sG      8v8vjljlbeoF^F^F^_abc_d_d_d9e8v8v8v8v8v8vr@   r/   r'   )r   r   r  r"  rY   r`   )r{  rA  fullru  r  r   r   r  s           r>   	dumpFragszParagraph.dumpFrags
  se   EXU## 		Q 		QCAa Q:!$%%%ABB% C CBBbe4555B~1-...B!AK,@)AABBBB7%1dii8v8vpqrsrtrtpu8v8v8v.w.wxyz{  {F  {O  )P  P  Q  Q  Q  Q3JDF==####r@   )NNNr2   rB   r   r   )rN  F)rY   rZ   r[   r\   r  r  r  r  r  r  r  rK   r  r  r  r/  r  rH  rM  staticmethodrV  rD   r@   r>   r   r     sB       = =|n n n n    .'" '" '"R; ; ;	 	 	; ; ;
S S Sj" " "\2 \2 \2|(: (: (:T) ) )U" U" U" U"n   2
1 
1 
1 $ $ $ \$ $ $r@   r   __main__c                    t          dt          |           z             | j        j        }t          j        j        }t          |          D ]\  }}||         }t          |d          r|j	        }n|d         }t          |          } |d||t          t          |dd                    fz             t          |          D ]-} |d|t          ||         d||                   fz             .t                       d S )	Nz$dumpParagraphLines(<Paragraph @ %d>)r{   r2   zline%d: %d(%s)
  r!  Unknownz %d:'%s'rL   )printidr  r  sysstdoutwriter   r   r{   rv   rI  ru   r  )Pr  outwr
  r   r{   nwordsro   s           r>   dumpParagraphLinesrd  
  s   4r!uu<===z&& 
	 
	FAd8DtG$$  
QZZFD%6#gd;y6Y6Y2Z2Z([[\\\6]] G GZ758F58#D#D EEFFFFGGGG
	 
	r@   c           	          d| d         z  g}dD ]F}t          | d         |          r.|                    |dt          | d         |                     Gd                    |          S )Nz'%s'r2   )	r   r   r   r   rZ  striker   r   r0  r   =rQ  )r   r   ru   r`   )ro   ru  rO  s      r>   fragDumprh  
  sn    QqTM?s 	8 	8AqtA 8AAAgad1ooo6777yy||r@   c                 `   t          dt          |           |                                 fz             | j        t	                    }t          |          D ]Mt          d         j        d                    fd         j        D                       fz             Nt          j
        j        }dd}t          d          D ]_}||d         z  } |d||d         fz             |dd          D ]} |d	t          |          z             t                       dz  `d S )
Nz6dumpParagraphFrags(<Paragraph @ %d>) minWidth() = %.2fzfrag%d: '%s' %sr/   c                 \    g | ](}|t           k    |d t                   |          )S )rg  )rL   ru   )rE   rd  r{  r
  s     r>   rG   z&dumpParagraphFrags.<locals>.<listcomp>
  sl      BK  BK  BKhi  CD  FJ  CJ  CJQQQwW\]^W_`aObObObBc  CJ  CJ  CJr@   r   ih  zfragword%d: cum=%3d size=%dr2   z (%s))r\  r]  r  r{  rv   r  rL   r`   r  r^  r_  r`  r  rh  )ra  r  rb  cumr  ro   r{  r
  s         @@r>   dumpParagraphFragsrl  
  s   F"Q%%QRQ[Q[Q]Q]I^^___u::q 	N 	NA#q%(-  BK  BK  BK  BK  BKmrstmum~  BK  BK  BK  9L  9L  'M  M  N  N  N  NzuS)) 	 	A1Q4KCD.!S!A$?@@@qrrU , ,Wx{{*++++GGGFAA	 	r@   processed_fragsc           	         t          t          j        d         t                    ri g j        }fd}t          j        D ]} | ||                     t          d           t          d                    d t                                                    D                                  t          t          dd                    |j
                  d           t          d           d S d S )	Nr   c                 B   g j         }| dd          D ]Y}t          |d                   }|vrt                    |d         f|<    |d|         d         d|d         d           Zd| j        j        d| d         dd                    |j                  d	S )
Nr2   r   z(__frag_z__, rT  r  r  rQ  z]),)r   r]  rv   r"  rY   r`   __self__)ro   rm  rV  fid_Fs       r>   	_showWordz%dumpProcessedFrags.<locals>._showWord
  s    I122 ? ?AQqT((C"}}#&r771Q4.3AARWQZZZ!=>>>>	?
 34+2F2F2F!diiXYXbNcNcNcNcddr@   zfrom reportlab.platypus.paragraph import _HSFrag, _SplitFragHS, _SplitFragHY, _SplitFrag, _getFragWords
from reportlab.platypus.paraparser import ParaFrag
from reportlab.lib.colors import Colorr'   c              3       K   | ]	}d |z  V  
dS )z__frag_%s__ = %rNrD   r  s     r>   r  z%dumpProcessedFrags.<locals>.<genexpr>
  s(      QQ/!3QQQQQQr@   z=[
z  ]z%print(_getFragWords(processed_frags)))rX  r  r{  ra   r   r\  r`   r  rb  rm  rp  )ra  r   _Srs  rV  rr  s        @r>   dumpProcessedFragsrv  
  s   bhqk$'' 	;BBe e e e e X ! !99Q<<      X  Y  Y  Y$))QQVBIIKK=P=PQQQRRSSS2;9O9O9O9OPQQQ9:::::!	; 	;r@   )getSampleStyleSheetr   )cm4c                 4    d|v pd|v pt          |           |v S )Nall*)rI  )r   TESTSs     r>   flaggedr~  
  s$    ~@@Q5@r@   BodyTextdiscussiontext)parent	Helveticaa8  The <font name=courier color=green>CMYK</font> or subtractive method follows the way a printer
mixes three pigments (cyan, magenta, and yellow) to form colors.
Because mixing chemicals is more difficult than combining light there
is a fourth parameter for darkness.  For example a chemical
combination of the <font name=courier color=green>CMY</font> pigments generally never makes a perfect
black -- instead producing a muddy color -- so, to get black printers
don't use the <font name=courier color=green>CMY</font> pigments but use a direct black ink.  Because
<font name=courier color=green>CMYK</font> maps more directly to the way printer hardware works it may
be the case that &amp;| &amp; | colors specified in <font name=courier color=green>CMYK</font> will provide better fidelity
and better control when printed.
)g     |@gffffffE@i  z.Price<super><font color="red">*</font></super>Normal      ah  Dieses Kapitel bietet eine schnelle <b><font color=red>Programme :: starten</font></b>
<onDraw name=myIndex label="Programme :: starten">
<b><font color=red>Eingabeaufforderung :: (&gt;&gt;&gt;)</font></b>
<onDraw name=myIndex label="Eingabeaufforderung :: (&gt;&gt;&gt;)">
<b><font color=red>&gt;&gt;&gt; (Eingabeaufforderung)</font></b>
<onDraw name=myIndex label="&gt;&gt;&gt; (Eingabeaufforderung)">
Einf&#xfc;hrung in Python <b><font color=red>Python :: Einf&#xfc;hrung</font></b>
<onDraw name=myIndex label="Python :: Einf&#xfc;hrung">.
Das Ziel ist, die grundlegenden Eigenschaften von Python darzustellen, ohne
sich zu sehr in speziellen Regeln oder Details zu verstricken. Dazu behandelt
dieses Kapitel kurz die wesentlichen Konzepte wie Variablen, Ausdr&#xfc;cke,
Kontrollfluss, Funktionen sowie Ein- und Ausgabe. Es erhebt nicht den Anspruch,
umfassend zu sein.Codei  g33333Ӆ@rN  aD  Die eingebaute Funktion <font name=Courier>range(i, j [, stride])</font><onDraw name=myIndex label="eingebaute Funktionen::range()"><onDraw name=myIndex label="range() (Funktion)"><onDraw name=myIndex label="Funktionen::range()"> erzeugt eine Liste von Ganzzahlen und f&#xfc;llt sie mit Werten <font name=Courier>k</font>, f&#xfc;r die gilt: <font name=Courier>i &lt;= k &lt; j</font>. Man kann auch eine optionale Schrittweite angeben. Die eingebaute Funktion <font name=Courier>range()</font><onDraw name=myIndex label="eingebaute Funktionen::range()"><onDraw name=myIndex label="range() (Funktion)"><onDraw name=myIndex label="Funktionen::range()"> erf&#xfc;llt einen &#xe4;hnlichen Zweck, gibt aber eine unver&#xe4;nderliche Sequenz vom Typ <font name=Courier>RangeType</font><onDraw name=myIndex label="RangeType"> zur&#xfc;ck. Anstatt alle Werte in der Liste abzuspeichern, berechnet diese Liste ihre Werte, wann immer sie angefordert werden. Das ist sehr viel speicherschonender, wenn mit sehr langen Listen von Ganzzahlen gearbeitet wird. <font name=Courier>RangeType</font> kennt eine einzige Methode, <font name=Courier>s.tolist()</font><onDraw name=myIndex label="RangeType::tolist() (Methode)"><onDraw name=myIndex label="s.tolist() (Methode)"><onDraw name=myIndex label="Methoden::s.tolist()">, die seine Werte in eine Liste umwandelt.i  gP@zAfter initial wrapzAfter split wrap   z<para>    z <![CDATA[</font></b>& z < >]]></para>   )zqHere comes <FONT FACE="Helvetica" SIZE="14pt">Helvetica 14</FONT> with <STRONG>strong</STRONG> <EM>emphasis</EM>.zqHere comes <font face="Helvetica" size="14pt">Helvetica 14</font> with <Strong>strong</Strong> <em>emphasis</em>.zOHere comes <font face="Courier" size="3cm">Courier 3cm</font> and normal again.)r     zR<para align="CENTER" fontSize="24" leading="30"><b>Generated by:</b>Dilbert</para>   zU- bullet 0<br/>- bullet 1<br/>- bullet 2<br/>- bullet 3<br/>- bullet 4<br/>- bullet 5g       @	   a  Furthermore, the fundamental error of
regarding <img src="../docs/images/testimg.gif" width="3" height="7"/> functional notions as
categorial delimits a general
convention regarding the forms of the<br/>
grammar. I suggested that these results
would follow from the assumption thataaa)r  align   
   u   a b cÂ d e f   a  This page tests out a number of attributes of the <b>paraStyle</b><onDraw name="_indexAdd" label="paraStyle"/> tag.
This paragraph is in a style we have called "style1". It should be a normal <onDraw name="_indexAdd" label="normal"/> paragraph, set in Courier 12 pt.
It should be a normal<onDraw name="_indexAdd" label="normal"/> paragraph, set in Courier (not bold).
It should be a normal<onDraw name="_indexAdd" label="normal"/> paragraph, set in Courier 12 pt.r  Courier)r   r   )r   g֣p=
w{@i'  r   )r/   rW  )Tr	  )rm  )__all____version__r\   stringr   operatorr   unicodedatar	   reportlab.pdfbase.pdfmetricsr
   r   reportlab.platypus.paraparserr   r   r   r9   r   reportlab.platypus.flowablesr   reportlab.lib.colorsr   reportlab.lib.enumsr   r   r   r   reportlab.lib.geomutilsr   reportlab.lib.textsplitr   r   reportlab.lib.stylesr   copyr   reportlab.lib.abagr   reportlab.rl_configr   r   r   r   reportlab.lib.utilsr    r!   r"   reportlab.lib.rl_accelr#   retypesr$   r  r`   rP   compileescaperK   rJ   r  r6  r?   r5   rS   rV   r   r   re   r   rj   rp   r   r   r   r   r   r   r   r   r   r   r  r   r$  r)  r,  r1  r3  r   ra   r8  r:  r<  r>  r@  rB  rD  rI  rF  r[  r]  rd  re  r|  r  r  r  r  r  r  r  r  r  Ir  r  r  _hy_lettersrH  _hy_shyr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r%  r=  rB  rI  rX  ri  ru  ry  r}  r  r  r  r  r  r  r   rY   rd  rh  rl  rv  rw  reportlab.lib.unitsrx  r^  argvr}  r~  
styleSheetBr   r   rL   ra  r  r  r  ro   r   r  r:   r\  r  h0chrrv   rD   r@   r>   <module>r     sx  	
 3                         F F F F F F F F ] ] ] ] ] ] ] ] ] ] ] ] 1 1 1 1 1 1 & & & & & & H H H H H H H H H H H H 1 1 1 1 1 1 ? ? ? ? ? ? ? ? / / / / / /       # # # # # #            : : : : : : : : : : + + + + + + 				      MMMMFFF
 
ww   @ bj)")D//1228
8YRYt__455<   r r r r
      	 	 	 	 	 	 	 		 	 	 	 	t 	 	 	9 9 9                 &   &   "g g g g  (  9 9 9$ 	i i iV4 4 4 4"       ,   $    ] ] ] ]W W W	 	 	 	 	d 	 	 		 	 	 	 	D 	 	 		 	 	 	 	 	 	 		 	 	 	 	* 	 	 	
	 	 	 	 	; 	 	 		 	 	 	 	:g 	 	 		 	 	 	 	< 	 	 	    S       $&/ &/ &/ &/ &/t &/ &/ &/PZ Z Z Z ZHl Z Z Z	 	 	 	 	, 	 	 	   

	( ( (,q q q| | | ||
 
 
, , ,b "*  R  TV  TX  Y  Y* * *   @
bjBCCbjDEE
388U;v$>??@@BJsxxw{5(IJJKK bj5"78899>* >* >*@     ,H H HY2 Y2 Y2x 7   (	 	 	 	 	 	 	 		 	 	 	 	J 	 	 		 	 	 	 	* 	 	 		 	 	 	 	; 	 	 		 	 	 	 	3 	 	 	#6 #6 #6 #6 #6c #6 #6 #6J	 	 	 	 	', 	 	 		 	 	 	 	
 	 	 	 3N N N N   @  # # #&    1 1 1f1 1 1(8 8 8t    . RZ233
C C C @ @ @/ / /b# # #J/ / / / /3 / / /@ @ @@O) O) O) O)bC C C^$ ^$ ^$ ^$ ^$ ^$ ^$ ^$@ Z       $; ; ; ;( IHHHHHHH&&&&&&JJJHQRRLEbyy% A A A A %$&&J:AN+A666EENwqzz 
 )D

1BffRnn!1GGBrNN 	 	AFF2bMMMq!!!BBwqzz 
)H*U]J^
_
_1ffRoo!1wqzz  )D*V,
-
-1ffT6""!1wqzz ! X
)D!

1ffRmm!"1Q'''1GGBrNN1Q4   !		"R  2 B'''1Q4   wqzz  EHSXXXXccRUhhhhW
)D*V,
-
-1ffT6""!1wqzz " 	" 	"D ij2!DDDAq!!!&&v&&CAaq!!!!wqzz g
)D*V,
-
-1ffT6""!1wqzz !i
)D*X.
/
/1ffT6""!1GGD3cc!ff1Q4   1Q4   	!		$1Q4   1Q4    wqzz 
) )DZ5IPZ[[[
\
\1ffQrT"Wf%%!1wr{{ %
)DZ5IPZ[[[
\
\1ffQrT"Wf%%!1wr{{ c )D~~h	SUVVV
W
W
W1ffZ&&!1W F s   B B