
    ?pj                        S SK r S SKJr  S SKJr  SSKJrJr  SSKJ	r
  SSKJr  SSKJr  \ R                  " S	5      r\ R                  " S
5      r\ R                  " S5      r\ R                  " S\ R$                  5      rSrS\-   S-   rSrS\-   S-   rSrS\-   S-   rSrS\-   S-   rSrSrSrS\S\4S jr S\!4S jr"S\!4S jr#S\!4S jr$S\!4S jr%S\!4S jr&S\!4S jr'S\(4S jr)S\4S  jr*S\4S! jr+S\,4S" jr-S#\,S\.4S$ jr/ " S% S&5      r0S' r1STS\(4S( jjr2S\(4S) jr3S\4S* jr4S\4S+ jr5\ R                  " S,5      r6S-1r7\ R                  " S.5      r8S/ r9S\4S0 jr:S1 r;S2\(S\4S3 jr<S4 r=S5 r>1 S6kr?S\!4S7 jr@S\.4S8 jrA SUS9\(S:\BS;\.S\4S< jjrCS=S>S?S@SASBSCSDSESFSG.
rDS9\(S\(4SH jrES\(4SI jrFS\(4SJ jrGS\(4SK jrHS\B4SL jrIS\JS-  4SM jrKSNSO.S\J4SP jjrLS\J4SQ jrM\R                   " SR SS\5      5       rOg)V    N)Counter)Path   )BaseConverterConvertResult)convert_omath)_M)default_registryu1   ^[一二三四五六七八九十百千]+[、．.]u.   ^（[一二三四五六七八九十百千]+）zHYPERLINK\s+"([^"]+)"u   ^[\s第页共of\d\-/|·]*$z<http://schemas.openxmlformats.org/wordprocessingml/2006/main{}z;http://schemas.openxmlformats.org/markup-compatibility/2006zAhttp://schemas.microsoft.com/office/word/2010/wordprocessingShapez6http://schemas.openxmlformats.org/drawingml/2006/chartzH{http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing}z7{http://schemas.openxmlformats.org/drawingml/2006/main}zE{http://schemas.openxmlformats.org/officeDocument/2006/relationships}urlreturnc                 F    U R                  SS5      R                  SS5      $ )z3Escape parentheses in URL for Markdown link syntax.(z%28)z%29)replace)r   s    ]/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/paddleocr/_doc2md/converters/docx.py_escape_md_urlr   9   s     ;;sE"**366    c                    U R                   nUb  U$  U R                  (       aA  U R                  R                  R                   b   U R                  R                  R                   $  UR                  (       aA  UR                  R                  R                   b   UR                  R                  R                   $ g! [         a     N`f = f! [         a     gf = f)zFResolve effective bold: run-level > character style > paragraph style.F)boldstylefont	Exception)runparabs      r   _effective_boldr   >   s    A}99,,899>>&&&::$**//..:::??'''   
  %   AB9 &AC	 9
CC	
CCc                    U R                   nUb  U$  U R                  (       aA  U R                  R                  R                   b   U R                  R                  R                   $  UR                  (       aA  UR                  R                  R                   b   UR                  R                  R                   $ g! [         a     N`f = f! [         a     gf = f)zHResolve effective italic: run-level > character style > paragraph style.F)italicr   r   r   )r   r   is      r   _effective_italicr#   P   s    

A}99..:99>>(((::$**//00<::??)))   
  r   c                    U R                   nUb  [        U5      $  U R                  (       aJ  U R                  R                  R                   b)  [        U R                  R                  R                   5      $  UR                  (       aJ  UR                  R                  R                   b)  [        UR                  R                  R                   5      $ g! [         a     Nif = f! [         a     gf = f)zKResolve effective underline: run-level > character style > paragraph style.F)	underlineboolr   r   r   )r   r   us      r   _effective_underliner(   b   s    A}Aw9911=		0011::$**//33?

1122   
  s%   AC 8AC$ 
C! C!$
C10C1c                 b     [        U R                  R                  5      $ ! [         a     gf = f)zIReturn True if run has superscript set (w:vertAlign w:val='superscript').F)r&   r   superscriptr   r   s    r   _effective_superscriptr,   t   s.    CHH(())    ! 
..c                 b     [        U R                  R                  5      $ ! [         a     gf = f)zEReturn True if run has subscript set (w:vertAlign w:val='subscript').F)r&   r   	subscriptr   r+   s    r   _effective_subscriptr0   |   s.    CHH&&'' r-   c                 L    U R                   R                  S[         S35      SL$ )z3Check if paragraph XML contains OMML math elements..//oMathN)_elementfindr	   )r   s    r   _paragraph_has_mathr6      s$    ==B4uo.d::r   c                   ^^ SSK Jn  SSKJn  / m/ mUU4S jnU R                   GH
  nUR
                  nSU;   a  UR                  S5      S   OUnU[         S3:X  aO  U" 5         UR                  [         S35       H*  n[        U5      nU(       d  M  TR                  S	U45        M,     M  U[         S3:X  a0  U" 5         [        U5      nU(       a  TR                  S
U45        M  M  US:X  a   U" X@5      n	U	R                  (       ap  TR                  [        X5      [        X5      [        X5      [        U	R                   R"                  5      [%        U	5      ['        U	5      U	R                  S45        GMU  GMX  US:X  d  GMa   U" X@5      n
 U
R*                  =(       d    SnU
R0                   Hz  n	U	R                  (       d  M  TR                  [        X5      [        X5      S[        U	R                   R"                  5      [%        U	5      ['        U	5      U	R                  U45        M|     GM     U" 5         T$ ! [(         a     GM&  f = f! [,        [.        4 a    Sn Nf = f! [(         a     GMP  f = f)u7  Parse a paragraph with mixed text/math content into a list of parts.

Returns a list where each element is either:
- ("text", items_list) — a group of text runs to be formatted
- ("display_math", latex_str) — a display math block ($$...$$)
- ("inline_math", latex_str) — an inline math expression ($...$)
r   )Run	Hyperlinkc                  n   > T(       a-  T R                  S[        T5      45        TR                  5         g g )Ntext)appendlistclear)parts
text_itemss   r   
flush_text._iter_math_paragraph_parts.<locals>.flush_text   s-    LL&$z"234 r   r   	oMathParar3   display_mathinline_mathr 	hyperlinkF)docx.text.runr8   docx.text.hyperlinkr:   r4   tagsplitr	   findall_convert_omathr=   r<   r   r#   r(   r&   r   striker,   r0   r   r   KeyErrorAttributeErrorruns)r   r8   r:   rB   childrM   localomathlatexr   hlr   r@   rA   s               @@r   _iter_math_paragraph_partsrZ      s,    "-JE
 ii&)Sj		#r"cRD	""L"U|4&u-5LL.%!89 5 rd%L L"5)EmU34 c\%&88%%+C6-c80; 123705HH	  k!u+&&,BC 77Cxxx")) / : 1# < % $SXX__ 5 6s ; 4S 9 # #	 #Q r LL7   !.1 C   sP   2BH>I(I&I(A(I(>
III%"I($I%%I((
I76I7c                    / n[        U 5       Hl  u  p#US:X  a'  [        U5      nU(       a  UR                  U5        M0  M2  US:X  a  UR                  SU S35        MO  US:X  d  MW  UR                  SU S35        Mn     SR                  U5      $ )z5Convert a paragraph containing OMML math to Markdown.r<   rF   $$

$$rG   $rI   )rZ   _runs_to_markdownr=   join)r   resultkinddatamds        r   _paragraph_math_to_markdownre      s    F06
6>"4(Bb! ^#MMDd+,]"MMAdV1+& 7 776?r   c                    / n[        U 5       Hl  u  p#US:X  a'  [        U5      nU(       a  UR                  U5        M0  M2  US:X  a  UR                  SU S35        MO  US:X  d  MW  UR                  SU S35        Mn     SR                  U5      $ )z=Convert a paragraph containing OMML math to HTML inline text.r<   rF   r\   r]   rG   r^   rI   )rZ   _runs_to_htmlr=   r`   )r   ra   rb   rc   htmls        r   _paragraph_math_to_htmlri      s    F06
6> &Dd# ^#MMDd+,]"MMAdV1+& 7 776?r   c                 t   [        5       nU R                   H  nUR                  R                  5       (       d  M$  UR                   HK  nUR
                  R                  (       d  M   XR
                  R                  R                  ==   S-  ss'     M}     M     U(       a  UR                  S5      S   S   $ S$ )zWReturn the most common font size in the document (used as body size). Defaults to 16.0.   r   g      0@)	r   
paragraphsr<   striprT   r   sizeptmost_common)docsizespr   s       r   _get_body_font_sizert      s    YE^^vv||~~66Cxx}}}hhmm&&'1,'   */5Q"1%8D8r   body_font_sizec                    U R                   (       a  U R                   R                  OSnUR                  S5      (       a   [        UR	                  5       S   5      $ US:X  a  gUS:X  a  gU R                  R                  5       nU(       d  gS	nU R                   H@  nUR                  R                  (       d  M   UR                  R                  R                  n  O   U(       a9  XAS
-  :  a1  SSKJn  U R                  UR                  :X  a  g[!        U5      S::  a  g["        R%                  U5      (       a  g[&        R%                  U5      (       a  gg! [
         a     gf = f)z>Return heading level (0 = not a heading, 1-6 = heading level).rI   HeadingrD   rk   TitleSubtitler   r   Ng      ?)WD_ALIGN_PARAGRAPH<      )r   name
startswithintrN   
ValueErrorr<   rm   rT   r   rn   ro   docx.enum.textrz   	alignmentCENTERlen_RE_H2match_RE_H3)r   ru   
style_namer<   	font_sizer   rz   s          r   _detect_heading_levelr     s"    %)JJBJY''	z'')"-.. WZ99??D Iyy88===((I  Y#!555>>/666t9? ||D||DC  		s   E 
E#"E#c                   L    \ rS rSr% SrSr\\S'   \\S'   \	\S'   \\S'   S r
S	rg
)_FieldStatei/  zCMutable state for tracking w:fldChar field codes across paragraphs.activephase
nest_depthr   r   r   r   r   c                 <    SU l         S U l        SU l        S U l        g )NFr   r   )selfs    r   __init___FieldState.__init__8  s    
r   )r   r   r   r   N)__name__
__module____qualname____firstlineno____doc__	__slots__r&   __annotations__objectr   r   __static_attributes__ r   r   r   r   /  s#    M8ILMO	Kr   r   c                 T   U  GH  nSUR                   ;   a  UR                   R                  S5      S   OUR                   nUS:w  a  MF  UR                  [        S-   5      nUb  UR	                  [        S-   5      nUS:X  a<  UR
                  S:X  a  U=R                  S	-  sl        OuS
Ul        SUl        SUl        O_US:X  a  UR                  S:X  a  SUl        OAUS:X  a;  UR                  S:  a  U=R                  S	-  sl        OSUl        SUl        SUl        GM  UR                  [        S-   5      nUc  GM;  UR
                  S:X  d  GMN  UR                  (       d  GMb  [        R                  UR                  5      nU(       d  GM  UR                  S	5      Ul        GM     g)zUpdate field_state by scanning a paragraph element's runs.

Used for early-exit paragraphs (TOC / math / empty / code) to keep
cross-paragraph field tracking accurate without building item lists.
r   rD   rH   fldCharNfldCharTypebeginra   rk   Tinstrseparater   endF	instrText)rM   rN   r5   _Wgetr   r   r   r   r<   _RE_FIELD_HYPERLINKsearchgroup)para_elementfield_staterU   rM   fld_charfld_type
instr_elemms           r   !_update_field_state_for_paragraphr   ?  s`    *-*:eiiooc"2&		#:::b9n-||B$67H7"$$0**a/*)-K&(/K%&*KOZ'))Q.(0K%U"))A-**a/*).K&(,K%&*KOZZ[ 01
!k&7&77&B'..z?1&'ggajKO= r   c                 
   Uc
  [        5       nS n SSKJn  / n U R                  5       nU GH  n [!        Xs5      (       a   UR"                  =(       d    SnUR                   Hz  n	U	R
                  (       d  M  UR)                  [        X5      [        X5      S[        U	R                  R                  5      [        U	5      [        U	5      U	R
                  U45        M|     UR                  (       d8  UR
                  (       a%  UR)                  SSSSSSUR
                  U45        M  M  GM  UR*                  R-                  [.        S-   5      n
U
b  U
R1                  [.        S-   5      nUS	:X  a<  UR2                  S
:X  a  U=R4                  S-  sl        OuSUl        SUl        SUl        O_US:X  a  UR4                  S:X  a  S
Ul        OAUS:X  a;  UR4                  S:  a  U=R4                  S-  sl        OSUl        SUl        SUl        GM  UR*                  R-                  [.        S-   5      nUbq  UR6                  (       a]  UR2                  S:X  aM  UR
                  (       a<  [8        R;                  UR
                  5      nU(       a  UR=                  S5      Ul        GMx  UR
                  (       d  GM  UR2                  S
:X  a  UR4                  S:X  a  UR"                  (       aq  UR)                  [        Xp5      [        Xp5      S[        UR                  R                  5      [        U5      [        U5      UR
                  UR"                  45        GM.  UR)                  [        Xp5      [        Xp5      [        Xp5      [        UR                  R                  5      [        U5      [        U5      UR
                  S45        GM     U" U5      $ ! [         a    U" U R                   Vs/ s Ht  nUR
                  (       d  M  [        X@5      [        X@5      [        X@5      [        UR                  R                  5      [        U5      [        U5      UR
                  S4PMv     Os  snf sn5      s $ f = f! [         a    U" U R                   Vs/ s Ht  nUR
                  (       d  M  [        X@5      [        X@5      [        X@5      [        UR                  R                  5      [        U5      [        U5      UR
                  S4PMv     Os  snf sn5      s $ f = f! [$        [&        4 a    Sn GNf = f! [         a     GM  f = f)a  Extract (bold, italic, underline, strikethrough, superscript, subscript, text, url) tuples from a paragraph in document order.

Handles python-docx Hyperlink objects and w:fldChar field-code hyperlinks.
Silently degrades to plain text on error.
Note: underline is forced to False inside Hyperlink/field-hyperlink runs to avoid Word's default hyperlink underline style.

field_state: optional _FieldState instance for cross-paragraph field tracking.
             If None, a fresh _FieldState is created (single-paragraph mode).
Nc                 D   / nU  H  u  nnnnnnnn	SU;  a  UR                  UUUUUUUU	45        M-  UR                  S5      n
[        U
5       HJ  u  pU(       a  UR                  UUUUUUUU	45        U[        U
5      S-
  :  d  M9  UR                  S5        ML     M     U$ )zdExpand items containing \n (from <w:br/> soft line breaks) into per-line items with <br> separators.
rk   )FFFFFF<br>
rI   )r=   rN   	enumerater   )itemsexpandedr   r!   r%   strikethroughr*   r/   r<   r   segmentsjsegs                r   _split_breaks,_iter_paragraph_items.<locals>._split_breakss  s     	
4!%#!	 zz$'H#H-OO "%)'%	 s8}q((OOP .! D r   r   r9   rI   Fr   r   r   ra   rk   Tr   r   r   r   )r   rL   r:   ImportErrorrT   r<   r   r#   r(   r&   r   rQ   r,   r0   iter_inner_contentr   
isinstancer   rR   rS   r=   r4   r5   r   r   r   r   r   r   r   r   )r   r   r   r:   rH   r   content_iterelementr   r   r   r   r   r   s                 r   _iter_paragraph_itemsr   f  s    !m.`
1& E
..0&  b	'--!+++C #<<C88 LL+C6-c8! 123705HH		 (" ||LLueUE7<<QTU )5| #++00i@''||B,>?H7*&,,8'22a7215K.07K-.2KO!Z/&11Q608K-!U*&11A5'22a7216K.04K-.2KO$--2223CD
)"))k.?.?7.J%?? 3 : ::?? KA 23''!* ||
  %%1#..!3#LL+G:-g<! !4!4527;09#LL'OO	 LL+G:-g<0? !4!4527;09#LL	m  J Y  
  #A66	#A,%a.(1'*1-(+FF	 #
 	

*  
  #A66	#A,%a.(1'*1-(+FF	 #
 	

. !.1 Cz  		s   O Q= T>T%CT>.CT>BT>%T>9BT>A-T>Q:/Q+
A"Q+
*Q:9Q:=T"T
0A"T
T"!T"%T;7T>:T;;T>>
UUc                 X   / nU  H  u  nnnnnnnn	U(       d  M  U(       al  US   S   U:X  a`  US   S   U:X  aT  US   S   U:X  aH  US   S   U:X  a<  US   S   U:X  a0  US   S   U:X  a$  US   S   U	:X  a  UUUUUUUS   S	   U-   U	4US'   M  UR                  UUUUUUUU	45        M     U$ )
zMerge adjacent items with identical (bold, italic, underline, strikethrough, superscript, subscript, url).

Returns [(bold, italic, underline, strikethrough, superscript, subscript, text, url)].
rD   r   rk   r   r|               )r=   )
r   mergedr   r!   r%   r   r*   r/   r<   r   s
             r   _merge_runsr   4  s   
 IKF 
		r
1%r
1'r
1*r
1.r
1,r
1*r
1$ r
1$	F2J MM!	1 
H Mr   c           	      <   / n[        U 5       GHz  u  nnnnnnnn	U(       d$  U(       d  U(       d  U(       d  U(       d  U(       Ga  [        U5      [        UR                  5       5      -
  n
[        U5      [        UR                  5       5      -
  nU
(       a  USU
 OSnU(       a  U[        U5      U-
  S OSnUR	                  5       nU(       am  U(       a  SU S3nU(       a  U(       a  SU S3nOU(       a  SU S3nOU(       a  SU S3nU(       a  SU S3nU(       a  S	U S
3nOU(       a  SU S3nX-   U-   nO"U(       a  U(       a  SS[        U5      -  -   S-   nU	(       a  SU S[        U	5       S3nUR                  U5        GM}     / n[        U5       Ho  u  nnUS:  aR  U(       aK  US   nUR                  S5      (       a0  U(       a)  US   R                  5       (       a  UR                  S5        UR                  U5        Mq     SR                  U5      $ )zbConvert paragraph items to Markdown inline text, merging adjacent items with identical formatting.NrI   ~~z******<u></u><sup></sup><sub></sub>    [z](r   r   rD   )r   r   r   u   ​)r   r   lstriprstriprm   r   r=   r   endswithisalnumr`   )r   r@   r   r!   r%   r   r*   r/   r<   r   leadingtrailingprefixsuffixinnerra   r"   partprevs                      r   r_   r_   j  s   E 
U			6Y-;)$i#dkkm"44G4y3t{{}#55H'.T(7^BF5=T#d)h.012FJJLE  rNEF!%,E rNEwaLE!%-E#E7&1E#E7&1E~.t x#d)33f<tfB~c2315DTE 
H FU#4q5V":D}}.//DT!W__=N=Nh'd $ 776?r   c           	      <   / n[        U 5       H{  u  nnnnnnnn	U(       a  SU S3nU(       a  SU S3nU(       a  SU S3nU(       a  SU S3nU(       a  S	U S
3nU(       a  SU S3nU	(       a	  SU	 SU S3nUR                  U5        M}     SR                  U5      $ )z,Convert paragraph items to HTML inline text.z<b>z</b>z<i>z</i>r   r   z<del>z</del>r   r   r   r   z	<a href="">z</a>rI   )r   r=   r`   )
r   r@   r   r!   r%   r   r*   r/   r<   r   s
             r   rg   rg     s    E 
U			d#Dd#Dd#D4&'D4&'D4&'Dse2dV40DT 
  775>r   z(?i)^toc\s*(\d+)$ztable of figureszPAGEREF\s+(_Toc\w+)c                    U R                   (       a  U R                   R                  OSR                  5       n[        R	                  U5      nU(       a  [        UR                  S5      5      $ UR                  5       [        ;   a  gg)z@Return TOC level (1-9) if paragraph uses a TOC style, else None.rI   rk   N)	r   r}   rm   _RE_TOC_STYLEr   r   r   lower_TOC_FLAT_STYLES)r   r   r   s      r   _is_toc_paragraphr     s]    %)ZZ$**//R>>@JJ'A1771:--r   c                     U R                   nSU;   a9  UR                  S5      u  p#nUR                  5       R                  5       (       a  UnUR                  5       $ )zKExtract display text from a TOC paragraph, stripping trailing page numbers.	)r<   
rpartitionrm   isdigit)r   r<   
before_tab_	after_tabs        r   _extract_toc_textr     sL    99Dt|#'??4#8 
y??$$&&D::<r   c                    U R                  S[         S35       H>  nUR                  [         S35      nU(       d  M$  UR                  S5      (       d  M<  Us  $    U R                  S[         S35       HO  nUR                  (       d  M  [
        R                  UR                  5      nU(       d  M>  UR                  S5      s  $    g)zExtract anchor name from a TOC paragraph element.

Priority:
1. w:hyperlink[@w:anchor] attribute
2. PAGEREF _TocXXXX in w:instrText
r2   rJ   anchor_Tocr   rk   N)rO   r   r   r~   r<   _RE_PAGEREFr   r   )r   rY   r   r   r   s        r   _extract_toc_anchorr     s     ""SI#672$f&6f''//M 8 %%B4y&9::::""5::.Aqwwqz!	 ;
 r   entriesc           	          / nU  HG  u  p#nSUS-
  -  nU(       a  UR                  U SU SU S35        M1  UR                  U SU 35        MI     SR                  U5      $ )zCConvert list of (text, anchor, level) TOC entries to Markdown list.z  rk   z- [z](#r   - r   )r=   r`   )r   linesr<   r   levelindents         r   _toc_entries_to_markdownr     sn    E&e#LLF83tfCxq9:LLF82dV,-  ' 99Ur   c                     / nU R                  S[         S35       HE  nUR                  [         S3S5      nUR                  S5      (       d  M4  UR	                  U5        MG     U$ )a  Return all _Toc bookmark names found in a paragraph element.

