
    r)hk                     `   S SK r S SKJrJrJrJr  SSKJr  SSKJ	r	J
r
JrJr  SSKJr  SSKJr  SSKJrJr  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      r " S S5      r " S S\\5      rg)    N)
NamedTupleSequenceListNewType   )FPDFException)AlignXPosYPosWrapMode)VectorImageInfo)preload_image)MultiLineBreak	FORM_FEED)get_scale_factorc                   *    \ rS rSr% \\S'   \\S'   Srg)Extents   leftright N)__name__
__module____qualname____firstlineno__float__annotations____static_attributes__r       KC:\Users\13-19\Desktop\Lekcja\testEnv\Lib\site-packages\fpdf/text_region.pyr   r      s    
KLr   r   c                   >   ^  \ rS rSrSrU 4S jrS rS rS rSr	U =r
$ )TextRegionMixin   z>Mix-in to be added to FPDF() in order to support text regions.c                 F   > U R                  5         [        TU ]  " U0 UD6  g N)clear_text_regionsuper__init__)selfargskwargs	__class__s      r    r(   TextRegionMixin.__init__   s!     $)&)r   c                     Xl         g r%   %_TextRegionMixin__current_text_regionr)   regions     r    register_text_region$TextRegionMixin.register_text_region   s    %+"r   c                      U R                   U:H  $ r%   r/   r1   s     r    is_current_text_region&TextRegionMixin.is_current_text_region   s    ))V33r   c                     S U l         g r%   r/   r)   s    r    r&   !TextRegionMixin.clear_text_region"   s
    %)"r   )__current_text_region)r   r   r   r   __doc__r(   r3   r6   r&   r   __classcell__r,   s   @r    r"   r"      s    H*,4* *r   r"   	Paragraphc                   J    \ rS rSr% Sr\\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.
line	paragraphF
first_line	last_liner   N)r   r   r   r   r<   r   r   r?   rE   boolrF   r   r   r   r    rA   rA   *   s(    
 NJItr   rA   c                        \ rS rSrS rS rSrg)Bullet6   c                 6    Xl         X l        X0l        SU l        g )NF)	fragments	text_liner_marginrendered_flag)r)   bullet_fragmentsrM   bullet_r_margins       r    r(   Bullet.__init__7   s     *"'"r   c                 T    SnU R                    H  nXR                  5       -  nM     U$ Nr   )rL   	get_width)r)   fragments_widthfrags      r    get_fragments_widthBullet.get_fragments_widthB   s*    NND~~//O #r   )rL   rN   rO   rM   N)r   r   r   r   r(   rX   r   r   r   r    rI   rI   6   s    	#r   rI   c                       \ rS rSr          SS\S\S\S\S\S\S	\4S
 jjrS r	S r
S rSS\4S jjrS\S\4S jrSS jrS\\   4S jrSrg)r?   I   N
top_marginbottom_marginindentbullet_stringskip_leading_spaceswrapmodefirst_line_indentc                    Xl         UR                  U l        U(       aq  [        R                  " U5      nU[        R                  [        R
                  [        R                  [        R                  4;  a  [        SUR                   S35      eX l
        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(       a"  [+        / U R-                  X5      QUP76 U l        OS U l        Xl        g )NAText_align must be 'LEFT', 'CENTER', 'RIGHT', or 'JUSTIFY', not ''.   mm)_regionpdfr	   coerceLCRJ
ValueErrorvalue
text_alignline_heightr\   r]   r^   r`   ra   r   _text_fragmentsr   krI   generate_bullet_frags_and_tlbulletrb   )r)   r2   rq   rr   r\   r]   r^   rQ   r_   r`   ra   rb   s               r    r(   Paragraph.__init__J   s,    ::j1J%''577EGGUWW!EE WXbXhXhWiikl  %%11D*$*#6  LL11DM$OOH5DM!"  "24"88488::EO  22=RDK
 DK!2r   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=))rq   rr   r\   r]   r`   ra   lenrs   r9   s    r    __str__Paragraph.__str__{   s|    #DOO#4N4CSCSBTTabfbqbqar s"0011GH`H`Gaalmqmzmzl{ |  #D$8$8 9:!=	
r   c                     U $ r%   r   r9   s    r    	__enter__Paragraph.__enter__   s    r   c                 8    U R                   R                  5         g r%   )rh   end_paragraphr)   exc_type	exc_value	tracebacks       r    __exit__Paragraph.__exit__   s    ""$r   textc                 <   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)	ri   font_familyr   normalize_textreplace_preload_font_styleslinkrs   extend)r)   r   r   normalized_stringrL   rW   s         r    writeParagraph.write   s}    xx## UVV HH33D9AA$KHH112Ce1T	! 	 "##I.r   rQ   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alignra   rr   r`   )ri   r   r   r   r   rU   r   rh   c_marginr^   rq   r	   rk   ra   rr   r`   get_line)r)   r_   rQ   rP   rV   rW   bullet_line_breakbullet_text_lines           r    ru   &Paragraph.generate_bullet_frags_and_tl   s!   //>xx## UVV8888QV8W$D~~//O %*ll,,!!T[[?%B_%TU!! //GT\\%<%<G]](( $ 8 8 !0||//
 -55711r   c                 B   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                  S'   U R                  R                  U5        g )Nr   
