
    i                    p   d Z dZdZddlmZ ddlmZ ddlmZ ddl	m
Z
mZmZ ddlmZmZmZmZmZmZmZmZmZmZmZ dd	lmZ dd
lmZmZmZm Z  ddl!m"Z" ddl#m$Z$ ddl%m&Z&m'Z'm(Z(m)Z) ddl*m+Z+ ddl,m-Z-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6m7Z7m8Z8m9Z9 ddl:m;Z;m<Z<m=Z= ddl>m?Z? ddl@Z@ddlAmBZB 	 ddlCZCn	#  dZCY nxY wdD                    d          ZE e@jF        d e@jG        eE          z            jH        ZI e@jF        d e@jG        eE          z            jJ        ZKddZLddZHd ZMd ZNd  ZO G d! d"e4          ZP G d# d$e4          ZQd% ZRdd'ZSd( ZTd) ZUdd*ZVdd+ZWdd,ZXdd-ZYdd.ZZd/ Z[d0 Z\d1 Z]d2Z^d3Z_d4 Z`dd6Zadd7Zbdd8Zcdd9Zddd:Zedd;Zfd< Zg G d= d>eh          Zi G d? d@eh          Zj G dA dBeh          Zk G dC dDek          Zl G dE dFel          Zm G dG dHekei          Zn G dI dJen          Zo G dK dLep          ZqddMZr G dN dOeh          Zs G dP dQesem          Zt G dR dSesen          ZudT ZvdZwdUZxdVZydWZzdX Z{dY Z|ddZZ}d[ Z~d\ Z e@jF        d]e@j                  Zd^ Zd_ Zd`ZdaZdbZ e@jF        dc          Z e@jF        dd          Z e@jF        dD                    deedff                    Z e@jF        dD                    deeedff                    Z e@jF        dD                    dgedhf                    Zdi Zdj Zdk Zdl Ze9fdmZ G dn doep          Z G dp dqe          Z G dr dse          Z G dt due          Z G dv dwep          Z G dx dyep          Z G dz d{ee          Z G d| d}ee          Z G d~ deh          Ze9fdZddZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z e@jF        d          Zd Zd Zd Zd Z G d dep          Zd ZddZd ZddZd Z G d de"          Zedk    rd Zd Zd ZddZddl/mZm0Z0 ddlmZ ddlZej        dUd         Zeg k    rdgZefdZ e            Zed         Z e0de          Zde_         edU          rdZ eee          Z ee¦           d\  ZZe                     eeĦ          \  ZZ ee¦           e H                    eeĦ          ZeD ]%Zeɠ                    eeĦ            eeɦ           dZČ& edV          rA eded                   Z ee¦           e                     dd          \  ZZ ee¦            edW          rCdZ eeed                   Z ee¦           e                     dd          \  ZZ ee¦            ed          rdZdZdZ eee          Z ee¦           e                     eeĦ          \  ZZ edeeǦ            ee¦           e H                    eeĦ          Z eed                    ed                             eeĦ          \  ZZ edee̦            eed                     ed          r\d ed          d ed          dZ eeed                   Z ee¦           e                     dd          \  ZZ ee¦            ed          rHdD ]EZ eeed         d          Z ee¦           e                     dd          \  ZZ ee¦           F ed¦          rCdZ eeed                   Z ee¦           e                     dd          \  ZZ ee¦            edĦ          rdZ eeed                   Z ee¦           e                     dd          \  ZZ ee¦           e H                    dedz            Z e eeȦ                      eed                     eed                    edU                             dd            eedU                     eedU                     edǦ          rUdZ ee e0ded         e)ʦ                    Z ee¦           e                     dez  dz
  d          \  ZZ ee¦            ed̦          rUdZ ee e0ded         e)ʦ                    Z ee¦           e                     dez  dz
  d          \  ZZ ee¦            edΦ          rJdZ ee e0ddd̬Ҧ          Ӧ          Z ee¦           e                     ddզ          \  ZZ ee¦            ed˦          r`ddlmZ ddl	mZ  e edd٦                      e eddۦ                     dZ ee e0ddd̬Ҧ          Ӧ          Z ee¦           dS dS dS ))	ParagraphcleanBlockQuotedText	ParaLinesFragLinez3.5.20z%The standard paragraph implementation    )
whitespace)truth)category)stringWidthgetAscentDescentgetFont)
rtlSupportbidiTextbidiWordList	isBidiStrbidiStrWrap
isBidiListBidiListbidiListWrap	BidiIndexbidiFragWordinnerBidiStrWrap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                 "   t          |           r|                                 } | ret          j        |           }|r>t	          |                    d                    ||                    d                   z  S t          | d          S |r|S | S )z/convert a strike/underline distance to a number      F)allowRelative)r0   stripr   matchfloatgroup_parser_num)svMapdefaultms       l/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/reportlab/platypus/paragraph.py_usConvrM   O   s    Qxx 	GGII 	"1%%A :QWWQZZ((aggajj)999"159999 	NH    c                     t          |           r|                     d          } |$t          |          r|                    d          }d |d| v rt          |           n|                     |          D             S )Nutf8c                     g | ]}|S  rR   ).0uwords     rL   
<listcomp>zsplit.<locals>.<listcomp>`   s    pppeEppprN       )r/   decode_wsc_re_splitsplit)textdelims     rL   rY   rY   ]   s}    t}}0T[[00dWU^^U\\&5I5IUppu}SWd 3 3 3]a]g]ghm]n]npppprN   c                 ~    t          |           r|                     d          } |                     t                    S NrP   )r/   rW   rC   _wscrZ   s    rL   rC   rC   b   s0    t}}0T[[00d::drN   c                 ~    t          |           r|                     d          } |                     t                    S r]   )r/   rW   lstripr^   r_   s    rL   ra   ra   f   0    t}}0T[[00d;;trN   c                 ~    t          |           r|                     d          } |                     t                    S r]   )r/   rW   rstripr^   r_   s    rL   rd   rd   j   rb   rN   c                       e Zd ZdZdS )r   a/  
    class ParaLines contains the broken into lines representation of Paragraphs
        kind=0  Simple
        fontName, fontSize, textColor apply to whole Paragraph
        lines   [(extraSpace1,words1),....,(extraspaceN,wordsN)]

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

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


2 (rN   c                 t    t          |           r|                     d          S |                     d          S )Ns    rV   )r/   count)ws    rL   
_nbspCountr~      s2    qzz ww{###wwvrN   c                    |dk    pt          | dd          }d                    |          }t          | |           |s(t          |          t	          |          z   dz
  }|dk    }|r|                     |d           nP|                     |t          |          z             |                     |d           |                     d           t          | |            |S N:0yEpreformattedFr=   r@   r   )getattrrn   rx   lenr~   _textOutsetWordSpacerE   )ry   offset
extraspacewordslastsimplerZ   nSpacess           rL   _leftDrawParaLiner      s    AN5!A!AF88E??DBv e**Z---a/! 
D

U7^^3444
D
BwMrN   c                    |dk    pt          | dd          }d                    |          }|s(t          |          t          |          z   dz
  }|dk    }|r/|d|z  z   }t	          | |           |                     |d           nb|}|                     |t          |          z             t	          | |           |                     |d           |                     d           t	          | |            |S )Nr   r   Fr=   r@   r         ?r   rn   r   r~   rx   r   r   rE   	ry   r   r   r   r   r   rZ   r   rK   s	            rL   _centerDrawParaLiner      s    AN5!A!AF88E??D e**Z---a/! 	S:%%1
D

U7^^34441
D
BrNNNHrN   c                    |dk    pt          | dd          }d                    |          }|s(t          |          t          |          z   dz
  }|dk    }|r?||z   }t	          | |           |                     d                    |          d           nb|}|                     |t          |          z             t	          | |           |                     |d           |                     d           t	          | |            |S r   r   r   s	            rL   _rightDrawParaLiner      s   AN5!A!AF88E??D e**Z---a/! 	Z1
CHHUOOA&&&&

U7^^34441
D
BrNNNHrN   c                    t          | |           d                    |          }t          | dd          pd|cxk     odk    nc p|o|dk    }|s(t          |          t	          |          z   dz
  }|dk    }|r|                     |d           nP|                     |t          |          z             |                     |d           |                     d           t          | |            |S )Nr=   r   Fr   :0yE>r@   r   )rx   rn   r   r   r~   r   r   rE   )ry   r   r   r   r   rZ   r   r   s           rL   _justifyDrawParaLiner      s   BvHHUOODb..i53I3I3I3IT3I3I3I3IitOhXbchXhF e**Z---a/! 
D

U7^^3444
D
BwMrN   c                 <     |rt           nt          | ||||          S N)r   r   )ry   r   r   r   r   s        rL   _justifyDrawParaLineRTLr      s(    @$@,@"fjZ_aefffrN   c                     |dk    rd}nl|dv r|| z
  }nb|dk    r|d|z  | z   dz  z
  }nM|dv r	|d|z  z
  }n@|dk    rd|z  }n4|d	k    rd
|z  }n(t          |d          r|                    |          }n|}||| z   fS )z1return bottom,top offsets relative to baseline(0)baseliner   )ztext-toptopmiddle333333?r   )ztext-bottombottomsupersubg      normalizedValuehasattrr   )hvafontSizeiyos       rL   	imgVRanger      s    	:~~	!	!	!qj	X#h,q.#--	'	'	'X%	W(l	U8m	%	&	&   **s1u9rN   c                 P    t          | d          r|                     |          S | S )Nr   r   )vnvs     rL   imgNormVr      s.    q"##   $$$rN   c                 t   | j         }t          |          r!|}| j        }| j        }| j        }| j        }d}nzt          |dd          }t          |d| j                  }t          |d| j                  }t          |d| j                  }t          |d| j                  }t          |dd          }||||||fS )	Nr   rZ   .fontNamer   	textColor	backColordy)endDotsr0   r   r   r   r   r   )styledotsrZ   r   r   r   r   r   s           rL   _getDotsInfor      s    =DT{{ ">>O	O	tF3''4
5>::4
5>::DU_==	DU_==	T$q!!)Ib88rN   g?gUUUUUU?c           
      <   t          |dd           }|j        }|j        }|j        }|j        }	|j        }
