
    SAiʊ                     @   S SK r S SKrS SKrS SKJrJrJrJrJrJ	r	J
r
JrJrJrJr  S SKJr  S SKJr  S SKJrJrJrJrJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&  S SK'J(r(  S SK)J*r*  S SK+J,r,  S S	K-J.r.J/r/  S S
K0J1r1J2r2  S SK3J4r4  S SK5J6r6  S SK7J8r8J9r9J:r:J;r;J<r<J=r=J>r>J?r?J@r@JArAJBrB  \R                  " \D5      rE " S S\*5      rF " S S\F5      rG\" S\
\\85      rH " S S\F\\H   5      rI " S S\I\8   5      rJ " S S\I\8   5      rK " S S\I\8   5      rL " S S\I\8   5      rMg)    N)BinaryIODictGenericListOptionalSequenceTextIOTupleTypeVarUnioncast)utils)ImageWriter)LAParamsLTAnnoLTCharLTComponentLTContainerLTCurveLTFigureLTImageLTItemLTLayoutContainerLTLineLTPageLTRectLTText	LTTextBoxLTTextBoxVerticalLTTextGroup
LTTextLineTextGroupElement)PDFColorSpace)PDFTextDevice)PDFValueError)PDFFontPDFUnicodeNotDefined)PDFGraphicStatePDFResourceManager)PDFPage)	PDFStream)AnyIOMatrixPathSegmentPointRectapply_matrix_ptapply_matrix_rectbbox2strencmake_compat_strmult_matrixc                   :   \ rS rSr% \\S'   \\S'     S'S\S\S\	\
   SS4S	 jjrS
\S\SS4S jrS
\SS4S jrS\S\S\SS4S jrS\SS4S jrS\S\SS4S jrS\S\S\S\S\\   SS4S jrS\S\S\S\S\S\S \S!\S\4S" jrS\S\S\4S# jrS$\SS4S% jr S&r!g)(PDFLayoutAnalyzerA   cur_itemctmNrsrcmgrpagenolaparamsreturnc                 V    [         R                  " X5        X l        X0l        / U l        g N)r$   __init__r=   r>   _stackselfr<   r=   r>   s       N/var/www/html/land-ocr/venv/lib/python3.13/site-packages/pdfminer/converter.pyrB   PDFLayoutAnalyzer.__init__E   s#     	t- /1    pagec                     [        X!R                  5      u  p4pVSS[        X5-
  5      [        XF-
  5      4n[        U R                  U5      U l        g )Nr   )r2   mediaboxabsr   r=   r:   )rE   rI   r;   x0y0x1y1rK   s           rF   