Fr   r   font_size_pt)
ri   r   r   	font_sizerr   r   rt   graphics_staters   append)r)   hfragments      r    lnParagraph.ln   s    xx## UVV9""T%5%55A88000FqI23jj./##H-r   returnc                    / 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   rb   r   print_shra   rr   r`   T)rE   F)rE   rF   )r   rs   rh   rU   ri   r   r^   rb   rq   r	   rk   ra   rr   r`   r   r   rA   rC   rE   )r)   r   
text_linesmulti_line_breakrM   rE   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   )rh   rs   r]   rv   rb   r^   rr   ri   r`   rq   r\   ra   )
NNr   r   r   Nr   FNr   r%   )r   r   r   r   r   strrG   r   r(   r{   r~   r   r   ru   r   r   rA   r   r   r   r   r    r?   r?   I   s      $)!#$/3
 /3 /3 /3 /3 "/3 /3 !/3b
%	/# 	/2# 2PU 24.tK'8 r   c                   N    \ rS rSr          S
S\S\S\4S jjrS rS rS	r	g)ImageParagraph   Nwidthheight
fill_widthc                    Xl         X l        U(       ab  [        R                  " U5      nU[        R                  [        R
                  [        R                  4;  a  [        SUR                   S35      eX0l	        X@l
        XPl        X`l        Xpl        Xl        Xl        Xl        Xl        Xl        S =U l        U l        g )Nz1Align must be 'LEFT', 'CENTER', or 'RIGHT', not 're   )r2   namer	   rj   rk   rl   rm   ro   rp   r   r   r   r   keep_aspect_ratior\   r]   r   titlealt_textimginfo)r)   r2   r   r   r   r   r   r   r\   r]   r   r   r   s                r    r(   ImageParagraph.__init__   s     	LL'EUWWegguww77 G}TVW  

$!2$*	
 ##49r   c                     [        U R                  R                  R                  U R                  5      u  U l        U l        U l        U $ r%   )r   r2   ri   image_cacher   r   r   r9   s    r    