A heading may carry multiple _Toc bookmarks from repeated TOC updates
(each update inserts a new bookmark without removing old ones).  Returning
all of them ensures that TOC entries from any generation can link here.
r2   bookmarkStartr}   rI   r   )rO   r   r   r~   r=   )r   namesbmr}   s       r   _extract_heading_toc_bookmarksr    s_     E""SM#:;vvDk2&??6""LL < Lr   c              #     #    U  Hy  nSUR                   ;   a  UR                   R                  S5      S   OUR                   nUS:X  a2  UR                  [         S35      nUb  [	        U5       Sh  vN   Ms  Mu  Uv   M{     g N7f)zKYield body children, expanding sdt elements into their sdtContent children.r   rD   sdt
sdtContentN)rM   rN   r5   r   _flatten_body)bodyrU   rM   sdt_contents       r   r  r    sx     *-*:eiiooc"2&		%<**t:%67K&(555 ' K 
 6s   A/B1B2B>	   MenloMonacoCourierConsolas	monospace	Fira CodeCourier NewSource Code ProDejaVu Sans Monoc                 .   U R                    Vs/ s H%  oR                  R                  5       (       d  M#  UPM'     nnU(       d  gU Vs/ s H!  oR                  R                  (       d  M  UPM#     nnU(       d  g[        S U 5       5      $ s  snf s  snf )zKReturn True if all text-bearing runs in the paragraph use a monospace font.Fc              3   Z   #    U  H!  oR                   R                  [        ;   v   M#     g 7fN)r   r}   _CODE_FONTS).0rH   s     r   	<genexpr>%_is_code_paragraph.<locals>.<genexpr>7  s     B>avv{{k)>s   )+)rT   r<   rm   r   r}   all)r   rH   runs_with_textruns_with_fonts       r   _is_code_paragraphr  .  sh    !%=AffllnaN=!/?A66;;aN?B>BBB > @s   "BB	B+Bc                 l    U R                   S   nUR                  UR                  -
  UR                  -
  $ )z5Return the content area width of the document in EMU.r   )sections
