
    F j~                        S r SSKrSSKJrJr  SSKJr  SSKJrJ	r	J
r
JrJrJrJrJr  SSKJrJrJrJr  SSKJr  SS	KJrJr  SS
KJr  SSKJrJr  SSKJ r   \(       a  SSK!J"r"  SSKJ#r#J$r$  SSK%J&r&  SSKJ'r'   " S S\
5      r( " S S\5      r) " S S\
5      r* " S S5      r+ " S S5      r, " S S5      r- " S S\5      r. " S S \.5      r/ " S! S"\5      r0 " S# S$\/\05      r1g)%zJ
Usage documentation at: <https://py-pdf.github.io/fpdf2/TextRegion.html>
    N)ABCabstractmethod)TracebackType)TYPE_CHECKINGAny
NamedTupleOptionalSequenceTypeUnioncast   )AlignWrapModeXPosYPos)FPDFException)RasterImageInfoVectorImageInfo)preload_image)	FORM_FEEDMultiLineBreak)get_scale_factor)FPDF)FragmentTextLine)	SVGObject)	ImageDatac                   *    \ rS rSr% \\S'   \\S'   Srg)Extents$   leftright N)__name__
__module____qualname____firstlineno__float__annotations____static_attributes__r$       a/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/fpdf/text_region.pyr    r    $   s    
KLr,   r    c                   v   ^  \ rS rSrSrS\S\SS4U 4S jjrS\S	   SS4S
 jrS\S	   S\	4S jr
SS jrSrU =r$ )TextRegionMixin)   z>Mix-in to be added to FPDF() in order to support text regions.argskwargsreturnNc                 T   > S U l         U R                  5         [        TU ]  " U0 UD6  g N)%_TextRegionMixin__current_text_regionclear_text_regionsuper__init__)selfr1   r2   	__class__s      r-   r9   TextRegionMixin.__init__,   s)    =A" $)&)r,   region
TextRegionParagraphCollectorMixinc                 &    [        SU5      U l        g )Nr?   )r   r6   r:   r=   s     r-   register_text_region$TextRegionMixin.register_text_region1   s     &*,%?"r,   c                      U R                   U:H  $ r5   r6   rB   s     r-   is_current_text_region&TextRegionMixin.is_current_text_region6   s     ))V33r,   c                     S U l         g r5   rF   r:   s    r-   r7   !TextRegionMixin.clear_text_region;   s
    %)"r,   )__current_text_regionr3   N)r%   r&   r'   r(   __doc__r   r9   r   rC   boolrG   r7   r+   __classcell__r;   s   @r-   r/   r/   )   sc    H*c *S *T *
@CD@	@
4CD4	4
* *r,   r/   c                   J    \ rS rSr% SrS\S'   S\S'   Sr\\S'   Sr\\S	'   S
r	g)LineWrapper?   zConnects each TextLine with the Paragraph it was written to.
This allows to access paragraph specific attributes like
top/bottom margins when rendering the line.
r   line	Paragraph	paragraphF
first_line	last_liner$   N)
r%   r&   r'   r(   rN   r*   rX   rO   rY   r+   r$   r,   r-   rS   rS   ?   s)    
 JItr,   rS   c                   H    \ rS rSrS\S   S\S   S\SS4S	 jrS\4S
 jrSr	g)BulletK   bullet_fragmentsr   	text_liner   bullet_r_marginr3   Nc                 6    Xl         X l        X0l        SU l        g )NF)	fragmentsr^   r_marginrendered_flag)r:   r]   r^   r_   s       r-   r9   Bullet.__init__L   s     0@"'#(r,   c                 T    SnU R                    H  nXR                  5       -  nM     U$ Nr   )ra   	get_width)r:   fragments_widthfrags      r-   get_fragments_widthBullet.get_fragments_widthW   s*    !"NND~~//O #r,   )ra   rb   rc   r^   )
