
    gg             	          S r SrSrSSKJr  SSKJr  SSKJr  SSK	J
r
JrJr  SSKJr  SS	KJrJrJrJr  SS
KJr  SSKJr  SSKJrJrJrJr  SSKJr  SSK J!r!J"r"  SSK#J$r$  SSK%J&r&  SSK'J(r(  SSK)J*r*J+r+J,r,J-r-  SSK.J/r/J0r0J1r1  SSK2J3r3  SSK4r4SSK5J6r6   SSK7r7SRq                  S5      r9\4Rt                  " S\4Rv                  " \95      -  5      Rx                  r=\4Rt                  " S\4Rv                  " \95      -  5      R|                  r?SS jr@SS jr<S rAS rBS rC " S  S!\(5      rD " S" S#\(5      rES$ rFSS% jrGS& rHS' rISS( jrJSS) jrKSS* jrLSS+ jrMSS, jrNS- rOS. rPS/ rQS0rRS1rSS2 rTSS3 jrUSS4 jrVSS5 jrWSS6 jrXSS7 jrYSS8 jrZS9 r[ " S: S;\\5      r] " S< S=\\5      r^ " S> S?\\5      r_ " S@ SA\_5      r` " SB SC\`5      ra " SD SE\_\]5      rb " SF SG\b5      rc " SH SI\d5      reSSJ jrf " SK SL\\5      rg " SM SN\g\a5      rh " SO SP\g\b5      riSQ rjSrkSRrlSSrmSTrnSU roSV rpSSW jrqSX rrSY rs\4Rt                  " SZ\4R                  5      ruS[ rvS\ rwS]rxS^ryS_rz\4Rt                  " S`5      r{\4Rt                  " Sa5      r|\4Rt                  " SRq                  Sb\xSc45      5      r}\4Rt                  " SRq                  Sb\z\xSc45      5      r~\4Rt                  " SRq                  Sd\zSe45      5      rSf rSg rSh rSi r\-4Sj jr " Sk Sl\d5      r " Sm Sn\5      r " So Sp\5      r " Sq Sr\5      r " Ss St\d5      r " Su Sv\d5      r " Sw Sx\\5      r " Sy Sz\\5      r\-4S{ jrSS| jrS} rS~ rS rS rS rS rS rS rS r\4Rt                  " S5      rS rS rS rS r " S S\d5      rS rSS jrS r " S S\5      r\S:X  Ga  S rS rS rSS jrSSK#JrJ$r$  SSKJr  SSKr\GRV                  SRS r\/ :X  a  S/r\4S jr\" 5       r\S   r\$" S\S9rS\l        \" SR5      (       an  Sr\" \\5      r\" \5        Su  rr\GRm                  \\5      u  rr\" \5        \Ry                  \\5      r\ H   r\GRm                  \\5        \" \5        SrM"     \" SS5      (       a2  \" S\S   5      r\" \5        \GRm                  SS5      u  rr\" \5        \" ST5      (       a4  Sr\" \\S   5      r\" \5        \GRm                  SS5      u  rr\" \5        \" S5      (       a  SrSrSr\" \\5      r\" \5        \GRm                  \\5      u  rr\" S\\5        \" \5        \Ry                  \\5      r\" \S   5        \S   GRm                  \\5      u  rr\" S\\5        \" \S   5        \" S5      (       aI  S\" S5      < S\" S5      < S3r\" \\S   5      r\" \5        \GRm                  SS5      u  rr\" \5        \" S5      (       a:  S H4  r\" \\S   SS9r\" \5        \GRm                  SS5      u  rr\" \5        M6     \" S5      (       a4  Sr\" \\S   5      r\" \5        \GRm                  SS5      u  rr\" \5        \" S5      (       a  Sr\" \\S   5      r\" \5        \GRm                  SS5      u  rr\" \5        \Ry                  S\S-  5      r\" \" \5      5        \" \S   5        \" \S   5        \SR   GRm                  SS5        \" \SR   5        \" \SR   5        \" S5      (       a@  Sr\" \\$" S\S   \S95      r\" \5        \GRm                  S\-  S-
  S5      u  rr\" \5        \" S5      (       a@  Sr\" \\$" S\S   \S95      r\" \5        \GRm                  S\-  S-
  S5      u  rr\" \5        \" S5      (       a5  Sr\" \\$" SSSS9S9r\" \5        \GRm                  SS5      u  rr\" \5        \" S5      (       aB  SSKJr  SSK	Jr  \" \" SS5      5        \" \" SS5      5        Sr\" \\$" SSSS9S9r\" \5        ggg!   Sr7 GN= f))	ParagraphcleanBlockQuotedText	ParaLinesFragLinez3.5.20z%The standard paragraph implementation    )