build_lineImageParagraph.build_line   s9     *7KKOO''*
&	48TY r   c                    U R                   (       d  [        S5      e[        U R                  [        5      nU R
                  (       a  U R
                  nO0U R                  S   U R                  R                  R                  -  nU R                  (       a  U R                  nOKU R                  S   U R                  R                  R                  -  nX:  d  U R                  (       a  UnOUnU R
                  (       d  UW-  W-  nWU:  a  g Un	U R                  (       aN  U R                  [        R                  :X  a  XU-
  -  n	O(U R                  [        R                  :X  a
  XU-
  S-  -  n	U(       as  U R                  R                  R                  U R                   U R                   U R                  U	S UUU R"                  U R$                  U R&                  U R(                  S9$ U R                  R                  R+                  U R                   U R                   U R                  U	S UUU R"                  U R$                  U R&                  S U R(                  S9$ )Nz;ImageParagraph.build_line() must be called before render().r   wrf   )r   svgr   xyr   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   dimsr   )r   RuntimeError
isinstancer   r   r   r2   ri   rt   r   r   r   r	   rm   rl   _vector_imager   r   r   r   r   _raster_image)
r)   col_left	col_width
max_heightis_svgr   native_hr   native_wr   s
             r    renderImageParagraph.render   s   xxM  DII7 ;;Ayy~(9(99H::

Ayy~(9(99H#t{{Hx'Az>::zzUWW$]"uww&!mq((;;??00YYHHYYYYjj"&"8"8 1   {{,,**]]"44 - 
 	
r   )r   r   r]   r   r   r   r   r   r   r   r2   r   r\   r   
NNNFFr   r   NNN)
r   r   r   r   r   rG   r(   r   r   r   r   r   r    r   r      sP    
  !$
 !$ !$ !$F9
r   r   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 rS r	S r
SS\4S jjrSS jr          SS	\S
\4S jjrS r          SS\S\S\4S jjrSrU =r$ )ParagraphCollectorMixini<  NLEFTg      ?F)r   rq   rr   r   r`   ra   r   img_fill_widthrr   r   r`   ra   c                "  > 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        [        R                  " U5      U l        X`l        / U l        S U l        ["        TU ]H  " U/U
Q70 UD6  U(       a  U R'                  U5        U(       a  U R)                  XS9  g g )Nrd   re   )r   )ri   r	   rj   rq   rk   rl   rm   rn   ro   rp   rr   r   r   ra   r`   _paragraphs_active_paragraphr'   r(   r   image)r)   ri   r   rq   rr   r   r`   ra   r   r   r*   r+   r,   s               r    r(    ParagraphCollectorMixin.__init__=  s     ,,z2??577EGGUWWegg"FFSTXTcTcTiTiSjjlm  '  1#6 !%.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   )	ri   r6   r   r,   r   page_page_push_local_stackr3   r9   s    r    r~   !ParagraphCollectorMixin.__enter__]  s    88**400+DNN,C,C+DDYZ  XX]]
""$%%d+r   c                     U R                   R                  5         U R                  U R                   l        U R                   R	                  5         U R                  5         g r%   )ri   r&   r   r   _pop_local_stackr   r   s       r    r    ParagraphCollectorMixin.__exit__h  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.)r2   rq   r`   AUTOr   r   r?   rq   r`   r   r   )r)   ps     r    _check_paragraph(ParagraphCollectorMixin._check_paragraphn  sn    !!Z/s  !!)??$($<$<A
 ##A&%+D" *r   r   c                 `    U R                  5         U R                  S   R                  U5        g Nr   )r   r   r   )r)   r   r   s      r    r   ParagraphCollectorMixin.write|  s'    ""4(r   c                 `    U R                  5         U R                  S   R                  U5        g r   )r   r   r   )r)   r   s     r    r   ParagraphCollectorMixin.ln  s'    "r   c                     U R                   S:X  a  [        S5      e[        U U=(       d    U R                  UU=(       d    U R                  U	UUUU
U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.)r2   rq   rr   r`   ra   r\   r]   r^   rb   r_   rQ   r   )r)   rq   rr   r`   r\   r]   r^   r_   rQ   ra   rb   r   s               r    rD   !ParagraphCollectorMixin.paragraph  s    : !!Z/ <==!4T__# 3 Ot7O7O!'/'+
 	"!+r   c                 J    U R                   (       d  [        S5      eS U l         g )NzNo active paragraph to end.)r   r   r9   s    r    r   %ParagraphCollectorMixin.end_paragraph  s    %% =>>!%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   r\   r]   r   r   r   )r   r   r   r   r   r   )r)   r   r   r   r   r   r   r\   r]   r   r   r   r   s                r    r   ParagraphCollectorMixin.image  sw     !!Z/ <==!! !/!'
 	"r   )	r   r   r   rr   ri   r   r`   rq   ra   r%   )
NNFr   r   r   r   NNr   r   )r   r   r   r   r   rG   r   r(   r~   r   r   r   r   r   rD   r   r   r   r=   r>   s   @r    r   r   <  s    
  $)!7 7 7 "7 7 7@	,)# )# $)!. "	. .`&   # 	 #
  #  #  #r   r   c                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)
TextRegioni  z3Abstract base class for all text region subclasses.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_extents  s     "##r   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$ rT   )	r\   ri   r   t_marginr  r   b_marginr   r]   )r)   rD   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   c           
      V   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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                   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$ )Nr   r   FT)r   bordernew_xnew_yfill)ri   r   r   r   r  rC   rD   rv   rL   
charactersrE   r\   r  r   r  r   r^   rO   rX   rN   _render_styled_text_linerM   r
   r   r   TOPNEXTrF   r]   trailing_form_feed)r)   r   topr	  prev_line_heightlast_line_heightrendered_lines
tl_wrapperrM   text_renderedcur_paragraph
cur_bulletrW   r   r  bullet_indent_shiftr  s                    r    _render_column_linesTextRegion._render_column_lines  s   
$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 #,#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
!#///E %F ?N?+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$ r%   )r   r   r   r   r   r   r   r   )r)   r   rD   rC   	cur_liness        r    collect_linesTextRegion.collect_linesE  sp    
))I)^44 ++-!!$'%11$--@	 !!), * r   c                     [        5       er%   r  r9   s    r    r   TextRegion.renderR  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$ r%   )r  ri   r   r   )r)   r   startendress        r    rU   TextRegion.get_widthU  sV    ++DHHJJ?
88::$((**s"2HHJJEk
r   r   N)r   r   r   r   r<   r  r  r!  r%  r   rU   r   r   r   r    r   r     s%    =$L \$r   r   c                   <   ^  \ rS rSrSrSSS.U 4S jjrS rSrU =r$ )TextColumnarMixini]  z*Enable a TextRegion to perform page breaksN)l_marginrN   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 r%   )r'   r(   r0  rN   r   _set_left_right)	r)   ri   r0  rN   r*   r+   r   r   r,   s	           r    r(   TextColumnarMixin.__init__`  sb    $)&)(0(8h}}(0(8h%T)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).)	ri   r0  r   rN   r   r,   r   r   extents)r)   r   r   s      r    r2  !TextColumnarMixin._set_left_righth  s    $(Ltxx  d49Mdhh///u=>>**+ ,  %w&?vRI  t+r   )r5  r0  rN   )	r   r   r   r   r<   r(   r2  r   r=   r>   s   @r    r/  r/  ]  s    4,04 * *, ,r   r/  c                   h   ^  \ rS rSrSSSS.S\S\S\4U 4S	 jjjrU 4S
 jrS r	S r
S rS rSrU =r$ )TextColumnsis  r   
   F)ncolsgutterbalancer:  r;  r<  c                  > [         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   )r'   r(   _cur_column_ncolsr<  r5  r   r   r   _colsranger   maxri   r  r   _first_page_top)r)   ri   r:  r;  r<  r*   r+   total_wr   c_leftir,   s              r    r(   TextColumns.__init__t  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 $ rT   )r'   r~   rB  ri   r  r   rC  r<  r>  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                   (       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   r   r9   s    r    
new_columnTextColumns.new_column  s0    R &&y1JJy!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:  ac  SnX(-   n[
        R                  " [        U5      U R                  -  5      S-   n
US   R                  R                  U
-  nX:  a  X+-   nX6:  a  UnSn[        U R                  U R                  5       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      nU(       d  M  U R                   R                  U-   nUU:  d  M  UnM     U(       a  XPR                   l        gg)z?Rendering a set of lines in one or several columns on one page.FNc              3   L   #    U  H  oR                   R                  v   M     g 7fr%   )rC   r   ).0ls     r    	<genexpr>1TextColumns._render_page_lines.<locals>.<genexpr>  s     ?JqVV]]Js   "$Tg      ?r   r   )ri   r   r<  sumr?  mathceilrz   rC   r   rA  r>  r  r   r   r  r!  )r)   r   r  r	  	balancingnext_ypage_bottom
tot_height
col_heightavail_heightlines_per_columnmult_heightcr   r  r  r  s                    r    _render_page_linesTextColumns._render_page_lines  s   	<< !K?J??J#kk1J!<L( 	)#'99S_t{{-J#Kc#Q (m0077:JJ+ .F'(F %It''5A$$$#$ "&"8"8A">HxxzzH$

i(?%
Q;;?3dhh&7&77#88&Qy

%556>"F 6  HHJ 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 rT   )r   r%  ri   r   r  rB  r  r   r_  _perform_page_break_if_need_ber>  )r)   r   rX  first_page_top
page_breaks        r    r   TextColumns.render  s    '')
hhjj488#4#44TXX..

;
KH@@LJ D##J

KH jr   c                 >    U R                   U R                     u  p4X44$ r%   )r@  r>  )r)   r   r   r   r   s        r    r  TextColumns.current_x_extents  s     jj!1!12{r   )r@  r>  rC  r?  r<  )r   r   r   r   intr   rG   r(   r~   rK  r_  r   r  r   r=   r>   s   @r    r8  r8  s  s[    
 B 	B
 B B B."/ bI$ r   r8  ) rT  typingr   r   r   r   errorsr   enumsr	   r
   r   r   image_datastructuresr   image_parsingr   
line_breakr   r   utilr   r   r"   r?   rA   rI   r   r   r   r/  r8  r   r   r    <module>rp     s     6 6 ! . . 1 ( 1 "j 
* *$ K&		* 	 &H HVe
 e
P^# ^#B}( }@, ,,l*/ lr   