r%   r&   r'   r(   r
   r	   r)   r9   rj   r+   r$   r,   r-   r[   r[   K   sC    	)":.	) J'	) 		)
 
	)U r,   r[   c                   \   \ rS rSr          S"S\S   S\\\-     S\\   S\S\S	\S
\\   S\S\	S\\
   S\4S jjrS\4S jrS#S jrS\\\      S\\   S\\   SS4S jrS$S\S\\\-     SS4S jjrS\S
\S\\\S   \S   4      4S jrS$S\\   SS4S jjrS\	S\\   4S  jrS!rg)%rV   ^   Nr=   r>   
text_alignline_height
top_marginbottom_marginindentr_   bullet_stringskip_leading_spaceswrapmodefirst_line_indentc                    Xl         UR                  U l        S U l        U(       aw  [        R                  " U5      nU[        R
                  [        R                  [        R                  [        R                  4;  a  [        SUR                   S35      eXl        Uc  UR                  U l        OX0l        X@l        XPl        X`l        Xl        U
c  U R                   R                   U l        O["        R                  " U
5      U l        / U l        Uc%  S['        S5      -  U R                  R(                  -  nU(       aA  U R+                  X5      n[-        U[.        5      (       d   e[1        US   US   U5      U l        OS U l        Xl        g )NAText_align must be 'LEFT', 'CENTER', 'RIGHT', or 'JUSTIFY', not ''.   mmr   r   )_regionpdfrn   r   coerceLCRJ
ValueErrorvaluero   rp   rq   rr   rt   ru   r   _text_fragmentsr   kgenerate_bullet_frags_and_tl
isinstancetupler[   bulletrv   )r:   r=   rn   ro   rp   rq   rr   r_   rs   rt   ru   rv   text_align_convbullet_frags_and_tls                 r-   r9   Paragraph.__init___   sT    !::+/%*\\*%=Ouww%''&JJ WXgXmXmWnnpq  .O%11D*$*#6  LL11DM$OOH5DM13"  "24"88488::EO"&"C"C# 159999,2#A&(;A(>-DK DK!2r,   r3   c                     SU R                    SU R                   SU R                   SU R                   SU R                   SU R
                   S[        U R                  5       S3$ )	NzParagraph(text_align=z, line_height=z, top_margin=z, bottom_margin=z, skip_leading_spaces=z, wrapmode=z, #text_fragments=))rn   ro   rp   rq   rt   ru   lenr   rJ   s    r-   __str__Paragraph.__str__   s|    #DOO#4N4CSCSBTTabfbqbqar s"0011GH`H`Gaalmqmzmzl{ |  #D$8$8 9:!=	
r,   c                     U $ r5   r$   rJ   s    r-   	__enter__Paragraph.__enter__   s    r,   exc_type	exc_value	tracebackc                 8    U R                   R                  5         g r5   )r|   end_paragraphr:   r   r   r   s       r-   __exit__Paragraph.__exit__   s     	""$r,   textlinkc                 <   U R                   R                  (       d  [        S5      eU R                   R                  U5      R	                  SS5      nU R                   R                  USS9nU(       a  U H	  nX%l        M     U R                  R                  U5        g )N3No font set, you need to call set_font() beforehand Fmarkdown)	r}   font_familyr   normalize_textreplace_preload_font_stylesr   r   extend)r:   r   r   normalized_stringra   ri   s         r-   writeParagraph.write   s    xx## UVV HH33D9AA$K HH))!E *  	
 ! 	 "##I.r,   r   r   c           
         U(       d  g U R                   R                  U5      nU R                   R                  (       d  [        S5      eU R                   R	                  USS9nSnU H  nXER                  5       -  nM     [        UU R                  R
                  U R                   R                  U R                  U-
  U-
  -   U R                   R                  4U R                  =(       d-    U R                  R                  =(       d    [        R                  U R                  U R                  U R                  =(       d    U R                  R                  S9nUR!                  5       nX74$ )Nr   Fr   r   )	max_widthmarginsalignru   ro   rt   )r}   r   r   r   r   rg   r   r|   c_marginrr   rn   r   r   ru   ro   rt   get_line)r:   rs   r_   r]   rh   ri   bullet_line_breakbullet_text_lines           r-   r   &Paragraph.generate_bullet_frags_and_tl   s+    //>xx## UVVHH)) *  	
 "#$D~~//O %*ll,,!!T[[?%B_%TU!! //GT\\%<%<G]](( $ 8 8 !0||//
 -55711r,   hc                 F   U R                   R                  (       d  [        S5      eUc#  U R                   R                  U R                  -  nU R                   R                  SSS9S   nXR                  -  UR                  l        U R                  R                  U5        g )Nr   
Fr   r   )r}   r   r   	font_sizero   r   r   graphics_statefont_size_ptr   append)r:   r   fragments      r-   lnParagraph.ln   s    xx## UVV9""T%5%55A88005 1 
 

 01::~,##H-r,   print_shc                    / n[        U R                  U R                  R                  U R                  R
                  U R                  -   U R                  R
                  4U R                  U R                  =(       d-    U R                  R                  =(       d    [        R                  UU R                  U R                  U R                  =(       d    U R                  R                  S9	n/ U l        UR                  5       nSnUb0  UR                  [!        X@US95        SnUR                  5       nUb  M0  U(       a(  US   n[!        UR"                  XR$                  SS9nXbS'   U$ )N)r   r   rv   r   r   ru   ro   rt   T)rX   F)rX   rY   )r   r   r|   rg   r}   r   rr   rv   rn   r   r   ru   ro   rt   r   r   rS   rU   rX   )r:   r   
text_linesmulti_line_breakr^   rX   lasts          r-   build_linesParagraph.build_lines   s,   (*
)  ll,,XX&&4dhh6G6GH"44//GT\\%<%<G]](( $ 8 8 !0||//
  "$--/	
#k)jQRJ(113I # b>D		4OOtD "rNr,   )r|   r   rq   r   rv   rr   ro   r}   rt   rn   rp   ru   )
NNr   r   r   Nr   FNr   )r3   rV   r5   )r%   r&   r'   r(   r   r	   strr   r)   rO   r   r9   r   r   r   BaseExceptionr   r   intr   r   r
   r   r   listrS   r   r+   r$   r,   r-   rV   rV   ^   s    -1'+ +/$)'+#$33=>33 S5[)33 e_	33
 33 33 33 "%33 33 "33 8$33 !33j
 
%4./% M*% M*	%
 
%/# /XcCi%8 /D /2 2382	%,hz.BBC	D2@.HUO .t .D T+-> r,   rV   c                       \ rS rSr          SS\S   S\S\\\-     S\\   S\\   S	\	S
\	S\S\S\\\
-     S\\   S\\   SS4S jjrSS jrS\S\S\S\\\-     4S jrSrg)ImageParagraph   Nr=   r>   namer   widthheight
fill_widthkeep_aspect_ratiorp   rq   r   titlealt_textr3   c                    Xl         X l        S U l        U(       ah  [        R                  " U5      nU[        R
                  [        R                  [        R                  4;  a  [        SUR                   S35      eXl        X@l
        XPl        X`l        Xpl        Xl        Xl        Xl        Xl        Xl        S U l        S U l        X l        g )Nz1Align must be 'LEFT', 'CENTER', or 'RIGHT', not 'ry   )r=   r   r   r   r~   r   r   r   r   r   r   r   r   r   rp   rq   r   r   r   imginforU   )r:   r=   r   r   r   r   r   r   rp   rq   r   r   r   
align_convs                 r-   r9   ImageParagraph.__init__  s     	&*
e,J%''577EGG!<< G
HXHXGYY[\  $J
$!2$*	
 (,AE	$(	r,   c                     [        U R                  R                  R                  U R                  5      u  U l        U l        U l        U $ r5   )r   r=   r}   image_cacher   r   r   rJ   s    r-   
build_lineImageParagraph.build_line'  s9     *7KKOO''*
&	48TY r,   col_left	col_width
max_heightc                    U R                   c  [        S5      e[        U R                   [        5      n[	        S5      =pVU R
                  (       a  U R
                  nO>[        [        U R                   S   5      U R                  R                  R                  -  nU R                  (       a  U R                  nOY[        [        U R                   S   5      U R                  R                  R                  -  nX:  d  U R                  (       a  UnOUnU R
                  (       d  UU-  W-  nXc:  a  g Un	U R                  (       aN  U R                  [        R                  :X  a  XU-
  -  n	O(U R                  [        R                  :X  a
  XU-
  S-  -  n	U(       a  U R                  R                  R!                  U R"                  [        SU R$                  5      [        [        U R                   5      U	S UUU R&                  U R(                  U R*                  U R,                  S9n
U
$ [.        (       a.  [        U R$                  [0        5      (       d  U R$                  c   eU R                  R                  R3                  U R"                  U R$                  [        [4        U R                   5      U	S UUU R&                  U R(                  U R*                  S U R,                  S9n
U
$ )	Nz;ImageParagraph.build_line() must be called before render().r   r   wrz   r   )r   svgr   xyr   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   dimsr   )r   RuntimeErrorr   r   r)   r   r   r=   r}   r   r   r   r   r   r   r   _vector_imager   r   r   r   r   r   r   r   _raster_imager   )r:   r   r   r   is_svgnative_hr   r   native_wr   return_infos              r-   renderImageParagraph.render/  s@    99M  DII7Qx;;AE499S>2T[[__5F5FFH::

A"5$))C.9DKKOO<M<MMH#t{{ 
 >::zzUWW$]"uww&!mq((--[$((3otyy9**!]]&*&<&< .   =!$((I66488;OOOKKOO))YYHH/4995YYjj"&"8"8 *  	  r,   )r   r   rq   r   r   r   r   r   rU   r   r   r=   r   rp   r   
NNNFFr   r   NNN)r3   r   )r%   r&   r'   r(   r   r   r	   r   r)   rO   r   r9   r   r   r   r   r+   r$   r,   r-   r   r      s	   
 (,!%"& "' $(#"&$)=>$) $) e$	$)
 $) $) $)  $) $) $) sSy!$) }$) 3-$) 
$)LGG*/G=BG	/O3	4Gr,   r   c                   T  ^  \ rS rSrSSSSSSSSS.SSS	\S
\\   S\\-  S\S\	S\	S\\
   S\\   S\	S\SS4U 4S jjjrS3S jrS\\\      S\\   S\\   SS4S jrS4S jr S5S
\S\\\-     SS4S jjrS5S\\   SS4S jjr          S6S\\   S\\   S\	S\\   S \\   S!\\   S"\\   S#\\   S\\
   S$\\   S\4S% jjrS4S& jr          S7S'\S(\\\-     S)\\   S*\\   S+\	S,\	S\S \S\\\-     S-\\   S.\\   SS4S/ jjr\S4S0 j5       r\S*\S\4S1 j5       rS2rU =r$ )8r@   iy  NLEFTg      ?F)r   rn   ro   r   rt   ru   r   img_fill_widthr}   r   r1   r   rn   ro   r   rt   ru   r   r   r2   r3   c                H  > Xl         [        R                  " U5      U l        U R                  [        R                  [        R
                  [        R                  [        R                  4;  a#  [        SU R                  R                   S35      eX@l
        XPl        Ub  [        R                  " U5      O[        R                  U l        X`l        / U l        S U l        [$        TU ]L  " U/U
Q70 UD6  U(       a  U R)                  U5        U(       a  U R+                  XS9  g g )Nrx   ry   )r   )r}   r   r~   rn   r   r   r   r   r   r   ro   r   r   CHARru   rt   _paragraphs_active_paragraphr8   r9   r   image)r:   r}   r   rn   ro   r   rt   ru   r   r   r1   r2   r;   s               r-   r9    ParagraphCollectorMixin.__init__z  s     ,,z2??577EGGUWWegg"FFSTXTcTcTiTiSjjlm  ' )1)=HOOH%8== 	 $7 =?04.t.v.JJtJJsJ6 r,   c                 N   U R                   R                  U 5      (       a#  [        SU R                  R                   S35      eU R                   R
                  U l        U R                   R                  5         SU R                   l        U R                   R                  U 5        U $ )NzUnable to enter the same z context recursively.r   )	r}   rG   r   r;   r%   page_page_push_local_stackrC   rJ   s    r-   r   !ParagraphCollectorMixin.__enter__  s    88**400+DNN,C,C+DDYZ  XX]]
""$%%d+r,   r   r   r   c                     U R                   R                  5         U R                  U R                   l        U R                   R	                  5         U R                  5         g r5   )r}   r7   r   r   _pop_local_stackr   r   s       r-   r    ParagraphCollectorMixin.__exit__  s<     	""$

!!#r,   c                     U R                   S:X  a  [        S5      eU R                   cB  [        U U R                  U R                  S9nU R
                  R                  U5        SU l         g g )NEXPLICITzaConflicts with active paragraph. Either close the current paragraph or write your text inside it.)r=   rn   rt   AUTOr   r   rV   rn   rt   r   r   )r:   ps     r-   _check_paragraph(ParagraphCollectorMixin._check_paragraph  sn    !!Z/s  !!)??$($<$<A
 ##A&%+D" *r,   r   c                     U R                  5         [        U R                  S   [        5      (       a  U R                  S   R	                  U5        g g Nr   )r	  r   r   rV   r   )r:   r   r   s      r-   r   ParagraphCollectorMixin.write  sF    
 	d&&r*I66R &&t, 7r,   r   c                     U R                  5         [        U R                  S   [        5      (       a  U R                  S   R	                  U5        g g r  )r	  r   r   rV   r   )r:   r   s     r-   r   ParagraphCollectorMixin.ln  sD    d&&r*I66R ##A& 7r,   rp   rq   rr   rs   r_   rv   c                 L   U R                   S:X  a  [        S5      e[        U U=(       d    U R                  UU=(       d    U R                  U	U=(       d    SU=(       d    SU=(       d    SU
=(       d    SU=(       d    SUS9nU R
                  R                  U5        SU l         U$ )a  
Args:
    text_align (Align, optional): the horizontal alignment of the paragraph.
    line_height (float, optional): factor by which the line spacing will be different from the font height. (Default: by region)
    top_margin (float, optional):  how much spacing is added above the paragraph.
        No spacing will be added at the top of the paragraph if the current y position is at (or above) the
        top margin of the page. (Default: 0.0)
    bottom_margin (float, optional): those two values determine how much spacing is added below the paragraph.
        No spacing will be added at the bottom if it would result in overstepping the bottom margin of the page. (Default: 0.0)
    indent (float, optional): determines the indentation of the paragraph. (Default: 0.0)
    bullet_string (str, optional): determines the fragments and text lines of the bullet. (Default: "")
    bullet_r_margin (float, optional): determines the spacing between the bullet and the bulleted line
    skip_leading_spaces (float, optional): removes all space characters at the beginning of each line. (Default: False)
    wrapmode (WrapMode): determines the way text wrapping is handled. (Default: None)
    first_line_indent (float, optional): left spacing before first line of text in paragraph.
r  Unable to nest paragraphs.r   r   )r=   rn   ro   rt   ru   rp   rq   rr   rv   rs   r_   r  )r:   rn   ro   rt   rp   rq   rr   rs   r_   ru   rv   r  s               r-   rW   !ParagraphCollectorMixin.paragraph  s    : !!Z/ <==!4T__# 3 Ot7O7O!Q',1;Q/41'-2+
 	"!+r,   c                 J    U R                   (       d  [        S5      eS U l         g )NzNo active paragraph to end.)r   r   rJ   s    r-   r   %ParagraphCollectorMixin.end_paragraph  s    %% =>>!%r,   r   r   r   r   r   r   r   r   c                     U R                   S:X  a  [        S5      eU R                   (       a  U R                  5         [        U UUUUUUUUU	U
US9nU R                  R                  U5        g )Nr  r  )
r   r   r   r   r   rp   rq   r   r   r   )r   r   r   r   r   r   )r:   r   r   r   r   r   r   rp   rq   r   r   r   r  s                r-   r   ParagraphCollectorMixin.image  sw     !!Z/ <==!! !/!'
 	"r,   c                     g r5   r$   rJ   s    r-   r   ParagraphCollectorMixin.render&  s    !r,   c                     g r5   r$   )r:   r   s     r-   rg   !ParagraphCollectorMixin.get_width)  s    14r,   )	r   r   r   ro   r}   r   rt   rn   ru   )r3   r@   rM   r5   )
