
    iTI                     |   S SK r S SKrSSKJr  SSKJr  SSKJr  SSKJr  SSKJ	r	  SSKJ
r
  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSK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g)"    N   )PDFTextDevice)PDFUnicodeNotDefined)LTContainer)LTPage)LTText)LTLine)LTRect)LTCurve)LTFigure)LTImage)LTChar)
LTTextLine)	LTTextBox)LTTextBoxVertical)LTTextGroup)apply_matrix_pt)mult_matrix)q)bbox2strc                   T    \ rS rSrSS jrS rS rS rS rS r	S	 r
S
 rS rS rSrg)PDFLayoutAnalyzer   Nc                 V    [         R                  " X5        X l        X0l        / U l        g N)r   __init__pagenolaparams_stackselfrsrcmgrr   r   s       E/home/kodi/my-venv/lib/python3.13/site-packages/pdfminer/converter.pyr   PDFLayoutAnalyzer.__init__   s$    t-     c                     UR                   u  p4pV[        X#U45      u  p4[        X%U45      u  pVSS[        X5-
  5      [        XF-
  5      4n[        U R                  U5      U l        g )Nr   )mediaboxr   absr   r   cur_item)r!   pagectmx0y0x1y1r'   s           r#   
begin_pagePDFLayoutAnalyzer.begin_page$   s_    =="3R1"3R1q#be*c"%j1t{{H5r%   c                 0   U R                   (       a   e[        U R                  [        5      (       d   eU R                  b%  U R                  R                  U R                  5        U =R                  S-  sl        U R                  U R                  5        g )Nr   )r   
isinstancer)   r   r   analyzer   receive_layout)r!   r*   s     r#   end_pagePDFLayoutAnalyzer.end_page,   sh    ;;$--0000==$MM!!$--0qDMM*r%   c                     U R                   R                  U R                  5        [        X[	        X0R
                  5      5      U l        g r   )r   appendr)   r   r   r+   )r!   namebboxmatrixs       r#   begin_figurePDFLayoutAnalyzer.begin_figure5   s2    4==) [-JKr%   c                     U R                   n[        U R                   [        5      (       d   eU R                  R	                  5       U l         U R                   R                  U5        g r   )r)   r3   r   r   popadd)r!   _figs      r#   