|j        }| |j        z  } |
dv }|rV|
dk    r<t          t          |z  |j
                  }t          t          |z  |j                   }n|j
        }|j         }||z   }|j        |k    r|                    |           |rl|j        }|R||z
  }|j        |k    r|||j        z
  z  }t#          ||z
            dk    r|}|                    |	|           ||_        ||z
  |_        ||_        t          |dd          }d}|j        }g }g }|j        }|j        }t-          |          D ]:\  }}t/          |d          r|j        }|j        }|d	k    r|j        }||j        j        }t;          |j        |j                  }t;          |j         |          }tC          ||j"        |          \  }} | ||z  z   }!|j#        $                    |j%        |!||z   ||d
           | |z  } |!|z  }!tM          ||!|j        z
             n|j'        }"|dk    r |j#        (                    |"| ||z              nt          |j#        |"d           }#|#stS          d|d|"d          tU          || |||j                  |j#        _+        	  |#|j#        |t          |dd                      |j#        `+n# |j#        `+w xY w||d         u rG|j,        s*|-                    |j        j.        |j        j                   |/                    dd           | ||z  z   }!|!}$|j        }%|j0        }&|j1        }'|dk    r%|!|rdnte          ||dz
           j3        |          z
  }$|j,        |j        f|j.        |%fk    r|4                    |j.        |%           |j0        |&k    r|&|_0        |5                    |&           |j1        |'k    r|'|_1        |6                    |'           ||j        k    r?to          |          }(to          |j                  })|)|(z
  }*|(|)z
  }+|+D ]},||,         |$f||,<   ||j8        k    rKto          |          }(to          |j8                  })|)|(z
  }-|(|)z
  }.|.D ]},||,         |$f||,<    ||,d           |j3        }/|/                    |/||d         u            ||j        k    r|*D ]},|,|%|&|!f|%f||,<   |j        }|r|D ]},||,         \  }0}1|%|1k    r|0|%f||,<   |'d|%z  z
  }2|'|%z   }3||j8        k    r"|-D ]},|,| f|2|3f||,<    ||,d           |j8        }|rA|D ]>},||,         \  }0}4}5|2|4k     s|3|5k    r$|0ts          |2|4          t          |3|5          f||,<   ?t          |dd           }6|6r|j:        s|6|_:        |!|_;        n|j:        r|6s/|j<        =                    |j;        |$|j:        f           d |_:        nU|j:        |j:        k    s|j0        |j:        k    r5|j<        =                    |j;        |$|j:        f           |6|_:        |!|_;        |j#        >                    |/|j,        |j                  }7| |7z  } ||/?                    d          t          |/          z   z  }<| |dz
  |z  z   }!|r`|j        jA        rT|j        jB        dk    r|dk    rt          | |!|jD        ||           n%|dk    r|jE        }8t          |8|8|	|8z
  ||d           |r|D ]},||,         |!f||,<   |r|D ]},||,         |!f||,<    ||,d           |j:        r'|j<        =                    |j;        |!|j:        f           |j        |	k    rtM          ||	|j        z
             d S d S )N_linkRecordc                      d S r   rR   )argskwdss     rL   <lambda>z_putFragLine.<locals>.<lambda>  s     rN   )minmaxr   r   
_wordSpacer   cbDefnimgauto)maskanchorzMissing z callback attribute '')ry   cur_xcur_yleadingxslabelr3   r@   endg?startr   r=   RTLrightleftF)r   )Fr   r   	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imagerx   namebookmarkHorizontalAttributeErrordict_curr_tx_info	_fontnamesetFontr   r   r   rise_trailingSpaceLengthrZ   _setFontsetFillColorsetRisesetlinkr   r   backColor_x
backColorsappendr
   r|   r~   r   wordWrap_do_dots_fragmaxWidth	_x_offset)9r   ry   liner   pKind
linkRecordr   r   r   x0r   r   dalr   r   olbxcywsr   r   ALLLr   r   ifr   r   txfsr}   r   iy0iy1cur_x_sr   funcend_xr   r   r   SNSnLLeLLlnALeALrZ   l0fsmaxnlonhilohibgtxtlenr   s9                                                            rL   _putFragLiner#    s   M*D*DEEJ?L	BHE	B.KjG	R]E

&C
 !WT[11F#g+t|m44GG[F|mG.	{G
g
 g?f*C|W$$2<//3u9~~d""  E*** '/	L	#	#BGJE	B	B{HHE%   k8 k811X j	8XF;DU{{|<8,DV\",77V]400#AfmD99C'"*,
$$V\'%)AaV$TTT
1726>****{>>J11$uU7]KKKK"2:d488D a,nUYUYUYZ^Z^Z^-_```-1Re%X_ceco-p-p-pBJ,5RZWVGD-I-IJJJJ44BJ44444E"I~~| DJJrx01BCCCBq!!!gbj(GEzHI6D1uu#c11:NuUVWXUXz`b:c:cdR\*QZ,AAAAJ111|Y&&(	***w}}

4    QZGG__1f"f 4 4A"*1+e"3HQKKQV||GG[[1f"f ( (A$Qx~E!HJq''''6DKKQ%)^,,,QZ J JA#$Xi"@"IHQKKZ 3 3 3A (IB~~&((lX%C/CQV|| * *A !%yS0E!HJq))))V > > >A!&qJBB2vvR#%c#bkk#c"++#=a;t,,B 
-", 
-!!( - -M((2>5",*OQQQ#'BLL[",..",2L2LM((2>5",*OQQQ#%BL%,BNZ++D",MMFVOEtzz#z$'7'777GGWQYN"G H  H8e##g~~eGDM"R@@@F]]LE%U
BGGGG	 / 	/ 	/A"1+w.HQKK	   	  	 AQx(E!HJq	| H
r~wEGGG	vrzz2bf9 zs   !K//	K8Tc                    t          |j                  \  }}}}	}
}|j                            |||          }||z   |k    r"|j        |k    s|j        |k    r|                    ||           |r|t          |d|j                  z  }|	                    d|j
        |z              t          ||| z
             t          ||z
  |z            }t          ||||z  z
             |j        |	k    r|                    |	           |
r|j                            | ||
f           |                    ||z  d           |r'|	                    |j        |j
        |z
             d S d S d S )N_dotsOffsetXr   r@   )r   r   r   r
   r   r   r   r   r   r   r   rx   intr   r   r   r   r   )r   r  r   r   ry   r   rZ   r   r   r   r   r   r"  ns                 rL   r   r     s   4@4J4J1D(9YrZ##D(H==Fv~x<!!R\8%;%;JJx)))>WRrv>>>
28B;'''75=!!!'!6)**8fQh&'''<""OOI&&&Fbm**E(9+EFFF
AdF13rrx{33333   	43rN   c                    || _         t          | |           |j        }|dk    pt          |dd          }|s/|j        t          d |j        D                       z   dz
  }|dk    }|rt          || ||d           nM|                     |t          |          z             t          || ||d           |                     d           t          | |            d S )Nr   r   Fc                 V    g | ]&}t          |d           t          |j                  'S r   r   r~   rZ   rS   r}   s     rL   rU   z&_leftDrawParaLineX.<locals>.<listcomp>  4    %h%h%hQT[\]^fTgTg%hj&8&8%h%h%hrN   r@   r   r   )
r  rx   
extraSpacer   	wordCountsumr   r#  r   rE   ry   r   r  r   r.  r   r   s          rL   _leftDrawParaLineXr2    s    BLBvJCnU!C!CF .%h%h$*%h%h%h!i!iijkk! VRtV4444

U7^^3444VRtV444
BwrN   c                 
   || _         || j        z   | _        	 |j        }|dk    pt	          |dd          }|s/|j        t          d |j        D                       z   dz
  }|dk    }|r1|d|j        z  z   }t          | |           t          || ||d           nO|}| 
                    |t          |          z             t          || ||d           | 
                    d           t          | |            | `d S # | `w xY w)	Nr   r   Fc                 V    g | ]&}t          |d           t          |j                  'S r*  r+  r,  s     rL   rU   z(_centerDrawParaLineX.<locals>.<listcomp>  s4    )l)l)lX_`abjXkXk)l*QV*<*<)l)l)lrN   r@   r   r   center)r  r   r%  r.  r   r/  r0  r   rx   r#  r   rE   ry   r   r  r   r.  r   r   rK   s           rL   _centerDrawParaLineXr7    s+   BLrvoBO_
E!GWT.%G%G 	 nS)l)ldj)l)l)l%m%mmnooGaZF 	s4?**ABqMMMBd84444AOOJw7888BdH555OOAA2OOOBOs   C"C> >Dc                    || _         |j        }|dk    pt          |dd          }|s/|j        t	          d |j        D                       z   dz
  }|dk    }|r.||j        z   }t          | |           t          || ||d           nO|}|                     |t          |          z             t          || ||d           |                     d           t          | |            d S )Nr   r   Fc                 V    g | ]&}t          |d           t          |j                  'S r*  r+  r,  s     rL   rU   z'_rightDrawParaLineX.<locals>.<listcomp>  r-  rN   r@   r   r   )
r  r.  r   r/  r0  r   rx   r#  r   rE   r6  s           rL   _rightDrawParaLineXr:    s    BLJCnU!C!CF .%h%h$*%h%h%h!i!iijkk! 4?"1Qr4w////

U7^^3444QD$000
BrNNNNNrN   c                    || _         t          | |           |j        }|j        pd|cxk     odk    nc p|o|dk    }|s/|j        t          d |j        D                       z   dz
  }|dk    }|sN|                     |t          |          z             t          || ||d           |                     d           nt          || ||d           t          | |            d S )Nr   r   c                 V    g | ]&}t          |d           t          |j                  'S r*  r+  r,  s     rL   rU   z)_justifyDrawParaLineX.<locals>.<listcomp>
  r-  rN   r@   r   justify)
r  rx   r.  	lineBreakr/  r0  r   r   rE   r#  r1  s          rL   _justifyDrawParaLineXr?    s   BLBvJ^Vj 6 6 6 6$ 6 6 6 6VD<UZPUEUF .%h%h$*%h%h%h!i!iijkk! 8