NNFr   r   r   r   NNr   r   )r%   r&   r'   r(   r   r	   r   r   r)   rO   r   r9   r   r   r   r   r   r	  r   r   r   rV   rW   r   r   r   r   rg   r+   rP   rQ   s   @r-   r@   r@   y  s   
 #"( $)'+!$ 7 7  7 sm	 7
 %K 7  7  7 " 7 8$ 7 c] 7  7  7 
 7  7D		4./	 M*	 M*		
 
	," %)-- sSy!- 
	-'HUO 't ' '+'+$)&')*"#')+/'+-..UO. e_. "	.
 UO.  . .  }. "%. 8$. $E?. 
.`& (,!%"& "' $(#"& # # e$ # 	 #
  #  #   #  #  # sSy! # } # 3- # 
 #D ! !44%4 4r,   r@   c                       \ rS rSrSrS\S\S\\\4   4S jrS\S\	\
\-     4S jrS	\\\-     S
\S\S\4S jrS\\\-     4S jrSS jrS\S\4S jrSrg)r?   i-  z3Abstract base class for all text region subclasses.r   r   r3   c                     [        5       e)a*  
Return the horizontal extents of the current line.
Columnar regions simply return the boundaries of the column.
Regions with non-vertical boundaries need to check how the largest
font-height in the current line actually fits in there.
For that reason we include the current y and the line height.
NotImplementedError)r:   r   r   s      r-   current_x_extentsTextRegion.current_x_extents0  s     "##r,   rW   c                    UR                   (       aW  U R                  R                  U R                  R                  :  a)  U R                  =R                  UR                   -  sl        U R	                  U R                  R                  S5      u  p#U R                  R
                  U R                  R                  -
  nX@R                  R                  -
  nUR                  X#U-
  U5      nU(       aO  UR                  nU(       a<  U R                  R                  U-   U:  a  U R                  =R                  U-  sl        U$ rf   )	rp   r}   r   t_marginr  r   b_marginr   rq   )r:   rW   r   	col_rightbottomr   renderedmargins           r-   _render_image_paragraph"TextRegion._render_image_paragraph:  s     DHHJJ1B1B$BHHJJ)...J"44TXXZZCdhh///hhjj(
##H(.BJO,,F488::.&8

f$
r,   r   topr%  c           
         U(       d  gX R                   l        SnS nSnU GH  n[        U[        5      (       a   U R	                  U5      (       a  US-  nM6    GOUR
                  nSn	UR                  n
U
R                  nUR                   H  nUR                  (       d  M  Sn	  O   U	(       a  UR                  (       ao  U(       dh  U
R                  (       aW  U R                   R                  U R                   R                  :  a)  U R                   =R                  U
R                  -  sl        U R                   R                  UR                  -   U:  a  Un  GOU=(       d    SnUR                  nU R                  U R                   R                  S5      u  pU R                   R                  U:  d  U R                   R                  U:  a  XR                   l        U R                   =R                  U
R                   -  sl        U(       a  UR"                  (       d  UR%                  5       UR&                  -   nU R                   =R                  U-  sl        UR(                  c   eU R                   R+                  UR(                  UR(                  R                  S[,        R.                  [0        R2                  SS9  SUl        U R                   =R                  U-  sl        U R                   =R                  UR                   -  sl        U R                   R+                  UUR                  S[,        R.                  [0        R4                  SS9  U R                   =R                  UR                   -  sl        U R                   =R                  U
R                   -  sl        UR6                  (       a`  U
R8                  nU(       aM  U	(       aF  U R                   R                  U-   U:  a)  U R                   =R                  U
R8                  -  sl        US-  nUR:                  (       d  GM    O   U(       a  US U2	 U=(       d    S$ )Nr   r   FT)r   bordernew_xnew_yfill)r}   r   r   r   r(  rU   rW   r   ra   
charactersrX   rp   r"  r   r  r   rr   rc   rj   rb   r^   _render_styled_text_liner   r   r   TOPNEXTrY   rq   trailing_form_feed)r:   r   r*  r%  prev_line_heightlast_line_heightrendered_lines
tl_wrapperr^   text_renderedcur_paragraph
cur_bulletri   r   r$  bullet_indent_shiftr'  s                    r-   _render_column_linesTextRegion._render_column_linesI  s-    
"#,0$J*n55//
;;"a'N&OO	 % * 4 4*11
%//D(, 0
 ""--&%00

TXX%6%66HHJJ-":"::J88::	 0 0069'7$#3#8q #,#3#3 &*&<&<TXXZZ&K#88::(DHHJJ),C!)HHJ

m222
j&>&>"668:;N;NN ( HHJJ"55J%//;;;HH55",,$..55 "ii"hh" 6  04J,HHJJ"55J

i...
11&&)))) 2  