end_figurePDFLayoutAnalyzer.end_figure:   sI    mm$--2222)#r%   c                 <   [        U R                  [        5      (       d   e[        XU R                  R                  U R                  R
                  U R                  R                  U R                  R                  45      nU R                  R                  U5        g r   )	r3   r)   r   r   r,   r-   r.   r/   rA   )r!   r:   streamitems       r#   render_imagePDFLayoutAnalyzer.render_imageA   ss    $--2222t(($--*:*:(($--*:*:<= 	$r%   c                    SR                  S U 5       5      nUS:X  a  US   u  pxn	US   u  pzn[        U R                  X45      u  p[        U R                  X45      u  pX:X  d  X:X  a3  U R                  R	                  [        UR                  X4X45      5        g US:X  a  US   u  pxn	US   u  pznUS   u  p|nUS   u  p~n[        U R                  X45      u  p[        U R                  X45      u  p[        U R                  X45      u  p[        U R                  X45      u  pX:X  a  X:X  a
  X:X  a  X:X  d  X:X  aA  X:X  a<  X:X  a7  X:X  a2  U R                  R	                  [        UR                  XX45      5        g / nU HP  n[        S[        U5      S5       H3  nUR                  [        U R                  UU   UUS-      45      5        M5     MR     U R                  R	                  [        UR                  U5      5        g )	N c              3   *   #    U  H	  oS    v   M     g7f)r   N ).0xs     r#   	<genexpr>/PDFLayoutAnalyzer.paint_path.<locals>.<genexpr>J   s     +d!ds   mlr   r   mlllh      )joinr   r+   r)   rA   r	   	linewidthr
   rangelenr9   r   )r!   gstatestrokefillevenoddpathshaperB   r,   r-   r.   r/   x2y2x3y3ptspis                      r#   
paint_pathPDFLayoutAnalyzer.paint_pathI   s   +d++D=q'KQBq'KQB&txx":HR&txx":HRx28!!&)9)9B8bX"NOGq'KQBq'KQBq'KQBq'KQB&txx":HR&txx":HR&txx":HR&txx":HRbh28bh28!!&)9)9BB;K"LMA1c!fa(

?488adAacF^DE )  	'&"2"2C89r%   c           
      P    UR                  U5      n[        U[        5      (       d   U5       e UR                  U5      nUR                  U5      n	[        XX4XWX5      n
U R                  R                  U
5        U
R                  $ ! [         a    U R	                  X&5      n Ntf = fr   )	to_unichrr3   strr   handle_undefined_char
char_width	char_dispr   r)   rA   adv)r!   r<   fontfontsizescalingrisecidtext	textwidthtextdisprH   s              r#   render_charPDFLayoutAnalyzer.render_charj   s    	9>>#&DdC((.$.( OOC(	>>#&fHt9W$xx $ 	9--d8D	9s   -B B%$B%c                 J    [         R                  " SU< SU< 35        SU S3$ )Nzundefined: , z(cid:))logginginfo)r!   rq   ru   s      r#   rm   'PDFLayoutAnalyzer.handle_undefined_charv   s!    D#67se1~r%   c                     g r   rN   r!   ltpages     r#   r5    PDFLayoutAnalyzer.receive_layoutz       r%   )r   r)   r   r   r   N)__name__
__module____qualname____firstlineno__r   r0   r6   r=   rD   rI   rh   ry   rm   r5   __static_attributes__rN   r%   r#   r   r      s5    
B
r%   r   c                   *    \ rS rSrSS jrS rS rSrg)PDFPageAggregator   Nc                 :    [         R                  XX#S9  S U l        g N)r   r   )r   r   resultr    s       r#   r   PDFPageAggregator.__init__   s    ""4"Sr%   c                     Xl         g r   r   r   s     r#   r5    PDFPageAggregator.receive_layout   s
    r%   c                     U R                   $ r   r   r!   s    r#   
get_resultPDFPageAggregator.get_result   s    {{r%   r   r   )r   r   r   r   r   r5   r   r   rN   r%   r#   r   r      s    
r%   r   c                       \ rS rSrSS jrSrg)PDFConverter   Nc                 8    [         R                  XX4S9  X l        g r   )r   r   outfp)r!   r"   r   r   r   s        r#   r   PDFConverter.__init__   s    ""4"S
r%   )r   r   )r   r   r   r   r   r   rN   r%   r#   r   r      s    r%   r   c                   :    \ rS rSr  S	S jrS rS rS rS rSr	g)
TextConverter   Nc                 F    [         R                  XX#US9  XPl        X`l        g r   )r   r   
showpagenoimagewriter)r!   r"   r   r   r   r   r   s          r#   r   TextConverter.__init__   s%    dUHU$&r%   c                 :    U R                   R                  U5        g r   r   writer!   rv   s     r#   
write_textTextConverter.write_text       