whitespace)truth)category)stringWidthgetAscentDescentgetFont)shapeFragWord)
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                    [        U 5      (       au  U R                  5       n U (       aU  [        R                  " U 5      nU(       a.  [	        UR                  S5      5      XR                  S5         -  $ [        U SS9$ U(       a  U$ U $ )z/convert a strike/underline distance to a number      F)allowRelative)r$   stripr   matchfloatgroup_parser_num)svMapdefaultms       d/Users/Alptekin/Desktop/izin_takip/venv/lib/python3.13/site-packages/reportlab/platypus/paragraph.py_usConvrA   K   si    QxxGGI""1%AQWWQZ(ggaj)999"1599NH    c                     [        U 5      (       a  U R                  S5      n Ub!  [        U5      (       a  UR                  S5      nUc  SU ;   a  [        U 5      OU R                  U5       Vs/ s H  o"PM     sn$ s  snf )Nutf8    )r#   decode_wsc_re_splitsplit)textdelimuwords      r@   rH   rH   Y   so    t}}T[[0dWU^^U\\&5IU7<}SWd 3]a]g]ghm]n np neE nppps   -A;c                 n    [        U 5      (       a  U R                  S5      n U R                  [        5      $ NrD   )r#   rF   r7   _wscrI   s    r@   r7   r7   ^   s'    t}}T[[0d::drB   c                 n    [        U 5      (       a  U R                  S5      n U R                  [        5      $ rM   )r#   rF   lstriprN   rO   s    r@   rQ   rQ   b   '    t}}T[[0d;;trB   c                 n    [        U 5      (       a  U R                  S5      n U R                  [        5      $ rM   )r#   rF   rstriprN   rO   s    r@   rT   rT   f   rR   rB   c                       \ rS rSrSrSrg)r   j   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____firstlineno____doc____static_attributes__rW   rB   r@   r   r   j       rB   r   c                       \ rS rSrSrSrg)r   u   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.
rW   NrX   rW   rB   r@   r   r   u   r_   rB   r   c                 v    SR                  [        [        [        [	        [        U 5      5      5      5      5      $ )Nr1   )joinlistfilterr   rH   r7   Ls    r@   
_lineCleanrh      s%    88DeE!Ho6788rB   c                     [        [        [        [        [        [        [        U S5      5      5      5      5      nUR                  U5      $ )zThis is an internal utility which takes triple-
quoted text form within the document and returns
(hopefully) the paragraph the user intended originally.r)   )rd   re   r   maprh   rH   rc   )rI   joinerrg   s      r@   r   r      s6     6%SU4->?@ABA;;q>rB   c                 @    US:  d  US:  a  U R                  U5        g g )Ngư>gư)setXPos)txdxs     r@   rm   rm      s    	$w"U(


2 rB   c                 f    [        U 5      (       a  U R                  S5      $ U R                  S5      $ )Ns    rE   )r#   count)ws    r@   
_nbspCountrs      s(    qzzww{##wwvrB   c                    US:  =(       d    [        U SS5      nSR                  U5      n[        X5        U(       d  [        U5      [	        U5      -   S-
  nUS:*  nU(       a  U R                  US5        O@U R                  U[        W5      -  5        U R                  US5        U R                  S5        [        X* 5        U$ N:0yEpreformattedFr1   r4   r   )getattrrc   rm   lenrs   _textOutsetWordSpacer9   )rn   offset
extraspacewordslastsimplerI   nSpacess           r@   _leftDrawParaLiner      s    AN5!AF88E?DBe*Z--a/!
D

U7^34
D
BwMrB   c                    US:  =(       d    [        U SS5      nSR                  U5      nU(       d  [        U5      [        U5      -   S-
  nUS:*  nU(       a&  USU-  -   n[	        X5        U R                  US5        OMUnU R                  U[        W5      -  5        [	        X5        U R                  US5        U R                  S5        [	        X* 5        U$ )Nrv   rw   Fr1   r4   r         ?rx   rc   ry   rs   rm   rz   r{   r9   	rn   r|   r}   r~   r   r   rI   r   r?   s	            r@   _centerDrawParaLiner      s    AN5!AF88E?De*Z--a/!S:%%
D

U7^34
D
BrNHrB   c                    US:  =(       d    [        U SS5      nSR                  U5      nU(       d  [        U5      [        U5      -   S-
  nUS:*  nU(       a1  X-   n[	        X5        U R                  SR                  U5      S5        OMUnU R                  U[        W5      -  5        [	        X5        U R                  US5        U R                  S5        [	        X* 5        U$ ru   r   r   s	            r@   _rightDrawParaLiner      s    AN5!AF88E?De*Z--a/!
CHHUOA&

U7^34
D
BrNHrB   c                    [        X5        SR                  U5      n[        U SS5      =(       d*    SUs=:  =(       a    S:*  Os  =(       d    U=(       a    US:  nU(       d  [        U5      [	        U5      -   S-
  nUS:*  nU(       a  U R                  US5        O@U R                  U[        W5      -  5        U R                  US5        U R                  S5        [        X* 5        U$ )Nr1   rw   Frv   :0yE>r4   r   )rm   rc   rx   ry   rs   rz   r{   r9   )rn   r|   r}   r~   r   rI   r   r   s           r@   _justifyDrawParaLiner      s    BHHUODb.i53I3IT3IitOhXbchXhFe*Z--a/!
D

U7^34
D
BwMrB   c                 8    U(       a  [         O[        " XX#U5      $ N)r   r   )rn   r|   r}   r~   r   s        r@   _justifyDrawParaLineRTLr      s    "&,@@"jaeffrB   c                     US:X  a  SnOlUS;   a  X -
  nOaUS:X  a  USU-  U -   S-  -
  nOLUS;   a	  USU-  -
  nO=US:X  a  SU-  nO1US	:X  a  S
U-  nO%[        US5      (       a  UR                  U5      nOUnX3U -   4$ )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    	:~	!	!j	X#h,q.#--	'	'X%	W(l	U8m	%	&	&  *1u9rB   c                 J    [        U S5      (       a  U R                  U5      $ U $ )Nr   r   )vnvs     r@   imgNormVr      s&    q"##  $$rB   c                    U R                   n[        U5      (       a5  UnU R                  nU R                  nU R                  nU R
                  nSnOv[        USS5      n[        USU R                  5      n[        USU R                  5      n[        USU R                  5      n[        USU R
                  5      n[        USS5      nX#XEXg4$ )	Nr   rI   .fontNamer   	textColor	backColordy)endDotsr$   r   r   r   r   rx   )styledotsrI   r   r   r   r   r   s           r@   _getDotsInfor      s    ==DT{{>>>>OO	OO	tF3'4
5>>:4
5>>:DU__=	DU__=	T$q!I88rB   g?gUUUUUU?c           
         [        USS 5      nUR                  nUR                  nUR                  nUR                  n	UR
                  n
UR                  nXR                  -  n U
S;   nU(       a_  U
S:X  a<  [        [        U-  UR                  5      n[        [        U-  UR                  * 5      nOUR                  nUR                  * nX-   nUR                  U:w  a  UR                  U5        U(       ap  UR                  nUbQ  UW-
  nUR                   U:w  a  XUR                   -
  -  n[#        UU-
  5      S:  a  UnUR%                  X5        Xl        UW-
  Ul        Xl        [        USS5      nSnUR&                  n/ n/ nUR(                  nUR*                  n[-        U5       GH  u  nn[/        US5      (       Ga	  UR0                  nUR2                  nUS	:X  a  UR4                  nUc  UR6                  R8                  n[;        UR<                  UR>                  5      n[;        UR@                  U5      n[C        UURD                  U5      u  nn U UU-  -   n!URF                  RI                  URJ                  U!UU-   UUS
S9  U U-  n U!U-  n![M        UU!UR                  -
  5        OURN                  n"US:X  a   URF                  RQ                  U"XU-   5        O[        URF                  U"S 5      n#U#(       d  [S        SU< SU"< S35      e[U        XXUR                  S9URF                  l+         U#" URF                  U[        USS 5      5        URF                  ?+UUS   L a`  URX                  (       d:  UR[                  UR6                  R\                  UR6                  R8                  5        UR_                  SS5        GM  GM"  U UU-  -   n!U!n$UR8                  n%UR`                  n&URb                  n'US:  a(  U!U(       a  SO[e        UUS-
     Rf                  U5      -
  n$URX                  UR4                  4UR\                  U%4:w  a  URi                  UR\                  U%5        UR`                  U&:w  a  U&Ul0        URk                  U&5        URb                  U':w  a  U'Ul1        URm                  U'5        UUR(                  :w  a=  [o        U5      n([o        UR(                  5      n)U)U(-
  n*U(U)-
  n+U+ H  n,UU,   U$4UU,'   M     UURp                  :w  aF  [o        U5      n([o        URp                  5      n)U)U(-
  n-U(U)-
  n.U. H  n,UU,   U$4UU,'   U" U,S5        M     URf                  n/UR_                  U/UUS   L 5        UUR(                  :w  a   W* H  n,U,U%U&U!4U%4UU,'   M     UR(                  nU(       a   U H  n,UU,   u  n0n1U%U1:  d  M  U0U%4UU,'   M     U'SU%-  -
  n2U'U%-   n3UURp                  :w  a(  W- H  n,U,U 4U2U34UU,'   U" U,S5        M     URp                  nU(       a<  U H6  n,UU,   u  n0n4n5U2U4:  d  U3U5:  d  M  U0[s        U2U45      [        U3U55      4UU,'   M8     [        USS 5      n6U6(       a   URt                  (       d  U6Ul:        U!Ul;        OURt                  (       a  U6(       d:  URx                  R{                  URv                  U$URt                  45        S Ul:        OtURt                  URt                  :w  d  UR`                  URt                  :w  a@  URx                  R{                  URv                  U$URt                  45        U6Ul:        U!Ul;        URF                  R}                  U/URX                  UR4                  5      n7U U7-  n UU/R                  S5      [        U/5      -   -  nGM
     U US-
  U-  -   n!U(       av  UR6                  R                  (       a[  UR6                  R                  S:w  a  US:w  a  [        U U!UR                  Xq5        O"US:w  a  UR                  n8[        U8U8U	U8-
  XqSS9  U(       a  U H  n,UU,   U!4UU,'   M     U(       a  U H  n,UU,   U!4UU,'   U" U,S5        M     URt                  (       a2  URx                  R{                  URv                  U!URt                  45        UR                  U	:w  a  [M        XUR                  -
  5        g g ! URF                  ?+f = f)N_linkRecordc                      g r   rW   )argskwdss     r@   <lambda>_putFragLine.<locals>.<lambda>  s    rB   )minmaxr   r   
_wordSpacer   cbDefnimgauto)maskanchorzMissing z callback attribute '')rn   cur_xcur_yleadingxslabelr'   r4   endg?startr   r1   RTLrightleftF)r   )Frx   rw   	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imagerm   namebookmarkHorizontalAttributeErrordict_curr_tx_info	_fontnamesetFontr   rz   r   rise_trailingSpaceLengthrI   _setFontsetFillColorsetRisesetlinkr   r   backColor_x
backColorsappendr
   rq   rs   r   wordWrap_do_dots_fragmaxWidth	_x_offset)9r   rn   liner   pKind
linkRecordrw   r   r   x0r   r   dalr   r   olbxcywsr   r~   ALLLr   r   ifr   r   txfsrr   r   iy0iy1cur_x_sr   funcend_xr   r   r   SNSnLLeLLlnALeALrI   l0fsmaxnlonhilohibgtxtlenr   s9                                                            r@   _putFragLiner    s   M*DEJ??L	BHHE	B..KjjG	]]E

&C
WT[[1F#g+t||m4G[[F||mG.	{{G
g
gg?f*C||W$2<<//3u9~d"  * '/	L	#BGJJE	B	B{{HHHE% 11XXXF;;DU{||<88,,DV\\",,7V]]40#AfmmD9C'"*,

$$V\\'%)AaV$T
17266>*{{>JJ11$u7]K"2::d48D,UYZ^-_``-1R%cecoco-pBJJ,5RZZWVGD-IJJJ4E"I~||JJrxx001B1BCBq! 
 gbj(GEzzHI66D1u1:NuUVWXUXz`b:cdR\\*QZZ,AAAJJ1||Y&(	*ww}

4  QZZG_1f"fA"*1+e"3HQK QVV|G[1f"fA$Qx~E!Hq'  66DKKQ%)^,QZZA#$Xi"@"IHQK ZZA (IB~&((l 
 X%C/CQVV|A !%yS0E!Hq)  VVA!&qJBB2vR#%c#bk#c"+#=a 
 ;t,B",,!!(MM((2>>5",,*OQ#'BL[[",,.",,2LMM((2>>5",,*OQ#%BL%,BNZZ++D",,MFVOEtzz#z$'777GW !Z WQYN"G  88e#g~eGDMM"@F]LLE%U
BG	A"1+w.HQK  
AQx(E!Hq  
||
r~~wEG	vvrzbff9 I JJ4s   6c((c6c                    [        UR                  5      u  pgppUR                  R                  XgU5      nX-   U::  Ga*  UR                  U:w  d  UR
                  U:w  a  UR                  Xx5        U(       a  U[        USUR                  5      -  nUR                  SUR                  U-   5        [        XAU -
  5        [        X!-
  U-  5      n[        XBX-  -
  5        UR                  U	:w  a  UR                  U	5        U
(       a  UR                  R!                  XU
45        UR#                  X-  S5        U(       a*  UR                  UR                  UR                  U-
  5        g g g )N_dotsOffsetXr   r4   )r   r   r   r
   r   r   r   rx   r   r   r   rm   intr   r   r   r   rz   )r   r  r   r   rn   r   rI   r   r   r   r   r   r  ns                 r@   r   r     s   4@4J1D(YZZ##DH=F~x<<!R\\8%;JJx)WRrvv>>
288B;'5=!!6)*fh&'<<"OOI&bmm**E9+EF
AF1rrxx{32  rB   c           
         Xl         [        X5        UR                  nUS:  =(       d    [        USS5      nU(       da  UR                  [        UR                   Vs/ s H+  n[        US5      (       a  M  [        UR                  5      PM-     sn5      -   S-
  nUS:*  nU(       a  [        XX#S5        O;U R                  U[        W5      -  5        [        XX#S5        U R                  S5        [        X* 5        g s  snf )Nrv   rw   Fr   r4   r   r   )r   rm   
extraSpacerx   	wordCountsumr~   r   rs   rI   r  r{   r9   rn   r|   r   r   r  r   rr   r   s           r@   _leftDrawParaLineXr#    s    LBJCnU!CF..$**%h*QT[\]^fTg&8j&8*%h!iijkk!VV4

U7^34VV4
Bw &is   C<
5C<
c           
      d   Xl         XR                  -   U l         UR                  nUS:  =(       d    [	        USS5      nU(       da  UR
                  [        UR                   Vs/ s H+  n[        US5      (       a  M  [        UR                  5      PM-     sn5      -   S-
  nUS:*  nU(       a+  USUR                  -  -   n[        X5        [        XX#S5        O=UnU R                  U[        W5      -  5        [        XX#S5        U R                  S5        [        X* 5        U ?g s  snf ! U ?f = f)	Nrv   rw   Fr   r4   r   r   center)r   r   r  r  rx   r   r!  r~   r   rs   rI   rm   r  r{   r9   	rn   r|   r   r   r  r   rr   r   r?   s	            r@   _centerDrawParaLineXr'    s   LvvoBO__
E!GWT.%GnnSdjj)ljX_`abjXk*<*QVV*<j)l%mmnooGaZFs4??**ABM84AOOJw78H5OOA2O *m Os%   A
D+ %D&
>D&
BD+ &D+ +D/c           
      "   Xl         UR                  nUS:  =(       d    [        USS5      nU(       da  UR                  [	        UR
                   Vs/ s H+  n[        US5      (       a  M  [        UR                  5      PM-     sn5      -   S-
  nUS:*  nU(       a'  XR                  -   n[        X5        [        XX#S5        O=UnU R                  U[        W5      -  5        [        XX#S5        U R                  S5        [        X* 5        g s  snf )Nrv   rw   Fr   r4   r   r   )r   r  rx   r   r!  r~   r   rs   rI   rm   r  r{   r9   r&  s	            r@   _rightDrawParaLineXr)    s    LJCnU!CF..$**%h*QT[\]^fTg&8j&8*%h!iijkk!??"Q4w/

U7^34QD0
BrN &is   D
*D
c           
      J   Xl         [        X5        UR                  nUR                  =(       d*    SUs=:  =(       a    S:*  Os  =(       d    U=(       a    US:  nU(       da  UR                  [        UR                   Vs/ s H+  n[        US5      (       a  M  [        UR                  5      PM-     sn5      -   S-
  nUS:*  nU(       d<  U R                  U[        W5      -  5        [        XX#S5        U R                  S5        O[        XX#S5        [        X* 5        g s  snf )Nrv   r   r   r4   r   justify)r   rm   r  	lineBreakr   r!  r~   r   rs   rI   r{   r9   r  r"  s           r@   _justifyDrawParaLineXr-     s    LBJ^^Vj 6 6$ 6VD<UZPUEUF..$**%h*QT[\]^fTg&8j&8*%h!iijkk!

U7^34VY7
VY7Bw &is    D 
D 
c                 6    U(       a  [         O[        " XX#5      $ r   )r)  r-  )rn   r|   r   r   s       r@   _justifyDrawParaLineXRTLr/    s    #'-BBRQU\\rB   c                     [        U 5      nU(       a?  UR                  R                  UR                  5       UR                  UR
                  5      $ S$ Nr   )_wsc_end_searchr   r
   r:   r   r   )rI   rn   r   s      r@   r   r     s;    		BMO2::!!"((*bllBLLIVUVVrB   c                       \ rS rSrSrSrg)_HSFragi  z!a frag that's followed by a spacerW   NrX   rW   rB   r@   r4  r4    s    +rB   r4  c                       \ rS rSrSrSrg)_InjectedFragi  zHa frag that's injected in breaklines and must be removed on reprocessingrW   NrX   rW   rB   r@   r6  r6    s    RrB   r6  c                       \ rS rSrSrSrg)
_SplitFragi  za split fragrW   NrX   rW   rB   r@   r8  r8    s    rB   r8  c                       \ rS rSrSrSrg)_SplitFragHi#  z.a split frag that's the head part of the splitrW   NrX   rW   rB   r@   r:  r:  #  s    8rB   r:  c                       \ rS rSrSrSrg)_SplitFragHYi(  z:a head split frag that needs '-' removing before rejoiningrW   NrX   rW   rB   r@   r<  r<  (  s    DrB   r<  c                       \ rS rSrSrSrg)_SplitFragHSi,  z'a split frag that's followed by a spacerW   NrX   rW   rB   r@   r>  r>  ,  s    1rB   r>  c                       \ rS rSrSrSrg)_SplitFragLLi0  z<a frag that is forced to end in - because of paragraph splitrW   NrX   rW   rB   r@   r@  r@  0  s    FrB   r@  c                       \ rS rSrSS jrSrg)_SHYIndexedStri4  Nc                     U(       dZ  UR                  [        5      n/ nUR                  nSnU H  nU[        U5      -  nU" U5        M     SR	                  U5      nUS S n[
        R                  X5      nX&l        U$ )Nr   r'   r   )rH   _shyr   ry   rc   str__new___shyIndices)clsuXaxr<   selfs          r@   rF  _SHYIndexedStr.__new__5  sv    AAAASV!  
A#2A{{3!rB   )rG  r   )rY   rZ   r[   r\   rF  r^   rW   rB   r@   rB  rB  4  s    rB   rB  c                    U R                  S5      n[        U [        5      (       ai  U R                  SS nUS   nU(       aC  [	        US5      (       a.  UR                  UR                   Vs/ s H  oUU-   PM	     sn5        X!-  n[        X#5      $ U(       aN  X!-  n[	        US5      (       a9  WR                  UR                   Vs/ s H  oUW-   PM	     sn5        [        X#5      $ U$ s  snf s  snf )zDrejoin two parts of an original _SHYIndexedStr or str that was split-Nr   rG  )rT   
isinstancerB  rG  r   extend)r<   ssrI  rJ  rL  _s         r@   _shyUnsplitrU  D  s    	A!N##MM!bEr-((r~~6~!A#~67GAa""		2m$$HH2>>2>ac>23!!&&H 7 3s   ,C'C,c                       \ rS rSrSrS rSrg)_SHYWordiV  zIa fragword containing soft hyphens some of its strings are _SHYIndexedStrc           
      4  ^ U S   nSU l         US:X  a  / $ S nSnX-
  =pgS n[        U SS  5       H  u  n	u  mn
U4S jn[        U
[        5      (       ac  U" S5      nXl-   n[        U
R                  5       H3  u  pU
S U XS  nnX" U5      -   nUc  UnUU:  nU(       a    OXUUUUU4nM5     Xk" U
5      -  nOXk" U
5      -  nXb:  nU(       d  M  Uc  M    O   Ub  X-
  OSU l         U(       d  / $ Uu  pnnnnnU	S-   nU U   u  mn
U
R                  n[        US-   US US-    5      nU S U TU4/-   nUU-
  US'   UUS   -
  U-   /U(       d  / O(T[        UUUS-   S   Vs/ s H  nUU-
  PM
     sn5      4/-   U US-   S  -   n[        U5      [        U5      4$ s  snf )Nr   Fr4   c                 F   > [        U TR                  TR                  5      $ r   r
   r   r   )r<   r  s    r@   r   %_SHYWord.shyphenate.<locals>.<lambda>a  s    ;q!**ajjArB   rP  )_fswwr   rQ  rB  rG  _SplitFragSHY
_SHYWordHS)rM  newWidthr   wwpossibleexceeded	baseWidth
baseWidth0fswwr  tsWshyLenbwjrL  r   r   leftwi1rJ  leftsrg   rT  Rr  s                            @r@   
shyphenate_SHYWord.shyphenateX  s   !W
q5)!).	 ab*GAeqAB!N++C'%amm4DA"#BQ%2%Dr$xKE|ET$x/H QtUFBH 5 RU"	RU"	$/xD,e# +$ )-(8T_j
.6+aeVqSBx1MMtCx$1Q30"I!E#z!!!WV^bQ~eZ[\]^_\_\`ZaLbZaUVQqSZaLb7c4d3efimnpqrnrnsittQA.. Mcs   F)r]  N)rY   rZ   r[   r\   r]   rp  r^   rW   rB   r@   rW  rW  V  s
    S$/rB   rW  c                       \ rS rSrSrSrg)r^  i~  zOa head split frag that requires removal of a hyphen at the end before rejoiningrW   NrX   rW   rB   r@   r^  r^  ~  s    YrB   r^  c                       \ rS rSrSrSrg)r_  i  z=a fragword containing soft hyphens that's followed by a spacerW   NrX   rW   rB   r@   r_  r_        GrB   r_  c                 J     [        U S   S   [        [        45      $ !    g= f)Nr   F)rQ  r9   r  )fragss    r@   _processed_fragsrw    s*    %(1+uSk22s    "r4   r5      c                    S/nUR                   nSnSnU  H  nX5S   -  n[        U[        5      nUSS  Hr  nUu  pU(       a<  XuS   L a5  U[        U	S   UR                  UR
                  5      S-   -  n[        U	5      n	XHL a  U[        US   S   U	5      4US'   Mg  U" X45        UnMt     M     X1S'   [        W5      " U5      $ )z!F should be a list of _SplitFragsr   Nr4   r   r   )r   rQ  r<  r
   r   r   rU  _reconstructSplitFrags)
Fro  aRwLenpstyr  rmhyffstyrg  s
             r@   _rejoinSplitFragWordsr    s    	
A	
BDD!!L)AB%BFCeAbE#,,s||DtKKN{k!B%(156"C7   aD!!$Q''rB   c                     [        U [        5      (       a!  [        U [        5      (       a  [        $ [        $ [        U [        5      (       a"  [        U [        5      (       a  [        $ [         $ [
        $ r   )rQ  rW  r4  r_  r@  rd   )r  s    r@   rz  rz    sa    CMaPXCYCY:a00Z qh qOYZ[\cOdOd:a#=#=<qCJqjnqrB   c                 *
  ^ U4S jn/ nUR                   n/ n[        U 5      (       a  UR                   n U  H  n[        U[        5      (       a  M  U" U5        [        U[        5      (       a7  U" U5        [        U[
        5      (       a  U" [        U5      5        USS2	 Ml  Mn  U(       a  U" [        U5      5        USS2	 U" U5        M     U(       a  U" [        U5      5        GOSnSnSnSnU  GH  nUR                  nUS:w  Ga0  [        Ul        U(       a  [!        U5      nU(       d  M=  Sn[#        U5      nUS   [$        ;   d  U(       d}  U(       a7  UR'                  SU5        U" U(       a  [)        U5      OU5        Un/ nSnSnSnOU=(       a    [        US   [
        5      nU(       d  UR'                  SS5        O	U(       d  M  USS  H  n[*        U;   a  [-        U5      nSnUR                  UU45        U[        UUR                  UR                  5      -  nUR'                  SU5        U" U(       d  [        U[(        5      (       a  [/        U5      O
[        U5      5        / nSnSnM     SnUS   n[*        U;   a  [-        U5      nSnUR                  UU45        U[        UUR                  UR                  5      -  nU(       ac  US   [$        ;   aS  UR'                  SU5        U" U(       d  [        U[(        5      (       a  [)        U5      O
[        U5      5        / nSnSnGMA  GMD  GMG  [1        US5      (       Ga   UR2                  n[5        US	S5      nU(       a  [1        US
5      (       a  TUl        UR9                  T5      nU(       a4  UR'                  SU5        U" U(       a  [        U5      OU5        / nSnSnSn[:        Ul        U" UUS4/5        SnGM  [<        Ul        U(       d8  U(       a1  [        US   [
        5      (       a  US   R                  US45        GMC  UR                  US45        GMY  [1        US5      (       d  GMm  U(       a"  UR'                  SU5        U" U5        / nSnSnSn[>        Ul        U" SUS4/5        SnGM     U(       aA  UR'                  SU5        U" U(       d  [        U[(        5      (       a  [)        U5      OU5        U(       d  U (       a  U S   n[        Ul        SUS4//nU$ )zgiven 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                    > U S   n[        U[        5      (       a.  UR                  T:w  a  TUl        UR                  T5      nXS'   g g g r1  )rQ  r   _normalizerr   )r  rr   r   s     r@   _rescaleFrag#_getFragWords.<locals>._rescaleFrag  sM    aDa}}h& (%%h/! ' rB   TNr   r   Fr'   r   r   r   r,  ) r   rw  rQ  r6  r8  r4  r  r<  r
   r   r   rU  rz  rI   _FK_TEXT_fkindrQ   rH   r   insertrW  rD  rB  r_  r   r   rx   r  r   _FK_IMG
_FK_APPEND	_FK_BREAK)rv  r   r  ro  r|  WaWr  f0Wlenr  lfrg  tshangingSpacer  hangingStrip
shyIndicesrI   r
  whsrr   cbs    `                     r@   _getFragWordsr    sN    	A	
B
AXX a..Qa
++qE!!W--034aD . 034aDqE  (+,d 
A66DRx#!$<D#(L$K7j(1*8A;!<*%*
',=JquW$=2 3BAqy*1-%)
HHaUOQ

AJJ??AHHQqM
j86L6Lz!}RYZ[R\]A!&JA    %bE19&q)A!%J!A[AJJ

;;DH
2HHQqMjJq4J4Jx{PWXYPZ[A!&JA 34 8$$XXBwq)q!233(0--h7171:1=%*
',&AH1R&zN#(L)AHz!B%'@'@"aV,!B(K((HHQqMqEAA!&J#(L$Aqf:#i l HHQqMjJq,B,Bx{JaAAHQrFA
 HrB   c              #   D  #    U SS   H  u  p[        US5      (       a  U[        UR                  SS5      U4v   M4  U(       aQ  [        U5      (       a  UR	                  S5      nU H(  nU[        X1R                  UR                  5      U4v   M*     M  USU4v   M     g 7f)Nr4   r   r   r   rD   )r   rx   r   r#   rF   r
   r   r   )rr   r  r<   cs       r@   _fragWordIterr  h  s     !"1XWQXXga0!33qzzHHV$Qzz1::>AA  Q'M s   BB c                    / n[        U5      S-
  nU[        XSS-   5         n/ nSnSn	Sn
U S   S   n[        U 5       H  u  pnX-   nX:  =(       a$    [        U
=(       d    U
(       + =(       a    X:*  5      nXLd  U(       a  UR	                  5       n[        US5      (       a  Xl        UR                  X45        U(       a>  [        U
/U-   5      nUR                  U5        US-  nUnU[        XSS-   5         n/ nUnSn
Sn	UnX-  n
X-  n	UnM     UR                  X45        [        U [        5      (       a  [        O[        " U
/U-   5      nUR                  U5        U$ )ah  given a frag word, w, as returned by getFragWords
split it into frag words that fit in lines of length
maxWidth the available length on the currebt line
maxWidths[lineno+1] the maxWidth for the next line
.....
maxWidths[lineno+n]

return the new word list which is either 
_SplitFrag....._SPlitFrag or
_SplitFrag....._SplitFragHS if the word is hanging space.
r4   r   r'   rI   )ry   r   r  boolcloner   rI   r   r8  rQ  r4  r>  r:  )rr   r   	maxWidthslinenoro  	maxlinenomaxWidthNextr  	lineWidthfragText	wordWidthr  gcwr  newLineWidthtooLongs                    r@   _splitFragWordr  t  se    	AIq IS!845L
AIHI	!QA"Q |'cD1b9}?aQSQa,c:	Aq  !HHa\"	{1}-!'(Yax)@A!	HA	 	+ #, HHa\#Ag..K	?)QOAHHQKHrB   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              #      #    SnU R                  U5      (       a!  X2-  nU S S n U R                  U5      (       a  M!  Sn U R                  X$5      nUS:  a  g US-  nXS U -   XS  U-   4v   M/  7f)Nr'   r   r5   r   r4   )endswithfind)urischemeslashtailr  s        r@   _slash_partsr    s     D
,,u

#2h ,,u

 	
A
HHUQ3	Q!WnSWT\))	 s
   8A.2A.c                 V   [        U 5      (       a  U R                  S5      n [        R                  U 5      nU(       d  g UR	                  S5      nU [        U5      S  n U(       d  SU ;  a  SOSnU(       a  U (       a  X 4/O/ [        [        XU5      5      -   nUR                  5         U$ )NrD   r4   /\)	r#   rF   uri_patr8   r:   ry   rd   r  reverse)r  r?   r  r  ro  s        r@   _uri_split_pairsr    s    s||3::f-ScATWWQZF
c&kl
CCsNT 
"s6-d<SX;Y6ZZAIIKHrB   u[   A-Za-zÀ-ÖØ-öø-ɏẀ-ẅḀ-ỿА-яḂḃḊḋḞḟṀṁṖṗṠṡṪṫẛỲỳ   ­u   -­u   ^['"([{¿‘‚“„]+u   []'")}?!.,;:’‛”‟]+$z^[z]+$([z])c
                 ^   [        U5      (       a  UR                  S5      n[        R                  U5      n
U
(       a   U
R	                  S5      nU[        U5      S  nOSn[        U[        5      (       a  US   S:X  a  SnUS S nO?[        R                  U5      n
U
(       a!  U
R	                  S5      nUS [        U5      *  nOSn[        U5      U	:  a  g X2-
  n[        U5      nUbR  X$:  d  U(       aE  USU-
  U-  ::  a9  U H3  u  nnX-   nUU-   n[        XU5      nUU-   nUU::  d  M(  SSUUU-
  UU4s  $    g [        R                  U5      nU (       a  [        R                  U5      (       d   [        R                  U5      (       az  SU;  at  [        SXV5      nU " U5       H\  u  nnX-   n[        R                  US   5      (       d  SnUnOSnSnUU-   n[        XU5      nUU-   U-   nUU::  d  MQ  UUUUU-
  UU4s  $    [        U5      nUS:  a  U(       a  SU;  a  [        R                  U5      (       ap  [!        [#        SUS5      5       HU  nUSR%                  US U 5      -   nSR%                  UUS  5      U-   n[        XU5      nUU-   nUU::  d  MJ  SSUUU-
  UU4s  $    g g g g g )	NrD   r   r'   r   rP  r4   rx  r5   )r#   rF   _hy_pfx_patr8   r:   ry   rQ  _SplitWordLL_hy_sfx_patsearchr  r
   _hy_shy_patrH   _hy_letters_pat_hy_shy_letters_patreversedrangerc   )
hyphenatorr<   ra  r`  r   r   r   uriWasteReduceembeddedHyphenationhymwlr?   pfxsfxw0ro  r   rg  hwtwHhylenjcjclenr  r  s                            r@   
_hyGenPairr    s   qzzqxx'1!Aggajc#hiL!L!!aeSjcrFq!''!*C*CH9AC
1v~v	BA};>bQ~5Ex4O.O1EG H5"Wx<a2b51,,  	!A--a005H5N5Nq5Q5QVX`aVaC2a=CAaA$$QrU++CAQ1BBB8|%2b51,, !  	AA!t#!8K8Q8QRS8T8T%!A,'Abggaen$A!"$AQ1BBB8|!Br"uQq(( ( 9U#trB   c                    S=p/ nUR                   n/ nUR                  n[        S[        U 5      5       H  nX   u  pUR                  S:w  a    g[        US5      (       a  [        UR                  SS5      (       a    gU	(       d  MS  [        U	5      (       a  U	R                  S5      n	U" U	5        U" [        U	5      Xq4/-  5        U[        U	5      -  nM     SR                  U5      [        U5      4$ )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   r4   Nr   r   rD   r'   )rR  r   r  ry   r   r   rx   r   r#   rF   rc   tuple)
FWccplenrJ  eXUaUr  r  rg  s
             r@   _fragWordSplitRepr    s     MB
A	
B
A	
B1SWu6619T1X7188GA#>#>(1::188F+q
1
3q6A6(?
c!f  771:eAhrB   c                 .    [        S U  5       5      /U -   $ )zF are the fragsc              3   f   #    U  H'  u  p[        X!R                  UR                  5      v   M)     g 7fr   r[  ).0r<   rI  s      r@   	<genexpr>#_rebuildFragWord.<locals>.<genexpr>(  s$     C#!Qzz!**55s   /1)r!  )r{  s    r@   _rebuildFragWordr  &  s    CCDEaGGrB   c           	         [        U5      nU(       d  g Uu  p[        U5      (       a  UR                  S5      n[        R	                  U5      n	U	(       a   U	R                  S5      n
U[        U
5      S  nOSn
[        U[        5      (       a  US   S   S   S:X  a  SnUS S nO?[        R                  U5      n	U	(       a!  U	R                  S5      nUS [        U5      *  nOSn[        U5      U:  a  g US   nX,-
  n[        U5      nUb  X:  d  U(       a  USU-
  U-  ::  a  U H  u  nnX-   n[        U5      nUU   u  nnUSU nUU   u  nnUS UU-
   nU(       a  UR                  UU45        UUU-
  S  nUUS-   S  nU(       a  UR                  SUU45        [        U5      nXS   -   U::  d  M  SU[        U5      4s  $    g [        R!                  U5      nU (       Ga  ["        R	                  U5      (       d   [$        R	                  U5      (       a  SU;  a  U " U5       H  u  nnX-   n[        U5      nUU   u  nnUSU nUU   u  nnUS UU-
   n[        R	                  US   5      (       d  SnOSnU(       d  U(       a  UR                  UUU-   45        UUU-
  S  nUUS-   S  nU(       a  UR                  SUU45        [        U5      nXS   -   U::  d  M  UU[        U5      4s  $    [        U5      nUS:  a  U(       a  SU;  a  [$        R	                  U5      (       a  ['        [)        SUS5      5       H  n[        U
SR+                  US U 5      -   5      nUU   u  nnUSU nUU   u  nnUS UU-
   nU(       a  UR                  UU45        UUU-
  S  nUUS-   S  nU(       a  UR                  SUU45        [        U5      nXS   -   U::  d  M  SU[        U5      4s  $    g g g g g )	NrD   r   r'   r   r4   rP  rx  r5   )r  r#   rF   r  r8   r:   ry   rQ  r@  r  r  r  r   r  r  r  rH   r  r  r  r  rc   )r  r  r`  r   r  r  r  rJ  r<   r?   r  r  ra  r  ro  r   rg  posfxr  FLffxsfxlsfxrFRr  r  r  r  s                                r@   _hyGenFragsPairr  *  s   "AfDAqzzqxx'1!Aggajc#hiL"\""r"vay}c'9crFq!''!*C*CH9AC
1v~v	AB	B 	A};>bQ~5Ex4O.O1E!f3B"Xb6S7CF|C:.3r67|1Y1c$Z0$R(d7H$a 0 444  	!A,,Q//4G4M4Ma4P4PUW_`U`a=CAaAa&CsVFBAbB"vHCwB<D$$QrU++r		3tBw-(s2vw<DBqDEBRYYq#d, $AA$w !,R000' !. 	AA!t#!8K8Q8QRS8T8T%!A,'AcBGGAbqEN*+CsVFBAbB"vHCwB<DRYYDz*s2vw<DBqDEBRYYq#d, $AA$w !,R000 ( 9U#trB   c                 <   US   nUS:X  a  / $ [        U5      S:X  a  US   u  p[        U[        5      (       a  [        U	5      n	[	        X	XrX8R
                  UR                  XEU5
      n
U
(       aR  U
u  ppnnU(       a  [        O[        " X-   XU-   4/5      [        U[        5      (       a  [        O[        " XU4/5      /$  g [        XX#XEU5      n
U
(       aE  U
u  pnU(       a  [        O[        " U5      [        U[        5      (       a  [        O[        " U5      /$ g )Nr   r5   r4   )ry   rQ  r@  r  r  r   r   r<  r:  r4  r>  r8  r  )r  r  r`  r   r  r  r  ra  r  r<   ro  r  r  r  r  r   rg  s                    r@   _hyphenateFragWordr    s9   	AB	1uRi
2wz!ub&&QAzbHjj!**Ucy~&'#Brq!%'\[828QtH:MN`jkmnu`v`vP\  }G  QG  JL  PQ  MR  IS  PT  U  U   JH~chiHB1%'\[8!<jY[\cNdNdljt>tvw=xyyrB   c                       \ rS rSrSrg)
_SplitWordi  rW   NrY   rZ   r[   r\   r^   rW   rB   r@   r  r        rB   r  c                       \ rS rSrSrg)_SplitWordEndi  rW   Nr  rW   rB   r@   r  r    r  rB   r  c                       \ rS rSrSrg)_SplitWordHi  rW   Nr  rW   rB   r@   r  r    r  rB   r  c                       \ rS rSrSrSrg)_SplitWordHYi  z$head part of a hyphenation word pairrW   NrX   rW   rB   r@   r  r    s    .rB   r  c                       \ rS rSrSrSrg)r  i  z=a word that's forced to end with - because of paragraph splitrW   NrX   rW   rB   r@   r  r    rt  rB   r  c                   (    \ rS rSrSrS rSS jrSrg)_SHYStri  z for simple soft hyphenated wordsc                 F   UR                  [        5      n[        U5      S:  a`  [        R	                  U SR                  U5      5      nS/nUR                  nU H  nU" US   [        U5      -   5        M     USS Ul        U$ [        R	                  X5      n/ Ul        U$ )Nr4   r'   r   r   )rH   rD  ry   rE  rF  rc   r   __sp__)rH  r<   r
  rM  spasprS  s          r@   rF  _SHYStr.__new__  s    GGDMq6!8;;sBGGAJ/DB))CBrF3r7N# Qr(DK  ;;s&DDKrB   c           	         SU l         [        [        [        U R                  5      5      5       H  u  pgU SU n[        XX%5      n	U(       d  Xl         X9-   n
X::  d  M.  U R                  US [        U 5      /-   n[        [        U5      S-
  5       Vs/ s H  oX   XS-       PM     nn[        US-   5      nU R                  SU Ul        U[        [        R                  U5      5      /s  $    gs  snf )zW
baseWidth = currentWidth + spaceWidth + hyphenWidth
limWidth = maxWidth + spaceShrink
rY  Nr4   rP  )r]  r  rd   r   r  r
   ry   r  r  rD  rc   )rM  r   r   rd  limWidthencodingr  r  swswwswnwTrk  r
  s                 r@   __shysplit___SHYStr.__shysplit__  s    
 $DJ!$y'=">? #2Y!"Cs* #AB3t9+5A49#a&(ODOqad1qS6*OAD CB $BQBIwtyy|455 @ Es   C0)r  r]  NrD   )rY   rZ   r[   r\   r]   rF  r  r^   rW   rB   r@   r  r    s    *6rB   r  c                       \ rS rSrSrg)_SHYSplitHYi  rW   Nr  rW   rB   r@   r  r    r  rB   r  c                       \ rS rSrSrg)	_SHYSpliti  rW   Nr  rW   rB   r@   r  r    r  rB   r  c
                     US:X  a  / $ [        XXEXaX'X5
      n
U
(       a-  U
u  ppnnU(       a  [        O[        " X-   5      [        U5      /$ g r1  )r  r  r  r  )r  r   r   rr   ra  r`  r   r  r  r  ro  hyr  r  r  r   rg  s                    r@   _hyphenateWordr    sT    	1uRi:"H]pxA"#21a!#4ad;M!<LMM 	rB   c                    / nUR                   n[        U5      S-
  n	Sn
U[        X5         nU[        XS-   5         n[        U 5      (       a  U R	                  U5      n U  H[  n[        XXV5      nX-   nX:  a=  U
(       d  U
(       d/  X::  a*  U" [        U
5      5        US-  nUnU[        X5         nUnSn
X-  n
UnM]     U" [        U
5      5        U$ )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
r4   r'   )r   ry   r   r#   rF   r
   r  r  )rr   r  r  r  r   r   r  ro  r|  r  wordTextr   r  r  r  r  s                   r@   
_splitWordr    s     	A	
BIq IHY./HS!845LqzzHHXH6 | hxBDTz(#$aKF#H Y!67HLH 	  }XHrB   c                    [        U S   [        5      (       a  U S   nU SS  H  n[        X5      nM     U$ [        U S   [        5      (       ad  [        U S   [        5      (       a  [
        O[        nSR                  S U  5       5      n[        U S   [        5      (       a  U$ [        US-   5      $ SR                  U 5      $ )z-R can be a list of pure _SplitWord or _SHYStrr   Nr   r'   c              3   Z   #    U  H!  n[        U[        5      (       a  US S OUv   M#     g 7fNr   )rQ  r  r  rT  s     r@   r  $_rejoinSplitWords.<locals>.<genexpr>  s'     L!Qz!L99QsVq@!s   )+rP  )rQ  r  rU  r  r  rE  rc   )ro  rrT  cfr<   s        r@   _rejoinSplitWordsr    s    !A$waD1AA A 	AaD	&	&qum44S,GGL!LMqum44qM,qu:MMwwqzrB   c              #   Z  #    / nUR                   nU R                  X  Hr  nUS    Hf  n[        U[        5      (       a1  U" U5        [        U[        5      (       a  [        U5      v   US S 2	 MI  U(       a  [        U5      v   US S 2	 Uv   Mh     Mt     U(       a  [        U5      v   g g 7f)Nr4   )r   linesrQ  r  r  r  )blParar   stopro  r|  r  rr   s          r@   _yieldBLParaWordsr!    s     
A	
B\\%%1A!J''1a..+A..!+A..!G  & 	"" 	s   B)B+c                 l   U R                  5       nS H   n[        X45      (       d  M  [        X45        M"     [        [	        XU5      5      Ul        [        UR
                  S   [        5      (       a@  [        UR
                  S   [        5      (       a  [        O[        UR
                  S   l        U/$ )N)r  r   rI   r   )r  r   delattrrd   r!  r~   rQ  r  r  r  r  	__class__)r  r   r   r  rK  s        r@   _split_blParaSimpler%     s}    A&1<< '$V$78AG!''"+l++-7G-L-L	R^3JrB   c                 :   / nU R                   X nU GH  nUR                   H  nUR                  U5        M     XTS   Ld  M1  [        U5      S-
  nUS:  an  [	        X7   S5      (       a[  [        X7   R                  SS5      (       d=  US-  owS:  a3  [	        X7   S5      (       a   [        X7   R                  SS5      (       d  M=  US:  d  M  X7   nUR                  (       d	  SUl        M  UR                  S   S:w  d  M  U=R                  S-  sl        GM     U$ )Nr   r4   r   r   r   r1   )r  r~   r   ry   r   rx   r   rI   )	r  r   r   r  r  r  rr   r  r  s	            r@   _split_blParaHardr'  )  s    
ALL$EAHHQK "IAqAQ$71411'!$++gVW:X:XZ[_`Z`Z[Q$71411'!$++gVW:X:X!tDvvqvVVBZ_affmff  HrB   c                    UR                   nU(       d  UR                   S:w  Ga;  US:H  n[        U5      (       a  UnU=(       a	    [        U;   n	U	(       a  USUR                  [        5       n[	        XR
                  UR                  5      n
U	(       a+  U
S[	        [        UR
                  UR                  5      -  -  n
OSn
U H  nUR                  nU=(       a	    [        U;   n	U	(       aC  USUR                  [        5       nU
S[	        [        UR                  UR                  5      -  -  n
U
[	        XR                  UR                  5      -  n
U	(       d  M    O   OSn
US:X  a  U
S-  n
U[        USS5      -  nU(       d   U R                  UR                  U
-
  U5      nO4US   nXR                  -   UR                  U
-   -
  nU R                  X5      nUR                  UR
                  UR                  5        UR                  [        USUR                   5      5        [        U5      (       a  UR#                  U5        OeU H_  nUR                  UR                  UR                  5        UR                  UR                   5        UR#                  UR                  5        Ma     U R%                  U5        U(       d8  UR'                  5       UR                  S	-  -   n[)        XUR*                  -
  5      nU$ )
z:draw a bullet text could be a simple string or a frag listr   numericNr   r   r   bulletOffsetYbulletColor333333?)bulletAnchorr$   r   indexr
   bulletFontNamebulletFontSizerI   r   r   rx   	beginTextbulletIndentrightIndentr   r   r   textOutdrawTextgetXr   r   )canvasr|   r   
bulletTextr   rtlr-  r)  rg  qbulletWidthr  tx2r   bulletStart	bulletEnds                   r@   _drawBulletr?  8  s|   %%L
e  ')	)A.MQ.Aa//0!%a)=)=u?S?STK+{=%BVBVX]XlXl'm!mm+ KFF2 21177=12A3]AJJPQPZPZ)[#[[K{1jj!**EE1   X{c1{	WU?1--Eu11+=eDA---u/A/A+/MN{2KK$$e&:&:;WU=ABZJAKK

AJJ/Q[[)KK 
 OOC HHJ!5!5!;;	V(8(889MrB   c                    U (       a  [        U 5      (       a!  [        XR                  UR                  5      nO9SnU  H1  nU[        UR                  UR
                  UR                  5      -  nM3     UR                  U-   SUR                  -  -   nUR                  S:X  a  UR                  UR                  -   nOUR                  UR                  -   nXV:  a  US==   XV-
  -  ss'   ggg)z@work out bullet width and adjust maxWidths[0] if neccessary
    r   r,  r   N)r$   r
   r/  r0  rI   r   r   r2  r   r3  firstLineIndentr   )r8  r   r  r;  r  	bulletLenindents          r@   _handleBulletWidthrD  k  s     %z3G3GI]I]^K K{1661::qzzJJ  &&4sU=Q=Q7QQ	>>5 &&u'<'<<F%%e&;&;;FaLY/0L  rB   c                    / nSnX   nSn[        U 5      nS=px XV:  aX  X:  a  W	U   S:X  a  US-  oU:  a
  X   S:X  a  M  X:X  a)  US-  nXV:X  a  O&SnX   n
U
R                  n	[        U	5      nOOXV:  a  MX  X:X  a  gSn/ nSnSnX:  a  W	R                  SU5      nUS:  a  X:H    [        XU W
R                  U
R
                  5      nUU-  nX:  a>  U/ :w  a8  UU-
  nUR                  U   S:X  a  US-
  nUS-
  nUR                  U   S:X  a  M  O;US:  a  UnUS   U
L a  XS'   OXU4nUR                  U5        X:X  a  US-  nX:  a  M  GM5  )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   r4   r1   )NNNr5   N)ry   rI   r  r
   r   r   r   )rv  widthsr  lineNummaxWr  r  limr   rI   r  r  r   cLenr   rk  rr   s                    r@   splitLines0rK    s    EGoDA%jAC
c)US 0%1*%)S 0zQ4Hvv$i c :u #i		#e$AsAFDqM!**QZZ@AAIDyT2XAvffSk3&'C%aiG ffSk3& sAtqyA$QKAvQ% i+ rB   c                     U R                   nUR                  nXX:w  a  UR                  U5        UR                  n	Xi:w  a  UR	                  U5        UR                  XX45        g r   )r   
_lineWidthsetLineWidth_strokeColorObjsetStrokeColorr   )
rn   x1y1x2y2nlwnsccanvolwoscs
             r@   _do_linerZ    sS    ::D
//C
x#


C
xC IIbbrB   c           	         UR                   nUR                  nUR                  XR                  -  -
  nUR                  nUR
                  n	UR                  n
[        XU	S9nUR                  nXR                  R                  SR                  UR                   R                  U    S   5      UR                  U	5      -   U-   nU H  u  pnnnnnnUS:H  n[        UXR                  S9n[        UUSS9nUU-   nU(       d  U* nUU-   [        US:X  a  U(       a  SOSOUU5      -   nU(       d  U
nUS	:  d  Mr  UR                  UUUUUU5        UU-  nUS-  nUS	:  a  M(  M     g )
N)rg   r{  r  r1   r4   	underliner>   r'   -0.125*L0.25*Lr   )r   r   r   r   r  r   r   r   _defaultLineWidthr   r
   rc   r  r   rA   rZ  )r  rQ  r   rn   r   r   r   y0r  fstcvaluesdwrS  r  kr  rr   or  r?   r  r\  lwlgr   ys                              r@   _do_under_linerk    sR   	BHHE	AmmO	#B
A	
B	
BBb!F			B	jj$$SXXbll.@.@.CA.F%GWYZ	Z]_	_B#Aa!Aa{N	Qv&:&:;Qva(Us"FW2Ij8STU[\\b!cKKAr1b!,GAFA c $rB   z^[a-zA-Z][-+a-zA-Z0-9]+$c                 T   U(       d  g UR                  S5      (       a   U R                  R                  SUSS  USS9  g UR                  SS5      n[	        U5      S:H  =(       a    US   R                  5       =(       d    SnUS:X  a   U R                  R                  SUS   USS9  g [        R                  U5      (       aL  UR                  5       S	:H  =(       a    S
=(       d    SnUS
:X  a  US   nU R                  R                  XSUS9  g U R                  R                  XSSS9  g )N#r'   r4   )relative:r5   r   documentpdfGoToRURI)rn  r   )	
startswithr   linkRectrH   ry   lower
_scheme_rer8   linkURL)rn   r   rectpartsr  r   s         r@   _doLinkr{    s    s


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

3q!UQ358>>#39r:JJE!HdQ?f%%&27;eDW}U1XdJJtADAJJtAEBrB   c           
         UR                   nUR                  R                  nUR                  X-  -
  UR                  R
                  S-  -
  nSR                  UR                  U    S   5      nUR                  R                  XsR                  UR                  5      nUR                   H  u  p[        X:XX-   Xe-   45        M     g )Ng       @r1   r4   )r   r   r   r   r  r   rc   r  r   r
   r   r   r   r{  )r  t_offr   rn   r   r   rj  rI   textlenr  r   s              r@   _do_link_liner    s    	BhhG
19rtt}}S00A88BHHQKN#Djj$$T<<FG775U]AI>? rB   c                    U R                   nUR                  nUR                  nUR                  R                  nUR
                  nUR                  nUS:X  a  [        USU-  5      nOUS:X  a  SU-  nUR                  (       af  X&-   nXt-
  nUR                   H@  u  pnU R                  R                  U5        U R                  R                  XX-
  USSS9  MB     / Ul        S Ul        [        UR                  R                  5       5       H!  u  u  u  u  ppp[!        XXU-   XU-   45        M#     0 Ul        UR"                  (       a  U R$                  n['        US9n[        UR"                  R                  5       5       H  u  u  u  u  nnnnnnnnnnn	nn
US:H  nUUS	'   UUS
'   [)        UUU R$                  S9n[)        UUSS9nUU-   nU(       d  U* nUU-   [)        US:w  a  UO
U(       a  SOSU5      -   nU(       d  UnUS:  d  M  U R+                  U	UU
UUU5        UU-  nUS-  nUS:  a  M(  M     0 Ul        U=R                  U-  sl        g )Nr   r   r   r   r4   )strokefillrf   r\  r  r{  r]  r'   r^  r_  )r   r   r  r   r   r   r   r   r   r   r   ry  r   sortedr   rd  r{  r   r`  r   rA   rZ  ) rn   r   ra  r  r   r   r   ylydescrQ  rS  r  r  r   r  r  re  rd  rf  rr   rg  r  r?   r  rb  rc  r  r\  rh  ri  r   rj  s                                    r@   _do_post_textr    s6   	B	B
AhhG..KzzHEgc(l+	e	h,	}}]}}GB!JJ##A&JJOOBRU7!OC % $*288??+<$= (12"2"ubR%01 %>BH	{{!!!7=bkk>P>P>R7S30)q1Qq1Q2b%;IF3KF3K6"*>*>?B6!,BBBB3bQae	*xY_``A"aA#B2q"a0RQ A# 8T HHHrB   c                    UR                   nU(       Gag  UR                  5       nUS:X  a  [        R                  nOMUS:X  a  [        R                  nO6US:X  a  [        R                  nOUS:X  a  g [        SUR                   -  5      e[        U 5      nUS:X  a  U" U S   R                  5      U S   l        g U[        R                  L a  SnU  H|  nUR                  nU(       d  M  UR                  S	5      (       d  U(       a	  U" U5      nO'UR                  S	5      nUS:  a  US U U" XgS  5      -   nUR                  S	5      nXel        M~     g U  H%  nUR                  nU(       d  M  U" U5      Ul        M'     g g )
N	lowercase	uppercase
capitalizenonez+ParaStyle.textTransform value %r is invalidr4   r   Tr1   )textTransformrv  rE  uppertitle
ValueErrorry   rI   rt  r  r  )rv  r   ttr  pbr  rI  r  s           r@   textTransformFragsr  %  s>   			B	88:{?B_B,BZJUM`M``aaJa4uQx}}-E!HM399_BFF(<<$$1AsA!tbqE"QrU)OZZ_  FF(A = 
rB   c                   B    \ rS rSrSrS r\" S 5      r\" S 5      rSr	g)cjkUiJ  z4simple class to hold the frag corresponding to a strc                     [         R                  X5      nX$l        [        US5      (       a  [	        UR
                  SS5      nXTl        U$ [        XR                  UR                  5      Ul        U$ )Nr   r   r   )
rE  rF  _fragr   rx   r   _widthr
   r   r   )rH  valuefragr  rM  rr   s         r@   rF  cjkU.__new__L  s]    {{3%
4!!GA.AK  &eMM$--HDKrB   c                     U R                   $ r   )r  rM  s    r@   r   cjkU.<lambda>U  s    rB   c                     U R                   $ r   )r  r  s    r@   r   r  V  s    $++rB   )r  r  N)
rY   rZ   r[   r\   r]   rF  propertyr  r   r^   rW   rB   r@   r  r  J  s"    > +,D-.ErB   r  c                    / n/ n[        5       nS=n	=pU  GH#  nUR                  nUR                  nU(       ah  [        USS 5      n[        USS5      (       a/  [	        [        UR                  U5      UR                  U5      u  nnO3[        UR                  U5      u  nnO[        UR                  U5      u  nn[        X5      n	[        U
U5      n
[        UU5      n[        X5      (       d;  UR                  5       nSR                  U5      Ul        UR!                  U5        / nUnUR!                  U5        GM&     U(       a7  UR                  5       nSR                  U5      Ul        UR!                  U5        [        SUSUSS  XXX$S9
$ )Nr   r   r   r'   r4   )
r   r  r   r~   r   r   r   r   currentWidthr,  )r   r  r   rx   r   r   r   r   r   r   r   r   r%   r  rc   rI   r   )r  r   	widthUsedr  r,  
calcBoundsr~   CWr  maxSize	maxAscent
minDescentrI  r  r   r   r   r   s                     r@   makeCJKParaLiner  X  se   E	B	B'((G(iFF::Qx-Fvga(("+HV]]8,LV]][c"d"21::h"G.qzz(COFGg'	&)	G,
~~xxzBggbkBGLLBB
		!) * 
88:''"+Rj159V]  xB  bk  @  @rB   c                   ^ / mU  H  nUR                   n[        U5      (       a  UR                  U5      nU(       a.  TR                  U Vs/ s H  n[	        XdU5      PM     sn5        Me  TR                  [	        XTU5      5        M     / nS=n=pUS   n[        T5      nX:  Ga  TU   nUS-  nUR                  n[        US5      (       a  Xl	        UR                  U5      nX-  n	[        UR                  S5      nX[        -   :  =(       a    U	S:  =(       d    UnU(       a  X-
  nU(       d  [        U5      S:  a  X-   S-	  n[        US-
  US5       Hy  nTU   nU(       a  [        U5      S:X  d  [        U5      S:  d  M/  US-   nUU:  d  M<  US-   nU[!        U4S j[        UU5       5       5      -  nTU   R                  nTU   nUn  O   U["        ;  a  XS-   :  a
  US-  nUU-  nUR                  [%        TX XUX5      5         U[        U5         nUn
Sn	X:  a  GM  U	S:  a#  UR                  [%        TU
S	 XX-
  S
U5      5        [)        SUS9$ s  snf ! [&         a    US   n NUf = f)z@This attempts to be wordSplit for frags using the dumb algorithmr   r4   r   r,  i 0  r   Zsc              3   B   >#    U  H  nTU   R                   v   M     g 7fr   )r   )r  iir  s     r@   r  cjkFragSplit.<locals>.<genexpr>  s     1S
"!B%++
s   NFr   r  )rI   r#   rF   rR  r  r   ry   r   r   r  r   r  r   ordr  r	   r!  r   r  
IndexErrorr   )rv  r  r  r  r  rI   rg  r  r  r  lineStartPosr   nUrI  rr   r,  endLiner  
limitCheckrk  ujrf  r  s                         @r@   cjkFragSplitr  x  s   
Avv4==;;x(DHH$7$Qd1x($78HHT$*+  E#$$A$	|H	QB
$aD	QGG1&''$M!!(+A	AFF;/	--=)A+K)!-Jq6&= #/.1!4J"1Q3z"5qT(2,"4B !!A s$%aC *c1SaPQ
1S.S S
$%aDJJ$%aD$% % 6& ,,>1A FA!OJLL<):8jYbno)$SZ0 LIu $z 1}_Q|}%5hI[\ablmn!%((O 8z  )$R=)s   I
I" "I43I4c                 "   UR                   U l        [        USS5      U l        [        USS5      U l        [        USS5      =(       d    SU l        [        USS5      U l        [        USS5      U l        [        USS5      =(       d    S	U l        g )
NunderlineColorr'   underlineWidthunderlineOffsetz-0.125fstrikeColorstrikeWidthstrikeOffsetz0.25f)	rM  r`  rx   _underlineColor_underlineWidth_underlineOffset_strikeColor_strikeWidth_strikeOffset)rn   r7  r   s      r@   _setTXLinePropsr    s    !,,B '7;B '7;B!%(9"=JBeM"5BOeM"5BOu^B7B7BrB   c                       \ rS rSrSrSS jrS rS rS rS r	S	 r
S
 rS rS rS rS rS rSS jrSS jrS r\SS j5       rSrg)r   i  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.
Nc           	          Uc	  [        SS9nXPl        X`l        U R                  XU=(       d    [	        USS 5      U[
        5        g )NparagraphImplicitDefaultStyle)r   r8  )r   caseSensitiver  _setuprx   r   )rM  rI   r   r8  rv  r  r  s          r@   __init__Paragraph.__init__  s?    ="(GHE* D!Owu\$/OQVXlmrB   c                    U R                   R                  nUS-   /n[        U R                  R	                  5       5      nU Hv  nUR                  [        U5      R                  SS5      R                  SS5      < S[        [        X5      5      R                  SS5      R                  SS5      < 35        Mx     UR                  SU-   5        SR                  U5      $ )N(r)   r1     z: z) #)
r$  rY   rd   __dict__keysr   reprreplacerx   rc   )rM  r  rg   r  rf  s        r@   __repr__Paragraph.__repr__  s    NN##sUGDMM&&()AHHas!;!C!CD!MdSZ[_ScNdNlNlmqsvNwNN  AE  FI  OJ  K  L 	qyy|rB   c                 R   Uc  U" U5      n[        5       nU R                  Ul        UR                  X5      u  p$nUc7  [        SUR                  S   < SUS [        S[        U5      5       < S35      e[        XB5        U(       a  UnXl        X@l	        X l
        X0l        SU l        g )Nzxml parser error (r   z) in paragraph beginning
'   r   )r   r  parser  errorsr   ry   r  rI   rv  r   r8  debug)rM  rI   r   r8  rv  cleaner_parserbulletTextFragss           r@   r  Paragraph._setup"  s    
 =4=D lG$($6$6G!,3MM$,E)E/} ~~a(.@s2c$i/@)A"C D Du+_
 	

$
rB   c           	         U[         :  a  gXl        U R                  nUR                  nXUR                  -   -
  UR
                  -
  nX-
  UR
                  -
  nXV/U l        UR                  S:X  a  U R                  U R                  5      nOU R                  U R                  5      nXpl
        [        U S[        USS5      5      nUR                  n	UR                  S:X  a  US;  a  Sn
US:X  a:  UR                   H)  nU
[        UR                   UR"                  -
  U	5      -  n
M+     OUS	:X  a/  UR                   H  nXR                   UR"                  -
  -  n
M      O[%        S
U-  5      e['        UR                  5      U	-  n
O`US:X  a#  [        XR                   UR"                  -
  5      n	OUS	:X  a  UR                   UR"                  -
  n	['        UR                  5      U	-  n
Xl        U R                  U
4$ )N)r   rY  CJKr   r'   r4   r'   offr   r   r   invalid autoLeading value %r)r   r   r   r   rA  r3  _wrapWidthsr   breakLinesCJK
breakLinesr  rx   r   r   r  r   r   r   r  ry   r   )rM  
availWidthavailHeightr   r   first_line_widthlater_widthsr  r   r   r   r  s               r@   wrapParagraph.wrap9  s   e 


%%
%E4I4I)IJUM^M^^!.1B1BB,;>>U"''(8(89F__T%5%56Fd=}R1PQ--;;>*,%#\\#ahhqyy&8"AA * %'#\\((QYY"66 * %%Ck%QRRV\\*W4E!gmmFNN&BCe# --6&0Fzz6!!rB   c                   ^^ U R                   n[        U5      nU(       d  gUS:X  a}  [        U5      (       dm  US   nUR                  mUR                  m[        UU4S j[        US5      (       a  [        UR                  S5       5       5      $ UR                   5       5      $ [        S [        U5       5       5      $ )z-Attempt to determine a minimum sensible widthr   r4   c              3   >   >#    U  H  n[        UTT5      v   M     g 7fr   )r
   )r  rr   fNfSs     r@   r  %Paragraph.minWidth.<locals>.<genexpr>k  s     l6j{1R++6js   rI   r1   c              3   *   #    U  H	  oS    v   M     g7f)r   NrW   )r  rr   s     r@   r  r  m  s     :%9t%9s   )rv  ry   rw  r   r   r   r   rH   rI   r~   r  )rM  rv  nFragsr  r  r  s       @@r@   minWidthParagraph.minWidthb  s    

E
a19-e44aABBlGTUV\L]L]eAFFC6H6jlllcdcjcj6jlll:]5%9:::rB   c                    U(       d  / $ UR                   nXB   R                  nU[        U5      :w  a  XC   R                  O[        U R                  5      nU R                  XV nU(       a<  [	        US   [
        5      (       a$  US	 U(       a  [	        US   [
        5      (       a  M$  [	        US   [        5      (       a,  [	        US   [        5      (       a  [        O[        US   l
        U$ r  )r  sFWry   rv  rQ  r6  r<  rW  r_  r@  r$  )rM  r  r   r   r  r  sFWNr{  s           r@   _split_blParaProcessed Paragraph._split_blParaProcessedo  s    BYl"&E
"2u{DJJJJs Jqu]332aJqu]33aeL)),6quX,F,FjLAbEOrB   c                     U R                   R                  S:X  a  [        $ [        U R                  5      (       d  [
        $ U R                  $ r1  )r  r   r%  rw  rv  r'  r  r  s    r@   _get_split_blParaFuncParagraph._get_split_blParaFuncz  sA    '+{{'7'7':# 	;3CDJJ3O3O+	;!88	;rB   c           
         [        U R                  5      S::  d  U[        :  d
  U[        :  a  / $ [        U S5      (       d  U R	                  X5        U R
                  nU R                  n[        U S[        USS5      5      nUR                  nUR                  nUR                  S:X  a  US;  a  S=pUS:X  aW  [        UR                  5       H=  u  p[        UR                  UR                  -
  U5      nX-   nXS-   :  a    OUn	U
S-   nM?     OUS	:X  aK  [        UR                  5       H1  u  pXR                  -   UR                  -
  nXS-   :  a    OlUn	U
S-   nM3     O`[        S
U-  5      eUnUS:X  a  [        USUR                   -  5      nOUS	:X  a  SUR                   -  n[#        U[%        U5      -  5      nX-  n	[        U S[        USS5      5      nU(       d  US::  d  US:X  a  U ?/ $ [        U5      n[        U S[        USS5      5      nX::  a  U /$ U(       d%  XS-   :X  a  U(       a  US:X  d  US:  a  US-  nOU ?/ $ U R'                  5       nUR(                  (       a  [+        U5      nS Ul        OUnU R-                  S UU R.                  U" USU5      S9n[1        SUR                  SU X!S9Ul        [3        UR                  US-
     [4        5      =(       a?    [        UR                  US-
     S5      =(       a    UR                  US-
     R6                  (       + Ul        SUl        U	Ul        UUl        UR@                  S:w  a  [+        U5      nSUl         U R-                  S US U" X8U5      S9nS HD  n[        U U5      (       d  M  [C        UU[        U U5      5        [C        UU[        U U5      5        MF     UU/$ )Nr   r  r   r'   r4   r  r   r   r   r  r   allowOrphansallowWidowsrx  )r8  rv  )r   r  aHr  r,  )r   )"ry   rv  r   r   r  r  r   rx   r   r  r   r   r   r   r   r  r   r  r9   r  r   r   r$  r8  r   rQ  r   r,  _JustifyLast
_splitparar   r   rA  setattr)rM  r  r  r  r   r   r   r  r<   r   r  r  r   r  r  r  r  style1P1P2rK  s                        r@   rH   Paragraph.split  s   tzz?AE!1[5Fr	 tH%%IIj-

d=}R1PQ--;;>k;NAE!$V\\2CAAHHQYY.w7AAT))F!A 3 e#$V\\2CAxx		1AT))F!A 3 !!?+!MNNAE!ENN 23e#&Ka()ASFtN75PQ3RSA!Q$IJd=}Q1OP46MA#v QTacFAI))+==e_F!FNF>>$vtFSTUVGW>X16<<!+<Z	  *&,,qs*;HE  @$+FLL1,={$K @$*LL1$5$?$?A 	  A%UOE$%E!>>$u4;K>LAtA1WT!_-1WT!_-	 2wrB   c                 :    U R                  U R                  5        g r   )drawParar  r  s    r@   drawParagraph.draw  s     	djj!rB   c                 r$   SU l         [        U[        [        45      (       d  U/nOUn/ nS=U l        n[        U5      S-
  nU R                  n[        [        UR                  5      R                  5      n[        USS5      nU(       as  [        U5      (       aD  UR                  5       nU(       a*  [        (       a  [        R                  " US9R                   nO$SnO![#        U5      (       d  [%        SU-  5      eOSnUR&                  n	UR(                  n
U
S:  nUR*                  nUR,                  nU=(       d    U	=(       d    U
nU(       a  [        US[.        5      nS=U l        U l        [5        U R6                  Xb5        US   n[        U S	[        US	S5      5      nUS
;  nU R8                  n[        U5      nUS:X  Ga  UR:                  (       Gd
  [=        US   S5      (       Gd  [=        US   S5      (       Gd  [?        U5      (       Gd  U(       Gd  US   nUR@                  nUR                  n[C        UU5      u  nn[=        US5      (       a;  [        URD                  5      nU(       d  URG                  S/ UUUS9$ [I        U5      nO=URJ                  SS nU H  n[        U5      (       d  M    O   URG                  S/ UUUS9$ [M        SUUU RN                  5      nUU-  n/ nU* n [M        SUUU RN                  5      n!Sn"U(       Ga  URQ                  S5      n#U#(       d  [        U#[R        5      (       a  Sn"O[T        U#;   a  [W        U#5      n#[M        U#UUU RN                  5      n$U U-   U$-   n%UU[        U5      -  -   n&U%U&:  Ga5  [        U#[X        5      (       Gd  U"(       Gd  [        U#[V        5      (       a  U#R[                  UUU U-   U!-   S-
  U&U RN                  S9n'U'(       a  U'USS& U =R2                  S-  sl        Sn"GM  [        U5      (       aa  U[]        XT5         n(U(       d  U#R^                  U!-   S-   U(::  a6  U#R[                  UUSU!-   S-
  U(U RN                  S9n'U'(       a  U#/USS& Sn"Sn#U n%OU(       a  [        USS5      (       + n)[a        U)(       a  UOSUUU#U$U%U&U)(       a  U	OSU
=(       a    U)W5
      n'U'(       a  U'USS& U =R2                  S-  sl        Sn"GM  U(       aR  [        U5      (       aB  [a        U)(       a  UOSUUU#U$U$UU)(       a  U	OSU
=(       a    U)U5
      n'U'(       a  U#/USS& Sn"U n%Sn#U(       av  [        U#[R        5      (       da  U"(       dZ  []        XE5      n*U$[c        UU*U*S-    5      :  a:  [e        U#U U-   X$UUU RN                  5      USS& U =R0                  S-  sl        Sn"GM  U%U&::  d  [        U5      (       a  U"(       aj  U#(       a  URg                  U#5        U"(       aH  Sn"U%U R                   :  a  U%U l         URg                  UU%-
  U45        / nU* n US-  nU[]        XT5         nOHU%n OEU U R                   :  a  U U l         URg                  UU -
  U45        U#/nU$n US-  nU[]        XT5         nU(       a  GM  U/ :w  a-  U U R                   :  a  U U l         URg                  UU -
  U45        URG                  SUUUUS9$ US::  aD  [i        SUR@                  UR                  URj                  UR@                  SUR@                  -  / S9$ URl                  (       + n+/ n/ n,U,Rf                  n-[o        UU5      n.U(       a  U. V/s/ s H  n/[q        U/5      PM     n.n/Sn0U.(       G
a_  U.RQ                  S5      nU-" U5        US   S   nUR                  nUR@                  nU(       d  S=n1=nn Un2[C        UU5      u  n3n4US   n$US   S   nU$S:  a	  W W-   U$-   n%OW n%URr                  [t        :H  n5Un&U(       av  Wn6U Hd  n7U7Rr                  [v        :X  d  M  U7RD                  Ry                  S5      n8U8(       d  M=  U6U8[M        SU7R                  U7R@                  5      -  -  n6Mf     U6U-  n6U&U6-  n&U5(       Gd$  U%U&:  Ga  [        U[z        5      (       Gd  [=        US5      (       Gd  [        U[|        5      (       Ga  UR                  U%U&5      n'U'(       a_  U'U.SS& U.R                  S[        SURG                  [t        SS9S4/5      5        U,RQ                  S5        U =R2                  S-  sl        GM  [        U,5      S:  a{  U[]        XT5         n(U(       d  UR^                  S-   U(::  aS  UR                  U$U(5      n'U'(       a:  [        SURG                  [t        SS9S4/5      U/U.SS& U,RQ                  S5        GM^  GO/U(       Ga'  [        USS5      (       + n)[        U)(       a  UOSUU%U&U)(       a  U	OSU
=(       a    U)W5      n'U'(       a_  U'U.SS& U.R                  S[        SURG                  [t        SS9S4/5      5        U,RQ                  S5        U =R2                  S-  sl        GM  U(       a|  [        U,5      S:  am  [        U)(       a  UOSUU$UU)(       a  U	OSU
=(       a    U)U5      n'U'(       a:  [        SURG                  [t        SS9S4/5      U/U.SS& U,RQ                  S5        GM  U(       a  [        U[        5      (       d  []        XE5      n*U$[c        UU*U*S-    5      :  ap  [        UUW-
  U -
  X$5      U.SS& U.R                  S[        SURG                  [t        SS9S4/5      5        U,RQ                  S5        U =R0                  S-  sl        GM;  U%U&:  =(       a    W1S:  =(       d    U5n9U9(       Gdk  U5(       a  GMg  US   S   n:U:(       a  W1S-  n1UR@                  nU(       aq  URr                  [        :X  aC  [        [        UR                  R                  U5      UR                  R                  U5      u  nnO3[C        UR                  U5      u  nnO[C        UR                  U5      u  nn[c        W2U5      n2[c        W3U5      n3[]        W4U5      n4U(       d  URG                  5       n;U;/nU:U;l"        GO[        W;U5      (       d  W(       ap  [        U5      S-
  n<U<S:  a\  UU<   n7U<S-  n<U7Rr                  [v        :X  a6  U7RD                  R                  S5      (       d  U7=RD                  S-  sl"        OU<S:  a  M\  URG                  5       n;URg                  U;5        U:U;l"        OkW(       aO  U;RD                  R                  S5      (       d  U;=RD                  SU:-   -  sl"        O+U;=RD                  U:-  sl"        OU;=RD                  U:-  sl"        [        U[        5      (       a  [M        SUU5      OSnSn=USS  GH  n<U<S   RG                  5       n;U<S   U;l"        U;RD                  (       a  Sn=URg                  U;5        U;R@                  nU(       aq  U;Rr                  [        :X  aC  [        [        U;R                  R                  U5      U;R                  R                  U5      u  nnO3[C        U;R                  U5      u  nnO[C        U;R                  U5      u  nn[c        U2U5      n2[c        U3U5      n3[]        U4U5      n4GM	     U:(       d  U=(       a  W1S-  n1U%n GOU5(       a@  URG                  5       n;URg                  U;5        U+=(       a    [        U[        5      (       + n>OSn>U U R                   :  a  U U l         URg                  [        UU -
  W1U>UW2W3W4UU0S9	5        [        U,5      S-
  n0US-  nU[]        XT5         nU5(       a  / nGMx  [        U[        5      (       a  [M        SUU5      OSnUU-  nU$n Sn1URG                  5       n;U;R@                  n2U(       aq  U;Rr                  [        :X  aC  [        [        U;R                  R                  U5      U;R                  R                  U5      u  nnO3[C        U;R                  U25      u  n3n4O[C        U;R                  U25      u  n3n4U;/nUS   S   U;l"        USS  H  n<U<S   RG                  5       n;U<S   U;l"        URg                  U;5        U;R@                  nU(       aq  U;Rr                  [        :X  aC  [        [        U;R                  R                  U5      U;R                  R                  U5      u  nnO3[C        U;R                  U5      u  nnO[C        U;R                  U5      u  nn[c        U2U5      n2[c        U3U5      n3[]        U4U5      n4M     U.(       a  G
M_  U(       a:  W U R                   :  a  U U l         URg                  [i        UU -
  W1SUW2W3W4UU0S9	5        U,U l        [i        SUS9$ s  sn/f )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   r4   hyphenationLangr'   )langNzLhyphenator should be a language spec or a callable unicode -->  pairs not %rr!   r   r  r   r   rI   )r   r  r   r   r   r1   rP  r   )r  nobrF皙ɿ)r   r   r   r   r   r   r  r   )r  rI   r5   )	r  r   r,  r~   r   r   r   r   r  r  )N
_width_maxrQ  r  rd   r   ry   r   r  r   r   isShapedrx   r$   r7   pyphenPypheniteratecallabler  r  r  spaceShrinkagesplitLongWordsr!   _splitLongWordCount_hyphenationsrD  r8  rv  r   r   rw  r   r   rI   r  rH   r~   r
   r  popr  rD  r  r  r  r   r]  r  r   r  r   r   r   justifyBreaksr  r   r  r  r  rq   r:  rW  rp  r  r6  r  r8  r  r  r   r   r   r   r%   r  r4  r   )?rM  r   r  r  r  r  r   shapingr  r  r  hyphenation2r  r  attemptHyphenationr  r   r   r  rv  r  r  r   r   r   r   rI   r~   rr   
spaceWidthdSpaceShrinkcLiner  hywforcedSplitwordr  r`  r  hswnMWhyOknmwnjlbvr  aFW_wordsrT  r  r  r  r  r  r,  spaceShrinkwinsr  nTextr  r  nillbs?                                                                  r@   r  Paragraph.breakLines  s_   @ %t--E7yi  f	N1$	

wu~~.778U#4R8
Z  '--/
&&!'J!?!G!GJ!%Jj)) !or|!|}} * J--#77*1,----'P>P=PE"<=UVE899 4#5 	4??5;Q<d=}R1PQ 
2


E
AI'%(8*D*DPUVWPXYdHeHe/66'aAzzHzzH.xAOFGq  QVV}776'[c7dd!$KE
AQxx  776'[c7dd$S(HdmmLJ)*4LE&;Lc8Xt}}ECKyy|
4
 ; ;"#KT\"4=D'h$--P	'*4y@#l3u:&==H$jk.J.Jk!$w//"// (( ,z 9C ?$ F (+/==	 0 " ),E!AJ ..!3.*+K$ ZZ"+C	,A"BC+

3t0Cc/I&*&7&7$,h$%GdN$'/3}}	 '8 '& $'26E!AJ23K+/D/;H+#*1VE#::,4ZT ((D)Xx6:N$7$@D%I ),E!AJ ..!3.*+K$)c%jj"0t ((D)YPX6:N$7$@D%#IC  #.2Va
./+7'+%z$z/J/Jk!&3$S3s1u)=%>>)3Dj9PQZbjkstx  uB  uB  *CE!AJ 4494*+K$X%SZZ;U\\$/"&'#doo5th&95%AB "(2{!#,S-B#C'/#doo5tLL(\"95!AB!FE#,LaKF(Y)>?Hq %v by/<h5u=>77fWV^7__QY!ennu~~&+ooennUYZ_ZhZhUh"$& & +++EEB))C"52FF!CFq-"2F!CCJJqMAbE!H::::455A5
\&G,<Xh,O)IzaD	aDGQ;+j89DH+H HHi/	#!",K#99h.!#s!3B!r +r+c"++bkk2Z/Z Z	 $
  >1K+H Xh%6z!K?X?Xahijksatat!!H--ll8X>*-F1QK"MM!M1aggY\^g>_`b=c:d,efFF2J ..!3.$ WQY"+C	,A"BC+qwwt|S/@&'ll9c&B#&3@!QWWT]ceWEfgiDjAk3lmn2oF1QK$&FF2J$,+#*1VE#::0t$%hx6:N$7$@D%I *-F1QK"MM!M1aggY\^g>_`b=c:d,efFF2J ..!3.$)c"gai"44ZT())H:>E(;(De#MC  #/<aPY_aAbce@f=g/hij.kq "r
 (%j:.F.F!&3$S3s1u)=%>>*88J;N|;[\e*mF1QK"MM!M1aggY\^g>_`b=c:d,efFF2J 4494$#H,41B (aDGEa1fa zzH!88W,-6xPX7YZ[ZbZbZiZijr-sNGF.>qzz(.SOFG*:1::h*O!'(3G #If 5I!$Z!8J GGI!"!&%a]]% #E
1A"#Q$%*1X !Q#%99h#6+-77+;+;C+@+@(*3$) #$Q$ GGIQ!&# vvs33FFcEk1FFFeOF%GQRST[G\G\S(!CbcJBqrUaDJJL t662Q#$::% xx01:8AHHOOT\;]^_^f^f^m^mnv1w2B1::h2W.>qzz(.SOFG"%gh"7$'	&$9	%(G%<
 #  !R1#+L GGIQ#GJq,G(G##DOO3|T_LLXl5JVW25UW]fpz  FN,/"1 2 b'!)C aKF(Y)>?H  " GQRST[G\G\S(!CbcJ#-n#<L#,LA	AjjG!88W,-6xPX7YZ[ZbZbZiZijr-sNGF4DQZZPW4X1Iz0@G0T-	:CEqT!WAFqrUaDJJL tQ#$::% xx01:8AHHOOT\;]^_^f^f^m^mnv1w2B1::h2W.>qzz(.SOFG"%gh"7$'	&$9	%(G%<
 #y &Z /<Y8l3JVWbg*/'[eow|A BDJ!511i "Ds   "AH4c           
      <   [        U[        [        45      (       d  U/nU R                  nSU l        [        U R                  X!5        U R                  n[        U5      nUS:X  Ga  [        US   S5      (       d  UR                  (       d  US   n[        U S5      (       a6  [        U SS5      (       a$  UR                  SU R                  R                  S9$ / nSn[        US5      (       a  UR                  nOSR!                  [        US	/ 5      5      n[#        XUR$                  UR&                  5      nU V	V
s/ s H	  u  pX/4PM     nn	n
UR                  SXR&                  S
UR&                  -  S9$ US::  aD  [)        SUR&                  UR$                  UR*                  / UR&                  S
UR&                  -  S9$ [        U S5      (       a  [        U SS5      (       a  U R                  $ [        U S[        USS5      5      nUS;  n[-        X1U5      $ s  sn
n	f )zRInitially, the dumbest possible wrapping algorithm.
Cannot handle font variations.r   r4   r   r  r  r  rI   r'   r~   r  )r   r  r   r   )r   r   r   r   r  r   r   r   r  )rQ  rd   r  r   r   rD  r8  rv  ry   r   r   rx   r  r  r  rI   rc   r   r   r   r   r   r  )rM  r  r   rv  r  r  r  r  rI   r  r   wrappedLinesr   r  s                 r@   r  Paragraph.breakLinesCJKz	  s    )T%L11	{9

 	4??E=

U19WU1Xh77aAtH%%'$|A*F*FwwAT[[->->w??EFq  vvwwwq45dqzz1::FE
 <AA5ZbRL5LA77jjRVWXWaWaRa7bbQY!ennu~~&+ooRu~~^bchcqcq^qs s 4!!gd<&B&B;;d=}R1PQ 
2
Ej99 Bs   ;Hc                 8    U R                   R                  X5      $ r   )rW  r1  )rM  rL  rj  s      r@   r1  Paragraph.beginText	  s    yy""1((rB   c           	         U R                   nU R                  nU R                  nUR                  nUR                  n[        U S[        USS5      5      nUR                  nUn	U(       a  Sn
[        SSS5      n[        SSS5      nO&[        USS5      n
[        US	S5      nUR                  nU(       d  U(       Ga  U
(       Ga  UR                  5         UR                  n[        SSS
9nU(       aY  U
(       aR  UR                  U5        UR                  U
5        SUS'   [        USS5      nU(       a  U(       d  UR                  nXS'   U(       a  UR                  U5        SUS'   [        USS5      n[!        U5      u  nnnnU" UU-
  U* U R"                  XR$                  -   -
  U-   U-   U R&                  U-   U-   40 UD6  UR)                  5         [+        U5      nU R,                  nUS:  Ga  [        U SS/5      nUU[+        U5      -
  US   /-  -  nUR                  5         UR.                  nUR0                  US   -   nUS-
  n[        U SS5      (       + nUR2                  nUR4                  S:H  nU=(       a    U R6                  =(       d    SnUR8                  S:X  Ga  U[:        :X  a  [<        nO?U[>        :X  a  [@        nO.U[B        :X  a  [D        nOU[F        :X  a  U(       a  [H        O[J        nUn [L        (       a  U R&                  U RN                  -
  n!O$U R&                  [        U SU RN                  5      -
  n!U(       a  [Q        UUU!UUUS9nUR                  U RR                  5        U RU                  U	U!5      n"SU RV                  RX                  R[                  5       ;   U"l.        US:X  a#  [_        XdR`                  URb                  -
  5      nOUS:X  a  UR`                  URb                  -
  nU R                  R4                  U"l2        U"Rg                  U Rh                  U RN                  U5        US   S   n#US   S   n$U=(       a    US:H  n%U%(       a  U(       a  [+        U$5      U:  a  Sn%W" U"UU#U$U%5      n&U Rj                  (       d  U Rl                  (       Ga  [o        [p        U"5      U"l8        [s        5       =U"l:        =n'U"l;        [y        U"X#5        U!U'l=        U U'l>        UU'l        UU'l        U Rl                  U'l6        U RR                  U'l)        / U'l?        U&U-   n(U[F        :w  d  U%(       a  Sn#U Rj                  (       a  [        SU(U#U"U Rj                  5        U Rl                  (       a  [        SU(U#U"5        [        SU5       H  n)UU)   S   n#UU)   S   n$U=(       a    U)U:H  n%U%(       a  U(       a  [+        U$5      U:  a  Sn%U" U"UU)   U#U$U%5      n&U&U-   n(U[F        :w  d  U%(       a  Sn#U Rj                  (       a  [        U)U&U#U"U Rj                  5        U Rl                  (       d  M  [        U)U(U#U"5        M     GO[        SU5       HM  n)UU)   S   n$U=(       a    U)U:H  n%U%(       a  U(       a  [+        U$5      U:  a  Sn%U" U"UU)   UU)   S   U$U%5        MO     GOU(       a   U H  n*U*R                  SSS2   U*lC        M     US   n [L        (       a  U R&                  U RN                  -
  n!O$U R&                  [        U SU RN                  5      -
  n![        nU(       a  Un+[Q        UUU!UUUS9nU[:        :X  a  [        nOWU[>        :X  a  [        nOFU[B        :X  a  [        nO5U[F        :X  a  U(       a  [        O[        nO[        S[        U5      -  5      eU RU                  U	U!5      n"SU RV                  RX                  R[                  5       ;   U"l.        [y        U"X#5        [o        [p        U"5      U"l8        U R                  R4                  U"l2        [s        5       =n'U"l;        SU'l)        SU'l        SU'lK        / U'l?        0 U'l5        0 U'lL        0 U'l6        UR                  U'l        UU'l        SU"lM        SU"lN        U!U'l=        U U'l>        UU'l        UU'lO        U R"                  U'lP        Su  U"lQ        U"lR        US   n*U=(       a    US:H  n%U%(       a  U(       a  U*R                  U:  a  Sn%U" U"UU*U%5        [        U"5        [        SU5       HO  n)UU)   n*U=(       a    U)U:H  n%U%(       a  U(       a  U*R                  U:  a  Sn%U" U"UU)   U*U%5        [        U"5        MQ     UR                  U"5        UR)                  5         gg)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   r4   r   g?borderWidthNborderColor)r  r  r  borderRadiusradiusr  borderPadding_offsetsr   r  Fr   r   )r9  rw   r   r   zbad align %s)NN)VrW  r   r  r  r   rx   r   r   r   	saveStatery  r   rP  rN  	roundRectr   r   r   r3  r   restoreStatery   r8  	alignmentrA  justifyLastLiner   r  r   r   r   r   r   r   r   r   r   r   r    r   r?  r   r1  r$  rY   rv  rw   r   r   r   	directionr   r   r   r   r&   rZ  r   r   r   r  r   r  r   rk  r  r  r~   r#  r'  r)  r/  r-  r  r  r   r   r   r   r   r   r   r   r   r  r5  ),rM  r  r7  r   r  r  r   r   r   r   rj  bcr  opr   brbptbprbpbbplbpnLinesr8  r?  rC  r|   rI  noJustifyLastjllwcisRTLbRTLdplr  r   rn   r   r~   lastLiner}  r   ro   r  r   oos,                                               r@   r	  Paragraph.drawPara	  s9    

--d=}R1PQ %%
Bq1Bs3s#B}T2B}T2BB "BQa(Db%%b)##B'!"XU>!4e))B%'N##B' Vq1B!.r!2Cc3zC

j1B1B&BCcI#Mc)#-  	 
 !U__
A:tJs3HH-~==HI**8A;6F(C '^E BBM))ENNE)E-T--6D{{A~'+C)+-C(*,C*,5:1@TC++ KK!**4E KK'!HQZZ*HHE(uZRVWF ##AKK0^^E51"0DNN4K4K4Q4Q4S"S%!'--*FGG %'$mmFNN:G  $zz22 

1::qzz7;1Xa[a(6VQY#e*U*:"HRUH=::",Xb"9BK046BE6B#B6$BHBD$BH$BHFFBG#$;;BL$&BMz)B *,q"zz&q"b"ajjAvv}QB; #1f-"1Xa[ %a#0#;QV##e*U2B%*H #R!b% J":-$j0H1b::*1eRQZZH666=BB#? . #1f- %a#0#;QV##e*U2B%*HR!eAhqk5(K .  %%)ZZ"%5
 !&!H++ KK!**4E KK'!HQZZ*HHE(B(uZSWXF',C)+.C(*-C*,6;2AVC$^d9o%EFF ^^E51"0DNN4K4K4Q4Q4S"SF2("5#zz22"&&(R\!!  "]]
 *"  !,#zz,6)R\Qx(6VQY$..*>"HRx0b! q&)A 8D,7CHEdnnU.B!&Xa[$9!"% * OOB! rB   c                    [        U SS5      nU(       a  / nUR                  n[        U5      (       a?  U H8  nUSS  H  u  pgU" U5        M     [        U[        5      (       d  M0  U" S5        M:     O.U H(  n[        US5      (       d  M  U" UR                  5        M*     SR                  U5      $ U(       a  [        U SS5      nUc  [        U 5      nU$ g)zXConvenience function for templates which want access
to the raw text, without XML tags. rv  Nr4   r1   rI   r'   )	rx   r   rw  rQ  r4  r   rI   rc   r  )	rM  identifyrv  plainsplains_appendr%  r   rI   r  s	            r@   getPlainTextParagraph.getPlainText~
  s     WT*F"MMM&&!D&*12h
%d+ '/!$w//%c*	 " "DtV,,%dii0 " 776?"4t,D|DJTKrB   c                     [        U S5      (       d   S5       eU R                  R                  (       a  U R                  4S jnOU R                  4S jn[	        [        XR                  R                  5      5      $ )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                     XR                   -
  $ r   )r  r  rr   s     r@   r   0Paragraph.getActualLineWidths0.<locals>.<lambda>
  s    a//.ArB   c                     XS   -
  $ r1  rW   r_  s     r@   r   r`  
  s
    aq'krB   )r   r  r   r   rd   rj   r  )rM  r  s     r@   getActualLineWidths0Paragraph.getActualLineWidths0
  s\    
 tW%%N'NN%;;"&**AD"&**9DC[[../00rB   c                    S/nUR                   n[        U 5       H  u  pVU(       ai  U" SUS   -  5        USS   HH  nU" S[        US   5      -  5        U" SUS   -  5        U" SXVR                  R                  4-  5        MJ     U" S5        Mu  U" S	US   S
R                  S USS   5       5      XVR                  R                  4-  5        M     US-  nUSU-   R                  U5      -   $ )N[z    [%r,r   r4   z        (%s,)z        %r),z    ], #%d %sz    ]z[%r, %s], #%d %s, c              3   l   #    U  H*  nS US   R                   R                  < SUS   < S3v   M,     g7f)r  r   ,r4   )N)r$  rY   )r  r  s     r@   r  &Paragraph.dumpFrags.<locals>.<genexpr>
  s-     8vpujlbeooF^F^_abc_d9epus   24r1   r)   )r   r   r  r$  rY   rc   )rv  rC  fullro  r|  r  r  r  s           r@   	dumpFragsParagraph.dumpFrags
  s   EXXU#CA:!$%AB%Bbe45~1-.!KK,@,@)AAB   7%1dii8vpqrsrtpu8v.wxy  {F  {F  {O  {O  )P  P  Q $ 3JDF==###rB   )r  r  r  r  r  r8  r  r  r  rv  r   r   rI   r   )NNNr4   rD   r   r   )   F)rY   rZ   r[   r\   r]   r  r  r  r  r  r  r  rH   r
  r  r  r1  r	  r[  rb  staticmethodrl  r^   rW   rB   r@   r   r     sp    =|n.'"R;	;
Sj"^2@(:T)U"n2
1 $ $rB   r   __main__c                    [        S[        U 5      -  5        U R                  R                  n[        R
                  R                  n[        U5       H  u  p4X   n[        US5      (       a  UR                  nOUS   n[        U5      nU" SX6[        [        USS5      5      4-  5        [        U5       H  nU" SU[        XW   SXW   5      4-  5        M!     [        5         M     g )	Nz$dumpParagraphLines(<Paragraph @ %d>)r~   r4   zline%d: %d(%s)
  r   Unknownz %d:'%s'rI   )printidr  r  sysstdoutwriter   r   r~   ry   rE  rx   r  )Pr  outwr  r   r~   nwordsrr   s           r@   dumpParagraphLinesr|  
  s    4r!u<=zz&FA8DtG$$

QZF%#gd;y6Y2Z([[\6]Z758F58#D EEF #G 'rB   c           	          SU S   -  /nS H>  n[        U S   U5      (       d  M  UR                  U< S[        U S   U5      < 35        M@     SR                  U5      $ )Nz'%s'r4   )	r   r   r   r   r\  striker   r   r,  r   =rf  )r   r   rx   rc   )rr   ro  rK  s      r@   fragDumpr  
  sV    QqTM?sAqtAAgad1o67 t yy|rB   c                 j   [        S[        U 5      U R                  5       4-  5        U R                  n[	        U5      n[        U5       Hj  n[        SX1U   R                  SR                  X   R                   Vs/ s H#  oD[        :w  d  M  U< S[        X   U5      < 3PM%     sn5      4-  5        Ml     [        R                  R                  nSnSn[        US5       HI  nXgS   -  nU" SX6US   4-  5        USS   H  nU" S	[        U5      -  5        M     [        5         US-  nMK     g s  snf )
Nz6dumpParagraphFrags(<Paragraph @ %d>) minWidth() = %.2fzfrag%d: '%s' %sr1   r  r   ih  zfragword%d: cum=%3d size=%dr4   z (%s))rt  ru  r  rv  ry   r  rI   rc   r  rx   rv  rw  rx  r  r  )	ry  rv  r  r  rf  rz  cumr  rr   s	            r@   dumpParagraphFragsr  
  s<   F"Q%QRQ[Q[Q]I^^_u:qA#q(--mrmum~m~  BKm~hi  FJ  CJBcQwW\W_`aObBcm~  BK  9L  'M  M  N  zzuS)AQ4KC.!!A$?@qrUWx{*+ GFA * BKs   <D0D0c           	        ^ [        [        R                  S   [        5      (       a  0 m/ R                  nU4S jn[        R                   H  nU" U" U5      5        M     [        S5        [        SR                  S [        TR                  5       5       5       5      5        [        [        < SSR                  UR                  5      < S35        [        S5        g g )	Nr   c                 4  > / R                   nU SS   HD  n[        US   5      nUT;  a  [        T5      US   4TU'   U" STU   S   < SUS   < S35        MF     SU R                  R                  < SU S   < SSR                  UR                  5      < S	3$ )
Nr4   r   z(__frag_z__, ri  r  r  rf  z]),)r   ru  ry   r$  rY   rc   __self__)rr   rg  rT  fid_Fs       r@   	_showWord%dumpProcessedFrags.<locals>._showWord
  s    II12AQqT(C"}#&r71Q4.3RWQZ!=>	 
 34++2F2F!diiXYXbXbNcddrB   zfrom reportlab.platypus.paragraph import _HSFrag, _SplitFragHS, _SplitFragHY, _SplitFrag, _getFragWords
from reportlab.platypus.paraparser import ParaFrag
from reportlab.lib.colors import Colorr)   c              3   ,   #    U  H
  nS U-  v   M     g7f)z__frag_%s__ = %rNrW   r  s     r@   r  %dumpProcessedFrags.<locals>.<genexpr>
  s     Q=P/!3=Ps   z=[
z  ]z%print(_getFragWords(processed_frags)))rQ  r  rv  rd   r   rt  rc   r  rd  processed_fragsr  )ry  r   _Sr  rT  r  s        @r@   dumpProcessedFragsr  
  s    bhhqk$''BBe XX9Q<    X  Y$))QVBIIK=PQRS2;;9OPQ9:! (rB   )getSampleStyleSheetr   )cm4c                 N    SU;   =(       d    SU;   =(       d    [        U 5      U;   $ )Nall*)rE  )r  TESTSs     r@   flaggedr  
  s"    ~@@Q5@rB   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Ӆ@ro  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'  )TTFont)registerFont
DejaVuSanszDejaVuSans.ttfzNotoSansKhmer-RegularzNotoSansKhmer-Regular.ttfur   Hello clifftop <font name='NotoSansKhmer-Regular'>ឆ្នាំ</font> world <span color='red'>of </span>wonder!dvsstyler   )r1   rn  )Tr
  )r  )__all____version__r]   stringr   operatorr   unicodedatar	   reportlab.pdfbase.pdfmetricsr
   r   r   reportlab.pdfbase.ttfontsr   reportlab.platypus.paraparserr   r   r   r;   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  rc   rN   compileescaperH   rG   r  r2  rA   r7   rQ   rT   r   r   rh   r   rm   rs   r   r   r   r   r   r   r   r   r   r   r  r   r#  r'  r)  r-  r/  r   rd   r4  r6  r8  r:  r<  r>  r@  rE  rB  rU  rW  r^  r_  rw  r  r  r  r  r  rz  r  r  r  Ir  r  r  _hy_lettersrD  _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?  rD  rK  rZ  rk  rw  r{  r  r  r  r  r  r  r  r   rY   r|  r  r  r  r  reportlab.lib.unitsr  rv  argvr  r  
styleSheetBr   r   rI   ry  r  r   r  rr   r   r
  r<   rt  r  h0chrry   r  r  rW   rB   r@   <module>r     s,	  	
 3     O O 3 ] ] 1 & H H 1 ? /  #  : : + 	  
ww  @ jj"))D/1288

8RYYt_45<<q
	 		t 	9 &&"g(9$ 	iV4" ,$ ]W	d 		D 		 		* 	
	; 		:g 		< 	S  $&/t &/PZHl Z	, 	 

	(,q||
.f **  Q  SU  SW  SW  X* 
jjABjjCD

277DU#;<=JJrwwW['GHI jj$wt!456>)@,HY1x 7(	 		J 		* 		; 		3 	#6c #6J	', 		
 	 3N D#&1f1(8t. ZZ23
C @/b#J/3 /@@O)bC`$ `$D Z $;( I&HHQRLEby% A %&J:A+A6EENqzz
 D
1BffRn!1GGBrNAFF2bMq!B 
 qzz
H*U]J^
_1ffRo!1qzz D*V,
-1ffT6"!1qzz X
D!
1ffRm!"1Q'1GGBrN1Q4 !		"R 2 B'1Q4 qzzEHXcRUhW
D*V,
-1ffT6"!1qzzD j2!DAq!&&v&CAaq! qzzg
D*V,
-1ffT6"!1qzzi
D*X.
/1ffT6"!1GGD3c!f1Q4 1Q4 	!		$1Q4 1Q4  qzz) DZ5IPZ[
\1ffQrT"Wf%!1r{{%
DZ5IPZ[
\1ffQrT"Wf%!1r{{c D~h	SUV
W1ffZ&!1r{{4=VL)9:;V34OPQ Q
D~j,XZ[
\1 [ eTFs   a a