
    FgE                        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rS SKrS SKrS SKJrJr  S SKJr  S SKJrJrJrJrJrJrJ r   S 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/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8  S S
K9J:r:  S SK;J<r<  S SK=J>r>  S SK?J@r@JArAJBrB  S SKCJDrDJErE  S SKFJGrG  S SKHJIrI  S SKJJKrKJLrLJMrMJNrNJOrOJPrPJQrQJRrRJSrSJTrTJUrU  \R                  " \W5      rX " S S\<5      rY " S S\Y5      rZ\" S\
\\K5      r[ " S S\Y\\[   5      r\ " S S\\\K   5      r] " S S\\\K   5      r^ " S S\\\K   5      r_ " S S \\\K   5      r`g)!    N)BinaryIODictGenericListOptionalSequenceTextIOTupleTypeVarUnioncast)retry
wait_fixed)cache)BaseTranslatorGoogleTranslatorDeepLTranslatorDeepLXTranslatorOllamaTranslatorOpenAITranslatorAzureTranslatorc                 2    SR                  S U  5       5      $ )N c              3   d   #    U  H&  n[         R                  " U5      S    S:w  d  M"  Uv   M(     g7f)r   CN)unicodedatacategory).0chs     a/Users/admin/workspace/ai/PDFMathTranslate/myenv/lib/python3.13/site-packages/pdf2zh/converter.py	<genexpr>,remove_control_characters.<locals>.<genexpr>    s)     F"[%9%9"%=a%@#%E22s   !0	0)join)ss    r    remove_control_charactersr%      s    77FFFF    )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
PDFCIDFont)PDFGraphicStatePDFResourceManager)PDFPage)	PDFStream)AnyIOMatrixPathSegmentPointRectapply_matrix_ptbbox2strencmake_compat_strmult_matrixmatrix_scalec                   6   \ 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
\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)(PDFLayoutAnalyzerP   cur_itemctmNrsrcmgrpagenolaparamsreturnc                 V    [         R                  " X5        X l        X0l        / U l        g N)r=   __init__rW   rX   _stackselfrV   rW   rX   s       r    r\   PDFLayoutAnalyzer.__init__T   s#     	t- /1r&   pagec                     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   )cropboxrK   absr4   rW   rT   )r_   ra   rU   x0y0x1y1mediaboxs           r    
begin_pagePDFLayoutAnalyzer.begin_page_   s\    <<"3R1"3R1q#bg,BG5t{{H5r&   c                 N   U R                   (       a#   [        [        U R                   5      5      5       e[        U R                  [
        5      (       d#   [        [        U R                  5      5      5       eU =R                  S-  sl        U R                  U R                  5      $ )N   )	r]   strlen
isinstancerT   r4   typerW   receive_layout)r_   ra   s     r    end_pagePDFLayoutAnalyzer.end_pageg   sp    ;;5C$4 55$--00J#d4==6I2JJ0 	q""4==11r&   namebboxmatrixc                     U R                   R                  U R                  5        [        X[	        X0R
                  5      5      U l        U R                   S   R                  U R                  l        g )N)r]   appendrT   r/   rO   rU   pageid)r_   ru   rv   rw   s       r    begin_figurePDFLayoutAnalyzer.begin_figurep   sI    4==) [-JK#{{255r&   _c                 4   U R                   n[        U R                   [        5      (       d#   [        [	        U R                   5      5      5       eU R
                  R                  5       U l         U R                   R                  U5        U R                  U5      $ r[   )	rT   rp   r/   rn   rq   r]   popaddrr   )r_   r~   figs      r    
end_figurePDFLayoutAnalyzer.end_figureu   sj    mm$--22LCT]]8K4LL2)#""3''r&   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 r[   )rp   rT   r/   rn   rq   r0   re   rf   rg   rh   r   )r_   ru   r   items       r    render_imagePDFLayoutAnalyzer.render_image|   s    $--22LCT]]8K4LL2]]t}}//1A1A4==CSCST

 	$r&   gstatestrokefillevenoddpathc                 4   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S;   ar  [        UR                   [#        U R                  5      -  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ak  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(       a  U(       ax  [/        UR                   [#        U R                  5      -  / 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[1        UR                   [#        U R                  5      -  UUUUUR$                  UR&                  UUR(                  5	      n!U R*                  R-                  U!5        g[1        UR                   [#        U R                  5      -  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 manualr   c              3   *   #    U  H	  oS    v   M     g7f)r   N )r   xs     r    r!   /PDFLayoutAnalyzer.paint_path.<locals>.<genexpr>   s     +d!ds   Nrm   mzm[^m]+r   h   >   mlmlh)original_pathdashing_style>   mlllhmllll   )r#   countrefinditerstartend
paint_pathr   rI   rK   rU   rn   zipfloatrH   r3   	linewidthrP   scolorncolordashrT   r   r5   r.   )"r_   r   r   r   r   r   shaper   subpathpraw_ptsptpts	operation	operatorsoperand1operand2transformed_pointsotransformed_pathlinere   rf   rg   rh   x2y2x3y3r~   is_closed_loophas_square_coordinatesrectcurves"                                     r    r   PDFLayoutAnalyzer.paint_path   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'*>   
 %
 $$\$((%;;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 ' "&<!((dhh)??*#a&*3q6*(
D MM%%d+#((dhh)??(
E MM%%e,$$\$((%;;MMMM$KK
 !!%(e DA" s0   .O8 O=*P
!P+7P"P=!PP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        Xll        UR                  $ ! [         a    U R                  X&5      n	 Nf = fr[   )	to_unichrrp   rn   rq   r@   handle_undefined_char
char_width	char_dispr+   rT   r   r   adv)r_   rw   r   r   r   r   r   r   r   text	textwidthtextdispr   s                r    render_charPDFLayoutAnalyzer.render_char   s    	9>>#&DdC((9#d4j/9( OOC(	>>#&
 	$xx% $ 	9--d8D	9s   ?B% %CCc                     SU-  $ )Nz(cid:%d)r   )r_   r   r   s      r    r   'PDFLayoutAnalyzer.handle_undefined_char  s    Cr&   ltpagec                     g r[   r   r_   r   s     r    rr    PDFLayoutAnalyzer.receive_layout!  s    r&   )r]   rT   rX   rW   rm   N)"__name__
__module____qualname____firstlineno__r2   __annotations__rG   rC   intr   r)   r\   rD   rj   rs   rn   rJ   r|   r   rE   r   rB   boolr   rH   r   r?   r   r<   r   r   r4   rr   __static_attributes__r   r&   r    rR   rR   P   s   	K
 '+		2#	2 	2 8$		2
 
	26w 6V 6 62W 26 6D 6& 6T 6
(C (D (   i  D  t)t) t) 	t)
 t) {#t) 
t)l     	 
         &  
 D '      V  r&   rR   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%  NrV   rW   rX   rY   c                 :    [         R                  XX#S9  S U l        g N)rW   rX   )rR   r\   resultr^   s       r    r\   PDFPageAggregator.__init__&  s     	""4"S(,r&   r   c                     Xl         g r[   r   r   s     r    rr    PDFPageAggregator.receive_layout/  s    r&   c                 8    U R                   c   eU R                   $ r[   r   r_   s    r    
get_resultPDFPageAggregator.get_result2  s    {{&&&{{r&   r   r   )r   r   r   r   rC   r   r   r)   r\   r4   rr   r   r   r   r&   r    r   r   %  sY     '+	-#- - 8$	-
 
-V  F r&   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;  NrV   outfpcodecrW   rX   rY   c                     [         R                  XXES9  X l        X0l        U R	                  U R                  5      U l        g r   )rR   r\   r   r   _is_binary_streamoutfp_binary)r_   rV   r   r   rW   rX   s         r    r\   PDFConverter.__init__<  s8     	""4"S"

 224::>r&   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moder   TF)getattrhasattrrp   ioBytesIOStringIO
TextIOBase)r   s    r    r   PDFConverter._is_binary_streamI  sc     '%,,UF##rzz**r{{++z%/O/Or&   )r   r   r   )utf-8rm   N)r   r   r   r   rC   r   rn   r   r   r)   r\   staticmethodrF   r   r   r   r   r&   r    r   r   ;  ss    
 '+?#? ? 	?
 ? 8$? 
?  4  r&   r   c                      ^  \ rS rSrSSSSSSSS0 SSS4S\S	\S
\S\S\\	   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\4S jrS\S\SS4S jrSrU =r$ )TextConverteriY  r  rm   NFr   r   rV   r   r   rW   rX   
showpagenoimagewritervfontvcharthreadlang_inlang_outservicerY   c                   > [         TU ]  XX4US9  X`l        Xpl        Xl        Xl        Xl        Xl        UR                  SS5      nUS   S:X  a  [        XUS 5      U l
        g US   S:X  a  [        XUS 5      U l
        g US   S:X  a  [        XUS 5      U l
        g US   S:X  a  [        XXS   5      U l
        g US   S	:X  a  [        XXS   5      U l
        g US   S
:X  a  [        XUS 5      U l
        g [!        S5      e)Nr   rW   rX   :rm   r   googledeepldeeplxollamaopenaiazurezUnsupported translation service)superr\   r  r  r	  r
  r  layoutsplitr   
translatorr   r   r   r   r   
ValueError)r_   rV   r   r   rW   rX   r  r  r	  r
  r  r  r  r  r  param	__class__s                   r    r\   TextConverter.__init__Z  s   " 	uhW$&

mmC"8x.>7D/DO 1X .=7D/DO 1X!.>7D/DO 1X!.>7!H/DO 1X!.>7!H/DO 1X .=7D/DO >??r&   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	   r_   r   s     r    
write_textTextConverter.write_text  sY    --dJJI4::&,,T[[];$**40r&   r   c                 <   ^ ^ S[         SS 4UU 4S jjnU" T5      nU$ )Nr   rY   c                 P  >^9 S n/ n/ n/ nSnSn/ n/ n/ n	/ n
/ n/ nSnT:R                   S-  nSnU;4S jnSn[        U 5      n U[        U 5      :  Ga  U U   n[        U[        5      (       Ga  SnUR
                  R                  S5      S   nT;R                  T:R                     nUR                  u  nn[        R                  " [        UR                  5      SUS-
  5      [        R                  " [        UR                  5      SUS-
  5      nnUUU4   nUS:X  da  UU:X  a  UR                  US   S   S	-  :  dB  U" UUR!                  5       5      (       d&  UR"                  S   S:X  a  UR"                  S
   S:X  a  SnU(       dD  U(       a  UR!                  5       S:X  a  SnUS-  nU(       a  UR!                  5       S:X  a  SnUS-  nU(       a2  UU:w  d,  [%        UR                  UR                  -
  5      U:  a  US:w  a  U(       a  US==   S[        U	5       S3-  ss'   U(       dV  UU:X  aP  UR                  ['        U Vs/ s H  nUR                  PM     sn5      :  a  US   R                  UR                  -
  nU	R)                  U5        U
R)                  U5        UR)                  U5        / n/ nSnU(       d  UU:X  a[  UR                  UR*                  S-   :  a  US==   S-  ss'   OUR*                  UR                  :  a  US==   S-  ss'   SUS   S'   OeUR)                  S5        UR)                  UR                  UR                  UR                  UR                  UR                  UR,                  S/5        U(       d  UR                  US   S   S	-  :  d}  U" US   S   R
                  R                  S5      S   S5      (       dM  [.        R0                  " SUS   S   R
                  R                  S5      S   [.        R2                  5      (       aG  US   S==   UR                  US   S   -
  -  ss'   UR                  US   S'   UR,                  US   S'   US==   UR!                  5       -  ss'   OQU(       d9  UU:X  a3  UR                  UR                  :  a  UR                  UR                  -
  nUR)                  U5        [5        US   S   UR                  5      US   S'   ['        US   S
   UR*                  5      US   S
'   UnUnO[        U[6        5      (       a  O[        U[8        5      (       a  T;R                  T:R                     nUR                  u  nn[        R                  " [        UR                  5      SUS-
  5      [        R                  " [        UR                  5      SUS-
  5      nnUUU4   nU(       a  UU:X  a  UR)                  U5        OUR)                  U5        O US-  nU[        U 5      :  a  GM  U(       aM  US==   S[        U	5       S3-  ss'   U	R)                  U5        U
R)                  U5        UR)                  U5        [:        R=                  S5        [?        U	5       H  u  nn['        U Vs/ s H  nUR*                  PM     sn5      US   R                  -
  n[:        R=                  SUS SUS   R                  S SUS   R                  S SUS   R@                   SUS   R
                   S[        U
U   5       SU SSRC                  U Vs/ s H  nUR!                  5       PM     sn5       35        UR)                  U5        M     [:        R=                  S5        [D        RF                  " S5      m9[D        RH                  " T95        [K        [M        S5      S9U9U;4S j5       n [N        RP                  RS                  T;RT                  S9 n![        U!RW                  U U5      5      n"S S S 5        U;4S jn#S u  n$n%[?        W"5       GH  u  nn&UU   S   =n'n(UU   S   n)UU   S   n*UU   S
   n+SnUU   S   n,UU   S   n-UU   S   n.Sn/S =n0n1[:        R=                  SU) SU( SU* SU+ SU, SU-R
                   SU. S!UU    S"U& 35         U[        U&5      :X  a(  U/(       a  US#U0 SU,S$ S%U'S$ SU)S$ S&U#" U0U/5       S'3-  nM  [.        R0                  " S(U&US  [.        R2                  5      n2Sn3U2(       a  U[        U2RY                  S5      5      -  n [        U2RY                  S5      R[                  SS5      5      n4UU4   n5[        U	U4   5      S:X  a3  [\        R^                  " U	U4   S   R!                  5       S   5      S);   a  Sn3OrU&U   nS n1 U1S :X  a-  T;R`                  S*   Rc                  [e        U5      5      U:X  a  S*n1U1S :X  a  S+n1T;R`                  U1   Rg                  [e        U5      5      U,-  n5US-  nU1U0:w  d  U2(       d  U(U5-   U+S,U,-  -   :  a(  U/(       a!  US#U0 SU,S$ S%U'S$ SU)S$ S&U#" U0U/5       S'3-  nSn/U.(       aE  U(U5-   U+S,U,-  -   :  a6  U*n(S-S-S.S/S/S0.n6U)U,U6Ri                  T;Rj                  Rl                  S.5      -  -  n)U2(       Gav  Sn7U0S :w  a  UW4   n7U	W4    GH  n[o        UR@                  5      n8US#T;Rp                  UR,                      SUR                  S$ S%U(UR                  -   U	U4   S   R                  -
  S$ SU7U)-   UR                  -   U	U4   S   R                  -
  S$ S&U#" T;Rp                  UR,                     U85       S'3-  n[:        Rs                  [t        Rv                  5      (       d  M  UR)                  [9        S,U$U%4U(UR                  -   U	U4   S   R                  -
  U7U)-   UR                  -   U	U4   S   R                  -
  45      5        U(UR                  -   U	U4   S   R                  -
  U7U)-   UR                  -   U	U4   S   R                  -
  n%n$GM     U
U4    H  nURx                  S:  d  M  US1URz                  S   S   U(-   U	U4   S   R                  -
  S$ SURz                  S   S   U7-   U)-   U	U4   S   R                  -
  S$ S2URx                  S$ S3URz                  S   S   URz                  S   S   -
  S$ SURz                  S   S   URz                  S   S   -
  S$ S43-  nM     O#U/(       d  U(n'U(U*:X  a	  WS:X  a  Sn5OU/W-  n/OU/W-  n/U3(       a  Sn5U1n0U(U5-  n([:        Rs                  [t        Rv                  5      (       a$  UR)                  [9        S,U$U%4U(U)45      5        U(U)n%n$GM     U H  nURx                  S:  d  M  US1URz                  S   S   S$ SURz                  S   S   S$ S2URx                  S$ S3URz                  S   S   URz                  S   S   -
  S$ SURz                  S   S   URz                  S   S   -
  S$ S43-  nM     S5U S63nU$ s  snf s  snf s  snf ! , (       d  f       GNh= f!    GM  = f!    GN= f)7Nr   ry   r   r   c                   > [         R                  " SU5      (       a  gTR                  (       a(  [         R                  " TR                  U 5      (       a  gO[         R                  " SU 5      (       a  gTR                  (       a)  [         R                  " TR                  U5      (       a  g g	U(       a@  US:w  a:  [        R
                  " US   5      S;   d  [        US   5      [        SS5      ;   a  gg	)
Nz\(cid:TzT(CM[^R]|MS|XY|MT|BL|RM|EU|LA|RS|LINE|TeX-|rsfs|txsy|wasy|.*Mono|.*Code|.*Ital|.*Sym) r   )LmMnSkSmZlZpZsip  i   F)r   matchr	  r
  r   r   ordrange)r   charr_   s     r    vflag;TextConverter.receive_layout.<locals>.render.<locals>.vflag  s    88Id++::xx

400# 1 xx wx|}}#::xx

400# 1
  c	{/C/CDG/LPt/tx{  }A  BC  }D  yE  IN  OT  UZ  I[  y[#r&   F+rm   gHzG?   T()z$v$r+        z(.*Medi|.*Bold)r   z
==========[VSTACK]==========
z< z.1fz > $vz$ = z
==========[SSTACK]==========
PDFMathTranslate)waitc                   >  [         R                  " U [        TR                  5      45      n[         R                  " TU5      nUc=  TR                  R                  U 5      n[        U5      n[         R                  " TX5        U$ ! [         aZ  n[        R                  [        R                  5      (       a  [        R                  U5        Ue[        R                  USS9  UeS nAff = f)NF)exc_info)r   deterministic_hashrn   r  load_paragraph	translater%   write_paragraphBaseExceptionlogisEnabledForloggingDEBUG	exception)r$   hash_key_paragraphnewehash_keyr_   s       r    worker<TextConverter.receive_layout.<locals>.render.<locals>.worker  s    ).)A)A1SEYBZ)[&..x9KLC{ OO55a85c:--h8JPJ$ ''66a( G a7Gs   BB 
C+AC&&C+)max_workersc           	        > [        TR                  U    [        5      (       a.  SR                  U Vs/ s H  nS[	        U5      -  PM     sn5      $ SR                  U Vs/ s H  nS[	        U5      -  PM     sn5      $ s  snf s  snf )Nr   z%04xz%02x)rp   fontmaprA   r#   r4  )fcurcstkcr_   s      r    
raw_string@TextConverter.receive_layout.<locals>.render.<locals>.raw_string  sn    dll40<<77T#BTFSVOT#BCC77T#BTFSVOT#BCC $C#Bs   B !B)r   r   z > z | /fz Tf 1 0 0 1 z Tm [<z>] TJ z\$?\s*v([\d\s]+)\$)r,  r-  r.  tirozchina-ssg?gffffff?g?g333333?)zzh-CNzzh-TWjakoenzET q 1 0 0 1 z cm [] 0 d 0 J z	 w 0 0 m z
 l S Q BT zBT zET )>widthlistro   rp   r+   fontnamer  r  r{   r   npclipr   re   rf   sizeget_textrw   rd   maxrz   rg   r   r   r3  
IGNORECASEminr/   r3   rI  debug	enumerater   r#   r   rD  create_cacher   r   
concurrentfuturesThreadPoolExecutorr  mapgroupreplacer   r   rV  r   r4  r   getr  r  chrfontidrJ  rK  rL  r   r   )<r   xtsstkvstkvlstkvfixvbktpstklstkvarvarlvarfvlenxt_clsvmaxopsr7  ptrchildcur_vrd  r  r   wcxcyclsvchidvlr   rR  executornewsrZ  _x_yrO  txr   yltrtrg  r   lbrX  rW  fcur_vy_regexmodvidr   
lang_spacefixvcrQ  r   r_   s<                                                            @r    render,TextConverter.receive_layout.<locals>.render  s   BDDEDDDDCDDDFaDC  CdDc$i-3ieV,,E"^^11#6r:H;;v}}5FCAa''#ehh-!A#6rwws588}QqQRs7SrBr"uC Av#v+%**T"Xa[=M2MRWX`afaoaoaqRrRrw|  xD  xD  EF  xG  IJ  xJ  OT  O[  O[  \]  O^  `a  Oa" ENN$4c$9"&E !GDENN$4c$9"&E !GD CKC4G4LQTVWQW H3s8*A&66H#(S&[UXXc]aJb]aVY366]aJbFc=c%)!WZZ%8JJt, KK. KK-!#D"$E!"D;$xx"%%!)3 $R#!&BEE!1 $R#,0R KKO KK%((588EHHUZZX]XbXbch(ij  ::d2hqk$&66%R@T@T@Z@Z[^@_`b@cdf:g:gkmksks  uG  HL  MO  HP  QR  HS  H\  H\  Hb  Hb  cf  Hg  hj  Hk  ln  ly  ly  lz  lz HQKDHQK)??K(-

DHQK(-

DHQKR%.."22#V!&"%%DE* #DHQK 9DHQK #DHQK 9DHQKBFx00v..;;v}}5FCAa''#ehh-!A#6rwws588}QqQRs7SrBr"uCVU+E* QM c$i-P RBs3xj**

4 E"D!II89!#1+#svv+,QqTWW4		BqgQqtwwsm1QqTWWSM1Q488*AaPQdmm_\]^abfgibj^k]llqrtquuyz|  {B  {B  \]  C^  \]  VX  DF  DO  DO  DQ  \]  C^  {_  z`  a  bA ' II89--.@AHx(
1& ' ##664;;6OS[HLL67 PD
 EBr#D/3"Xa[ 148A;$r(1+rb!bQRSX\]_X`abXcSWimnpiqrsitdhx|}  yA  BC  yDuwU		Bqc1#Qrd!B4qaat3tTVxjX[\_[`abCH}1TF!D8<1vQqe6R\]abfRgQhhn!ooCXX&;CIbmmTHCS!233% #HNN1$5$=$=c"$E FC $S	C s3x=!+0D0DSXa[EYEYE[\]E^0_cs0s $Cs8"!$d{t||F/C/M/McRTg/VXZ/Z&, !$;",E LL/::3r7CDHQd{h!C%3t82C1TF!D8<1vQqe6R\]abfRgQhhn!ooC!#DaeBs4xK/,/#SV#W
4
t/G/G LLL: $S	C#&s8C"377|B1T[[%:$;1SXXaLUVWZW]W]U]^abe^fgh^i^l^lUlmnToopqtuvqvwzw}w}q}  B  CF  G  HI  J  M  M  rM  NO  qP  PV  Wa  bf  bm  bm  nq  nv  nv  bw  xz  W{  V|  |B  "C  CC"//>> $F32w#&&SRS@WX[\]X]^a^d^dXdehilemnoepesesXs?t,u v&'hs3x{~~&=c!eCFFl3s8TU;>>>Y22 $, "&cA {{1} #}QUU1Xa[]3s8A;>>5QRS4TTUVWV[V[\]V^_`VabeVefgVghklohpqrhshvhvVvwxUy  zI  JK  JU  JU  VW  IX  Xa  bc  bg  bg  hi  bj  kl  bm  no  ns  ns  tu  nv  wx  ny  by  z{  a|  |}  ~  ~C  ~C  DE  ~F  GH  ~I  JK  JO  JO  PQ  JR  ST  JU  ~U  VW  }X  Xb  &c  !c "+  $ B "uS$% $b "HDDsFA''66F32w!u$=>2Q  *\ ;;q==q!Qqq!QWXWbWbcdVeenopototuvowxyoz{|  |A  |A  BC  |D  EF  |G  pG  HI  oJ  JK  LM  LQ  LQ  RS  LT  UV  LW  XY  X]  X]  ^_  X`  ab  Xc  Lc  de  Kf  fp  q  qC  cU#CJQ Kcp , C^* PO2%$ ! s6   y6
$y;
z ,z/z3z 
zz z%r1   )r_   r   r  r  s   ``  r    rr   TextConverter.receive_layout  s0    a	 a	D a	 a	D 6N
r&   ru   r   c                 L    U R                   b  [        R                  XU5        g g r[   )r  r   r   )r_   ru   r   s      r    r   TextConverter.render_image~  s#    '%%d&9 (r&   )r  r  r  r  r  r
  r	  )r   r   r   r   rC   rF   rn   r   r   r)   r   r(   r\   r&  r4   rr   rE   r   r   __classcell__)r  s   @r    r  r  Y  s   
 '+ -12@#2@ 2@ 	2@
 2@ 8$2@ 2@ k*2@ 2@ 2@ 2@ 2@ 2@ 2@  
!2@ 2@h1s 1t 1dV dR: :i :D : :r&   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   ra   blue)r  r6  NrV   r   r   rW   rX   scale	fontscale
layoutmoder  
pagemarginr  rl  rect_colorstext_colorsrY   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 outputr6  r  r  )r   ra   )r   r\   r   r   r>   r  r  r  r  r  r  r  r  updateRECT_COLORSTEXT_COLORS_yoffset_font
_fontstackwrite_header)r_   rV   r   r   rW   rX   r  r  r  r  r  r  rl  r  r  s                  r    r\   HTMLConverter.__init__  s   " 	 	 	
 TZZ KLL  TZZ STT!7+K$+V<K
"$$$&&&##D$4$45##D$4$45#26
=?r&   r   c                     U R                   (       aC  [        [        U R                  5      R	                  UR                  U R                   5      5        g [        [        U R                  5      R	                  U5        g r[   r   r   r   r   r#  r$  r	   r%  s     r    r#  HTMLConverter.write  H    ::4::&,,T[[-DE$**40r&   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   )r_   r$   s     r    r  HTMLConverter.write_header  sL    

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

1

$%r&   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 )Nrm   z
<a href="#z">z</a>z8<div style="position:absolute; top:0px;">Page: %s</div>
z, z</body></html>
)r5  rW   r#   r#  )r_   i
page_linksr$   s       r    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 r[   )r#  rM   r%  s     r    r&  HTMLConverter.write_text  s    

3t9r&   colorborderwidthr   r  r  r   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  ru  r  r  r#  )	r_   r  r  r   r  r  r   color2r$   s	            r    
place_rectHTMLConverter.place_rect  s     !!%%e,K 

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

N

N	  JJqM r&   r   c                 ~    U R                  XUR                  UR                  UR                  UR                  5        g r[   )r  re   rh   rb  height)r_   r  r  r   s       r    place_borderHTMLConverter.place_border  s&    DGGTWWdjj$++Vr&   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  export_imagerM   r  r  r#  )	r_   r   r  r   r  r  r   ru   r$   s	            r    place_imageHTMLConverter.place_image
  s     '##006DD I

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

N

N	  JJqM (r&   rg  c                 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  ru  r  r  r  r#  r&  )r_   r  r   r   r  rg  r  r$   s           r    
place_textHTMLConverter.place_text#  s     !!%%e,. 

N]]Q&$**4::%6	  JJqMOOD!JJ{# r&   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;">)r  rz   r  r  r  r#  )	r_   r  r  r   r  r  r   r  r$   s	            r    	begin_divHTMLConverter.begin_div;  s}     	tzz*
 JJ"djj0JJJJ 	
 	

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_divW  s8    ::!JJy!__((*


8r&   rd  r   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  r9  ry   z.<span style="font-family: %s; font-size:%dpx">)r  r#  r  r  r  r&  )r_   r   rd  r   r   fontname_without_subset_tags         r    put_textHTMLConverter.put_text]  s~    #::zz%

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

6r&   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 )Nr   rY   c                 z   > [        U [        5      (       a%  TR                  SSU 5        U  H  nT" U5        M     g g )Nr  rm   )rp   r9   r  r   r  r_   
show_groups     r    r  0HTMLConverter.receive_layout.<locals>.show_groupo  s9    $,,!!+q$7!Eu% " -r&   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 )Nra   rm   z*<div style="position:absolute; top:%dpx;">z	<a name="z">Page z</a></div>
r   r  exactr  r     r6  loose)#rp   r4   r  rh   r  r  r#  r  r{   groupsr.   r/   r  re   rb  r  r  r0   r  r  r:   r7   r  rn   indexr+   rh  rg  r  get_writing_moderN   rd  r  r6   r&  )r   r  rs  rd  r  r_   r  s       r    r  ,HTMLConverter.receive_layout.<locals>.renderu  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 *r&   )r   r9   r;   r1   r  r  r_   r   r  r  s   ` @@r    rr   HTMLConverter.receive_layoutn  s^    	&U;0@#@A 	&d 	& 	&J	1 J	1D J	1 J	1X 	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  )r  rm   Nrm   g      ?normalT2   Nr   NNrY   N)False)#r   r   r   r   r  r  rC   rF   rn   r   r   r)   r   r   r(   r   r\   r#  r  r  r&  r  r,   r  r0   r  r  r  r  r  r  r4   rr   r  r   r   r&   r    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r&   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[ ---]NrV   r   r   rW   rX   r  stripcontrolrY   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   r\   r   r   r>   r  r  r  )r_   rV   r   r   rW   rX   r  r  s           r    r\   XMLConverter.__init__  sc     	 	 	
 TZZ0 KLL&(r&   r   c                     U R                   (       aC  [        [        U R                  5      R	                  UR                  U R                   5      5        g [        [        U R                  5      R	                  U5        g r[   r  r%  s     r    r#  XMLConverter.write  r  r&   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    r    r  XMLConverter.write_header  s8    ::JJ?$**LMJJ12

;r&   c                 &    U 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                  [	        U5      5        g Nr   )r  CONTROLsubr#  rM   r%  s     r    r&  XMLConverter.write_text  s1    <<##B-D

3t9r&   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 )Nr   rY   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>
)rp   r7   r#  r  rL   rv   r9   r  s     r    r  /XMLConverter.receive_layout.<locals>.show_group  s    $	**

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

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

+,	 /r&   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>
r   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)#rp   r4   r{   rL   rv   rotater#  r  r3   r   r5   r.   get_ptsr/   ru   r:   r7   r8   r  r+   rM   rd  r   r   r   rg  r&  rh  r6   r0   r  r  rb  r  rn   )	r   r$   r  rs  wmoderu   r  r_   r  s	         r    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6ur&   r  r  s   ` @@r    rr   XMLConverter.receive_layout  sA    
	-V 
	- 
	- 
	-Z	7 Z	7D Z	7 Z	7x 	vr&   c                 $    U R                  5         g r[   r  r   s    r    r  XMLConverter.closef  r  r&   )r  r  )r  rm   NNFr  )r   r   r   r   r   compiler  rC   rF   rn   r   r   r)   r(   r   r\   r#  r  r  r&  r4   rr   r  r   r   r&   r    r  r    s    jj89G '+-1"#  	
  8$ k*  
61# 1$ 1 !s t 
iV i iVr&   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)HOCRConverterij  zKExtract an hOCR representation from explicit text information within a PDF.z[\x00-\x08\x0b-\x0c\x0e-\x1f]NrV   r   r   rW   rX   r  c           	      n    [         R                  U UUUUUS9  X`l        SU l        U R	                  5         g )Nr  F)r   r\   r  within_charsr  )r_   rV   r   r   rW   rX   r  s          r    r\   HOCRConverter.__init__}  sE     	 	 	
 )!r&   rv   rY   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+  )r   	page_bbox)
r_   rv   in_x0in_y0in_x1in_y1out_x0out_y0out_x1out_y1s
             r    	bbox_reprHOCRConverter.bbox_repr  sm    '+$uUT^^A&./UT^^A&./vhaxq&::r&   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 r[   )r   r$  r   r   r   r#  r	   )r_   r   encoded_texts      r    r#  HOCRConverter.write  sM    ::;;tzz2L4::&,,\:$**40r&   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' />
z?<meta name='ocr-system' content='pdf2zh.six HOCR Converter' />
zR  <meta name='ocr-capabilities' content='ocr_page ocr_block ocr_line ocrx_word'/>
z</head>
z<body>
r  r   s    r    r  HOCRConverter.write_header  s    ::JJ:<@JJG
 JJ- 	

:

&'

T	
 	

N	
 	

C	
 	

;

:r&   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>
r  r   s    r    r  HOCRConverter.write_footer  s    

FG

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

4r&   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   r   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)	ro   working_textworking_fontr#  working_sizer:  working_bboxstripr.  )r_   bold_and_italic_styless     r    
write_wordHOCRConverter.write_word  s    t  !A%%'"4,,,)?&***&*??&JJ(
 )))).t'8'89))))))//1	  "r&   r   c                 :   ^ ^ S[         SS 4UU 4S jjmT" U5        g )Nr   rY   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'>r  z+<div class='ocr_block' id='%d' title='%s'>
Tr   rm   r   r:  )r.  rp   r*   rN  r4   rv   r1  r#  r{   r:  r:   r7   r  r+   rh  rH  rK  rd  rI  rg  rJ  ro   rL  )r   r  
child_liner  r_   s      r    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%+ *r&   r  )r_   r   r  s   ` @r    rr   HOCRConverter.receive_layout  s%    5	 5	D 5	 5	n 	vr&   c                 $    U R                  5         g r[   r  r   s    r    r  HOCRConverter.close  r  r&   )r1  r  r.  rK  rI  rJ  rH  )utf8rm   NFr  )r   r   r   r   __doc__r   r*  r  rC   rF   rn   r   r   r)   r   r\   rJ   r:  r#  r  r  r&  rN  r4   rr   r  r   r   r&   r    r,  r,  j  s    U  jj9:G '+"#  	
  8$ *;d ;s ;1# 1$ 14
s t 
"28V 8 8tr&   r,  )ar   rK  r   typingr   r   r   r   r   r   r	   r
   r   r   r   concurrent.futuresro  numpyre  r   tenacityr   r   pdf2zhr   pdf2zh.translatorr   r   r   r   r   r   r   r%   r'   pdf2zh.imager(   pdf2zh.layoutr)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   pdf2zh.pdfcolorr<   pdf2zh.pdfdevicer=   pdf2zh.pdfexceptionsr>   pdf2zh.pdffontr?   r@   rA   pdf2zh.pdfinterprB   rC   pdf2zh.pdfpagerD   pdf2zh.pdftypesrE   pdf2zh.utilsrF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   	getLoggerr   rI  rR   r   r   r   r  r  r  r,  r   r&   r    <module>rj     s>   	  	       &   G  $     * * * . D D @ " %    !R Rj) & 
68U	3$gfo <g:L' g:h	xL' xv	_<& _DqL' qr&   