U7^^3444VRtY777
VRtY777BwrN   c                 :     |rt           nt          | |||          S r   )r:  r?  )ry   r   r  r   s       rL   _justifyDrawParaLineXRTLrA    s&    B4B-BRQUW[\\\rN   c                     t          |           }|r8|j                            |                                |j        |j                  ndS Nr   )_wsc_end_searchr   r
   rF   r   r   )rZ   ry   r	  s      rL   r   r     s@    			BMOV2:!!"((**blBLIIIUVVrN   c                       e Zd ZdZdS )_HSFragz!a frag that's followed by a spaceNrf   rR   rN   rL   rF  rF    s        ++DrN   rF  c                       e Zd ZdZdS )_InjectedFragzHa frag that's injected in breaklines and must be removed on reprocessingNrf   rR   rN   rL   rH  rH    s        RRDrN   rH  c                       e Zd ZdZdS )
_SplitFragza split fragNrf   rR   rN   rL   rJ  rJ  #  s        DrN   rJ  c                       e Zd ZdZdS )_SplitFragHz.a split frag that's the head part of the splitNrf   rR   rN   rL   rL  rL  '  s        88DrN   rL  c                       e Zd ZdZdS )_SplitFragHYz:a head split frag that needs '-' removing before rejoiningNrf   rR   rN   rL   rN  rN  ,  s        DDDrN   rN  c                       e Zd ZdZdS )_SplitFragHSz'a split frag that's followed by a spaceNrf   rR   rN   rL   rP  rP  0          11DrN   rP  c                       e Zd ZdZdS )_SplitFragLLz<a frag that is forced to end in - because of paragraph splitNrf   rR   rN   rL   rS  rS  4  s        FFDrN   rS  c                       e Zd ZddZdS )_SHYIndexedStrNc                    |sf|                     t                    }g }|j        }d}|D ]}|t          |          z  } ||            d                    |          }|d d         }t
                              | |          }||_        |S )Nr   r3   r   )rY   _shyr   r   rn   str__new___shyIndices)clsuXaxrH   selfs          rL   rY  z_SHYIndexedStr.__new__9  s     		AAAA  SVV!

A#2#A{{3q!!rN   r   )rg   rh   ri   rY  rR   rN   rL   rU  rU  8  s(             rN   rU  c                    |                      d          }t          | t                    rd| j        dd         }|d         |r;t	          |d          r&|                    fd|j        D                        ||z  }t          ||          S |rK||z  }t	          |d          r6|                    fd|j        D                        t          ||          S |S )zDrejoin two parts of an original _SHYIndexedStr or str that was split-Nr   rZ  c                     g | ]}|z   S rR   rR   rS   _r_  s     rL   rU   z_shyUnsplit.<locals>.<listcomp>P  s    666!!A#666rN   c                     g | ]}|z   S rR   rR   rd  s     rL   rU   z_shyUnsplit.<locals>.<listcomp>V  s    222aac222rN   )rd   
isinstancerU  rZ  r   extend)rH   ssr\  r]  r_  s       @rL   _shyUnsplitrj  H  s    	A!N## 'M!!!bE 	r-(( 86666r~666777GAa"""	 '	R2m$$ 	'HH22222>222333!!A&&&HrN   c                       e Zd ZdZd ZdS )_SHYWordzIa fragword containing soft hyphens some of its strings are _SHYIndexedStrc           	         | d         }d| _         |dk    rg S d }d}||z
  x}}d }t          | dd                    D ]\  }	\  }
fd}t          |
t                    rr |d          }||z   }t          |
j                  D ]>\  }|
d          |
d          }}| ||          z   }||}||k    }|r n
|	|||||f}?| ||
          z  }n| ||
          z  }||k    }|r| n|||z
  nd| _         |sg S |\  }	}}}}}|	dz   }| |         \  }
|
j        }t          |dz   |d |dz                      }| d |         |fgz   }||z
  |d<   ||d         z
  |z   g|sg n)t          |fd||dz   d          D                       fgz   | |dz   d          z   }t          |          t          |          fS )Nr   Fr@   c                 :    t          | j        j                  S r   r
   r   r   )rH   r  s    rL   r   z%_SHYWord.shyphenate.<locals>.<lambda>e  s    ;q!*ajAA rN   rb  c                     g | ]}|z
  S rR   rR   rd  s     rL   rU   z'_SHYWord.shyphenate.<locals>.<listcomp>  s    LbLbLbUVQqSLbLbLbrN   )_fswwr   rg  rU  rZ  _SplitFragSHY
_SHYWordHS)r`  newWidthr   wwpossibleexceeded	baseWidth
baseWidth0fswwr  tsWshyLenbwjr   r   leftwi1r]  leftsrr   Rr  r_  s                          @@rL   
shyphenatez_SHYWord.shyphenate\  sy   !W
q55)!)B.	J abb** 	4 	4GAeqAAAAB!N++ 0C'%am44 C CDAq"#BQB%122%Drr$xxKE|ET$x/H& !QtUFBHHRRUU"		RRUU"	$x/3D,ee(,(8T*__j
".6+1aeVqSBx1MtCx$1Q3$00"I!E#z!!!WV^ebbQ~eLbLbLbLbZ[\]^_\_\`\`ZaLbLbLb7c7c4d3efimnpqrnrnsnsittQA..rN   N)rg   rh   ri   rj   r  rR   rN   rL   rl  rl  Z  s)        SS$/ $/ $/ $/ $/rN   rl  c                       e Zd ZdZdS )rs  zOa head split frag that requires removal of a hyphen at the end before rejoiningNrf   rR   rN   rL   rs  rs    s        YYYYrN   rs  c                       e Zd ZdZdS )rt  z=a fragword containing soft hyphens that's followed by a spaceNrf   rR   rN   rL   rt  rt            GGDrN   rt  c                 d    	 t          | d         d         t          t          f          S #  Y dS xY w)Nr   F)rg  rE   r&  )fragss    rL   _processed_fragsr    s3    %(1+uSk222uus   '* /r@   rA      c                    dg}|j         }d}d}| D ]}||d         z  }t          |t                    }|dd         D ]~}|\  }}	|r@||d         u r6|t          |	d         |j        |j                  dz   z  }t          |	          }	||u r"|t          |d         d         |	          f|d<   o |||	f           |}||d<    t          |          |          S )z!F should be a list of _SplitFragsr   Nr@   r   r   )r   rg  rN  r
   r   r   rj  _reconstructSplitFrags)
Fr  aRwLenpstyr  rmhyffstyr|  s
             rL   _rejoinSplitFragWordsr    s   	
A	
BDD  !!L))ABB% 		 		BFC #aeAbE#,s|DDtKKNNs{{k!B%(1556"C7		 AaD$!!$$Q'''rN   c                     t          | t                    r#t          | t                    rt          nEt          n>t          | t                    r#t          | t                    rt          nt          nt
          S r   )rg  rl  rF  rt  rS  ro   )r  s    rL   r  r    s_    CMaPXCYCY p:a00>ZZhhOYZ[\cOdOdn:a#=#=J<<77jnqrN   c                 $
   fd}g }|j         }g }t          |           r|j         }	 | D ]}t          |t                    r ||           t          |t                    r> ||           t          |t
                    r |t          |                     |dd= v|r |t          |                     |dd=  ||           |r |t          |                     n	d}d}d}d}| D ]}|j        }|d	k    r6t          |_        |rt!          |          }|s1d}t#          |          }|d         t$          v s|sx|r=|                    d|            ||rt)          |          n|           |}g }d}d}d}n|ot          |d         t
                    }|s|                    dd	           n|s|dd         D ]}t*          |v rt-          |          }d}|                     ||f           |t          ||j	        |j
                  z  }|                    d|            ||st          |t(                    rt/          |          nt          |                     g }d}d}d}|d         }t*          |v rt-          |          }d}|                     ||f           |t          ||j	        |j
                  z  }|ri|d         t$          v rZ|                    d|            ||st          |t(                    rt)          |          nt          |                     g }d}d}Gt1          |d
          r|j        }t5          |dd          }|rt1          |d          r|_        |                              }|r:|                    d|            ||rt          |          n|           g }d}d}d}t:          |_         |||d	fg           d}t<          |_        |s<|r:t          |d         t
                    r|d                              |d	f           C|                     |d	f           \t1          |d          rH|r)|                    d|            ||           g }d}d}d}t>          |_         |d|d	fg           d}|rG|                    d|            ||st          |t(                    rt)          |          n|           |s| r| d         }t          |_        d|d	fgg}|S )z given a Parafrag list return a list of fragwords
        [[size, (f00,w00), ..., (f0n,w0n)],....,[size, (fm0,wm0), ..., (f0n,wmn)]]
        each pair f,w represents a style and some string
        each sublist represents a word
    c                     | d         }t          |t                    r.|j        k    r%|_        |                              }|| d<   d S d S d S rC  )rg  r   _normalizerr   )r  r}   r   s     rL   _rescaleFragz#_getFragWords.<locals>._rescaleFrag  sb    aDa 	}h&& (%%h//!		 	&&rN   TNr   r   r   r@   Fr3   r   r   r   r>  ) r   r  rg  rH  rJ  rF  r  rN  r
   r   r   rj  r  rZ   _FK_TEXT_fkindra   rY   r   insertrl  rW  rU  rt  r   r   r   r  r   _FK_IMG
_FK_APPEND	_FK_BREAK)r  r   r  r  r  WaWr  f0Wlenr  lfr|  tshangingSpacer'  hangingStrip
shyIndicesrZ   r  whsr}   cbs    `                     rL   _getFragWordsr    s        	A	
B
A bKX9	9  a..8Qa
++ 	BqEEE!!W-- !033444aaaD !033444aaaDBqEEEE -(++,,,d 
 T	$ T	$A6DRxx# )!$<<D)#(L$KK7j((( 	>1*;8A;;;!<<<*%*
',=JquW$=$= !2 ! 3B3 
 
Aqyy*1--%)
HHaUOOOQ
AJ???AHHQqMMMB
\j86L6L\z!}}}RYZ[R\R\]]]A!&JAA$bE199&q))A!%J!A[AJ
;;; DH
22HHQqMMMBjZJq4J4JZx{{{PWXYPZPZ[[[A!&JA8$$ "$XBwq)) )q!233 8(0--h77 1<71:::1===%*
',&AHB1R&zNNN#(LL)AH ) )z!B%'@'@ )"aV,,,,!B((((K(( $ )HHQqMMMBqEEEAA!&J#(L$Aqf:# 	KHHQqMMMBjIJq,B,BIx{{{JJJ  	aAAHQrFA
 HrN   c              #   (  K   | dd          D ]\  }}t          |d          r|t          |j        dd          |fV  1|rJt          |          r|                    d          }|D ]"}|t          ||j        |j                  |fV  #}|d|fV  d S )Nr@   r   r   r   rP   )r   r   r   r/   rW   r
   r   r   )r}   r  rH   cs       rL   _fragWordIterr  l  s      !"" 	 	11X 	WQXga00!33333 	qzz %HHV$$ B BQqz1:>>AAAAAB Q'MMMM	 	rN   c                    g }t          |          dz
  }|t          ||dz                      }g }d}d}	d}