begin_pagePDFLayoutAnalyzer.begin_pageP   sA    ,S--@q#bg,BG5t{{H5rH   c                    U R                   (       a#   [        [        U R                   5      5      5       e[        U R                  [
        5      (       d#   [        [        U R                  5      5      5       eU R                  b%  U R                  R                  U R                  5        U =R                  S-  sl	        U R                  U R                  5        g )N   )rC   strlen
isinstancer:   r   typer>   analyzer=   receive_layout)rE   rI   s     rF   end_pagePDFLayoutAnalyzer.end_pageU   s    ;;5C$4 55$--00J#d4==6I2JJ0==$MM!!$--0qDMM*rH   namebboxmatrixc                     U R                   R                  U R                  5        [        X[	        X0R
                  5      5      U l        g rA   )rC   appendr:   r   r6   r;   )rE   r]   r^   r_   s       rF   begin_figurePDFLayoutAnalyzer.begin_figure]   s/    4==) [-JKrH   _c                    U R                   n[        U R                   [        5      (       d#   [        [	        U R                   5      5      5       eU R
                  R                  5       U l         U R                   R                  U5        g rA   )r:   rW   r   rU   rX   rC   popadd)rE   rd   figs      rF   
end_figurePDFLayoutAnalyzer.end_figurea   sY    mm$--22LCT]]8K4LL2)#rH   streamc                    [        U R                  [        5      (       d#   [        [	        U R                  5      5      5       e[        UUU R                  R                  U R                  R                  U R                  R                  U R                  R                  45      nU R                  R                  U5        g rA   )rW   r:   r   rU   rX   r   rM   rN   rO   rP   rg   )rE   r]   rk   items       rF   render_imagePDFLayoutAnalyzer.render_imageg   s    $--22LCT]]8K4LL2]]t}}//1A1A4==CSCST

 	$rH   gstatestrokefillevenoddpathc                    SR                  S U 5       5      nUSS S:w  a  gUR                  S5      S:  aT  [        R                  " SU5       H8  nXWR	                  S5      UR                  S5       nU R                  XX4U5        M:     gU V	s/ s H'  n	[        [        U	S   S:w  a  U	S	S OUS   S	S 5      PM)     n
n	U
 Vs/ s H  n[        U R                  U5      PM     nnU Vs/ s H  n[        US   5      PM     nnU VVVs/ s HY  n[        USSS
2   US
SS
2   5       VVs/ s H0  u  nn[        U R                  [        U5      [        U5      45      PM2     snnPM[     nnnn[        UU5       VV	s/ s H  u  nn	[        [        U/U	Q75      PM     nnn	[        U5      S:  a-  US	S S:X  a$  US	   US   :X  a  USS	 S-   nUR!                  5         US;   a\  [#        UR$                  US   US   UUUUR&                  UR(                  UUR*                  S9
nU R,                  R/                  U5        gUS;   Ga?  Uu  u  nnu  nnu  nnu  nnnUS   US   :H  nUU:H  =(       a    UU:H  =(       a    UU:H  =(       a    UU:H  =(       d)    UU:H  =(       a    UU:H  =(       a    UU:H  =(       a    UU:H  nU(       ai  U(       ab  [1        UR$                  / US   QUS
   Q7UUUUR&                  UR(                  UUR*                  5	      n U R,                  R/                  U 5        g[3        UR$                  UUUUUR&                  UR(                  UUR*                  5	      n!U R,                  R/                  U!5        g[3        UR$                  UUUUUR&                  UR(                  UUR*                  5	      n!U R,                  R/                  U!5        gs  sn	f s  snf s  snf s  snnf s  snnnf s  sn	nf )z@Paint paths described in section 4.4 of the PDF reference manual c              3   *   #    U  H	  oS    v   M     g7f)r   N ).0xs     rF   	<genexpr>/PDFLayoutAnalyzer.paint_path.<locals>.<genexpr>y   s     +d!ds   NrT   mzm[^m]+r   h      lh>   mlmlh)original_pathdashing_style>   mlllhmllll   )joincountrefinditerstartend
paint_pathr   r/   r1   r;   rU   zipfloatr.   rV   rf   r   	linewidthscolorncolordashr:   rg   r   r   )"rE   rp   rq   rr   rs   rt   shaper}   subpathpraw_ptsptpts	operation	operatorsoperand1operand2transformed_pointsotransformed_pathlinerM   rN   rO   rP   x2y2x3y3rd   is_closed_loophas_square_coordinatesrectcurves"                                     rF   r   PDFLayoutAnalyzer.paint_pathp   s    +d++!9 [[![[E2wwqzAEE!H5wG 3 OSNRUadckAbcFtAwrs|Dd   <CC7R?488R07CC<@ADyYq\*DIA "&"
 "&I /2)ADqD/9QTPQT?.S.S*( $DHHuXh.PQ.S "&  "  	+=> >DAq [1'q'*>    5zA~%*"4RCF9Jcr
S(	%
 $$FFMMMM"2"(++ !!$',,<?9R(2rHRhr2!$Q3q6!1"HCrCbBhC28*GBhE28EbER2X ' "&<!((*#a&*3q6*(
D MM%%d+#(((
E MM%%e,$$MMMM$KK
 !!%(o DA" s0   .O O!*O&
!O1+7O+"O1=!O8+O1fontfontsizescalingrisecidncsgraphicstatec	                     UR                  U5      n	[        U	[        5      (       d   [        [        U	5      5      5       e UR                  U5      n
UR                  U5      n[        UUUUUU	U
UUU5
      nU R                  R                  U5        UR                  $ ! [         a    U R                  X&5      n	 Nzf = frA   )	to_unichrrW   rU   rX   r'   handle_undefined_char
char_width	char_dispr   r:   rg   adv)rE   r_   r   r   r   r   r   r   r   text	textwidthtextdisprm   s                rF   render_charPDFLayoutAnalyzer.render_char   s    	9>>#&DdC((9#d4j/9( OOC(	>>#&
 	$xx# $ 	9--d8D	9s   ?B B=<B=c                 8    [         R                  SX5        SU-  $ )Nzundefined: %r, %rz(cid:%d))logdebug)rE   r   r   s      rF   r   'PDFLayoutAnalyzer.handle_undefined_char  s    		%t1CrH   ltpagec                     g rA   rx   rE   r   s     rF   rZ    PDFLayoutAnalyzer.receive_layout  s    rH   )rC   r:   r>   r=   rT   N)"__name__
__module____qualname____firstlineno__r   __annotations__r-   r)   intr   r   rB   r*   rQ   r[   rU   r0   rb   ri   r+   rn   r(   boolr   r.   r   r&   r   r#   r   r   r   rZ   __static_attributes__rx   rH   rF   r8   r8   A   s   	K
 '+		2#	2 	2 8$		2
 
	26w 6V 6 6
+W + +L LD L& LT LC D    i  D  y)y) y) 	y)
 y) {#y) 
y)v  	
     & 
B '      V  rH   r8   c            	       \    \ rS rSr  SS\S\S\\   SS4S jjrS\	SS4S	 jr
S\	4S
 jrSrg)PDFPageAggregatori  Nr<   r=   r>   r?   c                 :    [         R                  XX#S9  S U l        g N)r=   r>   )r8   rB   resultrD   s       rF   rB   PDFPageAggregator.__init__  s     	""4"S(,rH   r   c                     Xl         g rA   r   r   s     rF   rZ    PDFPageAggregator.receive_layout  s    rH   c                 8    U R                   c   eU R                   $ rA   r   rE   s    rF   
get_resultPDFPageAggregator.get_result!  s    {{&&&{{rH   r   r   )r   r   r   r   r)   r   r   r   rB   r   rZ   r   r   rx   rH   rF   r   r     sY     '+	-#- - 8$	-
 
-V  F rH   r   IOTypec                   b    \ rS rSr   SS\S\S\S\S\\	   SS4S	 jjr
\S\S\4S
 j5       rSrg)PDFConverteri*  Nr<   outfpcodecr=   r>   r?   c                     [         R                  XXES9  X l        X0l        U R	                  U R                  5      U l        g r   )r8   rB   r   r   _is_binary_streamoutfp_binary)rE   r<   r   r   r=   r>   s         rF   rB   PDFConverter.__init__+  s8     	""4"S"

 224::>rH   c                 
   S[        U SS5      ;   a  g[        U S5      (       a  g[        U [        R                  5      (       a  g[        U [        R
                  5      (       d  [        U [        R                  5      (       a  gg)z"Test if an stream is binary or notbmoderv   TF)getattrhasattrrW   ioBytesIOStringIO
TextIOBase)r   s    rF   r   PDFConverter._is_binary_stream8  sc     '%,,UF##rzz**r{{++z%/O/OrH   )r   r   r   )utf-8rT   N)r   r   r   r   r)   r   rU   r   r   r   rB   staticmethodr,   r   r   r   rx   rH   rF   r   r   *  ss    
 '+?#? ? 	?
 ? 8$? 
?  4  rH   r   c                      ^  \ rS rSr     SS\S\S\S\S\\	   S\
S	\\   S
S4U 4S jjjrS\S
S4S jrS\S
S4S jrS\S\S
S4S jrS\S\
S\
S\
S\\   S
S4S jrSrU =r$ )TextConverteriH  Nr<   r   r   r=   r>   
showpagenoimagewriterr?   c                 <   > [         TU ]  XX4US9  X`l        Xpl        g )Nr   r=   r>   )superrB   r   r   )	rE   r<   r   r   r=   r>   r   r   	__class__s	           rF   rB   TextConverter.__init__I  s$     	uhW$&rH   r   c                 *   [         R                  " XR                  S5      nU R                  (       a8  [	        [
        U R                  5      R                  UR                  5       5        g [	        [        U R                  5      R                  U5        g )Nignore)
r   compatible_encode_methodr   r   r   r   r   writeencoder	   rE   r   s     rF   
write_textTextConverter.write_textW  sY    --dJJI4::&,,T[[];$**40rH   r   c                    ^ ^ S[         SS 4UU 4S jjmT R                  (       a  T R                  SUR                  -  5        T" U5        T R                  S5        g )Nrm   r?   c                   > [        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
)	rW   r   r   r  get_textr   r   r   export_image)rm   childrenderrE   s     rF   r
  ,TextConverter.receive_layout.<locals>.render_  s    $,,!E5M "D&))0$	**%D'**##/$$11$7 0 +rH   zPage %s
)r   r   r  pageidrE   r   r
  s   ` @rF   rZ   TextConverter.receive_layout^  sL    
	8 
	8D 
	8 
	8 ??OOK&--78vrH   r]   rk   c                 L    U R                   b  [        R                  XU5        g g rA   )r   r   rn   )rE   r]   rk   s      rF   rn   TextConverter.render_images  s#    '%%d&9 (rH   rp   rq   rr   rs   rt   c                     g rA   rx   )rE   rp   rq   rr   rs   rt   s         rF   r   TextConverter.paint_pathw  s     	rH   )r   r   )r   rT   NFN)r   r   r   r   r)   r,   rU   r   r   r   r   r   rB   r  r   rZ   r+   rn   r(   r   r.   r   r   __classcell__)r   s   @rF   r   r   H  s    
 '+ -1'#' ' 	'
 ' 8$' ' k*' 
' '1s 1t 1V  *: :i :D :  	
  {# 
 rH   r   c                        \ rS rSrSSSSSSS.rS	SS
.r            S8S\S\S\S\	S\
\   S\S\S\S\S\	S\
\   S\	S\
\\\4      S\
\\\4      SS4S jjrS\SS4S jrS9S jrS9S jrS\SS4S  jrS!\S"\	S#\S$\S%\S&\SS4S' jrS!\S"\	S(\SS4S) jrS(\S"\	S#\S$\S%\S&\SS4S* jrS!\S\S#\S$\S+\SS4S, jr S:S!\S"\	S#\S$\S%\S&\S-\SS4S. jjrS!\SS4S/ jrS\S0\S1\SS4S2 jrS9S3 jrS4\SS4S5 jr S9S6 jr!S7r"g);HTMLConverteri  yellowmagentacyanredblackgray)figuretextlinetextbox	textgroupr   rI   blue)r  charNr<   r   r   r=   r>   scale	fontscale
layoutmoder   
pagemarginr   r   rect_colorstext_colorsr?   c           	      f   [         R                  U UUUUUS9  U R                  (       a  U R                  (       d  [	        S5      eU R                  (       d  U R                  (       a  [	        S5      eUc  SS0nUc  SSS.nX`l        Xpl        Xl        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 )Nr   )Codec is required for a binary I/O outputz1Codec must not be specified for a text I/O outputr"  r  r  )r   rI   )r   rB   r   r   r%   r#  r$  r%  r   r&  r   r'  r(  updateRECT_COLORSTEXT_COLORS_yoffset_font
_fontstackwrite_header)rE   r<   r   r   r=   r>   r#  r$  r%  r   r&  r   r   r'  r(  s                  rF   rB   HTMLConverter.__init__  s   " 	 	 	
 TZZ KLL  TZZ STT!7+K$+V<K
"$$$&&&##D$4$45##D$4$45#26
=?rH   r   c                     U R                   (       aC  [        [        U R                  5      R	                  UR                  U R                   5      5        g [        [        U R                  5      R	                  U5        g rA   r   r   r   r   r   r   r	   r  s     rF   r   HTMLConverter.write  H    ::4::&,,T[[-DE$**40rH   c                     U R                  S5        U R                  (       a  SU R                  -  nOSnU R                  U5        U R                  S5        g )Nz<html><head>
zA<meta http-equiv="Content-Type" content="text/html; charset=%s">
z5<meta http-equiv="Content-Type" content="text/html">
z</head><body>
)r   r   )rE   ss     rF   r1  HTMLConverter.write_header  sL    

#$::!#'::. 
 IA

1

$%rH   c                     [        SU R                  5       Vs/ s H  nSU SU S3PM     nnSSR                  U5      -  nU R                  U5        U R                  S5        g s  snf )NrT   z
<a href="#z">z</a>z8<div style="position:absolute; top:0px;">Page: %s</div>
z, z</body></html>
)ranger=   r   r   )rE   i
page_linksr8  s       rF   write_footerHTMLConverter.write_footer  sk    9>q$++9NO9NA
1#Rs$/9N
OG$))K
 
 	

1

%& Ps   A%c                 8    U R                  [        U5      5        g rA   )r   r4   r  s     rF   r  HTMLConverter.write_text  s    

3t9rH   colorborderwidthrz   ywr~   c                     U R                   R                  U5      nUb[  SUUX0R                  -  U R                  U-
  U R                  -  XPR                  -  X`R                  -  4-  nU R	                  U5        g g )Nzn<span style="position:absolute; border: %s %dpx solid; left:%dpx; top:%dpx; width:%dpx; height:%dpx;"></span>
)r'  getr#  r.  r   )	rE   rB  rC  rz   rD  rE  r~   color2r8  s	            rF   
place_rectHTMLConverter.place_rect  s     !!%%e,K 

N]]Q&$**4

N

N	  JJqM rH   rm   c                 ~    U R                  XUR                  UR                  UR                  UR                  5        g rA   )rI  rM   rP   widthheight)rE   rB  rC  rm   s       rF   place_borderHTMLConverter.place_border  s&    DGGTWWdjj$++VrH   c                    U R                   b  U R                   R                  U5      nS[        U5      UX0R                  -  U R                  U-
  U R                  -  XPR                  -  X`R                  -  4-  nU R                  U5        g g )Nzd<img src="%s" border="%d" style="position:absolute; left:%dpx; top:%dpx;" width="%d" height="%d" />
)r   r  r4   r#  r.  r   )	rE   rm   rC  rz   rD  rE  r~   r]   r8  s	            rF   place_imageHTMLConverter.place_image  s     '##006DD I

N]]Q&$**4

N

N	  JJqM (rH   sizec                 8   U R                   R                  U5      nUb|  SUX0R                  -  U R                  U-
  U R                  -  XPR                  -  U R                  -  4-  nU R                  U5        U R                  U5        U R                  S5        g g )NzP<span style="position:absolute; color:%s; left:%dpx; top:%dpx; font-size:%dpx;"></span>
)r(  rG  r#  r.  r$  r   r  )rE   rB  r   rz   rD  rS  rH  r8  s           rF   
place_textHTMLConverter.place_text  s     !!%%e,. 

N]]Q&$**4::%6	  JJqMOOD!JJ{# rH   writing_modec           	         U R                   R                  U R                  5        S U l        SUUUX0R                  -  U R                  U-
  U R                  -  XPR                  -  X`R                  -  4-  nU R                  U5        g )Nzv<div style="position:absolute; border: %s %dpx solid; writing-mode:%s; left:%dpx; top:%dpx; width:%dpx; height:%dpx;">)r0  ra   r/  r#  r.  r   )	rE   rB  rC  rz   rD  rE  r~   rX  r8  s	            rF   	begin_divHTMLConverter.begin_div0  s}     	tzz*
 JJ"djj0JJJJ 	
 	

1rH   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   r0  rf   )rE   rB  s     rF   end_divHTMLConverter.end_divL  s8    ::!JJy!__((*


8rH   fontnamer   c                    X#4nX@R                   :w  ag  U R                   b  U R                  S5        UR                  S5      S   nU R                  SXSU R                  -  U R                  -  4-  5        X@l         U R                  U5        g )Nr]  +z.<span style="font-family: %s; font-size:%dpx">)r/  r   splitr#  r$  r  )rE   r   r`  r   r   fontname_without_subset_tags         rF   put_textHTMLConverter.put_textR  s~    #::zz%

9%*2..*=b*A'JJ@.4::0E0VWX JrH   c                 &    U R                  S5        g )Nz<br>r   r   s    rF   put_newlineHTMLConverter.put_newline`  s    

6rH   r   c                    ^ ^^ S[         [        [        4   SS 4U U4S jjmS[        SS 4UU U4S jjmT" U5        T =R                  T R
                  -  sl        g )Nrm   r?   c                 z   > [        U [        5      (       a%  TR                  SSU 5        U  H  nT" U5        M     g g )Nr   rT   )rW   r    rN  rm   r	  rE   
show_groups     rF   ro  0HTMLConverter.receive_layout.<locals>.show_groupd  s9    $,,!!+q$7!Eu% " -rH   c           
        > [        U [        5      (       a  T=R                  U R                  -  sl        TR	                  SSU 5        TR
                  (       ad  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 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      (       aU  TR	                  SSU 5        TR-                  SU R5                  5       U R                  U R                  U R6                  5        g g [        U [(        5      (       a3  U  H  nT" U5        M     TR&                  S:w  a  TR9                  5         g 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      (       a@  [=        U R>                  5      nTRA                  U R5                  5       X0R6                  5        g [        U [B        5      (       a   TRE                  U R5                  5       5        g g )NrI   rT   z*<div style="position:absolute; top:%dpx;">z	<a name="z">Page z</a></div>
r   r  exactr  r     r"  loose)#rW   r   r.  rP   rN  r   r   r#  r  groupsr   r   rZ  rM   rL  rM  r^  r   rQ  r%  r!   r   rV  rU   indexr   r  rS  rj  get_writing_moder5   r`  rf  r   r  )rm   r	  groupr`  r
  rE   ro  s       rF   r
  ,HTMLConverter.receive_layout.<locals>.renderj  sX   $''(!!&!T2??JJD MMDGG3tzzAC JJ#DKK=}LQ "E5M ";;*!%"5) "- + D'**!!'1d3D(++xDGGTWWdjj$++V!E5M "X&D'**  q$''477DJJTG+dJ//%%j!T:!%u "&i00%%iD9OO!DJJN+ "&u "&f--%%fa6OO		 . D*--!E5M "??g-$$& .D),,GGGGJJKK))+ "E5M "Y'D&))*4==9dmmoxCD&))0 *rH   )r   r    r"   r   r.  r&  rE   r   r
  ro  s   ` @@rF   rZ   HTMLConverter.receive_layoutc  s^    	&U;0@#@A 	&d 	& 	&J	1 J	1D J	1 J	1X 	v(rH   c                 $    U R                  5         g rA   r>  r   s    rF   closeHTMLConverter.close      rH   )r/  r0  r.  r$  r   r%  r&  r'  r#  r   r(  )r   rT   NrT   g      ?normalT2   Nr   NNr?   N)False)#r   r   r   r   r,  r-  r)   r,   rU   r   r   r   r   r   r   r   rB   r   r1  r>  r  rI  r   rN  r   rQ  rV  rZ  r^  rf  rj  r   rZ   r~  r   rx   rH   rF   r  r    s   K K '+"-104043#3 3 	3
 3 8$3 3 3 3 3 3 k*3 3 d38n-3 d38n-3  
!3j1# 1$ 1
&'s t   	
    
2W# WC W{ Wt W  	
    
2$$ $ 	$
 $ $ 
$@ $  	
     
8S T S C 5 T T)V T) T)lrH   r  c                       \ rS rSr\R
                  " S5      r     SS\S\S\	S\
S\\   S	\\   S
\SS4S jjrS\	SS4S jrSS jrSS jrS\	SS4S jrS\SS4S jrSS jrSrg)XMLConverteri  z[ ---]Nr<   r   r   r=   r>   r   stripcontrolr?   c           	          [         R                  U UUUUUS9  U R                  U R                  (       + :X  a  [	        S5      eX`l        Xpl        U R                  5         g )Nr   r*  )r   rB   r   r   r%   r   r  r1  )rE   r<   r   r   r=   r>   r   r  s           rF   rB   XMLConverter.__init__  sc     	 	 	
 TZZ0 KLL&(rH   r   c                     U R                   (       aC  [        [        U R                  5      R	                  UR                  U R                   5      5        g [        [        U R                  5      R	                  U5        g rA   r4  r  s     rF   r   XMLConverter.write  r6  rH   c                     U R                   (       a  U R                  SU R                   -  5        OU R                  S5        U R                  S5        g )Nz%<?xml version="1.0" encoding="%s" ?>
z<?xml version="1.0" ?>
z<pages>
r   r   r   s    rF   r1  XMLConverter.write_header  s8    ::JJ?$**LMJJ12

;rH   c                 &    U R                  S5        g )Nz	</pages>
ri  r   s    rF   r>  XMLConverter.write_footer  s    

< rH   c                     U R                   (       a  U R                  R                  SU5      nU R                  [	        U5      5        g Nrv   )r  CONTROLsubr   r4   r  s     rF   r  XMLConverter.write_text  s1    <<##B-D

3t9rH   r   c                 `   ^ ^^ S[         SS 4U U4S jjmS[         SS 4UU U4S jjmT" U5        g )Nrm   r?   c                 V  > [        U [        5      (       a4  TR                  SU R                  [	        U R
                  5      4-  5        g [        U [        5      (       aJ  TR                  S[	        U R
                  5      -  5        U  H  nT" U5        M     TR                  S5        g g )Nz<textbox id="%d" bbox="%s" />
z<textgroup bbox="%s">
z</textgroup>
)rW   r   r   rv  r3   r^   r    rn  s     rF   ro  /XMLConverter.receive_layout.<locals>.show_group  s    $	**

5zz8DII#678 D+..

4x		7JJK!Eu% "

+,	 /rH   c                 R	  > [        U [        5      (       a  SU R                  [        U R                  5      U R
                  4-  nTR                  U5        U  H  nT" U5        M     U R                  b=  TR                  S5        U R                   H  nT" U5        M     TR                  S5        TR                  S5        g [        U [        5      (       a6  SU R                  [        U R                  5      4-  nTR                  U5        g [        U [        5      (       a6  SU R                  [        U R                  5      4-  nTR                  U5        g [        U [        5      (       aE  SU R                  [        U R                  5      U R                  5       4-  nTR                  U5        g [        U [        5      (       aZ  SU R                   S	[        U R                  5       S
3nTR                  U5        U  H  nT" U5        M     TR                  S5        g [        U [        5      (       aJ  TR                  S[        U R                  5      -  5        U  H  nT" U5        M     TR                  S5        g [        U [         5      (       ar  Sn[        U ["        5      (       a  SnSU R$                  [        U R                  5      U4-  nTR                  U5        U  H  nT" U5        M     TR                  S5        g [        U [&        5      (       a  S[)        U R*                  5      [        U R                  5      U R,                  R                  U R.                  R0                  U R2                  4-  nTR                  U5        TR5                  U R7                  5       5        TR                  S5        g [        U [8        5      (       a#  TR                  SU R7                  5       -  5        g [        U [:        5      (       a  TR<                  bP  TR<                  R?                  U 5      nTR                  S[)        U5      U R@                  U RB                  4-  5        g TR                  SU R@                  U RB                  4-  5        g  [E        SU 45      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>
rv   z wmode="vertical"z<textbox id="%d" bbox="%s"%s>
z</textbox>
zD<text font="%s" bbox="%s" colourspace="%s" ncolour="%s" size="%.3f">z</text>
z<text>%s</text>
z*<image src="%s" width="%d" height="%d" />
z!<image width="%d" height="%d" />
	Unhandled)#rW   r   r  r3   r^   rotater   ru  r   r   r   r   get_ptsr   r]   r!   r   r   rv  r   r4   r`  r   r   r   rS  r  r  r   r   r   r  rL  rM  rU   )	rm   r8  r	  rx  wmoder]   r
  rE   ro  s	         rF   r
  +XMLConverter.receive_layout.<locals>.render  s   $''<KKTYY'KK@ 
 

1!E5M ";;*JJ|,!%"5) "-JJ}-

;'D&))9NNTYY'=  

1D&))9NNTYY'=  

1D'**BNNTYY'LLNF 
 

1D(++$TYYKx8K7LDQ

1!E5M "

=)D*--

3htyy6IIJ!E5M "

?+D),,d$566/E5JJTYY'9 
 

1!E5M "

>*D&))0 DMM* +))00		  

10

;'D&))

.@AD'**##/++88>DJJEt9djj$++>?
 JJ<::t{{34
 7c;"566urH   r   rz  s   ` @@rF   rZ   XMLConverter.receive_layout  sA    
	-V 
	- 
	- 
	-Z	7 Z	7D Z	7 Z	7x 	vrH   c                 $    U R                  5         g rA   r}  r   s    rF   r~  XMLConverter.close[  r  rH   )r   r  )r   rT   NNFr  )r   r   r   r   r   compiler  r)   r,   rU   r   r   r   r   r   rB   r   r1  r>  r  r   rZ   r~  r   rx   rH   rF   r  r    s    jj89G '+-1"#  	
  8$ k*  
61# 1$ 1 !s t 
iV i iVrH   r  c                       \ rS rSrSr\R                  " S5      r    SS\S\	S\
S\S	\\   S
\4S jjrS\S\
4S jrS\
SS4S jrSS jrSS jrS\
SS4S jrSS jrS\SS4S jrSS jrSrg)HOCRConverteri_  zKExtract an hOCR representation from explicit text information within a PDF.z[\x00-\x08\x0b-\x0c\x0e-\x1f]Nr<   r   r   r=   r>   r  c           	      n    [         R                  U UUUUUS9  X`l        SU l        U R	                  5         g )Nr   F)r   rB   r  within_charsr1  )rE   r<   r   r   r=   r>   r  s          rF   rB   HOCRConverter.__init__r  sE     	 	 	
 )!rH   r^   r?   c                     Uu  p#pE[        U5      n[        U R                  S   U-
  5      n[        U5      n[        U R                  S   U-
  5      n	SU SU SU SU	 3$ )Nr   zbbox  )r   	page_bbox)
rE   r^   in_x0in_y0in_x1in_y1out_x0out_y0out_x1out_y1s
             rF   	bbox_reprHOCRConverter.bbox_repr  sm    '+$uUT^^A&./UT^^A&./vhaxq&::rH   r   c                    U R                   (       aE  UR                  U R                   5      n[        [        U R                  5      R                  U5        g [        [        U R                  5      R                  U5        g rA   )r   r   r   r   r   r   r	   )rE   r   encoded_texts      rF   r   HOCRConverter.write  sM    ::;;tzz2L4::&,,\:$**40rH   c                 t   U R                   (       a  U R                  SU R                   -  5        OU R                  S5        U R                  S5        U R                  S5        U R                  S5        U R                  S5        U R                  S5        U R                  S5        U R                  S	5        g )
NzQ<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en' charset='%s'>
zD<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>
z<head>
z<title></title>
zE<meta http-equiv='Content-Type' content='text/html;charset=utf-8' />
zA<meta name='ocr-system' content='pdfminer.six HOCR Converter' />
zR  <meta name='ocr-capabilities' content='ocr_page ocr_block ocr_line ocrx_word'/>
z</head>
z<body>
r  r   s    rF   r1  HOCRConverter.write_header  s    ::JJ:<@JJG
 JJ- 	

:

&'

T	
 	

P	
 	

C	
 	

;

:rH   c                 H    U R                  S5        U R                  S5        g )Nz0<!-- comment in the following line to debug -->
zD<!--script src='https://unpkg.com/hocrjs'></script--></body></html>
ri  r   s    rF   r>  HOCRConverter.write_footer  s    

FG

S	
rH   c                     U R                   (       a  U R                  R                  SU5      nU R                  U5        g r  )r  r  r  r   r  s     rF   r  HOCRConverter.write_text  s-    <<##B-D

4rH   c                 ~   [        U R                  5      S:  a  SnSU R                  ;   a  SnSU R                  ;   a  US-  nU R                  SU R                  U R                  UU R                  U R                  5      U R                  U R                  U R                  R                  5       4-  5        SU l        g )	Nr   rv   Italiczfont-style: italic; Boldzfont-weight: bold; zg<span style='font:"%s"; font-size:%d; %s' class='ocrx_word' title='%s; x_font %s; x_fsize %d'>%s</span>F)	rV   working_textworking_fontr   working_sizer  working_bboxstripr  )rE   bold_and_italic_styless     rF   
write_wordHOCRConverter.write_word  s    t  !A%%'"4,,,)?&***&*??&JJ(
 )))).t'8'89))))))//1	  "rH   r   c                 :   ^ ^ S[         SS 4UU 4S jjmT" U5        g )Nrm   r?   c                   > TR                   (       a%  [        U [        5      (       a  TR                  5         [        U [        5      (       aq  U R
                  Tl        TR                  SU R                  < STR                  U R
                  5      < S35        U  H  nT" U5        M     TR                  S5        g [        U [        5      (       aP  TR                  STR                  U R
                  5      -  5        U  H  nT" U5        M     TR                  S5        g [        U [        5      (       a\  TR                  SU R                  TR                  U R
                  5      4-  5        U  H  nT" U5        M     TR                  S5        g [        U [        5      (       Ga  TR                   (       dP  STl         U R                  5       Tl        U R
                  Tl        U R"                  Tl        U R&                  Tl        g [+        U R                  5       R-                  5       5      S	:X  a0  TR                  5         TR                  U R                  5       5        g TR                   S
   U R
                  S
   :w  d4  TR$                  U R"                  :w  d  TR(                  U R&                  :w  aC  TR                  5         U R
                  Tl        U R"                  Tl        U R&                  Tl        T=R                  U R                  5       -  sl        TR                   S	   TR                   S
   U R
                  S   TR                   S   4Tl        g g )Nz<div class='ocr_page' id='z	' title='z'>
z</div>
z"<span class='ocr_line' title='%s'>rU  z+<div class='ocr_block' id='%d' title='%s'>
Tr   rT   r   r   )r  rW   r   r  r   r^   r  r   r  r  r!   r   rv  r   r  r  r  r`  r  rS  r  rV   r  )rm   r	  
child_liner
  rE   s      rF   r
  ,HOCRConverter.receive_layout.<locals>.render  sy     Zf%=%=!$''!%

{{DNN499$=? "E5M "

:&D*--

8DNN499<UV #'J:& #'

;'D),,

Bzz4>>$))#<=> "E5M "

:&D&))(((,D%(,D%(,		D%(,D%(,		D%..01Q6OO%JJt}}/ ))!,		!<,,=,,		9),0II),0MM),0II)%%8%))!,))!,		!))!,	)D%+ *rH   r  r  s   ` @rF   rZ   HOCRConverter.receive_layout  s%    5	 5	D 5	 5	n 	vrH   c                 $    U R                  5         g rA   r}  r   s    rF   r~  HOCRConverter.close  r  rH   )r  r  r  r  r  r  r  )utf8rT   NFr  )r   r   r   r   __doc__r   r  r  r)   r,   rU   r   r   r   r   rB   r0   r  r   r1  r>  r  r  r   rZ   r~  r   rx   rH   rF   r  r  _  s    U  jj9:G '+"#  	
  8$ *;d ;s ;1# 1$ 14
s t 
"28V 8 8trH   r  )Nr   loggingr   typingr   r   r   r   r   r   r	   r
   r   r   r   pdfminerr   pdfminer.imager   pdfminer.layoutr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   pdfminer.pdfcolorr#   pdfminer.pdfdevicer$   pdfminer.pdfexceptionsr%   pdfminer.pdffontr&   r'   pdfminer.pdfinterpr(   r)   pdfminer.pdfpager*   pdfminer.pdftypesr+   pdfminer.utilsr,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   	getLoggerr   r   r8   r   r   r   r   r  r  r  rx   rH   rF   <module>r     s   	  	     &     * , , 0 : B $ '    !P Pf) & 
68U	3$gfo <7L' 7txL' xv	_<& _DqL' qrH   