r%   c                    ^ ^ UU 4S jmT R                   (       a  T R                  SUR                  -  5        T" U5        T R                  S5        g )Nc                   > [        U [        5      (       a  U  H  nT" U5        M     O4[        U [        5      (       a  TR                  U R	                  5       5        [        U [
        5      (       a  TR                  S5        g [        U [        5      (       a*  TR                  b  TR                  R                  U 5        g g g )N
)	r3   r   r   r   get_textr   r   r   export_image)rH   childrenderr!   s     r#   r   ,TextConverter.receive_layout.<locals>.render   s    $,,!E5M "D&))0$	**%D'**##/$$11$7 0 +r%   zPage %s
)r   r   pageid)r!   r   r   s   ` @r#   r5   TextConverter.receive_layout   s<    
	8 ??OOK&--78vr%   c                 L    U R                   c  g [        R                  XU5        g r   )r   r   rI   )r!   r:   rG   s      r#   rI   TextConverter.render_image   s$    #!!$f5r%   c                     g r   rN   )r!   r[   r\   r]   r^   r_   s         r#   rh   TextConverter.paint_path   r   r%   )r   r   )r   NFN)
r   r   r   r   r   r   r5   rI   rh   r   rN   r%   r#   r   r      s!    :>/3*r%   r   c                       \ rS rSrSSSSSSS.rS	SS
.rSSSSSSSSSSSS.SS04S jrS rS rS r	S r
S rS rS rS rS$S jrS rS rS  rS! rS" rS#rg)%HTMLConverter   yellowmagentacyanredblackgray)figuretextlinetextbox	textgroupcurver*   blue)r   charr   Ng      ?normalT2   r   )r   r*   r   c                    [         R                  XX#US9  XPl        X`l        Xpl        Xl        Xl        Xl        Xl        Xl	        U(       aJ  U R                  R                  U R                  5        U R                  R                  U R                  5        U R                  U l        S U l        / U l        U R!                  5         g r   )r   r   scale	fontscale
layoutmoder   
pagemarginr   rect_colorstext_colorsupdateRECT_COLORSTEXT_COLORS_yoffset_font
_fontstackwrite_header)r!   r"   r   r   r   r   r   r   r   r   r   debugr   r   s                 r#   r   HTMLConverter.__init__   s    
 	dUHU
"$$$&&&##D$4$45##D$4$45
r%   c                 :    U R                   R                  U5        g r   r   r   s     r#   r   HTMLConverter.write   r   r%   c                 j    U R                  S5        U R                  S5        U R                  S5        g )Nz<html><head>
zD<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
z</head><body>
r   r   s    r#   r   HTMLConverter.write_header   s,    

#$

Z[

$%r%   c           
          U R                  SSR                  S [        SU R                  5       5       5      -  5        U R                  S5        g )Nz8<div style="position:absolute; top:0px;">Page: %s</div>
r|   c              3   8   #    U  H  nS U< SU< S3v   M     g7f)z
<a href="#z">z</a>NrN   )rO   rg   s     r#   rQ   -HTMLConverter.write_footer.<locals>.<genexpr>   s     \F[q!<F[s   r   z</body></html>
)r   rW   rY   r   r   s    r#   write_footerHTMLConverter.write_footer   sE    

N99\eAt{{F[\\] 	^

%&r%   c                 8    U R                  [        U5      5        g r   )r   r   r   s     r#   r   HTMLConverter.write_text  s    

1T7r%   c           
          U R                   R                  U5      nUbW  U R                  SXX0R                  -  U R                  U-
  U R                  -  XPR                  -  X`R                  -  4-  5        g )Nzn<span style="position:absolute; border: %s %dpx solid; left:%dpx; top:%dpx; width:%dpx; height:%dpx;"></span>
)r   getr   r   r   )r!   colorborderwidthrP   ywhs          r#   
place_rectHTMLConverter.place_rect  so      $$U+JJ R**t}}Q

&B**a

l44 5
 	r%   c                 ~    U R                  XUR                  UR                  UR                  UR                  5        g r   )r   r,   r/   widthheight)r!   r   r   rH   s       r#   place_borderHTMLConverter.place_border  s)    DGGTWWdjj$++Vr%   c           
         U R                   b|  U R                   R                  U5      nU R                  S[        U5      UX0R                  -  U R
                  U-
  U R                  -  XPR                  -  X`R                  -  4-  5        g )Nzd<img src="%s" border="%d" style="position:absolute; left:%dpx; top:%dpx;" width="%d" height="%d" />
)r   r   r   r   r   r   )r!   rH   r   rP   r   r   r   r:   s           r#   place_imageHTMLConverter.place_image  sz    '##006DJJ 5$**t}}Q

&B**a

l44 5
 	r%   c                 2   U R                   R                  U5      nUby  U R                  SXU R                  -  U R                  U-
  U R                  -  XPR                  -  U R
                  -  4-  5        U R                  U5        U R                  S5        g )NzP<span style="position:absolute; color:%s; left:%dpx; top:%dpx; font-size:%dpx;">z</span>
)r   r   r   r   r   r   r   )r!   r   rv   rP   r   sizes         r#   
place_textHTMLConverter.place_text  s      $$U+JJi|dmmAotzz-I4PZPZ?[_[i[iKijk lOOD!JJ{#r%   c                    U R                   R                  U R                  5        S U l        U R                  SXUX0R                  -  U R
                  U-
  U R                  -  XPR                  -  X`R                  -  4-  5        g )Nzv<div style="position:absolute; border: %s %dpx solid; writing-mode:%s; left:%dpx; top:%dpx; width:%dpx; height:%dpx;">)r   r9   r   r   r   r   )r!   r   r   rP   r   r   r   writing_modes           r#   	begin_divHTMLConverter.begin_div&  sr    tzz*


 EjjL4==?DJJ">jjL!JJ,00 	1
 	r%   c                     U R                   b  U R                  S5        U R                  R                  5       U l         U R                  S5        g )N</span>z</div>)r   r   r   r@   )r!   r   s     r#   end_divHTMLConverter.end_div0  s;    ::!JJy!__((*


8r%   c                    X#4nX@R                   :w  a\  U R                   b  U R                  S5        U R                  S[        U5      X0R                  -  U R                  -  4-  5        X@l         U R                  U5        g )Nr  z.<span style="font-family: %s; font-size:%dpx">)r   r   r   r   r   r   )r!   rv   fontnamerr   rq   s        r#   put_textHTMLConverter.put_text7  sp    #::zz%

9%JJG(X

%:T^^%KLM NJr%   c                 &    U R                  S5        g )Nz<br>r   r   s    r#   put_newlineHTMLConverter.put_newlineB  s    

6r%   c                 v   ^ ^^ U U4S jmUU U4S jmT" U5        T =R                   T R                  -  sl         g )Nc                 x   > [        U [        5      (       a$  TR                  SSU 5        U  H  nT" U5        M     g )Nr   r   )r3   r   r   rH   r   r!   
show_groups     r#   r  0HTMLConverter.receive_layout.<locals>.show_groupG  s7    $,,!!+q$7!Eu% "r%   c           
        > [        U [        5      (       a  T=R                  U R                  -  sl        TR	                  SSU 5        TR
                  (       af  TR                  STR                  U R                  -
  TR                  -  -  5        TR                  SU R                  < SU R                  < S35        U  H  nT" U5        M     U R                  b  U R                   H  nT" U5        M     g [        U [        5      (       a  TR	                  SSU 5        g [        U [        5      (       aa  TR                  SSU R                  U R                  U R                  U R                  5        U  H  nT" U5        M     TR!                  S5        g [        U ["        5      (       a?  TR%                  U SU R                  U R                  U R                  U R                  5        g TR&                  S	:X  Ga  [        U [(        5      (       a%  TR	                  S
SU 5        U  H  nT" U5        M     g [        U [*        5      (       ad  TR	                  SSU 5        TR-                  S[/        U R0                  S-   5      U R                  U R                  S5        U  H  nT" U5        M     g [        U [2        5      (       aT  TR	                  SSU 5        TR-                  SU R5                  5       U R                  U R                  U R6                  5        g [        U [(        5      (       a2  U  H  nT" U5        M     TR&                  S:w  a  TR9                  5         g [        U [*        5      (       ap  TR                  SSU R                  U R                  U R                  U R                  U R;                  5       5        U  H  nT" U5        M     TR!                  S5        g [        U [2        5      (       a6  TR=                  U R5                  5       U R>                  U R6                  5        g [        U [@        5      (       a  TRC                  U R5                  5       5        g )Nr*   r   z*<div style="position:absolute; top:%dpx;">z	<a name="z">Page z</a></div>
r   r   exactr   r      r   loose)"r3   r   r   r/   r   r   r   r   r   groupsr   r   r  r,   r   r   r  r   r   r   r   r   r   rl   indexr   r   r   r  get_writing_moder
  r	  r   r   )rH   r   groupr   r!   r  s      r#   r   ,HTMLConverter.receive_layout.<locals>.renderN  sj   $''(!!&!T2??JJK!%tww!6

 B D EJJT[[RVR]R]^_!E5M ";;*!%"5) "-R O D'**!!'1d3L K D(++xDGGTWWdjj$++V!E5M "X&B A D'**  q$''477DJJT> ; ??g-!$
33))*a>%)E"5M &*4 1 $D)44)))Q=	3tzz!|3DdggtwwXZ[%)E"5M &** ' $D&11))&!T:$''SWS\S\]"  "$
33%)E"5M &*??g5 ,,.  $D)44y!TWWdggtzzSWS^S^'+'<'<'>@%)E"5M &*Y/
 	 $D&11dmmot}}diiP  $D&118r%   )r   r   r!   r   r   r  s   ` @@r#   r5   HTMLConverter.receive_layoutF  s,    	4	j 	v(r%   c                 $    U R                  5         g r   r   r   s    r#   closeHTMLConverter.close      r%   )r   r   r   r   r   r   r   r   r   r   r   )F)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r
  r  r5   r!  r   rN   r%   r#   r   r      s     K K
 /0$CHD'.?$g.	.	?Br%   r   c                   d    \ rS rSr\R
                  " S5      r  SS jrS rS r	S r
S rS	 rS
rg)XMLConverteri  z[\x00-\x08\x0b-\x0c\x0e-\x1f]Nc                 f    [         R                  XX#US9  XPl        X`l        U R	                  5         g r   )r   r   r   stripcontrolr   )r!   r"   r   r   r   r   r'  s          r#   r   XMLConverter.__init__  s2    dUHU&(r%   c                 p    U R                   R                  S5        U R                   R                  S5        g )Nz(<?xml version="1.0" encoding="utf-8" ?>
z<pages>
r   r   s    r#   r   XMLConverter.write_header  s*    

DE

%r%   c                 :    U R                   R                  S5        g )Nz	</pages>
r   r   s    r#   r   XMLConverter.write_footer  s    

&r%   c                     U R                   (       a  U R                  R                  SU5      nU R                  R	                  [        U5      5        g )NrL   )r'  CONTROLsubr   r   r   r   s     r#   r   XMLConverter.write_text  s:    <<##C.D

4!r%   c                 8   ^ ^^ U U4S jmUU U4S jmT" U5        g )Nc                   > [        U [        5      (       a>  TR                  R                  SU R                  [        U R                  5      4-  5        g [        U [        5      (       a]  TR                  R                  S[        U R                  5      -  5        U  H  nT" U5        M     TR                  R                  S5        g )Nz<textbox id="%d" bbox="%s" />
z<textgroup bbox="%s">
z</textgroup>
)r3   r   r   r   r  r   r;   r   r  s     r#   r  /XMLConverter.receive_layout.<locals>.show_group  s    $	**

  !B"&**htyy.A!B"C D  D+..

  !:Xdii=P!PQ!Eu% "

  !12r%   c                 :
  > [        U [        5      (       a  TR                  R                  SU R                  [        U R                  5      U R                  4-  5        U  H  nT" U5        M     U R                  bQ  TR                  R                  S5        U R                   H  nT" U5        M     TR                  R                  S5        TR                  R                  S5        g [        U [        5      (       a>  TR                  R                  SU R                  [        U R                  5      4-  5        g [        U [        5      (       a>  TR                  R                  SU R                  [        U R                  5      4-  5        g [        U [        5      (       aM  TR                  R                  SU R                  [        U R                  5      U R                  5       4-  5        g [        U [        5      (       an  TR                  R                  SU R                  < S	[        U R                  5      < S
35        U  H  nT" U5        M     TR                  R                  S5        g [        U [         5      (       a^  TR                  R                  S[        U R                  5      -  5        U  H  nT" U5        M     TR                  R                  S5        g [        U ["        5      (       a  Sn[        U [$        5      (       a  SnTR                  R                  SU R&                  [        U R                  5      U4-  5        U  H  nT" U5        M     TR                  R                  S5        g [        U [(        5      (       a  TR                  R                  S[+        U R,                  5      [        U R                  5      U R.                  4-  5        TR1                  U R3                  5       5        TR                  R                  S5        g [        U [4        5      (       a-  TR                  R                  SU R3                  5       -  5        g [        U [6        5      (       a  TR8                  bZ  TR8                  R;                  U 5      nTR                  R                  S[+        U5      U R<                  U R>                  4-  5        g TR                  R                  SU R<                  U R>                  4-  5         g  U 5       e)Nz%<page id="%s" bbox="%s" rotate="%d">
z	<layout>
z
</layout>
z</page>
z"<line linewidth="%d" bbox="%s" />
z"<rect linewidth="%d" bbox="%s" />
z+<curve linewidth="%d" bbox="%s" pts="%s"/>
z<figure name="z" bbox="z">
z
</figure>
z<textline bbox="%s">
z</textline>
rL   z wmode="vertical"z<textbox id="%d" bbox="%s"%s>
z</textbox>
z&<text font="%s" bbox="%s" size="%.3f">z</text>
z<text>%s</text>
z*<image src="%s" width="%d" height="%d" />
z!<image width="%d" height="%d" />
) r3   r   r   r   r   r   r;   rotater  r	   rX   r
   r   get_ptsr   r:   r   r   r   r  r   r   r	  r   r   r   r   r   r   r   r   r   )rH   r   r  wmoder:   r   r!   r  s        r#   r   +XMLConverter.receive_layout.<locals>.render  s   $''

  !I"&++x		/BDKK!P"Q R!E5M ";;*JJ$$\2!%"5) "-JJ$$]3

  -^ ] D&))

  !F"&..(4992E!F"G HZ W D&))

  !F"&..(4992E!F"G HT Q D'**

  !O"&..(4992Et||~!V"W XN K D(++

  "&))Xdii-@"B C!E5M "

  /@ ? D*--

  !9HTYY<O!OP!E5M "

  16 5 D),,d$566/E

  !B"&**htyy.A5!I"J K!E5M "

  0$ # D&))

  !I"#DMM"2HTYY4G!S"T U0

  -  D&))

  !4t}}!FG  D'**##/++88>DJJ$$%R&'gtzz4;;%G&H I 	 JJ$$%I&*jj$++%>&? @  $qr%   rN   r  s   ` @@r#   r5   XMLConverter.receive_layout  s    		:	v 	vr%   c                 $    U R                  5         g r   r   r   s    r#   r!  XMLConverter.close  r#  r%   )r   r'  )r   NNF)r   r   r   r   recompiler.  r   r   r   r   r5   r!  r   rN   r%   r#   r%  r%    s7    jj9:G./?D
HTr%   r%  )r~   r<  	pdfdevicer   pdffontr   layoutr   r   r   r	   r
   r   r   r   r   r   r   r   r   utilsr   r   r   r   r   r   r   r   r   r%  rN   r%   r#   <module>rB     s     	 $ )            %  "   
` `J) "$ )L )\@L @Jg< gr%   