| d         d         }t          |           D ]\  }}}||z   }||k    ot          |
p|
 o||k              }||us|r|                                }t          |d          r|	|_        |                    ||	f           |rNt          |
g|z             }|                    |           |dz  }|}|t          ||dz                      }g }|}d}
d}	|}|
|z  }
|	|z  }	|}|                    ||	f            t          | t                    rt          nt          |
g|z             }|                    |           |S )a  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.
    r@   r   r3   rZ   )r   r   r  boolcloner   rZ   r   rJ  rg  rF  rP  rL  )r}   r   	maxWidthslinenor  	maxlinenomaxWidthNextr  	lineWidthfragText	wordWidthr  gcwr  newLineWidthtooLongs                    rL   _splitFragWordr  x  s    	AIq IS6!8445L
AIHI	!QA"" ! !"Q |x'cD1b9}?aQSUaQa,c,cA:::		Aq   "!HHa\""" 	{1}--!'(Yvax)@)@A!	HAR	A 		HHa\	?Ag..	?K)QOOAHHQKKKHrN   uK  (^(?:[a-z0-9\.\-\+]*)://)(?:\S+(?::\S*)?@)?(?:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|\[[0-9a-f:\.]+\]|([a-z¡-￿0-9](?:[a-z¡-￿0-9-]{0,61}[a-z¡-￿0-9])?(?:\.(?!-)[a-z¡-￿0-9-]{1,63}(?<!-))*\.(?!-)(?:[a-z¡-￿-]{2,63}|xn--[a-z0-9]{1,59})(?<!-)\.?|localhost))(?::\d{2,5})?(?:[/?#][^\s]*)?\Zc              #     K   d}|                      |          r$||z  }| d d         } |                      |          $d}	 |                     ||          }|dk     rd S |dz  }|| d |         z   | |d          |z   fV  @)Nr3   r   rA   Tr   r@   )endswithfind)urischemeslashtailr  s        rL   _slash_partsr    s      D
,,u

 #2#h ,,u

  	
A*HHU1Q33	QS!WnSWT\))))	*rN   c                 r   t          |           r|                     d          } t                              |           }|sd S |                    d          }| t          |          d          } |sd| vrdnd}|r| r|| fgng t          t          | ||                    z   }|                                 |S )NrP   r@   /\)	r/   rW   uri_patrD   rF   r   ro   r  reverse)r  rK   r  r  r  s        rL   _uri_split_pairsr    s    s||-3::f--ScATTWWQZZF
c&kkll
C CsNNTT 
"	2s	263-d<FSX;Y;Y6Z6ZZAIIKKKHrN   u[   A-Za-zÀ-ÖØ-öø-ɏẀ-ẅḀ-ỿА-яḂḃḊḋḞḟṀṁṖṗṠṡṪṫẛỲỳ   ­u   -­u   ^['"([{¿‘‚“„]+u   []'")}?!.,;:’‛”‟]+$z^[z]+$([z])c
                    t          |          r|                    d          }t                              |          }
|
r-|
                    d          }|t          |          d          }nd}t          |t                    r|d         dk    rd}|d d         }nLt          	                    |          }
|
r.|
                    d          }|d t          |                    }nd}t          |          |	k     rd S ||z
  }t          |          }|Q||k    s|rG|d|z
  |z  k    r;|D ]8\  }}||z   }||z   }t          |||          }||z   }||k    rdd|||z
  ||fc S 9d S t                              |          }| rt                              |          st                              |          rd|vrt          d||          } | |          D ]d\  }}||z   }t                              |d                   sd}|}nd}d}||z   }t          |||          }||z   |z   }||k    r|||||z
  ||fc S et          |          }|dk    r|rd|vrt                              |          rt!          t#          d|d                    D ]s}|d                    |d |                   z   }d                    ||d                    |z   }t          |||          }||z   }||k    rdd|||z
  ||fc S ld S d S d S d S d S )	NrP   r   r3   r   rb  r@   r  rA   )r/   rW   _hy_pfx_patrD   rF   r   rg  _SplitWordLL_hy_sfx_patsearchr  r
   _hy_shy_patrY   _hy_letters_pat_hy_shy_letters_patreversedrangern   )
hyphenatorrH   rv  ru  r   r   r   uriWasteReduceembeddedHyphenationhymwlrK   pfxsfxw0r  r   r|  hwtwHhylenjcjclenr'  r  s                            rL   
_hyGenPairr    s   qzz'qxx''1!A ggajjc#hhiiL!L!! 	aeSjjcrcFq!! 	''!**C*CHH9*AAC
1vv~~vv	BBA}h;;>;bQ~5Ex4O.O.O - -1EG 8H55"Wx<<a2b51,,,,  !A ---a00 -5H5N5Nq5Q5Q -VX`aVaVaC22:a== 	- 	-CAaaA$$QrU++ CAQx11BBB8||%2b51,,,, 
 	AA!tt#t!8K8Q8QRS8T8T%!A,,'' 	) 	)Abggaenn$A!""$AQx11BBB8||!Br"uQq((((  ttt	) 	)rN   c                    dx}}g }|j         }g }|j        }t          dt          |                     D ]}| |         \  }}	|j        dk    r dS t          |d          rt          |j        dd          r dS |	sGt          |	          r|		                    d          }	 ||	            |t          |	          ||fgz             |t          |	          z  }d
                    |          t          |          fS )ztakes a frag word and assembles a unicode word from it
    if a rise is seen or a non-zerowidth cbdefn then we return
    None. Otherwise we return (uword,([i1,c1],[i2,c2],...])
    where each ii is the index of the word fragment in the word
    r   r@   Nr   r   rP   r3   )rh  r   r  r   r   r   r   r   r/   rW   rn   tuple)
FWccplenr]  eXUaUr  r  r|  s
             rL   _fragWordSplitRepr    s    MB
A	
B
A	
B1SWW  !u16199TTT1XF718GA#>#>F(1::+188F++q
1
3q66Ab6(?
c!ff771::eAhhrN   c                 <    t          d | D                       g| z   S )zF are the fragsc              3   R   K   | ]"\  }}t          ||j        |j                  V  #d S r   rp  )rS   rH   r\  s      rL   	<genexpr>z#_rebuildFragWord.<locals>.<genexpr>,  s6      CC#!AQqz!*55CCCCCCrN   )r0  )r  s    rL   _rebuildFragWordr  *  s'    CCCCCDDEaGGrN   c           	      X	   t          |          }|sd S |\  }}t          |          r|                    d          }t                              |          }	|	r-|	                    d          }
|t          |
          d          }nd}
t          |t                    r%|d         d         d         dk    rd}|d d         }nLt          
                    |          }	|	r.|	                    d          }|d t          |                    }nd}t          |          |k     rd S |d         }||z
  }t          |          }|||k    s|r|d|z
  |z  k    r|D ]\  }}|
|z   }t          |          }||         \  }}|d|         }||         \  }}|d ||z
           }|r|                    ||f           |||z
  d          }||dz   d          }|r|                    d||f           t          |          }||d         z   |k    rd|t          |          fc S d S t                              |          }| r3t"                              |          st$                              |          rd|vr | |          D ]\  }}|
|z   }t          |          }||         \  }}|d|         }||         \  }}|d ||z
           }t                              |d                   sd}nd}|s|r|                    |||z   f           |||z
  d          }||dz   d          }|r|                    d||f           t          |          }||d         z   |k    r||t          |          fc S t          |          }|dk    r|rd|vrt$                              |          r t'          t)          d|d                    D ]}t          |
d                    |d |                   z             }||         \  }}|d|         }||         \  }}|d ||z
           }|r|                    ||f           |||z
  d          }||dz   d          }|r|                    d||f           t          |          }||d         z   |k    rd|t          |          fc S d S d S d S d S d S )	NrP   r   r3   r   r@   rb  r  rA   )r  r/   rW   r  rD   rF   r   rg  rS  r  r  r  r   r  r  r  rY   r  r  r  r  rn   )r  r  ru  r   r  r  r  r]  rH   rK   r  r  rv  r  r  r   r|  posfxr  FLffxsfxlsfxrFRr  r  r'  r  s                                rL   _hyGenFragsPairr  .  sQ   "AffDAqqzz'qxx''1!A ggajjc#hhiiL"\"" 	r"vay}c'9'9crcFq!! 	''!**C*CHH9*AAC
1vv~~vv	AB	BB 	A}h;;>;bQ~5Ex4O.O.O 5 51E!ff3B"Xb6S7CF7|.C:...3r677|1Y01c$Z000$R((ad7H$$a 0 4 44444 %!A 1,,Q// 14G4M4Ma4P4P 1UW_`U`U`:a== 	1 	1CAaAAa&&CsVFBAbDB"vHCwBw<D$$QrU++  )r )		3tBw-(((s2vww<DBqDEEB,RYYq#d,,, $$A!A$w  !,R000000 !
 	AA!tt#t!8K8Q8QRS8T8T%!A,,'' 	1 	1AcBGGAbqbENN*++CsVFBAbDB"vHCwBw<D*RYYDz***s2vww<DBqDEEB,RYYq#d,,, $$A!A$w  !,R000000 ! ttt	1 	1rN   c                 p   |d         }|dk    rg S t          |          dk    r|d         \  }}	t          |t                    rt          |	          }	t	          | |	||||j        |j        |||
  
        }
|
r\|
\  }}}}}} |rt          nt          ||z   |||z   fg           t          |t                    rt          nt          |||fg          gS nbt          | ||||||          }
|
rK|
\  }}} |rt          nt          |           t          |t                    rt          nt          |          gS d S )Nr   rA   r@   )r   rg  rS  r  r  r   r   rN  rL  rF  rP  rJ  r  )r  r  ru  r   r  r  r  rv  r  rH   r  r  r  r  r  r   r|  s                    rL   _hyphenateFragWordr    s   	AB	1uuRi
2wwzz!u1b&& 	 QAz1b(Haj!*Ucdwy~ 	U&'#Br2q!8R8\\[2e8QqtH:MNN  QG`jkmnu`v`v  QGP\P\  }G  JL  NO  PQ  MR  IS  PT  PT  U  U	U JHh~Nachii 	zHB18R8\\[!<<>tjY[\cNdNd>tlljtvw=x=xyy4rN   c                       e Zd ZdZdS )
_SplitWordzcsimple str word split into _SplitWord instances
    the function _splitWord does the splitting
    Nrf   rR   rN   rL   r  r    s          	DrN   r  c                       e Zd ZdZdS )_SplitWordEndz/the remainder of a str word that has been splitNrf   rR   rN   rL   r  r    s        99DrN   r  c                       e Zd ZdZdS )_SplitWordHz'hyphenation head if no hyphen was addedNrf   rR   rN   rL   r  r    rQ  rN   r  c                       e Zd ZdZdS )_SplitWordHYz6head part of a hyphenation word pair with added hyphenNrf   rR   rN   rL   r  r    s        @@DrN   r  c                       e Zd ZdZdS )r  z=a word that's forced to end with - because of paragraph splitNrf   rR   rN   rL   r  r    r  rN   r  c                        e Zd ZdZd ZddZdS )_SHYStrz for simple soft hyphenated wordsc                    |                     t                    }t          |          dk    rnt                              | d                    |                    }dg}|j        }|D ]#} ||d         t          |          z              $|dd         |_        n"t                              | |          }g |_        |S )Nr@   r3   r   r   )rY   rW  r   rX  rY  rn   r   __sp__)r[  rH   r  r`  spaspri  s          rL   rY  z_SHYStr.__new__  s    GGDMMq66!88;;sBGGAJJ//DB)C $ $BrF3r77N####QrT(DKK;;sA&&DDKrN   rP   c                     d _         t          t          t           j                                      D ]\  }} d|         }t          ||||          }	|s|	 _         ||	z   }
|
|k    r j        |d         t                     gz    fdt          t                    dz
            D             }t          |dz             } j        d|         |_        |t          t          
                    |                    gc S dS )z{
            baseWidth = currentWidth + spaceWidth + hyphenWidth
            limWidth = maxWidth + spaceShrink
            rn  Nc                 B    g | ]}|         |d z                     S )r@   rR   )rS   r  Tr`  s     rL   rU   z(_SHYStr.__shysplit__.<locals>.<listcomp>  s.    DDDqad1QqS6k*DDDrN   r@   rb  )rr  r  ro   r   r  r
   r   r  r
  rW  rn   )r`  r   r   ry  limWidthencodingr  r  swswwswnwr  r  s   `           @rL   __shysplit__z_SHYStr.__shysplit__  s   
 $DJ!$y'='=">">?? 6 62 #2#Y!"h(CC*s$* 38##ABB3t99+5ADDDDDE#a&&(OODDDA CB $BQBBIwtyy||445555 $6 6rN   NrP   )rg   rh   ri   rj   rY  r  rR   rN   rL   r
  r
    s=        **  6 6 6 6 6 6rN   r
  c                       e Zd ZdS )_SHYSplitHYNrg   rh   ri   rR   rN   rL   r  r            DrN   r  c                       e Zd ZdS )	_SHYSplitNr  rR   rN   rL   r  r    r  rN   r  c                       e Zd ZdZdS )r   z4lines/words value for a bidiSorted kind==0 paragraphNrf   rR   rN   rL   r   r     s        >>DrN   r   c
                 ^   |dk    rg S t          | |||||||||	
  
        }
|
r|
\  }}}}}}t          |          rGt           |rt          nt          ||z             |          t          t          |          |          gS  |rt          nt          ||z             t          |          gS d S rC  )r  r   r   r  r  r  )r  r   r   r}   rv  ru  r   r  r  r  r  hyr  r  r  r   r|  s                    rL   _hyphenateWordr"    s    	1uuRi:q"h(Hn]prwxxA R"#E2r1aQ<< 	R!D!Dad K KANNa 0 0335 5 9R8\\[!B$??a@P@PQQR RrN   rP   c                    g }|j         }t          |          dz
  }	d}
|t          |	|                   }|t          |	|dz                      }t          |           r|                     |          } t          |           }| D ]}t          ||||          }||z   }||k    rb|
s|
s^||k    rX ||rt          t          |
          |           nt          |
                     |dz  }|}|t          |	|                   }|}d}
|
|z  }
|} ||rt          t          |
          |           nt          |
                     |S )z
    split w into words that fit in lines of length
    maxWidth
    maxWidths[lineno+1]
    .....
    maxWidths[lineno+n]

    then push those new words onto words
    r@   r3   )
r   r   r   r/   rW   r   r
   r   r  r  )r}   r  r  r  r   r   r  r  r  r  wordTextr   r  bidir  r  r  s                    rL   
_splitWordr&    sn    	A	
BIq IHYv../HS6!8445Lqzz HHXQ<<D ! !8HX66 |  h x BDTDTBdT{:h//222
8@T@TUUUaKF#H Yv!6!67HLHA 		BR{=**1---=;R;RSSSHrN   c                    t          | d         t                    r'| d         }| dd         D ]}t          ||          }|S t          | d         t                    rwt          | d         t                    rt
          nt          }d                    d | D                       }t          | d         t                    r|nt          |dz             S d                    |           S )z-R can be a list of pure _SplitWord or _SHYStrr   Nr   r3   c              3   X   K   | ]%}t          |t                    r
|d d         n|V  &d S Nr   )rg  r  rS   re  s     rL   r  z$_rejoinSplitWords.<locals>.<genexpr>  s=      LLQz!L99@QssVVqLLLLLLrN   rb  )rg  r
  rj  r  r  rX  rn   )r  rre  cfrH   s        rL   _rejoinSplitWordsr-    s    !A$w 
aD111 	! 	!AAa  AA	AaD	&	& qum44FSS,GGLL!LLLMMqum44Mqq,qu:M:MMwwqzzrN   c                 H    t          t          |           | d                   S rC  )r   r-  )r  s    rL   _BidiStrWrapRejoinSplitWordsr/    s    (++AaD111rN   c              #   H  K   g }|j         }	 t
          }| j        ||         D ]m}|d         D ]b}t          |t                    r3 ||           t          |t                    r ||          V  |d d = J|r ||          V  |d d = |V  cn|r ||          V  d S d S )Nr   r@   )r   rg  linesr   r/  r-  r  r  )blParar   stopr  r  jfuncr  r}   s           rL   _yieldBLParaWordsr5  "  s      
A	
B" "\%*%  1 	 	A!J'' 	1a.. %((NNN!!! %((NNN!!!GGGG	 	 eAhh rN   c                    |                                  }dD ]"}t          ||          rt          ||           #t          t	          | ||                    |_        t          | j        t                    r5|j        	                    d            t          |j                  |_        t          |j        d         t                    r>t          |j        d         t                    rt          nt          |j        d         _        |gS )N)r1  r   rZ   c                     | j         S r   )	__bidiL__re  s    rL   r   z%_split_blParaSimple.<locals>.<lambda>?  s    Q[ rN   keyr   )r  r   delattrro   r5  r   rg  r1  r   sortr  r
  r  r  	__class__)r2  r   r3  r  r^  s        rL   _split_blParaSimpler?  9  s    A& & &1Q<<%1$VE$7788AG&,x(( $	0011117##!'"+l++ _-7G-L-L ^		R^3JrN   c                    g }| j         ||         }|D ]}|j        D ]}|                    |           ||d         urt          |          dz
  }|dk    rot	          ||         d          rYt          ||         j        dd          s=|dz  }|dk    r2t	          ||         d          rt          ||         j        dd          =|dk    r8||         }|j        sd|_        |j        d         dk    r|xj        dz  c_        |S )Nr   r@   r   r   r   r=   )r1  r   r   r   r   r   r   rZ   )	r2  r   r3  r  r1  r  r}   r  r  s	            rL   _split_blParaHardrA  E  s   
ALt$E 	4 	4 	 	AHHQKKKKE"IAqAQ$$71Q411$'!A$+gVW:X:X$Z[_`Z`Z[!Q$$71Q411$'!A$+gVW:X:X$!ttaDv 4qvvVBZ__affmffHrN   c                 d   |j         }|s|j         dk    r|dk    }t          |          ru|}|ot          |v }	|	r"|d|                    t                             }t	          ||j        |j                  }
|	r&|
dt	          t          |j        |j                  z  z  }
nd}
|D ]}|j        }|ot          |v }	|	rH|d|                    t                             }|
dt	          t          |j        |j	                  z  z  }
|
t	          ||j        |j	                  z  }
|	r nnd}
|dk    r|
dz  }
|t          |dd          z  }|s|                     |j        |
z
  |          }n3|d         }||j        z   |j        |
z   z
  }|                     ||          }|                    |j        |j                   |                    t          |d|j                             t          |          r|                    |           nY|D ]V}|                    |j        |j	                   |                    |j                   |                    |j                   W|                     |           |s7|                                |j        d	z  z   }t)          |||j        z
            }|S )
z:draw a bullet text could be a simple string or a frag listr   numericNr   r   r   bulletOffsetYbulletColor333333?)bulletAnchorr0   r*   indexr
   bulletFontNamebulletFontSizerZ   r   r   r   	beginTextbulletIndentrightIndentr   r   r   textOutdrawTextgetXr   r   )canvasr   r   
bulletTextr   rtlrG  rC  r|  qbulletWidthr  tx2r   bulletStart	bulletEnds                   rL   _drawBulletrY  T  s   %L
 e '))	) 	A.MQ.A0a////0!%a)=u?STTKm+{=%BVX]Xl'm'm!mm+ K  F2 2 \1177=1112A3]AJPQPZ)[)[#[[K{1aj!*EEE E X{c1{	WU?1---E 3u1+=eDDAE--u/A+/MN{E22KK$e&:;;;WU=AABBBZ  J 	  	 AKK
AJ///Q[)))KK
OOC : HHJJ!5!;;	VI(8899MrN   c                 l   | rt          |           rt          | |j        |j                  }n*d}| D ]%}|t          |j        |j        |j                  z  }&|j        |z   d|j        z  z   }|j        dk    r|j	        |j
        z   }n|j        |j
        z   }||k    r|dxx         ||z
  z  cc<   dS dS dS )z@work out bullet width and adjust maxWidths[0] if neccessary
    r   rF  r   N)r0   r
   rI  rJ  rZ   r   r   rL  r   rM  firstLineIndentr   )rR  r   r  rU  r  	bulletLenindents          rL   _handleBulletWidthr^    s      1 	K%z53GI]^^KK K K K{161:qzJJJ&4sU=Q7QQ	>5  &u'<<FF%e&;;FvaLLLY/0LLLLL1 1 rN   c                    g }d}||         }d}t          |           }dx}}	 ||k     rc||k     r#|	|         dk    r|dz  }||k     r|	|         dk    ||k    r-|dz  }||k    rn(d}| |         }
|
j        }	t          |	          }nn||k     c||k    rdS d}g }d}d}||k     r|	                    d|          }|dk     r||k     t          |	||         |
j        |
j                  }||z  }||k    r8|g k    r2||z
  }|j        |         dk    r|dz
  }|dz
  }|j        |         dk    nC|dk     r|}|d         |
u r||d<   n|
||f}|                    |           ||k    r|dz  }||k     ːL)z
    given a list of ParaFrags we return a list of ParaLines

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

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

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

1S1S1S.S.S S
$%aDJ$%aD$% % ,,,<>1A1A FA!OJLL<>):8IjYbcmnnooo)$SZZ0 ) ) )$R=) LIu B$$z 1}}_Q|}}%5hyR[I[\ablmmnnn!%((((s   "H8 8IIc                 .   |j         | _        t          |dd          | _        t          |dd          | _        t          |dd          pd| _        t          |dd          | _        t          |dd          | _        t          |dd          pd	| _        d S )
NunderlineColorr3   underlineWidthunderlineOffsetz-0.125fstrikeColorstrikeWidthstrikeOffsetz0.25f)	rg  rz  r   _underlineColor_underlineWidth_underlineOffset_strikeColor_strikeWidth_strikeOffset)ry   rQ  r   s      rL   _setTXLinePropsr    s    !,B '7;;B '7;;B!%(9"==JBeM"55BOeM"55BOu^B77B7BrN   c                     t          d          }g j        }| D ];}d}|dd         D ]!\  }}t          |d          r|}n|s|}||z  }" ||           <t          |j        |d          S )z0return the Visual order for a list of frag wordsi   r3   r@   Nr   T	directionwx)chrr   r   r   __self__)r   r  pur  r}   rZ   r  rH   s           rL   fragWordsVisualOrderr    s    	VB
	A  abbE 	 	DAqq""  AIDD	$
Y$????rN   c                     | j         S r   )	__bidiV__r9  s    rL   r   r     s    ak rN   c                       e Zd ZdZddZd Zd Zd Zd	 Zd
 Z	d Z
d Zd Zd Zd Zd ZddZddZd Zedd            ZdS )r   a   Paragraph(text, style, bulletText=None, caseSensitive=1)
        text a string of stuff to go into the paragraph.
        style is a style definition as in reportlab.lib.styles.
        bulletText is an optional bullet defintion.
        caseSensitive set this to 0 if you want the markup tags and their attributes to be case-insensitive.

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

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

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

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

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


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

aa199-e449aABBlllllGTUV\L]L]6jeAFC6H6H6Hcdcjllllll::]5%9%9::::::rN   c                    |sg S |j         }||         j        }|t          |          k    r||         j        nt          | j                  }| j        ||         }|r;t	          |d         t
                    r |d= |rt	          |d         t
                     t	          |d         t                    r4t	          |d         t                    rt          nt          |d         _
        |S r)  )r1  sFWr   r  rg  rH  rN  rl  rt  rS  r>  )r`  r2  r   r3  r1  r  sFWNr  s           rL   _split_blParaProcessedz Paragraph._split_blParaProcessed  s    BYEl"&E

"2"2uT{DJJs4x >Jqu]33>2a>Jqu]33>aeL)) 	Y,6quX,F,FXjjLAbEOrN   c                 t    | j         j        dk    rt          n!t          | j                  st
          n| j        S rC  )r2  r   r?  r  r  rA  r  r  s    rL   _get_split_blParaFunczParagraph._get_split_blParaFunc  s;    '+{'7':':##3CDJ3O3O 9++!8	;rN   c           
         t          | j                  dk    s|t          k     s|t          k     rg S t          | d          s|                     ||           | j        }| j        }t          | dt          |dd                    }|j        }|j	        }|j
        dk    r|dvrdx}}	|dk    rOt          |j	                  D ]9\  }
}t          |j        |j        z
  |          }|	|z   }||dz   k    r n|}	|
dz   }:n|d	k    r?t          |j	                  D ])\  }
}|	|j        z   |j        z
  }||dz   k    r n|}	|
dz   }*ngt          d
|z            |}|dk    rt          |d|j        z            }n|d	k    r
d|j        z  }t#          |t%          |          z            }||z  }	t          | dt          |dd                    }|s|dk    s|dk    r| `g S t          |          }t          | dt          |dd                    }||k    r| gS |s!||dz   k    r|r|dk    s|dk    r|dz  }n| `g S |                                 }|j        rt+          |          }d |_        n|}|                     d || j         ||d|                    }t1          d|j	        d|         ||          |_        t3          |j	        |dz
           t4                    o2t          |j	        |dz
           d          o|j	        |dz
           j         |_        d|_        |	|_        ||_        |j         dk    rt+          |          }d|_         |                     d |d  ||||                    }dD ]P}t          | |          r>tC          ||t          | |                     tC          ||t          | |                     Q||gS )Nr   r2  r   r3   r@   r  r   r   r   r  r   allowOrphansallowWidowsr  )rR  r  )r   r1  aHr  r>  )r   )"r   r  r+   r   r	  r2  r   r   r   r1  r   r   r   r   r   r  r   r&  rE   r  r   r(   r>  rR  r   rg  r   r>  _JustifyLast
_splitparar   r   r[  setattr)r`  r  r  r2  r   r   r   r1  rH   r   r  r  r   r'  r  r  r  style1P1P2r^  s                        rL   rY   zParagraph.split  sB   tz??AE!1!1[5F5Fr	 tH%% 	.IIj---
d=}R1P1PQQ-;>>k;;NAE!!$V\22  CAaAHQY.w77AqAT)))F!AAe##$V\22  CAaqx	1AT)))F!AA !?+!MNNNAE!!EN 233e##&Ka())AqSFtN75PQ3R3RSS 	A!Q$$IJJd=}Q1O1OPPa446M 	!A#vv  QTTaccFAAI))++= 	e__F!FNNF>>$vttFSTUVGWGW>XX16<!+<zZZZ	  *&,qs*;HEE  @$+FL1,={$K$K @$*L1$5$?A 	 A%%UOOE$%E!>>$u44q;K;K>LL 	. 	.AtA .1WT!__---1WT!__---2wrN   c                 :    |                      | j                   d S r   )drawParar  r  s    rL   drawzParagraph.draw  s     	dj!!!!!rN   c                 %  @AB d| _         t          |t          t          f          s|g}n|}g }dx| _        }t          |          dz
  }| j        }|j        BBoB                                dv }|rt          }t          st          d           |j        o%t          t          |j                  j                  }t!          |dd          }	|	rlt#          |	          r;|	                                }	|	r"t&          rt'          j        |	          j        }	n'd}	n$t-          |	          st/          d|	z            nd}	|j        }
|j        }|dk    }|j        }|j        }|	p|
p|}|rt!          |d	t8                    }dx| _        | _        t?          | j         ||           |d         }t!          | d
t!          |d
d                    }|dv}| j!        }t          |          }|dk    rt|j"        sltG          |d         d          sUtG          |d         d          s>tI          |          s.|s+|d         AAj%        }Aj        }tM          ||          \  }}d}tG          Ad          rt%          Aj'                  }|sA(                    dg |||          S tS          |          }|rO|}|r4tU          |tV          d          @@AfdtY          |          D             }ntU          |B          }||k    }nYt          Aj-        t\                    }Aj-        dd         }|D ]}t%          |          r nA(                    dg |||          S t_          d||| j0                  }||z  } g }!| }"t_          d||| j0                  }#d}$|rF|1                    d          }%|%st          |%td                    rd}$ntf          |%v rti          |%          }%t_          |%||| j0                  }&|"|z   |&z   }'|| t          |!          z  z   }(|'|(k    rt          |%tj                    s|$st          |%th                    r|%6                    |||"|z   |#z   dz
  |(| j0                  })|)r|)|dd<   | xj        dz  c_        d}$t          |!          r^|to          ||                   }*|s|%j8        |#z   dz   |*k    r5|%6                    ||d|#z   dz
  |*| j0                  })|)r|%g|dd<   d}$d}%|"}'n|rt!          Add           }+ts          |+r|	nd|||%|&|'|(|+r|
nd|o|+|
  
        })|)r|)|dd<   | xj        dz  c_        d}$|rAt          |!          r2ts          |+r|	nd|||%|&|&||+r|
nd|o|+|
  
        })|)r|%g|dd<   d}$|"}'d}%|r{t          |%td                    sf|$sdto          ||          },|&tu          ||,|,dz                      k    r6tw          |%|"|z   ||||| j0                  |dd<   | xj        dz  c_        d}$x|'|(k    st          |!          r|$rk|%r|!<                    |%           |$rOd}$|'| j         k    r|'| _         |<                    ||'z
  |!f           g }!| }"|dz  }|to          ||                   }nO|'}"nL|"| j         k    r|"| _         |<                    ||"z
  |!f           |%g}!|&}"|dz  }|to          ||                   }|F|!g k    r,|"| j         k    r|"| _         |<                    ||"z
  |!f           |r5|D ]#}-|-d         =                    t|                     $t]          |          }A(                    d||||          S |dk    r2t          d|j%        |j        |j@        |j%        d|j%        z  g           S |jA         }.g }g }/|/j<        }0t          ||          }d}|ret          d |D                       sLt          |B          @|r@fdtY          |          D             }n+@BfdtY          |          D             }n|rd  |D             }d}1|
r|1                    d          } |0|           |d!         d         AAj        }Aj%        }|sdx}2x}}"|}3tM          ||          \  }4}5|d         }&|d         d         A|&dk    r	|"|z   |&z   }'n|"}'AjE        t          k    }6|}(|r^|}7|D ]O}8|8jE        t          k    r=|8j'        H                    d          }9|9r!|7|9t_          d|8j        |8j%                  z  z  }7P|7|z  }7|(|7z  }(|6sY|'|(k    rRt          |t                    s<tG          Ad          s+t          |t                    r%|K                    |'|(          })|)ro|)|dd<   |L                    dt          dA(                    t          d"          dfg                     |/1                    d!           | xj        dz  c_        t          |/          dk    r|to          ||                   }*|s|j8        dz   |*k    rc|K                    |&|*          })|)rKt          dA(                    t          d"          dfg          |g|dd<   |/1                    d!           _n&|r#t!          Add           }+t          |+r|	nd||'|(|+r|
nd|o|+|          })|)ro|)|dd<   |L                    dt          dA(                    t          d"          dfg                     |/1                    d!           | xj        dz  c_        |rt          |/          dk    rlt          |+r|	nd||&||+r|
nd|o|+|          })|)rKt          dA(                    t          d"          dfg          |g|dd<   |/1                    d!           |rt          |t                    sto          ||          },|&tu          ||,|,dz                      k    rt          |||z
  |"z
  ||          |dd<   |L                    dt          dA(                    t          d"          dfg                     |/1                    d!           | xj        dz  c_        Q|'|(k    r|2dk    p|6}:|:s|6rf|d         d         };|;r|2dz  }2Aj%        }|r`AjE        t          k    r7t          t          AjT        j        |          AjT        jU        |          \  }}n1tM          Aj        |          \  }}ntM          Aj        |          \  }}tu          |3|          }3tu          |4|          }4to          |5|          }5|sA(                                }<|<g}|;|<_'        nt          |<A          s|rft          |          dz
  }=|=dk    rN||=         }8|=dz  }=|8jE        t          k    r+|8j'        W                    d          s|8xj'        dz  c_'        n|=dk    NA(                                }<|<                    |<           |;|<_'        nQ|r?|<j'        W                    d          s|<xj'        d|;z   z  c_'        n!|<xj'        |;z  c_'        n|<xj'        |;z  c_'        t          |t                    rt_          d||          nd}d}>|d#d         D ]}=|=d         (                                }<|=d         |<_'        |<j'        rd}>|<                    |<           |<j%        }|r`|<jE        t          k    r7t          t          |<jT        j        |          |<jT        jU        |          \  }}n1tM          |<j        |          \  }}ntM          |<j        |          \  }}tu          |3|          }3tu          |4|          }4to          |5|          }5|;s|>r|2dz  }2|'}"n|6rBA(                                }<|<                    |<           |.ot          |t                     }?nd}?|"| j         k    r|"| _         |<                    t          ||"z
  |2|?||3|4|5||1$	  	                   t          |/          dz
  }1|dz  }|to          ||                   }|6rg }:t          |t                    rt_          d||          nd}||z  } |&}"d}2A(                                }<|<j%        }3|r`|<jE        t          k    r7t          t          |<jT        j        |          |<jT        jU        |          \  }}n1tM          |<j        |3          \  }4}5ntM          |<j        |3          \  }4}5|<g}|d         d         |<_'        |d#d         D ]}=|=d         (                                }<|=d         |<_'        |<                    |<           |<j%        }|r`|<jE        t          k    r7t          t          |<jT        j        |          |<jT        jU        |          \  }}n1tM          |<j        |          \  }}ntM          |<j        |          \  }}tu          |3|          }3tu          |4|          }4to          |5|          }5|
|r@|"| j         k    r|"| _         |<                    t          ||"z
  |2d||3|4|5||1$	  	                   |r%|D ]"}-|-j-        =                    t|                     #|/| _!        t          d|%          S )&a^  
        Returns a broken line structure. There are two cases

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

                        Each line has two items.

                        1. unused width in points
                        2. word list

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

        This structure can be used to easily draw paragraphs with the various alignments.
        You can supply either a single width or a list of widths; the latter will have its
        last item repeated until necessary. A 2-element list is useful when there is a
        different first line indent; a longer list could be created to facilitate custom wraps
        around irregular objects.r   r@   )r   LTRr3   hyphenationLang)langNzLhyphenator should be a language spec or a callable unicode -->  pairs not %rr-   r   r  r   r   FrZ   )r   r1  r   r   r   Tr  c           	          g | ];\  }}t          t          |j        t          j                   |         |          <S )r   r   )r   shapeStrr   r   r   )rS   r  re  VXr  s      rL   rU   z(Paragraph.breakLines.<locals>.<listcomp>h  s\      %P  %P  %Pwzwxyz%5hq!*^_^h6i6i6ijlmnjopq%r%r  %P  %P  %PrN   )r  r=   rb  r   )r  nobrr:  皙ɿ)r   r   r   r   r   r   r1  c              3   4   K   | ]}t          |          V  d S r   )isBidiIndexListr*  s     rL   r  z'Paragraph.breakLines.<locals>.<genexpr>  s*      $H$HA_Q%7%7$H$H$H$H$H$HrN   c           	      x    g | ]6\  }}t          t          |          t          |         |                    7S rR   )bidiIndexListWrapr   r   )rS   r  re  r+  s      rL   rU   z(Paragraph.breakLines.<locals>.<listcomp>  sB    rrrY\YZ[\/a0@0@2a5QRASASTTrrrrN   c                 H    g | ]\  }}t          ||         |           S ))r  bidiVbidiL)r   )rS   r  re  r+  r   s      rL   rU   z(Paragraph.breakLines.<locals>.<listcomp>  s6    rrrY\YZ[\l1xbeRSTTTrrrrN   c                 ,    g | ]}t          |          S rR   r   r*  s     rL   rU   z(Paragraph.breakLines.<locals>.<listcomp>  s     ;;;q-**;;;rN   r   )r  rZ   rA   )	r.  r/  r>  r   r   r   r   r   r  r  )Z
_width_maxrg  r  ro   r   r   r   r   r  r   r   shapingr  r   r   shapabler   r0   rC   pyphenPypheniteratecallabler  r  r  spaceShrinkagesplitLongWordsr-   _splitLongWordCount_hyphenationsr^  rR  r  r   r   r  r   r   rZ   r  rY   r   r  r   r   r   r
   r  popr  rW  r
  r  r  r   rr  r"  r   r&  r   r=  	sortBidiVr   r   justifyBreaksr  anyr  r  r  r  r|   rL  rl  r  r  rH  r  rJ  r  r  r   r   r   r   r1   r  rF  r   )Cr`  r   r  r1  r  r  r   doBidir7  r  r  r  hyphenation2r=  r>  attemptHyphenationr  r   r   r  r  r  r   r   r   r   bidiSortrZ   r   _wordsr}   
spaceWidthdSpaceShrinkcLiner  hywforcedSplitwordr  ru  r  hswnMWhyOknmwr  njlbvr  aFWr  r'  r  r  r  r>  spaceShrinkwinsr  nTextr  r  nillbr+  r  r   sC                                                                   @@@rL   r  zParagraph.breakLines  s   @ %t-- 	 E7yyi  f	NN1$	
>?hnn..-? 	F -JD)@)@)I$J$JU#4R88
 
	Z   ~'--//
 && &!'J!?!?!?!GJJ!%JJj)) ~ !or|!|}}}~ J-#7*1,--'P>P=P 	WE"<=UVVE899 4#5 	4?5;;;Q<d=}R1P1PQQ 
2

E

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


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

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

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

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

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

!H+ I K!*4EE K'!HQZ*H*HHE( YB(uZSWXXXF'',CC)++.CC(**-CC*,,6;V22AVCC$^d9oo%EFFF ^^E511"0DN4K4Q4Q4S4S"SFE222("55'"&&&(R\!!  "]
 *"  !,#z,6)R\Qx(6VQY # #$.*>*>"HRx000b!!! q&)) & &A 8D,7CH 'E 'dnU.B.B!&CXa[$999!"%%%%OOB!!!!!A :rN   c                    t          | dd          }|rg }|j        }t          |          rA|D ]=}|dd         D ]\  }} ||           t          |t                    r |d           >n%|D ]"}t          |d          r ||j                   #d                    |          S |r$t          | dd          }|t          |           }|S dS )z`Convenience function for templates which want access
        to the raw text, without XML tags. r  Nr@   r=   rZ   r3   )	r   r   r  rg  rF  r   rZ   rn   r  )	r`  identifyr  plainsplains_appendrO  r   rZ   r  s	            rL   getPlainTextzParagraph.getPlainText
  s    WT** 	F"MM&& 	1! + +D&*122h , ,
d%d++++!$w// +%c***	+ " 1 1DtV,, 1%di000776??" 	4t,,D|DJJTK2rN   c                     t          | d          s
J d            | j        j        r| j        fd}n
| j        fd}t	          t          || j        j                            S )zConvenience function; tells you how wide each line
        actually is.  For justified styles, this will be
        the same as the wrap width; for others it might be
        useful for seeing if paragraphs will fit in spaces.r   z%Cannot call this method before wrap()c                     || j         z
  S r   )r.  r  r}   s     rL   r   z0Paragraph.getActualLineWidths0.<locals>.<lambda>
  s    a$/.A rN   c                     || d         z
  S rC  rR   r  s     rL   r   z0Paragraph.getActualLineWidths0.<locals>.<lambda>
  s    a$q'k rN   )r   r2  r   r   ro   ru   r1  )r`  r  s     rL   getActualLineWidths0zParagraph.getActualLineWidths0
  so    
 tW%%NN'NNNN; 	:"&*AAADD"&*999DCT[.//000rN      Fc                 
   dg}|j         }t          |           D ]\  }}|r| |d|d         z             |dd          D ]Q} |dt          |d                   z              |d|d         z              |d||j        j        fz             R |d            |d	|d         d
                    d |dd          D                       ||j        j        fz             |dz  }|d|z                       |          z   S )N[z    [%r,r   r@   z        (%s,)z        %r),z    ], #%d %sz    ]z[%r, %s], #%d %s, c              3   T   K   | ]#}d |d         j         j        d|d         dV  $dS )r  r   ,r@   )N)r>  rg   )rS   r  s     rL   r  z&Paragraph.dumpFrags.<locals>.<genexpr>  sG      8v8vjljlbeoF^F^F^_abc_d_d_d9e8v8v8v8v8v8vrN   r=   r5   )r   r   r  r>  rg   rn   )r  r]  fullr  r  r  r  r  s           rL   	dumpFragszParagraph.dumpFrags
  se   EXU## 		Q 		QCAa Q:!$%%%ABB% C CBBbe4555B~1-...B!AK,@)AABBBB7%1dii8v8vpqrsrtrtpu8v8v8v.w.wxyz{  {F  {O  )P  P  Q  Q  Q  Q3JDF==####rN   )NNNr@   rP   r   r   )r  F)rg   rh   ri   rj   r  r  r  r	  r  r  r  rY   r#  r  r  rK  r"  r  r  staticmethodr  rR   rN   rL   r   r     sB       = =|n n n n    .'" '" '"R; ; ;	 	 	; ; ;
S S Sj" " "B2 B2 B2H(: (: (:T) ) )V" V" V" V"p   2
1 
1 
1 $ $ $ \$ $ $rN   r   __main__c                    t          dt          |           z             | j        j        }t          j        j        }t          |          D ]\  }}||         }t          |d          r|j	        }n|d         }t          |          } |d||t          t          |dd                    fz             t          |          D ]-} |d|t          ||         d||                   fz             .t                       d S )	Nz$dumpParagraphLines(<Paragraph @ %d>)r   r@   zline%d: %d(%s)
  r/  Unknownz %d:'%s'rZ   )printidr2  r1  sysstdoutwriter   r   r   r   rX  r   r  )Pr1  outwr  r  r   nwordsr}   s           rL   dumpParagraphLinesr    s   4r!uu<===z&& 
	 
	FAd8DtG$$  
QZZFD%6#gd;y6Y6Y2Z2Z([[\\\6]] G GZ758F58#D#D EEFFFFGGGG
	 
	rN   c           	          d| d         z  g}dD ]F}t          | d         |          r.|                    |dt          | d         |                     Gd                    |          S )Nz'%s'r@   )	r   r   r   r   rv  striker   r   r>  r   =r  )r   r   r   rn   )r}   r  r^  s      rL   fragDumpr    sn    QqTM?s 	8 	8AqtA 8AAAgad1ooo6777yy||rN   c                 `   t          dt          |           |                                 fz             | j        t	                    }t          |          D ]Mt          d         j        d                    fd         j        D                       fz             Nt          j
        j        }dd}t          d          D ]_}||d         z  } |d||d         fz             |dd          D ]} |d	t          |          z             t                       dz  `d S )
Nz6dumpParagraphFrags(<Paragraph @ %d>) minWidth() = %.2fzfrag%d: '%s' %sr=   c                 \    g | ](}|t           k    |d t                   |          )S )r  )rZ   r   )rS   r  r  r  s     rL   rU   z&dumpParagraphFrags.<locals>.<listcomp>#  sl      BK  BK  BKhi  CD  FJ  CJ  CJQQQwW\]^W_`aObObObBc  CJ  CJ  CJrN   r   ih  zfragword%d: cum=%3d size=%dr@   z (%s))r  r  r  r  r   r  rZ   rn   r  r  r  r  r  r  )r  r'  r  cumr  r}   r  r  s         @@rL   dumpParagraphFragsr    s   F"Q%%QRQ[Q[Q]Q]I^^___u::q 	N 	NA#q%(-  BK  BK  BK  BK  BKmrstmum~  BK  BK  BK  9L  9L  'M  M  N  N  N  NzuS)) 	 	A1Q4KCD.!S!A$?@@@qrrU , ,Wx{{*++++GGGFAA	 	rN   processed_fragsc           	         t          t          j        d         t                    ri g j        }fd}t          j        D ]} | ||                     t          d           t          d                    d t                                                    D                                  t          t          dd                    |j
                  d           t          d           d S d S )	Nr   c                 B   g j         }| dd          D ]Y}t          |d                   }|vrt                    |d         f|<    |d|         d         d|d         d           Zd| j        j        d| d         dd                    |j                  d	S )
Nr@   r   z(__frag_z__, r  r  r  r  z]),)r   r  r   r>  rg   rn   r  )r}   r|  re  fid_Fs       rL   	_showWordz%dumpProcessedFrags.<locals>._showWord4  s    I122 ? ?AQqT((C"}}#&r771Q4.3AARWQZZZ!=>>>>	?
 34+2F2F2F!diiXYXbNcNcNcNcddrN   zfrom reportlab.platypus.paragraph import _HSFrag, _SplitFragHS, _SplitFragHY, _SplitFrag, _getFragWords
from reportlab.platypus.paraparser import ParaFrag
from reportlab.lib.colors import Colorr5   c              3       K   | ]	}d |z  V  
dS )z__frag_%s__ = %rNrR   r*  s     rL   r  z%dumpProcessedFrags.<locals>.<genexpr>?  s(      QQ/!3QQQQQQrN   z=[
z  ]z%print(_getFragWords(processed_frags)))rg  r   r  ro   r   r  rn   r  r~  r  r  )r  r   _Sr  re  r  s        @rL   dumpProcessedFragsr  0  s   bhqk$'' 	;BBe e e e e X ! !99Q<<      X  Y  Y  Y$))QQVBIIKK=P=PQQQRRSSS2;9O9O9O9OPQQQ9:::::!	; 	;rN   )getSampleStyleSheetr'   )cm4c                 4    d|v pd|v pt          |           |v S )Nall*)rX  )r  TESTSs     rL   flaggedr  I  s$    ~@@Q5@rN   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Ӆ@r  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  Courierr)  )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   )r=   r  )Tr  )r  )__all____version__rj   stringr   operatorr   unicodedatar	   reportlab.pdfbase.pdfmetricsr
   r   r   reportlab.pdfgen.textobjectr   r   r   r   r   r   r   r   r   r   r   reportlab.pdfbase.ttfontsr   reportlab.platypus.paraparserr   r   r   rG   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/   r0   reportlab.lib.rl_accelr1   retypesr2   r9  rn   r^   compileescaperY   rX   r  rD  rM   rC   ra   rd   r   r   rs   r   rx   r~   r   r   r   r   r   r   r   r   r   r   r#  r   r2  r7  r:  r?  rA  r   ro   rF  rH  rJ  rL  rN  rP  rS  rX  rU  rj  rl  rs  rt  r  r  r  r  r  r  r  r  r  r  Ir  r  r  _hy_lettersrW  _hy_shyr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r"  r&  r-  r/  r5  r?  rA  rY  r^  re  rt  r  r  r  r  r  r  r  r  r  r  r  rB  r   rg   r  r  r  r  r  reportlab.lib.unitsr  r  argvr  r  
styleSheetBr   r   rZ   r  r  r  r	  r}   r   r  rH   r  r  h0r  r   r  r  rR   rN   rL   <module>r     s  	
 3                         O O O O O O O O O O9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 4 3 3 3 3 3 ] ] ] ] ] ] ] ] ] ] ] ] 1 1 1 1 1 1 & & & & & & H H H H H H H H H H H H 1 1 1 1 1 1 ? ? ? ? ? ? ? ? / / / / / /       # # # # # #            : : : : : : : : : : + + + + + + 				      MMMMFFF
 
ww   @ bj)")D//1228
8YRYt__455<   q q q q
      	 	 	 	 	 	 	 		 	 	 	 	t 	 	 	9 9 9              &   &   "g g g g  (  9 9 9$ 	i i iV4 4 4 4"       ,   $    ] ] ] ]W W W	 	 	 	 	d 	 	 		 	 	 	 	D 	 	 		 	 	 	 	 	 	 		 	 	 	 	* 	 	 	
	 	 	 	 	; 	 	 		 	 	 	 	:g 	 	 		 	 	 	 	< 	 	 	    S       $&/ &/ &/ &/ &/t &/ &/ &/PZ Z Z Z ZHl Z Z Z	 	 	 	 	, 	 	 	   

	( ( (,q q q| | | ||
 
 
. . .f "*  Q  SU  SW  X  X* * *   
bjABBbjCDD
277DU#;<<==BJrwwW['GHHII bj$wt!45566>) >) >)@  ,H H HY1 Y1 Y1x 7   (	 	 	 	 	 	 	 		 	 	 	 	J 	 	 		 	 	 	 	* 	 	 		 	 	 	 	; 	 	 		 	 	 	 	3 	 	 	#6 #6 #6 #6 #6c #6 #6 #6J	 	 	 	 	', 	 	 		 	 	 	 	
 	 	 		 	 	 	 	t 	 	 	
 3
R 
R 
R 
R! ! ! !F  2 2 2  .
 
 
  1 1 1f1 1 1(8 8 8t    . RZ233
C C C @ @ @/ / /b# # #J/ / / / /3 / / /@ @ @@O) O) O) O)bC C C@ @ @ @ "!	E$ E$ E$ E$ E$ E$ E$ E$N  Z       $; ; ; ;( IHHHHHHH&&&&&&JJJHQRRLEbyy% A A A A %$&&J:AN+A666EENwqzz 
 )D

1BffRnn!1GGBrNN 	 	AFF2bMMMq!!!BBwqzz 
)H*U]J^
_
_1ffRoo!1wqzz  )D*V,
-
-1ffT6""!1wqzz ! X
)D!

1ffRmm!"1Q'''1GGBrNN1Q4   !		"R  2 B'''1Q4   wqzz  EHSXXXXccRUhhhhW
)D*V,
-
-1ffT6""!1wqzz " 	" 	"D ij2!DDDAq!!!&&v&&CAaq!!!!wqzz g
)D*V,
-
-1ffT6""!1wqzz !i
)D*X.
/
/1ffT6""!1GGD3cc!ff1Q4   1Q4   	!		$1Q4   1Q4    wqzz 
) )DZ5IPZ[[[
\
\1ffQrT"Wf%%!1wr{{ %
)DZ5IPZ[[[
\
\1ffQrT"Wf%%!1wr{{ c )D~~h	SUVVV
W
W
W1ffZ&&!1wr{{ 444444======VVL)9::;;;VV34OPPQQQ Q
)D~~j,XZ[[[
\
\
\1i Z s   .B3 3B9