i...


m222
''*88F-TXXZZ&5HF4R

m&A&AA
!#///I %J ?N?+$1$r,   c                 
   / nU R                    Hp  n[        U[        5      (       a#  UR                  5       nUR	                  U5        M;  UR                  U R                  5      nU(       d  M_  UR                  U5        Mr     U$ r5   )r   r   r   r   r   r   r   r   )r:   r   rW   rU   	cur_liness        r-   collect_linesTextRegion.collect_lines  sp    9;
))I)^44 ++-!!$'%11$--@	 !!), * r,   Nc                     [        5       er5   r  rJ   s    r-   r   TextRegion.render  s    !##r,   c                     U R                  U R                  R                  U5      u  p#U R                  R                  U:  a0  U R                  R                  U:  a  U R                  R                  nX2-
  nU$ r5   )r  r}   r   r   )r:   r   startendress        r-   rg   TextRegion.get_width  sV    ++DHHJJ?
88::$((**s"2HHJJEk
r,   r$   rM   )r%   r&   r'   r(   rN   r)   r   r  r   r	   r   r   r(  r   rS   r=  rA  r   rg   r+   r$   r,   r-   r?   r?   -  s    =$5 $% $E%,<O $'	/O3	4S%+56S% S% 	S%
 
S%jtN[$@A $ % r,   r?   c                      ^  \ rS rSr% SrS\S'   SSS.SSS\S\\   S	\\   S
\SS4U 4S jjjr	S\\   S\\   SS4S jr
SrU =r$ )TextColumnarMixini  z*Enable a TextRegion to perform page breaksr   r}   N)l_marginrb   r1   rL  rb   r2   r3   c                   > [         TU ]  " U0 UD6  Uc  UR                  OUU l        U R                  nUc  UR                  OUU l        UR                  U R                  -
  nU R                  Xg5        g r5   )r8   r9   rL  rb   r   _set_left_right)	r:   r}   rL  rb   r1   r2   r"   r#   r;   s	           r-   r9   TextColumnarMixin.__init__  sd     	$)&)(0(8h}}(0(8h%T)r,   r"   r#   c                    Uc  U R                   R                  OUnUc-  U R                   R                  U R                   R                  -
  OUnX!::  a(  [	        U R
                  R                   SU SU S35      e[        X5      U l        g )Nz(): Right limit (z) lower than left limit (z).)	r}   rL  r   rb   r   r;   r%   r    extents)r:   r"   r#   s      r-   rN  !TextColumnarMixin._set_left_right  s    $(Ltxx  d49Mdhh///u=>>**+ ,  %w&?vRI  t+r,   )rQ  rL  rb   )r%   r&   r'   r(   rN   r*   r   r	   r)   r9   rN  r+   rP   rQ   s   @r-   rK  rK    s    4	K %)$(** * 5/	*
 5/* * 
* *,HUO ,HUO ,PT , ,r,   rK  c                      ^  \ rS rSrSSSS.SSS\S	\S
\S\S\SS4U 4S jjjrSU 4S jjr	SS jr
S\\\-     S\S\SS4S jrSS jrS\S\S\\\4   4S jrSrU =r$ )TextColumnsi  r   
   F)ncolsgutterbalancer}   r   r1   rV  rW  rX  r2   r3   Nc                  > [         TU ]  " U/UQ70 UD6  SU l        X l        X@l        U R
                  R                  U R
                  R                  -
  nXrS-
  U-  -
  U-  nU R
                  R                  n	[        XU-   5      /U l	        [        SU5       H1  n
XU-   -  n	U R                  R                  [        XU-   5      5        M3     [        U R                  R                  U R                  R                  5      U l        g )Nr   r   )r8   r9   _cur_column_ncolsrX  rQ  r#   r"   r    _colsranger   maxr}   r"  r   _first_page_top)r:   r}   rV  rW  rX  r1   r2   total_wr   c_left_r;   s              r-   r9   TextColumns.__init__  s     	.t.v.,,$$t||'8'88	V33u<	""fy&89:
q%A&((FJJgfy.@AB !  #488#4#4dhhjjAr,   c                 *  > [         TU ]  5         [        U R                  R                  U R                  R
                  5      U l        U R                  (       a9  SU l        U R                  U R                     R                  U R                  l        U $ rf   )r8   r   r^  r}   r"  r   r_  rX  rZ  r\  r"   r   )r:   r;   s    r-   r   TextColumns.__enter__  sc    "488#4#4dhhjjA<< DD$4$45::DHHJr,   c                     U R                   (       aE  [        U R                   S   [        5      (       a#  U R                   S   R                  [        5        gU R                  [        5        g)z?End the current column and continue at the top of the next one.r   N)r   r   rV   r   r   rJ   s    r-   
new_columnTextColumns.new_column  sG    
4+;+;B+? K KR &&y1JJy!r,   r   r*  r%  c                    SnU R                   R                  nU R                  (       a  UnU(       d  g[        S U 5       5      nXpR                  -  nX2-
  n	X:  am  SnX(-   n[
        R                  " [        U5      U R                  -  5      S-   n
US   R                  R                  =(       d    SnX-  nX:  a  X,-   nX6:  a  UnSn[        U R                  U R                  5       GH  nU(       d    gXR                  :w  a  Xl        U R                  SS5      u  pU R                   R                  U:  d  U R                   R                  U:  a  XR                   l        U(       a?  XR                  S-
  :X  a-  U R                   R                  U R                   R                  -
  nU R!                  XU5        U R                   R                  U:  d  M  U R                   R                  nGM     XPR                   l        g)z?Rendering a set of lines in one or several columns on one page.FNc              3   ^   #    U  H#  oR                   R                  =(       d    S v   M%     g7f)r   N)rU   r   ).0ls     r-   	<genexpr>1TextColumns._render_page_lines.<locals>.<genexpr>  s     DAVV]]/a/s   +-Tg      ?r   r   )r}   r   rX  sumr[  mathceilr   rU   r   r]  rZ  r  r   r   r#  r=  )r:   r   r*  r%  	balancingnext_ypage_bottom
tot_height
col_heightavail_heightlines_per_columnfirst_line_heightmult_heightcr   r$  s                   r-   _render_page_linesTextColumns._render_page_lines  s    	<< !KDDDJ#kk1J!<L( 	)#'99S_t{{-J#Kc#Q $.qM$6$6$=$=$B!/B+ .F'(F %It''5A$$$#$ "&"8"8A">HxxzzH$

i(?%
Q;;?3dhh&7&77%%jv>xxzzF" 6 
r,   c                 (   U R                   (       d  g U R                  5       nU(       d  g U R                  R                  U R                  R                  -
  n[        U R                  R                  U R                  R                  5      nU R                  XU5        U(       an  U R                  R                  U R                  R                  5      nU(       d  g SU l
        U R                  XR                  R                  U5        U(       a  Mm  g g rf   )r   rA  r}   r   r#  r^  r"  r   r|  _perform_page_break_if_need_berZ  )r:   r   rt  first_page_top
page_breaks        r-   r   TextColumns.render1  s    '')
hhjj488#4#44TXX..

;
KH@@

J  D##J

KH jr,   r   r   c                 >    U R                   U R                     u  p4X44$ r5   )r\  rZ  )r:   r   r   r"   r#   s        r-   r  TextColumns.current_x_extentsE  s     jj!1!12{r,   )r\  rZ  r_  r[  rX  )r3   rT  rM   )r%   r&   r'   r(   r   r   r)   rO   r9   r   rg  r   r   rS   r|  r   r   r  r+   rP   rQ   s   @r-   rT  rT    s     BB B 	B
 B B B 
B B."2+562 2 	2
 
2hI(5 % E%,<O  r,   rT  )2rN   rp  abcr   r   typesr   typingr   r   r   r	   r
   r   r   r   enumsr   r   r   r   errorsr   image_datastructuresr   r   image_parsingr   
line_breakr   r   utilr   fpdfr   r   r   r   r   r   r    r/   rS   r[   rV   r   r@   r?   rK  rT  r$   r,   r-   <module>r     s     # 	 	 	 / . ! B ( 1 ".j 
*c *,	* 	 &_ _Dv vrq5c q5hF( FR, ,>r*/ rr,   