page_widthleft_marginright_margin)rq   sections     r   _get_content_widthr$  :  s1    ll1oG 3 33g6J6JJJr   image_counterimagescontent_widthc                    U R                    VVs/ s H  oUR                   Vs/ s H  ofPM     snPM      nnn[        U5      nUS:X  a  g[        US   5      n	[        5       n
S/n[	        U5       GH  nUR                  S5        [	        U	5       GH  nX4U
;   a  M  X|   U   R                  nSnX-   U	:  aP  X|   X-      R                  UL a:  U
R                  XU-   45        US-  nX-   U	:  a  X|   X-      R                  UL a  M:  SnUU-   U:  ai  X|U-      U   R                  UL aR  [	        U5       H  nU
R                  UU-   UU-   45        M     US-  nUU-   U:  a  X|U-      U   R                  UL a  MR  X|   U   n/ nUR                   GH  n[        UX5      nU Hi  u  nnnSU 3nUUU'   U(       a<  U(       a5  [        [        UU-  S-  5      S5      nUR                  SU S	U S
35        MT  UR                  SU S35        Mk     [        U5      (       a  [        U5      R                  5       OB[        [!        U5      5      R                  5       =(       d    UR"                  R                  5       nU(       a  UR                  U5         [%        UR&                  5      nU Hi  nU H`  nUR)                  S[*         S35      nSR-                  S U 5       5      R                  5       nU(       d  MK  UR                  SU S35        Mb     Mk     GM     U(       a  SR-                  U5      OSn Sn!U R                   U   R0                  R3                  [*         S35      n"U"bQ  U"R3                  [*         S35      n#U#b6  U#R5                  [*         S35      n$U$SL =(       d    U$R7                  5       S;  n!U!(       d  US:X  a  US:  a  Sn!U!(       a  SOSn%Sn&US:  a	  U&SU S3-  n&US:  a	  U&SU S3-  n&UR                  SU% U& SU  S U% S35        GM     UR                  S!5        GM     UR                  S"5        S#R-                  U5      $ s  snf s  snnf ! [.         a     GM  f = f)$zVConvert a python-docx Table to an HTML table, handling merged cells and inline images.r   rI   <table>z<tr>rk   images/d   <img src="images/	" width="%">r   r2   tc              3   ^   #    U  H#  oR                   (       d  M  UR                   v   M%     g 7fr  r<   r  r/  s     r   r  !_table_to_html.<locals>.<genexpr>{  s      .0:1ff
   --r   ]<br>FtrPrN	tblHeaderval)false0offTthtdz
 colspan=""z
 rowspan="<>z</</tr>z</table>r   )rowscellsr   setranger=   _tcaddrl   _extract_images_from_paragraphminroundr6   ri   rm   rg   r   r<   _extract_textbox_paragraphsr4   rO   r   r`   r   _trr5   r   r   )'tablerq   r%  r&  r'  rowcellgridnrowsncolsvisited
html_partsr"   r   tccolspanrowspankcontent_partsr   img_listfilename	img_bytescx_emurel_pathpct	para_html	tb_groupstb_parastb_p
tb_t_elemstb_text	cell_html	is_headerr7  
tbl_headerr9  rM   attrss'                                          r   _table_to_htmlrk  @  sv    5:JJ?JSii(idTi(JD?IEzQLE$'EGJ5\&!uAv BG+%$'!+*>*B*Bb*HQG,-1 +%$'!+*>*B*Bb*H Gg+%$7{*;A*>*B*Bb*HwAKKWa!e 45 (1 g+%$7{*;A*>*B*Bb*H
 71:DM9$S3;/Hi!(
3H'0F8$-!%(>(D"EsK%,,/z3%sK &,,/@
"-MN 4< +400 ,D1779&'<T'BCIIK )yy(	  !((3 ;DMM JI$-$,D)-B4qk)BJ&(gg .0:. '#eg $  'w - 4 4q	^ D %- %./ (B 7DM2II::a=$$))RD+6D!YY"Y'78
)$..B4s4C #t Wsyy{BW/WIaEAI  $$CE{:gYa00{:gYa00#ugQykC5BCM N 	'"S V j!99Z  k )?x ! s.   QQQA#Q"<Q"Q"
Q1	0Q1	jpegjpgpnggifbmptiffwebpsvgemfwmf)
z
image/jpegz	image/jpgz	image/pngz	image/gifz	image/bmpz
image/tiffz
image/webpzimage/svg+xmlzimage/x-emfzimage/x-wmfc                    / nU R                   R                  S[         S35      U R                   R                  S[         S35      -   nU GH  nUR                  [         S35      nUb  [	        UR                  SS5      5      OSnUR                  S[         S35      nUc  MZ  UR                  [         S35      n	U	(       d  M{   UR                  R                  U	   n
U
R                  R                  nU
R                  R                  n[        R                  US	5      nUS==   S
-  ss'   SUS    SU 3nUR                  XU45        GM     U$ ! [        [         4 a     GM  f = f)zbExtract images from a paragraph. Returns [(filename, bytes, cx_emu)] where cx_emu is 0 if unknown.r2   inliner   extentcxr   blipembedrn  rk   image.)r4   rO   _WPDr5   r   r   _A_Rr   relstarget_partblobcontent_type_MIME_TO_EXTr=   rR   rS   )r   rq   r%  results
containers	containerrx  r^  rz  r_embedrelr]  r  extr\  s                  r   rI  rI    sZ   G&&TF&'9:T]]=R=R
dV6> J  	4&0-3-?VZZa()Q~~B4tn-<((bT<(		((--(C,,I??77L""<7C!!}Q/0#7HNNH89#  ( N .) 		s   BEE*)E*c                 j  ^5  SSK J nJn  / nU R                  R                  S[         S35      U R                  R                  S[         S35      -   nU GH[  nUR                  S[         S35      nUc  M"  UR                  [         S35      nU(       d  MC   UR                  R                  U   n	U	R                  n
 SSKJn  UR!                  U
R"                  5      nS	nUR                  S[         S
35      nUb?  UR                  S[&         S35      nS	R)                  S U 5       5      R+                  5       nS	n[         S3[         S34 Hx  nUR                  SU 35      nUc  M  UR                  [         S
35      nUc  M9  UR                  S[&         S35      nS	R)                  S U 5       5      R+                  5       n  O   S	nUR                  S[         S35      nUbZ  UR                  [         S
35      nUb?  UR                  S[&         S35      nS	R)                  S U 5       5      R+                  5       nUR                  S[         S35      nU(       d  GM  / nSnS	nUS   nUR                  [         S35      nUGb  UR                  S[         S35      nUR                  S[         S35      nUbY  UR                  [         S35       H;  nUR                  [         S35      n UR-                  U b  U R.                  OS	5        M=     GOUGb  UR                  [         S35      n!U!b,  U!R.                  =(       d    S	m5T5n[1        U54S jS 5       5      nUR                  [         S35       H  nUR                  [         S35      n U b~  U R.                  (       am   [3        U R.                  5      n"U(       a3  U" SSS5      U" U"S9-   n#UR-                  U#R5                  S 5      5        M  UR-                  U R.                  5        M  UR-                  S	5        M     / n$/ n%U GH  n&Un'U'(       d  U&R                  [         S!35      n(U(b  U(R                  S[         S35      n)U)bE  U)R                  [         S35      nUb)  UR                  [         S35      n U b  U R.                  OS	n'O0U(R                  [         S35      n U b  U R.                  =(       d    S	n'U$R-                  U'5        / n*U&R                  [         S"35      n+U+b  U+R                  S[         S35      nUb  UR                  [         S35       Vs0 s H  n[;        UR                  S#S5      5      U_M!     n,nU,(       a  [=        U,R?                  5       5      OS$n-[A        U-S%-   5       Hb  n.U,R                  U.5      nUb:  UR                  [         S35      n U*R-                  U b  U R.                  OS	5        MQ  U*R-                  S	5        Md     U%R-                  U*5        GM     U$(       d  GM  [=        [C        U5      [=        S& U% 5       SS'95      n/S(/n0U(       a  U0R-                  S)U S*35        U=(       d    [1        S+ U$ 5       5      n1U1(       aU  U0R-                  S,5        U0R-                  S-U S.35        U$ H  n'U0R-                  S-U' S.35        M     U0R-                  S/5        U0R-                  S05        [A        U/5       Hs  n2U2[C        U5      :  a  UU2   OS	n3U0R-                  S1U3 S235        U% H.  n*U2[C        U*5      :  a  U*U2   OS	n4U0R-                  S3U4 S235        M0     U0R-                  S45        Mu     U0R-                  S55        UR-                  S	R)                  U05      5        GM^     U$ ! [        [        4 a     GMv  f = f! [$         a     GM  f = f! [6        [8        4 a)    UR-                  U R.                  =(       d    S	5         GM  f = fs  snf ! [$         a    / s $ f = f)6z?Extract chart data as HTML tables from drawings in a paragraph.r   )datetime	timedeltar2   rw  r   chartNidrI   titler/  c              3   J   #    U  H  oR                   =(       d    S v   M     g7frI   Nr1  r  els     r   r  (_extract_chart_tables.<locals>.<genexpr>  s     $Gwggmmw   !#catAxdateAxc              3   J   #    U  H  oR                   =(       d    S v   M     g7fr  r1  r  s     r   r  r    s     .Muww}"}ur  valAxc              3   J   #    U  H  oR                   =(       d    S v   M     g7fr  r1  r  s     r   r  r    s     *I5R77=b=5r  serFcatstrCachenumCachero   v
formatCodec              3   H   >#    U  H  oTR                  5       ;   v   M     g 7fr  )r   )r  rY  fcs     r   r  r    s     )S?arxxz/?s   ")yr   dik        )daysz%Y-%m-%dtxr9  idxrD   rk   c              3   8   #    U  H  n[        U5      v   M     g 7fr  )r   )r  r  s     r   r  r  U  s     3]SVV]s   )defaultr)  z	<caption>z
</caption>c              3   $   #    U  H  ov   M     g 7fr  r   )r  r}   s     r   r  r  [  s     ,KldTls   z<thead><tr>z<th>z</th>z</tr></thead>z<tbody>z<tr><td>z</td>z<td>rB  z</tbody></table>)"r  r  r4   rO   r~  r5   _Cr   r  r   r  r  rR   rS   
lxml.etreeetree
fromstringr  r   r  r`   rm   r=   r<   anyfloatstrftimer   OverflowErrorr   maxkeysrF  r   )6r   rq   r  r  r  r  r  	chart_refr_idr  
chart_partr  
chart_root
title_texttitle_ela_t_elscat_ax_titleax_tagax_elt_eltextsval_ax_title	val_ax_elseries_list
categoriescat_is_datedate_format_code	first_sercat_el	str_cache	num_cachero   r  fmt_elserialdtseries_namesseries_valuesr  r}   tx_elstr_refvalsval_elptsmax_idxr  n_rowsrU  
has_headerr"   r  r9  r  s6                                                        @r   _extract_chart_tablesr    s   g0]]**Sf+=>AVAV$vB
 

 $I!RD7I ==B4r+DhhmmD) __
*"--joo>

 J!RD7H#"**SA;7WW$Gw$GGMMO
 L T<B4v7"#fX7$ ::El3D' $s2$a[ 9')ww.Mu.M'M'S'S'U 8 L"#bT8I$ ~~El3# LL3rd!5E#%77*I5*I#I#O#O#QL %,,s2$c];K JK!#AI^^rd#J/F!"KK#bT(:;	"KK#bT(:;	('//2$b	:GGrd!H-"))AM!&&rJ ; *&^^rd*,=>F)#[[.B+-(&))S?)S&S'//2$b	:GGrd!H-=QVV@).qvv#.)1$B)?)QWBX)XB$.$5$5bkk*6M$N$.$5$5aff$= '--b1 ;  LM"#HHt2Y/E("'**s2$h-?"@".!(Bi!8B!~$&GGrd!H$512qvvB %

bT8 4A }'(vv|##D) RD*-% &c"X,> ?I , '0&7&72$b	&B&B  ua 0125&B   69#chhj/b#(1#5C!$B!~$&GGrd!H$5 $amAFF L $B $6 $$T*I #L   J3]3Q?F $J!!Ij\"DE%K,Kl,K)KJ!!-0!!De"<=(D%%TF%&89 )!!/2i(6]'(3z?':jm!!HSE"78)D%&T]$q'C%%SE&78 * !!'* # 01NN277:./w $z g n-   ~ %/#> @ * 1 1!&&,B ? ?@@\  	s   B`# %^8 !_!B	`# .`# H%`# 1A_">`#  _"D:`# &`;H<`# 8_`# _`# 
_`# _`# "4``# ``# #`21`2c                     / nU R                  [         S35       H  nUR                  [         S35      nUc  M   UR                  [         S35       Hm  nUR                  [         S35      nUc  M   UR                  [         S35      nU(       d  MA  [        S U 5       5      nU(       d  M\  UR                  U5        Mo     M     U$ ! [         a    / s $ f = f)a"  Extract paragraphs from text boxes embedded in a body element.

Text boxes appear as mc:AlternateContent > mc:Choice > wps:txbx > w:txbxContent > w:p.
Only mc:Choice is used to avoid duplicating VML fallback content.

Returns list of lists of w:p elements, one list per non-empty text box.
AlternateContentChoicetxbxtxbxContentrs   c           	   3      #    U  HP  nUR                  S [         S35      SL=(       a)    [        S UR                  S [         S35       5       5      v   MR     g7f)r2   r/  Nc              3   ^   #    U  H#  oR                   (       d  M  UR                   v   M%     g 7fr  r1  r2  s     r   r  8_extract_textbox_paragraphs.<locals>.<genexpr>.<genexpr>  s     M,BqffFAFF,Br4  )r5   r   r  rO   )r  rs   s     r   r  ._extract_textbox_paragraphs.<locals>.<genexpr>  sZ       # FFSA;'t3 NMAIIB4qk,BMMN"s   AA)	iter_MCr5   _WPSr   rO   r  r=   r   )r   ra   alt_contentchoicer  txbx_contentparashas_texts           r   rL  rL  s  s    "<<3%/?(@AK %%Vn5F~tfDM2#yyB4{);<'$,,t1X6  # 
 8MM%( 3	 B&  	s   B*C 0C CCc           
      &    SSK Jn  / n[        U 5       GHS  u  p/ n
U	 GH  n U" X5      n[	        XU5      nU Hg  u  pnSU 3nXU'   U(       a<  U(       a5  [        [        UU-  S-  5      S5      nU
R                  SU SU S35        MR  U
R                  SU S35        Mi     [        U5      (       a(  [        U5      nU(       a  U
R                  S	U 35        M  [        [        U5      5      nU(       d  UR                  R                  5       nU(       a  U
R                  S	U 35        GM  GM     U
(       d  GM*  U(       a  UR                  S
5        UR                  U
5        GMV     U$ ! [         a    / s $ f = f! [         a     GMp  f = f)zConvert text box paragraph groups to blockquote Markdown lines.

Returns a list of strings (lines) to append to the main output.
r   	Paragraphr*  r+  z> <img src="images/r-  r.  r   z> rI   )docx.text.paragraphr  r   r   rI  rJ  rK  r=   r6   re   r_   r   r<   rm   r   extend)textbox_groupsrq   ru   r%  r&  r'  r  output_lines	group_idxpara_elementsgroup_linesp_elemr   r[  r\  r]  r^  r_  r`  math_mdrw  s                        r   _textbox_paragraphs_to_markdownr    s   1 L$-n$= 	#F - :$]S3;/H!(
3H'08$-!%(>(D"EsK#**1(9SEM $**-@
"+MN 4< 't,,9$?G#**Ry>: ++@+FG!YY__.F&&F8}5 9 $B ;##B',M %>P Y  	H  s*   E/ B7FAF/E>=E>
FFc                    0 n U R                   R                  nUR                  n0 nUR	                  [
         S35       H  nUR                  [
         S35      n0 nUR	                  [
         S35       H_  n[        UR                  [
         S3S5      5      n	UR                  [
         S35      n
U
b  U
R                  [
         S3S5      OSnXU	'   Ma     XtU'   M     UR	                  [
         S	35       H]  nUR                  [
         S
35      nUR                  [
         S35      nUc  M8  UR                  [
         S35      nXd;   d  MW  XF   X'   M_     U$ ! [         a    Us $ f = f)z?Parse numbering.xml and return {numId: {ilvl: numFmt}} mapping.abstractNumabstractNumIdlvlilvlr;  numFmtr9  bulletnumnumId)	r   numbering_partr   r4   rO   r   r   r   r5   )rq   numbering_mapr  numbering_elemabstractabs_numabs_idlevelsr  r  fmt_elemfmtr  num_idabs_refs                  r   _build_numbering_mapr    sq   M00 $,,N H!))RD*<=t=12??bT:.Csww"T{C01Dxx2$f.H6>6Jt3Z2PX  4L / " > %%Cj1B4u&((bT/0[[B4s,F!(0(8% 2 5  s   E E*)E*c                    U R                   R                  [         S35      nUc  gUR                  [         S35      nUc  gUR                  [         S35      nUR                  [         S35      nUc  gUR                  [         S35      nUb"  [	        UR                  [         S3S5      5      OSnXa;  a  gX   R                  US	5      nUS
;   a  SOS	n	XU4$ )zIReturn (list_type, ilvl, num_id) or None. list_type: 'bullet' | 'ordered'pPrNnumPrr  r  r9  r;  r   r  )decimallowerLetterupperLetter
lowerRoman
upperRomanordered)r4   r5   r   r   r   )
r   r  r  r  
numId_elem	ilvl_elemr  r  r  	list_types
             r   _get_list_infor    s    
--

t3Z
(C
{HHt5\"E}rd%L)J

bT;'I^^rd#J'F2;2G3y}}t3Z-.QD"


#
#D(
3C WW 	 
 V$$r   Textract_drawingsc          
        ^,^-^.^/  SSK Jn  SSKJn  [        U 5      n[        U 5      n[        U 5      n/ m-0 nS/n/ m,/ m/0 n	Sn
U,U-4S jnU-U/4S jn[        5       n[        U R                  R                  5       GH  nUR                  R                  S5      S	   nUS
:X  Ga  U" X5      n[        U5      nUb>  [!        U5      nU(       a  [#        U5      nT/R%                  UUU45        ['        X5        M}  U" 5         / m.U(       a"  [)        U5      nU(       a  [+        UU UUUU5      m.U-U.4S jn[-        UX5      nU H  u  nnnU" 5         SU 3nUUU'   U(       a;  U(       a4  [/        [1        UU-  S-  5      S5      nT-R%                  SU SU S35        OT-R%                  SU S35        T-R%                  S5        M     [3        UU 5      nU H,  nU" 5         T-R%                  U5        T-R%                  S5        M.     UR4                  R7                  5       n[9        U5      (       aj  U" 5         U
(       a  T-R%                  S5        Sn
[;        U5      nU(       a"  T-R%                  U5        T-R%                  S5        U" 5         ['        X5        GM  U(       d  [=        U5       H  n T-R%                  SU  S35        M     U" 5         U(       dA  T.(       d:  T,(       a  T,R%                  S5        O!T-(       a  T-S	   S:w  a  T-R%                  S5        ['        X5        GM  [?        U5      (       a0  T,R%                  UR4                  5        U" 5         ['        X5        GM  U" 5         [A        UU5      n![C        [E        UU5      5      =(       d    Un"U!S:  a  U"R7                  5       n#U#RG                  S5      (       a  U#RI                  S5      (       a  U#SS n#U#RK                  SS5      n#U
(       a  T-R%                  S5        Sn
[=        U5       H  n T-R%                  SU  S35        M     T-R%                  SU!-   SU# 35        T-R%                  S5        GO[M        UU5      n$U$(       a  U$u  n%n&n'SU&-  n(U%S:X  a*  U' SU& 3n)U	RO                  U)S5      S-   U	U)'   U( U	U)    S 3n*OU( S!3n*U
(       d!  T-(       a  T-S	   S:w  a  T-R%                  S5        S"n
T-R%                  U*U"RK                  SS5      -   5        OsU
(       a  T-R%                  S5        Sn
U	RQ                  5         [=        U5       H  n T-R%                  SU  S35        M     T-R%                  U"5        T-R%                  S5        U" 5         GM  US#:X  d  GM  U" 5         U" 5         U
(       a  T-R%                  S5        Sn
U	RQ                  5         U" X5      n+T-(       a  T-S	   S:w  a  T-R%                  S5        T-R%                  [S        U+XXu5      5        T-R%                  S5        GM     U" 5         U" 5         T-(       a+  T-S	   S:X  a"  T-RU                  5         T-(       a  T-S	   S:X  a  M"  S$RW                  T-5      U4$ ! [         a    [        S5      ef = f)%zZTraverse body elements in order and produce Markdown. Returns (markdown_str, images_dict).r   )Tabler  CDOCX conversion requires python-docx: pip install paddleocr[doc2md]Fc                     > T (       aU  TR                  S5        TR                  T 5        TR                  S5        TR                  S5        T R                  5         gg)z-Flush the code buffer as a fenced code block.z```rI   N)r=   r  r?   )code_bufr   s   r   flush_code_buf%_convert_body.<locals>.flush_code_buf  sE    LLLL"LLLLNN r   c                     > T(       a]  T (       a  T S   S:w  a  T R                  S5        T R                  [        T5      5        T R                  S5        TR                  5         gg)z(Flush the TOC buffer as a Markdown list.rD   rI   N)r=   r   r?   )r   toc_bufs   r   flush_toc_buf$_convert_body.<locals>.flush_toc_buf&  sK    rbR LL1':;LLMMO r   r   rD   rs   c                     > T(       aD  T (       a  T S   S:w  a  T R                  S5        T R                  T5        T R                  S5        g g )NrD   rI   )r=   r  )r   pending_textbox_liness   r   _flush_textbox%_convert_body.<locals>._flush_textboxQ  s=    (rbR(LL!67LL$	 )r   r*  r+  r,  r-  r.  r   rI   z<a id="z"></a>r   r   r   r6  # z    r  -rk   z. r   Ttblr   ),
docx.tabler   r  r  r   RuntimeErrorrt   r$  r  r   r  r   r  rM   rN   r   r   r   r=   r   rL  r  rI  rJ  rK  r  r<   rm   r6   re   r  r  r   r_   r   r~   r   r   r  r   r?   rk  popr`   )0rq   r  r   r  ru   r'  r  r&  r%  ol_countersprev_was_listr$  r(  r   rU   rM   r   	toc_leveltoc_text
toc_anchorrb  r,  r[  r\  r]  r^  r_  r`  chart_tables
chart_htmlr<   r  toc_bmr   rw  clean	list_infor  r  r  r   counter_keyr   rN  r#  r   r+  r'  s0                                               @@@@r   _convert_bodyrA    s   
$1 )-N&s+M(-MEFCMHG"$KM -Ks{{//0iiooc"2&#:U(D *$/I$,T2!4U!;JNNHj)#DE1%E O %'!7>	,K!&%%-)% 6dCOH/7+)V $XJ/#,x meF]$:S$@A3GCLL#4XJiuC!PQLL#4XJb!ABR  08 1s;L*
 Z(R  +
 99??$D #4((  LL$ %5d;LL)LL$ 1%E
 =UCFLL76(&!9: D (= +59?R(1%E "$''		* 1%E )$?E&'<T;'OPXTXFqy##D))ennT.B.B!!BKEh7 LL$ % =UCFLL76(&!9: De}AeW56R *4?	.7+ItV#d]F I-)/$&83>??;PQ3RUV3VK0$*8K,D+ER!H$*82(UuRyBR($(MLL&..6*J!JK$R($)M%%'"@"Gwvhf%=> #HLL(LL$E\OR !M%%ErbR LLuc&P LLK 1P O
E"IO		 E"IO 99UV##a  
Q
 	

s   Y# #Y9c                 J   S[         S[        4S jn/ n/ n[        5       n[        5       n U R                  R                  nU R
                   H  n UR                  /nU(       a   UR                  UR                  5         UR                  (       a  UR                  UR                  5        UR                  U" X5      5        UR                  /n	U(       a   U	R                  UR                  5         UR                  (       a  U	R                  UR                  5        UR                  U" X5      5        M     X#4$ ! [         a    Sn GNf = f! [         a     Nf = f! [         a     Nf = f! [         a     Nf = f! [         a     Nmf = f! [         a     GMT  f = f)zExtract header and footer text from all document sections.

Returns (header_lines: list[str], footer_lines: list[str]).
Deduplicates content and filters out page-number-only text.
seenr   c                    / nU  GH  n UR                   (       a  M  / nUR                   H^  n [        [        U5      5      n[	        U5      nU(       d  UR
                  R                  5       nU(       a  UR                  U5        M^  M`     SR                  U5      nU(       a~  UR                  5       R                  5       (       dX  [        R                  UR                  5       5      (       d-  X;  a%  UR                  U5        UR                  U5        GM  GM  GM  GM  GM!     U$ ! [         a     GM  f = f! [         a     GME  f = f)Nr0  )is_linked_to_previousrl   r>   r   r_   r<   rm   r=   r   r`   r   _RE_PAGE_ONLYr   rH  )	r@   rC  r  r   r  r   r   rw  r<   s	            r   _collect_from_parts5_extract_headers_footers.<locals>._collect_from_parts  s   D-- OOD $%:4%@ A!25!9%%)YY__%6F!!LL0 " , xx  JJL0022)//

==(HHTNNN4( ) > 3 ' 8  %   s;   D<D<AD*BD<*
D94D<8D99D<<
E
EF)rE  r>   settings odd_and_even_pages_header_footerr   r  headerr=   even_page_header"different_first_page_header_footerfirst_page_headerr  footereven_page_footerfirst_page_footer)
rq   rG  header_linesfooter_linesseen_headersseen_footersodd_evenr#  hdrsftrss
             r   _extract_headers_footersrY    s     @ LLLL<<@@ <<	NN#DKK 8 89==KK 9 9:  3D GH NN#DKK 8 89==KK 9 9:  3D GH9  @ %%G   ! 
   ! 
    		s   E  F&E,E#.+FE36,F"F EE
E FE  F#
E0-F/E00F3
F =F?F  F
FFFF
F"!F"c                   2    \ rS rSrS/rS/rS\S\4S jrSr	g)	DocxConverteri5  docxzGapplication/vnd.openxmlformats-officedocument.wordprocessingml.document	file_pathr   c           	          SSK Jn  UR	                  SS5      nUR	                  SS5      nU" [        U5      5      n[        XdS9u  pxU(       a  [        U5      u  p/ nU	(       a1  UR                  SR                  U	5      5        UR                  S	5        UR                  U5        U
(       aB  UR                  S	5        UR                  S
5        UR                  SR                  U
5      5        SR                  U5      n[        UUS[        UR                  5      [        UR                  5      S.S9$ ! [         a    [        S5      ef = f)Nr   )Documentr!  r  Textract_headers_footersr  z

rI   z---r   DOCX)formatparagraph_counttable_count)markdownr&  metadata)r\  r_  r   r4  r5  strrA  rY  r=   r`   r   r   rl   tables)r   r]  kwargsr_  r  r`  rq   md_textr&  rR  rS  r@   s               r   convert_fileDocxConverter.convert_file<  s    	% "::&8$?"(**-F"Ms9~&'O")A#)F&LEV[[67R LL!R U#V[[67ii&G #&s~~#6"3::
 	
/  	U 	s   D6 6Er   N)
r   r   r   r   supported_extensionssupported_mimetypesr   r   rk  r   r   r   r   r[  r[  5  s(    "8Q"
d "
 "
r   r[  r  )r   )Precollectionsr   pathlibr   baser   r   mathr   rP   r	   registryr
   compiler   r   r   
IGNORECASErF  _W_NSr   _MC_NSr  _WPS_NSr  _C_NSr  r~  r  r  rg  r   r&   r   r#   r(   r,   r0   r6   r>   rZ   re   ri   r  rt   r   r   r   r   r   r   r_   rg   r   r   r   r   r   r   r   r  r  r  r  r$  dictrk  r  rI  r  rL  r  r  tupler  rA  rY  registerr[  r   r   r   <module>r~     s1   
   / 2  ' 
H	I	E	F jj!9:  

8"--H 	G5[3 
G	FlS N
W}s 	A5[3 R>L7 7 7
$ $D $t $4  ; ;
M M` S 
9 
9( (# (V  $1NK T K \3$ 3l8 8vC @ 

/0 ''  jj/0s ,	d 	s 		
	C 	CKs K IJY!#Y!-1Y!BEY!Y!z T d :i iXD D5	5p D%54< %2 ,0 U$E U$pR&U R&j (
M (
 (
r   