ó
    �®žj�_ ã                  óØ  • % S SK Jr  S SKrS SKrS SKrS SKrS SKJr  S SKJ	r	  S SK
Jr  S SKJr  S SKJr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JrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(  S S
K)J*r*J+r+J,r,  S SK-J.r.  S SK/J0r0J1r1  S SK2J3r3J4r4  S SK5J6r6  S SK7J8r8  S SK9J:r:J;r;J<r<  S SK=J>r>  S SK?J@r@  S SKAJBrB  S SKCJDrDJErE  S SKFJGrGJHrH  S SKIJJrJJKrK  \R˜                  " \M5      rNSrOS\PS'   SrQS\PS'    S SKRJSrS  S SKTJSrU  S SKVJWrW  S SKXJYrY  S SKZJ[r[  S S K\J]r]  S S!K^J_r_J`r`  S S"KaJbrbJcrc  S S#KdJere  S S$KfJgrg  S S%KhJiri  S&rOS'rlS(rm\.RÜ                  " SSS&SS)9roS*\PS+'    \Rà                  \Rà                  \Râ                  \Râ                  \Rä                  \Rä                  \Rä                  \Ræ                  \Rè                  \Rè                  S,.
ruS-\PS.'    S/rvS0\PS1'    S2rwS0\PS3'    S4rxS5\PS6'    S7ryS0\PS8'    S9rzS:\PS;'    S<r{S:\PS='    S>r|S:\PS?'    S@SASBSCSD.r}SE\PSF'    \Rü                  " SG5      rS*\PSH'    \€" 1 SIk5      r�SJ\PSK'    SRSL jr‚SSSM jrƒSTSN jr„SUSO jr… " SP SQ\85      r†g! \j a  rk\krQ SrkCkGN/SrkCkff = f)Vé    )ÚannotationsN)Úcontextmanager)Údeepcopy)ÚBytesIO)ÚPath)ÚAnyÚCallableÚFinal)Úurlparse)ÚCodeItemÚContentLayerÚDocItemÚDocItemLabelÚDoclingDocumentÚDocumentOriginÚ
GroupLabelÚImageRefÚ	ListGroupÚNodeItemÚPictureClassificationLabelÚPictureClassificationMetaFieldÚPictureClassificationPredictionÚPictureMetaÚRefItemÚRichTableCellÚ	TableCellÚ	TableDataÚ	TableItemÚTabularChartMetaField)ÚFineRefÚ
FormattingÚScript)Úetree)ÚImageÚUnidentifiedImageError)ÚAnyUrlÚValidationError)Úoverride)ÚDeclarativeDocumentBackend)Úconvert_to_modern_formatÚget_docx_to_pdf_converterÚget_pil_from_dml_docx)ÚoMath2Latex)ÚMsWordBackendOptions)ÚFormatToMimeType)ÚInputDocumentÚInputFormat)ÚDocumentLoadErrorÚSecurityError)ÚCodeLanguageLabelÚdetect_code_languageFÚboolÚ_DOCX_AVAILABLEzImportError | NoneÚ_DOCX_IMPORT_ERROR)ÚDocument)ÚWD_STYLE_TYPE)ÚST_Merge)ÚCT_Tc)ÚBaseOxmlElement)Ú	BaseStyleÚParagraphStyle)ÚTableÚ_Cell)Ú	Hyperlink)Ú	Paragraph)ÚRunTzwThe 'python-docx' package is required to process Word files. Install it with `pip install 'docling-slim[format-docx]'`.zÝLibreOffice is required to render Word charts as images (render_chart_images=True). Install LibreOffice and make sure `soffice` is on PATH. Charts still keep their classification and reconstructed tabular data without it.)Úresolve_entitiesÚload_dtdÚ
no_networkÚdtd_validationr
   Ú_SAFE_XML_PARSER)
ÚbarChartÚ
bar3DChartÚ	lineChartÚline3DChartÚpieChartÚ
pie3DChartÚdoughnutChartÚscatterChartÚ	areaChartÚarea3DChartz,Final[dict[str, PictureClassificationLabel]]Ú _CHART_TAGNAME_TO_CLASSIFICATIONzhttp://purl.oclc.org/ooxml/ú
Final[str]Ú_STRICT_OOXML_NS_PREFIXz"http://schemas.openxmlformats.org/Ú_TRANSITIONAL_NS_HOSTs   purl.oclc.org/ooxmlzFinal[bytes]Ú_STRICT_OOXML_MARKERz_rels/.relsÚ_OOXML_ROOT_RELSi   ú
Final[int]Ú_MAX_ROOT_RELS_SIZEi    Ú_MAX_MEMBER_UNCOMPRESSED_SIZEl        Ú_MAX_TOTAL_UNCOMPRESSED_SIZEz7http://descriptions.openxmlformats.org/description/basez7http://descriptions.openxmlformats.org/description/fullz?http://schemas.openxmlformats.org/officeDocument/2006/customXmlzOhttp://schemas.openxmlformats.org/package/2006/relationships/metadata/thumbnail)z,http://purl.oclc.org/ooxml/descriptions/basez,http://purl.oclc.org/ooxml/descriptions/fullzAhttp://purl.oclc.org/ooxml/officeDocument/relationships/customXmlzJhttp://purl.oclc.org/ooxml/officeDocument/relationships/metadata/thumbnailzFinal[dict[str, str]]Ú_STRICT_OOXML_NS_OVERRIDESz-http://purl\.oclc\.org/ooxml/[A-Za-z0-9_./-]+Ú_STRICT_OOXML_NS_RE>   ÚdecimalÚ
lowerRomanÚ
upperRomanÚdecimalZeroÚlowerLetterÚupperLetterúFinal[frozenset[str]]Ú_VISIBLE_NUMBERING_FORMATSc                óú   • U [         ;   a	  [         U    $ U [        [        5      S nUR                  SS5      nUR                  SS5      nUR	                  S5      u  p#nU(       d  [
         U S3$ [
         U SU 3$ )	zNMap a single Strict OOXML namespace/relationship URI to its Transitional form.NÚextendedPropertieszextended-propertiesÚcustomPropertieszcustom-propertiesÚ/z/2006z/2006/)r^   ÚlenrV   ÚreplaceÚ	partitionrW   )Ú	strict_nsÚrestÚsegmentÚ	separatorÚtails        Ú[/home/mande/repo/quber/.venv/lib/python3.13/site-packages/docling/backend/msword_backend.pyÚ_strict_ns_to_transitionalru   ©   s‹   € àÔ.Ó.Ü)¨)Ñ4Ð4Ø”SÔ0Ó1Ð3Ð4€DØ�<‰<Ð,Ð.CÓD€DØ�<‰<Ð*Ð,?Ó@€DØ#Ÿ~™~¨cÓ2Ñ€G˜ÞÜ'Ð(¨¨	°Ð7Ð7Ü#Ð$ W I¨V°D°6Ð:Ð:ó    c                ó¼   •  U R                  [        5       n[        UR                  [        5      ;   sSSS5        $ ! , (       d  f       g= f! [
         a     gf = f)zâCheaply decide whether an open .docx archive is a Strict OOXML package.

Only the small package root relationships part (``_rels/.rels``) is read, so
the common Transitional case does not pay for decompressing the whole file.
NF)ÚopenrY   rX   Úreadr[   ÚKeyError)ÚarchiveÚ	root_relss     rt   Ú_is_strict_ooxmlr}   ¶   sG   € ðØ�\‰\Ô*Ô+¨yÜ'¨9¯>©>Ô:MÓ+NÑN÷ ,×+×+ûäó ñ ðús+   ‚A —=³	A ½
AÁA ÁA Á
AÁAc                óÐ   • U R                  SS5      nUR                  S5      (       d  [        U5      S:”  a
  US   S:X  a  g[        S UR	                  S5       5       5      (       + $ )z Return whether a zip member name stays inside the archive root.

Guards against zip-slip: absolute paths, drive-letter paths and ``..``
traversal are rejected.
Ú\rk   é   Ú:Fc              3  ó*   #   • U  H	  oS :H  v •  M     g7f)z..N© )Ú.0Úparts     rt   Ú	<genexpr>Ú&_is_safe_zip_member.<locals>.<genexpr>Î   s   é € ÐBÒ,A D˜4–<Ò,Aùs   ‚)rm   Ú
startswithrl   ÚanyÚsplit)ÚnameÚ
normalizeds     rt   Ú_is_safe_zip_memberr�   Å   s]   € ð —‘˜d CÓ(€JØ×Ñ˜S×!Ñ!¤c¨*£o¸Ó&9¸jÈ¹mÈsÓ>RØÜÑB¨J×,<Ñ,<¸SÔ,AÓBÓBÔBÐBrv   c                ó
  • [        5       nSn[        R                  " US[        R                  5       nU R	                  5        GH  n[        UR                  5      (       d  [        SUR                   35      eUR                  [        :”  a  [        SUR                   35      eX$R                  -  nU[        :”  a  [        S5      eU R                  UR                  5      nUR                  R                  S5      (       a?  [        U;   a5  [        R                  S UR!                  S5      5      R#                  S5      nUR%                  XE5        GM     S	S	S	5        UR'                  S5        U$ ! , (       d  f       N!= f)
aŸ  Rewrite an open Strict OOXML package to Transitional namespaces in memory.

Only XML/relationship parts that actually carry a Strict namespace are
decoded and rewritten; every other member (images, fonts, ...) is copied
through with its original compression, avoiding a needless decode pass. Each
member is decompressed exactly once. The archive is validated against
zip-slip and zip-bomb attacks while it is read.
r   ÚwzZIP slip attempt: z)Refusing to expand oversized OOXML part: zFRefusing to expand OOXML package exceeding the uncompressed size limit)z.xmlz.relsc                ó6   • [        U R                  S5      5      $ )Nr   )ru   Úgroup)Úmatchs    rt   Ú<lambda>Ú)_normalize_strict_ooxml.<locals>.<lambda>ï   s   € Ô"<¸U¿[¹[È»^Ô"Lrv   zutf-8N)r   ÚzipfileÚZipFileÚZIP_DEFLATEDÚinfolistr�   Úfilenamer3   Ú	file_sizer\   r]   ry   ÚendswithrX   r_   ÚsubÚdecodeÚencodeÚwritestrÚseek)r{   rŒ   Útotal_uncompressedÚtargetÚinfoÚcontents         rt   Ú_normalize_strict_ooxmlr¥   Ñ   sC  € ô “€JØÐÜ	�Š˜ S¬'×*>Ñ*>Ô	?À6Ø×$Ñ$×&ˆDÜ& t§}¡}×5Ñ5Ü#Ð&8¸¿¹¸Ð$HÓIÐIØ�~‰~Ô =Ó=Ü#Ø?ÀÇÁ¸ÐOóð ð §.¡.Ñ0ÐØ!Ô$@Ó@Ü#Ø\óð ð —l‘l 4§=¡=Ó1ˆGà—‘×&Ñ&Ð'8×9Ñ9Ü(¨GÓ3ä-×1Ñ1ÙLØ—N‘N 7Ó+ó÷ ‘&˜“/ð ð �O‰O˜D×*ñ+ '÷ 
@ð. ‡O�O�AÔØÐ÷1 
@Õ	?ús   ³D&E4Å4
Fc                  ó˜  ^ • \ rS rSr% SrSrS\S'   S\ S3rS\S'   S	S
S\SSSSSSSS.rS\S'   Sr	S\S'    \
" 1 Sk5      rS\S'    \
" 1 Sk5      rS\S'    SrS\S'    \
" 1 S k5      rS\S!'    S"rS#\S$'    \
" S%5      rS\S&'    \R$                  " S'5      rS(\S)'    \R$                  " S*\R(                  5      rS(\S+'    \ Sˆ       S‰U 4S- jjj5       r\SŠS. j5       r\\SŠS/ j5       5       r\S0 5       r\\S‹S1 j5       5       r\SŒS2 j5       r\      S�S3 j5       r        SŽS4 jr S�S5 jr!S�S6 jr"S�S7 jr#S�S8 jr$S‘S9 jr%S’S: jr&          S“S; jr'S”S< jr(S•S= jr)\*S> 5       r+      S–S? jr,S—S@ jr-S˜S™SA jjr.SšSB jr/    S›SC jr0    SœSD jr1S�SE jr2SžSF jr3SžSG jr4SŸSH jr5S SI jr6S¡SJ jr7S¢SK jr8S£SL jr9S¤SM jr:      S¥SN jr;S¦SO jr<S¢SP jr=S§SQ jr>      S¨SR jr?      S©SS jr@SªST jrA\S«SU j5       rB\ Sˆ     S¬SV jj5       rCS­SW jrD    S®SX jrES¯SY jrFS°SZ jrGS±S[ jrHS±S\ jrIS²S] jrJS³S^ jrKS_ rL    S´S` jrM      SµSa jrNSb rO        S¶Sc jrP S·       S¸Se jjrQ S·         S¹Sf jjrR            SºSg jrS              S»Sh jrTS,Si.           S¼Sj jjrU        S½Sk jrVSdSl.           S¾Sm jjrWSdSl.             S¿Sn jjrX\\YR´                  4           SÀSo jj5       r[      SÁSp jr\S±Sq jr]SÂSr jr^ SÃ       SÄSs jjr_ S·         SÅSt jjr` Sˆ     SÆSu jjra      SÇSv jrb      SÈSw jrcSÉSx jrdSÊSy jreSËSz jrfSÌS{ jrg\SÍS| j5       rhSÎS} jriSÏS~ jrjSÐS jrkSÑS€ jrlSÒS� jrmSÓS‚ jrnSÔSƒ jroSÔS„ jrpS”S… jrqSÕS† jrrS‡rsU =rt$ )ÖÚMsWordDocumentBackendé÷   aÅ  Backend for parsing Word documents (DOCX and DOC files).

Both Transitional (ISO/IEC 29500-4) and Strict (ISO/IEC 29500-1) ``.docx``
packages are supported. Strict packages use ``purl.oclc.org`` namespace URIs
that ``python-docx`` does not recognise; they are normalised to their
Transitional equivalents in memory before parsing. Transitional files are
handed to ``python-docx`` unchanged.

Legacy ``.doc`` files (binary Word 97-2004 format) are first converted to
``.docx`` via LibreOffice before parsing.

Note:
    Images with a total area (width x height) less than or equal to
    `SPACER_IMAGE_AREA_THRESHOLD` (default: 25 px2) are treated as invisible
    layout spacers and discarded during parsing.
ú<http://schemas.openxmlformats.org/wordprocessingml/2006/mainrU   Ú_W_NSÚ{Ú}Ú_W_NS_CLARKz5http://schemas.openxmlformats.org/drawingml/2006/mainz6http://schemas.openxmlformats.org/drawingml/2006/chartzChttp://schemas.openxmlformats.org/officeDocument/2006/relationshipszFhttp://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawingz;http://schemas.openxmlformats.org/markup-compatibility/2006zurn:schemas-microsoft-com:vmlzAhttp://schemas.microsoft.com/office/word/2010/wordprocessingShapez%urn:schemas-microsoft-com:office:wordz5http://schemas.microsoft.com/office/drawing/2010/mainz4http://schemas.microsoft.com/office/word/2010/wordml)ÚaÚcÚrr�   ÚwpÚmcÚvÚwpsÚw10Úa14Úw14r
   Ú_BLIP_NAMESPACESé   rZ   ÚSPACER_IMAGE_AREA_THRESHOLD>   ÚcodeÚverbatimÚpreformattedú
code blockúsource codeúcode listingúhtml preformattedúpreformatted textrf   Ú_CODE_STYLE_NAMES>	   r»   r¼   Ú	codeblockÚ
sourcecodeÚcodelistingÚsource_coder½   ÚhtmlpreformattedÚpreformattedtextÚ_CODE_STYLE_IDSé
   Ú_MAX_STYLE_INHERITANCE_DEPTH>
   ÚmenloÚmonacoÚcourierÚconsolasúsf monoúandale monoúcourier newúlucida consoleúliberation monoúdejavu sans monoÚ_MONOSPACE_FONTSgÍÌÌÌÌÌì?zFinal[float]Ú_MONOSPACE_CHAR_RATIOz{};=<>Ú_CODE_INDICATIVE_CHARSz,[A-Za-z_]\((?:\s*\)|[^)]*[\d,._='\"][^)]*\))zFinal[re.Pattern[str]]Ú_CODE_CALL_PATTERNz…^[ \t]*(?:async\s+)?(?:def|class|if|elif|while|for|with|except|finally|try|catch|switch|function|func|fn|sub|proc)\s+\S[^\n]*:[ \t]*$Ú_CODE_DEF_PATTERNNc                ó$  >• [         (       d  [        [        5      [        eUc
  [	        5       nUR
                  [        R                  :X  a  [        USS5      n[        TU ])  XU5        U R                   S3U l        SS0U l        [        R                  " S[         R"                  S9U l        [        R                  " S[         R"                  S9U l        X l        S	U l        S
U l        S U l        0 U l        0 U l        SU l        [7        5       U l        S U l        S	U l        SU l        [A        SU R,                  5       H  nS U R0                  U'   M     SU l!        SU l"        0 U l#        [7        5       U l$        S U l%        S U l&        S U l'        S U l(        [R        RT                  U l+        S /S /S /S /S.U l,        0 U l-        0 U l.        0 U l/        S	U l0        S	U l1        SU l2        S U l3        U Ri                  U R(                  U Rj                  S9U l6        U Rl                  (       ak  SU l        U Rl                  Rn                  U l8        U Rl                  Rr                  Ru                  [v        Rx                  5      U l3        U R{                  5         g g )NÚdocÚdocxÚvalr�   z4http://schemas.microsoft.com/office/word/2003/wordmlz	.//a:blip©Ú
namespacesz.//v:imagedataFrË   z<eq>{EQ}</eq>Téÿÿÿÿr   ©ÚnamesÚlevelsÚnumidsÚindents)Úpath_or_streamÚdocument_hash)>r7   ÚImportErrorÚ_INSTALL_HINTr8   r.   Úformatr1   ÚDOCr*   ÚsuperÚ__init__r­   ÚXML_KEYÚxml_namespacesr#   ÚXPathr§   r¸   Úblip_xpath_exprÚvml_imagedata_xpath_exprrè   ÚvalidÚ
max_levelsÚlevel_at_new_listÚparentsÚnumbered_headersÚequation_bookendsÚsetÚprocessed_textbox_elementsÚdocx_to_pdf_converterÚdocx_to_pdf_converter_initÚdisplay_drawingml_warningÚrangeÚlevelÚlistIterÚlist_countersÚstarted_numidsÚ
last_numidÚlast_list_groupÚlast_list_group_numidÚlast_list_group_parentr   ÚBODYÚcontent_layerÚhistoryÚcomment_mapÚparagraph_comment_mapÚparagraph_to_itemsÚ_prev_sibling_is_codeÚ_force_new_code_blockÚ_pending_code_blank_linesÚ_default_paragraph_styleÚload_msword_fileré   Údocx_objr…   Úcurrent_partÚstylesÚdefaultr:   Ú	PARAGRAPHÚ_extract_comment_ranges)ÚselfÚin_docrè   ÚoptionsÚiÚ	__class__s        €rt   rï   ÚMsWordDocumentBackend.__init__€  s_  ø€ ÷ ŠÜœmÓ,Ô2DÐDØ‰?Ü*Ó,ˆGØ�=‰=œKŸO™OÓ+Ü5°nÀeÈVÓTˆNÜ‰Ñ˜°Ô9Ø×*Ñ*Ð+¨3Ð/ˆŒàÐGð
ˆÔô  %Ÿ{š{ØÔ$9×$JÑ$Jñ 
ˆÔô ).¯ªØÔ)>×)OÑ)Oñ)
ˆÔ%ð
 /=ÔØ ˆŒ
à!ˆŒØ-1ˆÔØ35ˆŒØ02ˆÔØ&5ˆÔä?B»uˆÔ'Ø6:ˆÔ"Ø*/ˆÔ'Ø)-ˆÔ&ä�r˜4Ÿ?™?Ö+ˆAØ"ˆD�L‰L˜‹Oñ ,ð ˆŒ
ØˆŒà9;ˆÔô ),«ˆÔà&*ˆŒà15ˆÔØ15ˆÔ"Ø7;ˆÔ#ä)×.Ñ.ˆÔð �VØ�fØ�fØ�vñ	(
ˆŒð ,.ˆÔàFHˆÔ"àGIˆÔð ,1ˆÔ"ð ,1ˆÔ"à./ˆÔ&à:>ˆÔ%à×-Ñ-Ø×.Ñ.¸d×>PÑ>Pð .ð 
ˆŒð �=�=ØˆDŒJØ $§¡× 2Ñ 2ˆDÔØ,0¯M©M×,@Ñ,@×,HÑ,HÜ×'Ñ'ó-ˆDÔ)ð ×(Ñ(Õ*ð rv   c                ó   • U R                   $ ©N)rõ   ©r  s    rt   Úis_validÚMsWordDocumentBackend.is_validß  s   € à�z‰zÐrv   c                ó   • g)NFrƒ   ©Úclss    rt   Úsupports_paginationÚ)MsWordDocumentBackend.supports_paginationã  s   € ð rv   c                ó„   • [        U R                  [        5      (       a  U R                  R                  5         S U l        g r!  )Ú
isinstancerè   r   Úcloser"  s    rt   ÚunloadÚMsWordDocumentBackend.unloadè  s/   € ä�d×)Ñ)¬7×3Ñ3Ø×Ñ×%Ñ%Ô'à"ˆÕrv   c                óB   • [         R                  [         R                  1$ r!  )r1   ÚDOCXrí   r&  s    rt   Úsupported_formatsÚ'MsWordDocumentBackend.supported_formatsï  s   € ô × Ñ ¤+§/¡/Ð2Ð2rv   c                ó–  • [        U R                  R                  =(       d    S[        U R                     S   U R
                  S9n[        U R                  R                  =(       d    SUS9nU R                  5       (       a¯  U R                  c   eU R                  R                  5         U R                  R                  5         U R                  U R                  R                  R                  U5      u  p#U R!                  U R                  U5        U R#                  U R                  U5        U$ [%        SU R
                   S35      e)zUParses the DOCX into a structured document model.

Returns:
    The parsed document.
Úfiler   )r™   ÚmimetypeÚbinary_hash)r‹   ÚoriginzCannot convert doc with z$ because the backend failed to init.)r   r4  r‹   r/   Úinput_formatré   r   Ústemr#  r  r  Úclearr  Ú_walk_linearÚelementÚbodyÚ_add_header_footerÚ_add_commentsÚRuntimeError)r  r7  rÝ   Ú_s       rt   ÚconvertÚMsWordDocumentBackend.convertô  s  € ô  Ø—Y‘Y—^‘^×- vÜ% d×&7Ñ&7Ñ8¸Ñ;Ø×*Ñ*ñ
ˆô  4§9¡9§>¡>×#;°VÀFÑKˆØ�=‰=�?‰?Ø—=‘=Ñ,Ð,Ð,à×&Ñ&×,Ñ,Ô.Ø×#Ñ#×)Ñ)Ô+Ø×&Ñ& t§}¡}×'<Ñ'<×'AÑ'AÀ3ÓG‰FˆCØ×#Ñ# D§M¡M°3Ô7à×Ñ˜tŸ}™}¨cÔ2àˆJäØ*¨4×+=Ñ+=Ð*>Ð>bÐcóð rv   c                óˆ  •  [        U [        5      (       aa  [        R                  " U 5       n[	        U5      (       a  [        [        U5      5      sS S S 5        $  S S S 5        [        [        U 5      5      $ [        U [        5      (       ai  [        R                  " U 5       n[	        U5      (       a  [        [        U5      5      sS S S 5        $  S S S 5        U R                  S5        [        U 5      $ g ! , (       d  f       N¡= f! , (       d  f       N<= f! [         a    e [         a  n[        SU 35      UeS nAff = f)Nr   z8MsWordDocumentBackend could not load document with hash )r+  r   r•   r–   r}   r9   r¥   Ústrr   r    r3   Ú	Exceptionr2   )rè   ré   r{   Úes       rt   r  Ú&MsWordDocumentBackend.load_msword_file  s  € ð	Ü˜.¬$×/Ñ/Ü—_’_ ^Ô4¸Ü'¨×0Ñ0Ü'Ô(?ÀÓ(HÓI÷ 5Ñ4Ø0÷ 5ô  ¤ NÓ 3Ó4Ð4Ü˜N¬G×4Ñ4Ü—_’_ ^Ô4¸Ü'¨×0Ñ0Ü'Ô(?ÀÓ(HÓI÷ 5Ñ4Ø0÷ 5ð ×#Ñ# AÔ&Ü Ó/Ð/à÷ 5Õ4ú÷
 5Õ4ûô ó 	ØÜó 	Ü#ØJÈ=È/ÐZóàðûð	úsX   ‚+D ­$C7Á	D ÁD Á8+D Â#$DÃ	D Ã#D Ã7
DÄD Ä
DÄD ÄEÄ-D<Ä<Ec                óô   • U R                   S   R                  U5        U R                   S   R                  U5        U R                   S   R                  U5        U R                   S   R                  U5        g )Nrä   rå   ræ   rç   )r  Úappend)r  r‹   r  ÚnumidÚilevels        rt   Ú_update_historyÚ%MsWordDocumentBackend._update_history,  s`   € ð 	�‰�WÑ×$Ñ$ TÔ*Ø�‰�XÑ×%Ñ% eÔ,à�‰�XÑ×%Ñ% eÔ,Ø�‰�YÑ×&Ñ& vÕ.rv   c                ó&   • U R                   S   S   $ )Nrä   râ   ©r  r"  s    rt   Ú
_prev_nameÚ MsWordDocumentBackend._prev_name9  s   € Ø�|‰|˜GÑ$ RÑ(Ð(rv   c                ó&   • U R                   S   S   $ )Nrå   râ   rP  r"  s    rt   Ú_prev_levelÚ!MsWordDocumentBackend._prev_level<  ó   € Ø�|‰|˜HÑ% bÑ)Ð)rv   c                ó&   • U R                   S   S   $ )Nræ   râ   rP  r"  s    rt   Ú_prev_numidÚ!MsWordDocumentBackend._prev_numid?  rV  rv   c                ó&   • U R                   S   S   $ )Nrç   râ   rP  r"  s    rt   Ú_prev_indentÚ"MsWordDocumentBackend._prev_indentB  s   € Ø�|‰|˜IÑ& rÑ*Ð*rv   c                óh   • U R                   R                  5        H  u  pUS:¼  d  M  Ub  M  Us  $    g)zReturn the first None index.r   )rø   Úitems)r  Úkr³   s      rt   Ú
_get_levelÚ MsWordDocumentBackend._get_levelE  s0   € à—L‘L×&Ñ&Ö(‰DˆAØ�A�v˜!›)Ø’ñ )ð rv   c                ó¢   • U R                   U:H  =(       a:    U R                  SL=(       a%    U R                  U:H  =(       a    U R                  U:H  $ )zCheck if we can reuse the cached list group.

Returns True only if we're continuing the same numId in the same parent context.
N)r  r  r  r  )r  rK  Úparents      rt   Ú_can_reuse_list_groupÚ+MsWordDocumentBackend._can_reuse_list_groupL  sP   € ð �O‰O˜uÑ$÷ 6Ø×$Ñ$¨DÐ0÷6à×*Ñ*¨eÑ3÷6ð ×+Ñ+¨vÑ5ð		
rv   c                óÔ  • U R                  X#5      (       a…  UR                  (       ah  [        UR                  5      S:”  aO  UR                  S   nUR                  (       a  UR                  R	                  5       (       d  UR                  U/S9  U R                  $ UR                  SUU R                  S9nUR                  UR                  5       5        X`l        X l        X0l        U$ )a[  Get existing list group if reusable, otherwise create a new one.

Args:
    doc: The DoclingDocument being constructed.
    numid: The numbering ID for this list.
    parent: The parent node for the list group.
    elem_ref: List to append new group reference to (if created).

Returns:
    The list group to use (either reused or newly created).
r   râ   )Ú
node_itemsÚlist©r‹   rc  r
  )rd  Útextsrl   ÚtextÚstripÚdelete_itemsr  Úadd_list_groupr
  rJ  Úget_refr  r  )r  rÝ   rK  rc  Úelem_refÚ	last_textÚlist_grs          rt   Ú_get_or_create_list_groupÚ/MsWordDocumentBackend._get_or_create_list_groupX  sÄ   € ð$ ×%Ñ% e×4Ñ4ð �y�yœS §¡›^¨aÓ/ØŸI™I b™M�	Ø —~—~¨Y¯^©^×-AÑ-A×-CÑ-CØ×$Ñ$°°Ð$Ñ<Ø×'Ñ'Ð'à×$Ñ$ØØØ×,Ñ,ð %ð 
ˆð
 	�‰˜Ÿ™Ó)Ô*ð  'ÔØ%*Ô"Ø&,Ô#àˆrv   c                ó.   • SU l         SU l        SU l        g)z=Clear the cached list group to prevent reuse across contexts.N)r  r  r  r"  s    rt   Ú_clear_list_group_cacheÚ-MsWordDocumentBackend._clear_list_group_cache�  s   € à#ˆÔØ%)ˆÔ"Ø&*ˆÕ#rv   c                ó4   • U(       a  U R                  5         gg)a#  Drop the cached list group once body text follows a list.

A blank spacer paragraph between a list item and this text closes the
list but keeps the group cached, so a later item would re-open a group
that now sits *before* this paragraph and the text would be rendered
after the whole list.
N)rv  )r  rk  s     rt   Ú_end_list_on_body_textÚ,MsWordDocumentBackend._end_list_on_body_text‡  s   € ö Ø×(Ñ(Õ*ð rv   c              #  óJ  #   • U R                   S   R                  5       U R                   S   R                  5       U R                   S   R                  5       U R                   S   R                  5       S.nU R                  nU R                  R                  5       nU R                  nU R
                  nU R                  nU R                  5          Sv •  Xl         X l        X0l        X@l        XPl        X`l        g! Xl         X l        X0l        X@l        XPl        X`l        f = f7f)a@  Preserve list state during table cell processing.

This context manager saves the list-related state (history, level_at_new_list,
and parents) before entering a table cell, and restores it after processing.
This ensures that lists in different table cells are treated independently,
even when they share the same numId.
rä   rå   ræ   rç   rã   N)r  Úcopyr÷   rø   r  r  r  rv  )r  Úsaved_historyÚsaved_level_at_new_listÚsaved_parentsÚsaved_last_list_groupÚsaved_last_list_group_numidÚsaved_last_list_group_parents          rt   Ú_isolated_list_contextÚ,MsWordDocumentBackend._isolated_list_context’  s  é € ð —\‘\ 'Ñ*×/Ñ/Ó1Ø—l‘l 8Ñ,×1Ñ1Ó3Ø—l‘l 8Ñ,×1Ñ1Ó3Ø—|‘| IÑ.×3Ñ3Ó5ñ	
ˆð #'×"8Ñ"8ÐØŸ™×)Ñ)Ó+ˆà $× 4Ñ 4ÐØ&*×&@Ñ&@Ð#Ø'+×'BÑ'BÐ$Ø×$Ñ$Ô&ð	GÛà(ŒLØ%<Ô"Ø(ŒLØ#8Ô Ø)DÔ&Ø*FÕ'øð )ŒLØ%<Ô"Ø(ŒLØ#8Ô Ø)DÔ&Ø*FÕ'üs   ‚CD#ÃC: Ã%D#Ã:&D Ä D#c                óx  • / nU GHô  n[         R                  " U5      R                  nU R                  U5      nUR	                  S[
        R                  S9nU R                  U5      nS n	U V
s/ s H  o©" U
5      (       a  M  U
PM     nn
U V
s/ s H  o©" U
5      (       a  M  U
PM     nn
U V
s/ s H  o©" U
5      (       a  M  U
PM     nn
X@R                  ;  Ga&  [         R                  " S[
        R                  S9nU" U5      nU(       Gdi  [         R                  " S[
        R                  S9nU" U5      nU(       Gd6  [         R                  " S[
        R                  S9nU" U5      nU(       Ga  SR                  U Vs/ s H"  nUR                  (       d  M  UR                  PM$     sn5      nUR                  5       (       a¯  [        R                  SUS S	  S
35        U R                  5       nUR!                  ["        R$                  U R&                  US-
     SU R(                  S9nUR+                  UR-                  5       5        UR/                  [0        R2                  UUU R(                  S9  U(       aƒ  U R                  R5                  U5        U H  nU R                  R5                  U5        M      [        R                  S[7        U5       S35        U R9                  Xò5      nUR;                  U5        US:X  a&   U R=                  XB5      nUR;                  U5        GM)  US:X  aM  URA                  S[
        R                  S9nUb)  U RC                  UU5      u  nnUR;                  U5        GMy  GM|  U(       as  U RE                  X²5      nUR;                  U5        US:X  aH  URA                  S[
        R                  S9 b%  U RG                  XB5      nUR;                  U5        GMð  GMó  GMö  U(       as  U RI                  XÒ5      nUR;                  U5        US:X  aH  URA                  S[
        R                  S9 b%  U RG                  XB5      nUR;                  U5        GMj  GMm  GMp  U(       Ga9  / n / n!U H,  n"U RK                  U"5      (       a  U OU!R+                  U"5        M.     U  H)  n#U RM                  UU#S9n$U$c  M  UR+                  U$5        M+     U!(       a}  U RN                  c%  U RP                  SL a  [S        5       U l'        SU l(        U RN                  c.  U RT                  (       a  [        RW                  S5        SU l*        OU RY                  UU!S9  US:X  aG  URA                  S[
        R                  S9 b$  U RG                  XBSS9nUR;                  U5        GM«  GM®  GM±  US:X  a%  U RG                  XB5      nUR;                  U5        GMÜ  [        R                  SU 35        GM÷     X#4$ s  sn
f s  sn
f s  sn
f s  snf ! [>         a    [        R                  S5         GM3  f = f)Nú.//w:drawingrà   c                óB   • [        S U R                  5        5       5      $ )Nc              3  óh   #   • U  H(  n[         R                  " U5      R                  S ;   v •  M*     g7f))ÚtxbxContentÚtextboxN©r#   ÚQNameÚ	localname)r„   Úancs     rt   r†   ÚJMsWordDocumentBackend._walk_linear.<locals>._in_textbox.<locals>.<genexpr>Æ  s,   é € ð â3˜ô —K’K Ó$×.Ñ.Ð2LÖLÚ3ùs   ‚02)r‰   Úiterancestors)Úelems    rt   Ú_in_textboxÚ7MsWordDocumentBackend._walk_linear.<locals>._in_textboxÅ  s%   € Üñ à#×1Ñ1Ô3óó ð rv   z".//w:txbxContent|.//v:textbox//w:pzB.//wps:txbx//w:p|.//w10:wrap//w:p|.//v:textbox//w:txbxContent//w:pz-.//a:bodyPr/ancestor::*//a:t|.//a:txBody//a:tÚ zFound shape text: é2   z...r€   z
shape-text©Úlabelrc  r‹   r
  ©r—  rc  rk  r
  zFound textbox content with z	 elementsÚtblz*could not parse a table, broken docx tableÚsdtz./w:sdtContentÚpz.//w:t)rÝ   Úchart_elFTzÀFound DrawingML elements in document, but no DOCX to PDF converters. If you want these exported, make sure you have LibreOffice binary in PATH or specify its path with DOCLING_LIBREOFFICE_CMD.©rÝ   Údrawingml_els)Úskip_empty_textz#Ignoring element in DOCX with tag: )-r#   rŒ  r�  ró   Úfindallr§   r¸   rô   rü   rò   Újoinrk  rl  Ú_logÚdebugr`  Ú	add_groupr   ÚSECTIONrø   r
  rJ  ro  Úadd_textr   ÚTEXTÚaddrl   Ú_handle_textbox_contentÚextendÚ_handle_tablesrF  Úfindr;  Ú_handle_picturesÚ_handle_text_elementsÚ_handle_vml_picturesÚ_is_chart_drawingÚ_handle_chartrý   rþ   r+   rÿ   ÚwarningÚ_handle_drawingml)%r  r=  rÝ   Úadded_elementsr<  Útag_nameÚ_raw_drawing_blipÚ_raw_drawingml_elsÚ_raw_vml_imagesr’  ÚxÚdrawing_bliprž  Ú
vml_imagesÚ
txbx_xpathÚtextbox_elementsÚalt_txbx_xpathÚshape_text_xpathÚshape_text_elementsÚtÚtext_contentr  Úshape_groupÚ
tb_elementÚtbcÚsdt_contentrA  ÚteÚpicsÚte1Úvml_picsÚte2Ú	chart_elsÚ	other_elsÚelrœ  Ú	chart_refs%                                        rt   r;  Ú"MsWordDocumentBackend._walk_linear³  sû  € ð ˆÜˆGÜ—{’{ 7Ó+×5Ñ5ˆHà $× 4Ñ 4°WÓ =ÐØ!(§¡ØÔ+@×+QÑ+Qð "1ð "Ðð #×;Ñ;¸GÓDˆOòñ (9ÓOÒ'8 !ÀÈAÇŸAÑ'8ˆLÐOÙ(:ÓQÒ(: 1À+ÈaÇ.ŸQÑ(:ˆMÐQÙ%4ÓK¢_ ¸KÈ¿NŸ!¡_ˆJÐKð ×=Ñ=Ô=ä"Ÿ[š[Ø8Ü4×EÑEñ�
ñ $.¨gÓ#6Ð ÷ (ä%*§[¢[Ø\Ü#8×#IÑ#Iñ&�Nñ (6°gÓ'>Ð$÷ ,Ü+0¯;ª;ØKÜ'<×'MÑ'Mñ,Ð(ñ /?¸wÓ.GÐ+ß.à+.¯8©8Ù1DÓ OÒ1D¨AÈÏÍ£ §¤Ñ1DÑ Oó,˜Lð  ,×1Ñ1×3Ñ3Ü $§
¡
Ð-?ÀÈSÈbÐ@QÐ?RÐRUÐ+VÔ Wà(,¯©Ó(9 Ø.1¯m©mÜ*4×*<Ñ*<Ø+/¯<©<¸À¹	Ñ+BØ)5Ø26×2DÑ2Dð	 /<ð /" ð !/× 5Ñ 5°k×6IÑ6IÓ6KÔ LØ #§¡Ü*6×*;Ñ*;Ø+6Ø)5Ø26×2DÑ2Dð	 !-ñ !"ö $à×3Ñ3×7Ñ7¸Ô@ã&6˜
Ø×7Ñ7×;Ñ;¸JÖGñ '7ô —J‘JØ5´cÐ:JÓ6KÐ5LÈIÐVôð ×6Ñ6Ð7GÓM�CØ"×)Ñ)¨#Ô.ð ˜5Ó ðMØ×+Ñ+¨GÓ9�AØ"×)Ñ)¨!×,ð ˜UÓ"Ø%Ÿl™lØ$Ô1F×1WÑ1Wð +ð �ð Ñ*à ×-Ñ-¨k¸3Ó?‘E�A�rØ"×)Ñ)¨"×-ò +ö
 Ø×,Ñ,¨\Ó?�Ø×%Ñ% dÔ+ð  “OØŸ™Ø Ô-B×-SÑ-Sð %ð ð  ñ ð
 ×4Ñ4°WÓB�CØ"×)Ñ)¨#×.ò ò $ö Ø×4Ñ4°ZÓE�Ø×%Ñ% hÔ/ð  “OØŸ™Ø Ô-B×-SÑ-Sð %ð ð  ñ ð
 ×4Ñ4°WÓB�CØ"×)Ñ)¨#×.ò ò $÷ ð
 (*�	Ø')�	Û'�BØ"&×"8Ñ"8¸×"<Ñ"<‘YÀ)×SÑSÐTVÖWñ (ó !*�HØ $× 2Ñ 2°sÀXÐ 2Ð N�IØ Ó,Ø&×-Ñ-¨iÖ8ñ !*ö
 à×2Ñ2Ñ:Ø ×;Ñ;¸uÒDä5NÓ5P˜Ô2Ø:>˜Ô7à×1Ñ1Ñ9Ø×9×9Ü ŸL™Lð!oôð
 >C˜DÔ:øà×.Ñ.°3ÀiÐ.ÑPð  “OØŸ™Ø Ô-B×-SÑ-Sð %ð ð  ñ ð
 ×3Ñ3°GÐRVÐ3ÐW�BØ"×)Ñ)¨"×-ò ò $ð ˜S“à×/Ñ/°Ó=�Ø×%Ñ% b×)ä—
‘
Ð@ÀÀ
ÐK×Lñk ðn Ð"Ð"ùòM PùÚQùÚKùò> !PøôL !ó MÜ—J‘JÐK×LÐLðMúsB   Á0XÂXÂXÂ$XÂ0XÃXÆX
ÆX
Ì	"XØX9Ø8X9c                ó  • Uc  gUR                   UR                  -  U R                  ::  a  g UR                  5       nUb6  UR                  S;   a  US   S   S:X  a  g gUR                  S:X  a  US:X  a  gg! [
         a     gf = f)	zQCheck if an image is an invisible layout spacer rather than a meaningful graphic.FT)ÚRGBAÚLArâ   r€   r   ÚRGB)©éÿ   rÖ  rÕ  rÕ  )ÚwidthÚheightrº   Ú
getextremaÚmoderF  )r  Ú	pil_imageÚextremas      rt   Ú_is_invisible_spacerÚ*MsWordDocumentBackend._is_invisible_spacers  s¥   € àÑØð �?‰?˜Y×-Ñ-Ñ-°×1QÑ1QÓQØð	Ø×*Ñ*Ó,ˆGØÑ"Ø—>‘> ^Ó3à˜r‘{ 1‘~¨Ó*Ø#ð +ð ð —^‘^ uÓ,àÐ"FÓFØ#ð øô ó 	Øàð	ús   ®/A8 Á A8 Á8
BÂBc                óF   • Uc  g  [        U5      $ ! [         a    Us $ f = fr!  )ÚintÚ
ValueError)r  Úsr  s      rt   Ú_str_to_intÚ!MsWordDocumentBackend._str_to_intŒ  s,   € Ø‰9Øð	Ü�q“6ˆMøÜó 	ØŠNð	ús   †
 ‘ Ÿ c                óŽ   • [         R                  " SU5      nU(       a%  [        [        S UR	                  5       5      5      nU$ U/$ )Nz(\D+)(\d+)$|^(\d+)(\D+))Úrer’   rh  ÚfilterÚgroups)r  Úinput_stringr’   Úpartss       rt   Ú_split_text_and_numberÚ,MsWordDocumentBackend._split_text_and_number”  s:   € Ü—’Ð3°\ÓBˆÞÜœ  e§l¡l£nÓ5Ó6ˆEØˆLà �>Ð!rv   c                ó`  • UR                   R                  SUR                   R                  S9nUb¬  UR                  SUR                   R                  S9nUR                  SUR                   R                  S9nUb  UR                  U R                  5      OS nUb  UR                  U R                  5      OS nU R                  US 5      U R                  US 5      4$ UR                  bD  U R                  UR                  5      u  pVUb$  U R                  US 5      U R                  US 5      4$ g)Nz
.//w:numPrrà   zw:numIdzw:ilvl)NN)Ú_elementr¬  ÚnsmapÚgetrð   rã  ÚstyleÚ_style_numbering)r  Ú	paragraphÚnumPrÚ
numId_elemÚ	ilvl_elemÚnumIdÚilvls          rt   Ú_get_numId_and_ilvlÚ)MsWordDocumentBackend._get_numId_and_ilvlœ  s  € ð ×"Ñ"×'Ñ'Ø Y×%7Ñ%7×%=Ñ%=ð (ð 
ˆð ÑàŸ™ I¸)×:LÑ:L×:RÑ:R˜ÐSˆJØŸ
™
 8¸	×8JÑ8J×8PÑ8P˜
ÐQˆIØ4>Ñ4J�J—N‘N 4§<¡<Ô0ÐPTˆEØ2;Ñ2G�9—=‘= §¡Ô.ÈTˆDà×#Ñ# E¨4Ó0°$×2BÑ2BÀ4ÈÓ2NÐNÐNð �?‰?Ñ&Ø×/Ñ/°	·±Ó@‰KˆEØÑ Ø×'Ñ'¨¨tÓ4°d×6FÑ6FÀtÈTÓ6RÐRÐRàrv   c                ó  • SnSnSnUbì  X@R                   :  aÝ  [        USS5      nUb   UR                  SU R                   S35      nUb~  Uc<  UR                  U R                   S35      nUb  UR	                  U R
                  5      nUc<  UR                  U R                   S35      nUb  UR	                  U R
                  5      nUb  Ub  O&[        USS5      nUS	-  nUb  X@R                   :  a  MÝ  Ub  Uc  S
nX#4$ )a  Resolve a style's (numId, ilvl), following the ``basedOn`` chain.

Word inherits numbering through the style hierarchy, and numId and
ilvl inherit independently: a heading style may override the level
(ilvl) while taking the numId from the style it is based on. Word's
stock ``heading 2`` does exactly this -- it carries only ``ilvl`` and
inherits ``numId`` from ``heading 1``. Reading a single style element
misses that inherited numId, leaving the heading unnumbered while its
siblings at other levels are numbered.
Nr   r<  ú.//rô  r÷  rø  Ú
base_styler€   Ú0)rÌ   Úgetattrr¬  r­   rð  rð   )	r  rñ  r÷  rø  ÚdepthÚ
style_elemÚstyle_numPrrõ  rö  s	            rt   rò  Ú&MsWordDocumentBackend._style_numbering¹  s%  € ð !ˆØˆØˆØÑ E×,MÑ,MÓ$MÜ  ¨	°4Ó8ˆJØÑ%Ø(Ÿo™o°°D×4DÑ4DÐ3EÀUÐ.KÓL�ØÑ*Ø‘}Ø%0×%5Ñ%5¸×9IÑ9IÐ8JÈ%Ð6PÓ%Q˜
Ø%Ñ1Ø$.§N¡N°4·<±<Ó$@˜EØ‘|Ø$/×$4Ñ$4¸×8HÑ8HÐ7IÈÐ5NÓ$O˜	Ø$Ñ0Ø#,§=¡=°·±Ó#>˜DØÑ  TÑ%5Øô ˜E <°Ó6ˆEØ�Q‰JˆEð% Ñ E×,MÑ,MÕ$Mð* Ñ ¡ØˆDØˆ{Ðrv   c                ó  •  SnU R                   R                  R                  R                   H  nSUR                  ;   d  M  Un  O   Uc  gUR
                  nSU R                  0nUR                  SU S3US9nUc  gUR                  SUS9nUc  gUR                  U R                  5      n	U	c  gUR                  SU	 S3US9n
U
c  gU
R                  S	U S3US9$ ! [         a"  n[        R                  S
U 35         SnAgSnAff = f)zIFind the level element from the numbering XML for a given numId and ilvl.NÚ	numberingr�   z.//w:num[@w:numId='z']rà   z.//w:abstractNumIdz#.//w:abstractNum[@w:abstractNumId='z.//w:lvl[@w:ilvl='zError finding level element: )r  r…   Úpackagerê  Úpartnamer<  rª   r¬  rð  rð   rF  r¢  r£  )r  rK  rø  Únumbering_partr…   Únumbering_rootrá   Únum_elementÚabstract_num_id_elemÚabstract_num_idÚabstract_num_elementrG  s               rt   Ú_get_level_elementÚ(MsWordDocumentBackend._get_level_elementâ  sU  € ð)	Ø!ˆNØŸ™×*Ñ*×2Ñ2×8Ô8�Ø $§-¡-Õ/Ø%)�NÙñ 9ð
 Ñ%Øà+×3Ñ3ˆNØ˜tŸz™zÐ*ˆJà(×-Ñ-Ø% e W¨BÐ/¸Jð .ð ˆKð Ñ"Øà#.×#3Ñ#3Ø$°ð $4ð $Ð ð $Ñ+Øà2×6Ñ6°t·|±|ÓDˆOØÑ&Øà#1×#6Ñ#6Ø5°oÐ5FÀbÐIØ%ð $7ð $Ð ð $Ñ+Øà'×,Ñ,Ø$ T F¨"Ð-¸*ð -ð ð øô ó 	Ü�J‰JÐ6°q°cÐ:Ô;Üûð	ús;   ‚=C Á	C Á1C Á?C ÂC Â2C Ã
C Ã
D
Ã(DÄD
c                óÀ   • U R                  X5      nUbJ  SU R                  0nUR                  SUS9nUb)  UR                  U R                  5      nUb  [        U5      $ g)z5Read the start value from the abstractNum definition.r�   z
.//w:startrà   r€   )r  rª   r¬  rð  rð   rà  )r  rK  rø  Úlvl_elementrá   Ústart_elementrß   s          rt   Ú_get_start_valueÚ&MsWordDocumentBackend._get_start_value  sf   € à×-Ñ-¨eÓ:ˆØÑ"Ø˜tŸz™zÐ*ˆJØ'×,Ñ,¨\ÀjÐ,ÐQˆMØÑ(Ø#×'Ñ'¨¯©Ó5�Ø‘?Ü˜s›8�OØrv   c                óR  • X4nX0R                   ;  a#  U R                  X5      nUS-
  U R                   U'   U R                   U==   S-  ss'   U R                    Vs/ s H  oUS   U:X  d  M  US   U:”  d  M  UPM     sn H  nSU R                   U'   M     U R                   U   $ s  snf )zHGet and increment the counter for a specific numId and ilvl combination.r€   r   )r  r  )r  rK  rø  ÚkeyÚstartr_  s         rt   Ú_get_list_counterÚ'MsWordDocumentBackend._get_list_counter  s¬   € àˆmˆØ×(Ñ(Ó(Ø×)Ñ)¨%Ó6ˆEØ&+¨a¡iˆD×Ñ˜sÑ#Ø×Ñ˜3Ó 1Ñ$Óà!×/Ò/ÓQÒ/˜°Q±4¸5±=“!ÀQÀqÁTÈDÁ[—!Ñ/ÔQˆAØ$%ˆD×Ñ˜qÓ!ñ Rà×!Ñ! #Ñ&Ð&ùò Rs   ÁB$Á+B$Á6B$c                ó¦   • U R                   R                  5        Vs/ s H  o"S   U:X  d  M  UPM     nnU H  nSU R                   U'   M     gs  snf )z6Reset counters when starting a new numbering sequence.r   N)r  Úkeys)r  rK  r  Úkeys_to_resets       rt   Ú%_reset_list_counters_for_new_sequenceÚ;MsWordDocumentBackend._reset_list_counters_for_new_sequence'  sQ   € ð )-×(:Ñ(:×(?Ñ(?Ô(AÓUÒ(A ÈÁVÈuÁ_ŸÑ(AˆÐUÛ ˆCØ&'ˆD×Ñ˜sÓ#ò !ùò Vs
   �A­Ac                ó|  ^ ^• T R                  TU5      nST R                  0nSnUb.  UR                  SUS9nUb  UR                  T R                  5      nU(       aj  [
        R                  " SU5      (       aN  [
        R                  " SSU5      nUR                  S5      nU(       a  UU 4S jn[
        R                  " S	X…5      $ / n	[        US
-   5       HO  n
T R                  R                  TU
45      nUc  T R                  TU
5      nU	R                  [        U5      5        MQ     SR                  U	5      S-   $ )zðBuild enumeration marker from the lvlText template (e.g. 'Proposal %1:').

Uses lvlText when it contains a text prefix/suffix beyond simple
placeholders and separators.  Falls back to the default '1.2.3.'
pattern for plain numeric markers.
r�   Nz.//w:lvlTextrà   z%\d+Ú z .)(:[]c                ó¸   >• [        U R                  S5      5      S-
  nTR                  R                  TU45      nUc  TR	                  TU5      n[        U5      $ )Nr€   )rà  r‘   r  rð  r  rE  )r’   Úlvl_idxÚcounterrK  r  s      €€rt   Ú_replaceÚ:MsWordDocumentBackend._build_enum_marker.<locals>._replaceE  sV   ø€ Ü! %§+¡+¨a£.Ó1°AÑ5�GØ"×0Ñ0×4Ñ4°e¸WÐ5EÓF�GØ‘Ø"&×"7Ñ"7¸¸wÓ"G˜Ü˜w›<Ð'rv   z%(\d+)r€   Ú.)r  rª   r¬  rð  rð   ræ  Úsearchrœ   rl  r   r  r  rJ  rE  r¡  )r  rK  rø  r  rá   Úlvl_textÚltÚstrippedr$  rê  Úlvlr#  s   ``          rt   Ú_build_enum_markerÚ(MsWordDocumentBackend._build_enum_marker.  s  ù€ ð ×-Ñ-¨e°TÓ:ˆØ˜4Ÿ:™:Ð&ˆ
ØˆØÑ"Ø×!Ñ! .¸ZÐ!ÐHˆBØ‰~ØŸ6™6 $§,¡,Ó/�ö
 œŸ	š	 '¨8×4Ñ4Ü—v’v˜g r¨8Ó4ˆHØ—~‘~ iÓ0ˆHÞö(ô —v’v˜i¨Ó<Ð<ð ˆÜ˜ ™–?ˆCØ×(Ñ(×,Ñ,¨e°S¨\Ó:ˆGØ‰Ø×/Ñ/°°sÓ;�Ø�L‰Lœ˜W›Ö&ñ	 #ð
 �x‰x˜‹ Ñ$Ð$rv   c                ó  •  U R                  X5      nUc  gSU R                  0nUR                  SUS9nUc  gUR                  U R                  5      nU[
        ;   $ ! [         a"  n[        R                  SU 35         SnAgSnAff = f)zGReturn True when numbering.xml defines a visible marker for numId/ilvl.NFr�   z.//w:numFmtrà   z,Error determining visible numbering format: )	r  rª   r¬  rð  rð   rg   rF  r¢  r£  )r  r÷  rø  r  rá   Únum_fmt_elementÚnum_fmtrG  s           rt   Ú_has_visible_numbering_formatÚ3MsWordDocumentBackend._has_visible_numbering_formatW  s“   € ð	Ø×1Ñ1°%Ó>ˆKØÑ"Øà˜tŸz™zÐ*ˆJØ)×.Ñ.¨}ÈÐ.ÐTˆOØÑ&Øà%×)Ñ)¨$¯,©,Ó7ˆGàÔ8Ñ8Ð8øäó 	Ü�J‰JÐEÀaÀSÐIÔJÜûð	ús!   ‚A —!A ¹#A Á
B	Á'BÂB	c                ór   • U R                  U5      u  p#USL=(       a    U R                  X#=(       d    S5      $ )zAReturn True when heading numbering would render a visible marker.Nr   )rù  r1  )r  ró  rK  rø  s       rt   Ú_is_numbered_headingÚ*MsWordDocumentBackend._is_numbered_headingk  s:   € à×.Ñ.¨yÓ9‰ˆØ˜DÐ ÷ 
 T×%GÑ%GØ—9˜1ó&
ð 	
rv   c                óð   • Uc  gUR                   nUc  gUR                  SU R                   S35      nUb0  UR                  U R                   S35      nUb   [	        U5      S-   $ g! [
         a     gf = f)a  Extract outlineLvl from a paragraph style definition.

In OOXML, outlineLvl is 0-indexed: 0-8 are heading levels 1-9 and 9 is
the "body text" sentinel. This method returns the 1-indexed value
(outlineLvl + 1), so heading levels are 1-9 and body text is 10.
Nrü  Ú
outlineLvlrß   r€   )r<  r¬  r­   rð  rà  rá  )r  rñ  r  Úoutline_elemrß   s        rt   Ú_get_outline_level_from_styleÚ3MsWordDocumentBackend._get_outline_level_from_styler  s–   € ð ‰=Øà—]‘]ˆ
ØÑØð "—‘¨¨T×-=Ñ-=Ð,>¸jÐ'IÓJˆØÑ#Ø×"Ñ" d×&6Ñ&6Ð%7°sÐ#;Ó<ˆCØ‰ðä˜s›8 a™<Ð'ð øô "ó ØØðús   ÁA( Á(
A5Á4A5c                ó¢  • U R                  U5      n[        U5      S:X  a¬  UR                  5         SnSnUS   R                  5       R	                  5       S:X  a  SnU R                  US   S 5      nUS   R                  5       R	                  5       S:X  a  SnU R                  US   S 5      n[        U[        5      (       a  US:  a  SnX44$ US 4$ )Né   r   r   ÚheadingÚHeadingr€   )rë  rl   Úsortrl  Úlowerrã  r+  rà  )r  Ústyle_labelrê  Ú	label_strÚlabel_levels        rt   Ú_get_heading_and_levelÚ,MsWordDocumentBackend._get_heading_and_levelŒ  sÊ   € Ø×+Ñ+¨KÓ8ˆäˆu‹:˜‹?Ø�J‰JŒLØˆIØ&'ˆKØ�Q‰x�~‰~Ó×%Ñ%Ó'¨9Ó4Ø%�	Ø"×.Ñ.¨u°Q©x¸Ó>�Ø�Q‰x�~‰~Ó×%Ñ%Ó'¨9Ó4Ø%�	Ø"×.Ñ.¨u°Q©x¸Ó>�ä˜+¤s×+Ñ+°¸a³Ø�ØÐ)Ð)à˜DÐ Ð rv   c                ó„   • Ub  UOUR                   nUR                  (       d  gUR                  S   R                  U5      $ )zãReturn the last child of a container.

Args:
    doc: The document being built.
    parent: The container to inspect; None means the document body.

Returns:
    The resolved last child item, or None if the container is empty.
Nrâ   )r=  ÚchildrenÚresolve)r  rÝ   rc  Ú	containers       rt   Ú_last_child_itemÚ&MsWordDocumentBackend._last_child_item   s<   € ð %Ñ0‘F°c·h±hˆ	Ø×!×!ØØ×!Ñ! "Ñ%×-Ñ-¨cÓ2Ð2rv   c                óz  • SnUb¶  X R                   :  a§  UR                  =(       d    SR                  5       R                  5       nUR                  =(       d    SR                  5       R                  5       nX0R
                  ;   d  X@R                  ;   a  g[        USS5      nUS-  nUb  X R                   :  a  M§  g)ai  Return True if a style marks its paragraphs as code.

Mirrors pandoc's docx reader: the style itself or any ancestor in its
``base_style`` chain may carry the code style name/id.

Args:
    style: The already-resolved paragraph style (resolving it is
        expensive, so callers do it once).

Returns:
    True if the style chain marks the paragraph as code.
r   Nr   Trý  r€   F)rÌ   r‹   rl  r@  Ústyle_idrÃ   rÊ   rÿ  )r  rñ  r   r‹   rM  s        rt   Ú_is_code_styleÚ$MsWordDocumentBackend._is_code_style±  s¥   € ð ˆØÑ E×,MÑ,MÓ$MØ—J‘J×$ "×+Ñ+Ó-×3Ñ3Ó5ˆDØŸ™×,¨"×3Ñ3Ó5×;Ñ;Ó=ˆHØ×-Ñ-Ó-°×=QÑ=QÓ1QØô ˜E <°Ó6ˆEØ�Q‰JˆEð Ñ E×,MÑ,MÕ$Mð rv   c                óJ   • [        UR                  R                  S5      5      $ )z6Return True if the paragraph sits inside a table cell.zancestor::w:tc)r6   Ú_pÚxpath©r  ró  s     rt   Ú_is_in_table_cellÚ'MsWordDocumentBackend._is_in_table_cellË  s   € ä�I—L‘L×&Ñ&Ð'7Ó8Ó9Ð9rv   c                ó@  • U R                   nSnUb�  X0R                  :  a~  Ub  UR                  UR                  L a  gUR                  R                  nU(       a  UR                  5       R                  5       $ [        USS5      nUS-  nUb  X0R                  :  a  M~  g)aí  Return the case-folded font family a style resolves to.

Walks the ``base_style`` chain; used as the fallback font for runs
whose own ``run.font.name`` is None because the typeface is inherited
from the paragraph style. The document-default style is excluded: a
paragraph left on it carries no author intent, so a Courier document
theme is not code evidence.

Args:
    style: The already-resolved paragraph style to walk.

Returns:
    The lowercased font family name, or "" if none applies.
r   Nr   rý  r€   )r  rÌ   r<  Úfontr‹   rl  r@  rÿ  )r  rñ  Údefault_styler   Ú	font_names        rt   Ú_effective_style_fontÚ+MsWordDocumentBackend._effective_style_fontÏ  s–   € ð ×5Ñ5ˆØˆØÑ E×,MÑ,MÓ$MØÑ(¨U¯]©]¸m×>SÑ>SÒ-SØØŸ
™
Ÿ™ˆIÞØ —‘Ó(×.Ñ.Ó0Ð0ô ˜E <°Ó6ˆEØ�Q‰JˆEð Ñ E×,MÑ,MÕ$Mð rv   c                óÚ  • UR                   R                  S5       Vs/ s H1  n[        X15      =nR                  R	                  5       (       d  M/  UPM3     nnSnSnU Hƒ  n[        UR                  R	                  5       5      nXx-  nUR                  R                  =(       d    SR	                  5       R                  5       =(       d    Un	X�R                  ;   d  M  Xh-  nM…     Xg4$ s  snf )aV  Count how much of the paragraph text is set in a monospaced font.

Scans every run in the paragraph element, including runs nested
inside hyperlinks, tracked insertions, smart tags and field results
(all omitted by ``paragraph.runs``), so a proportional-font span in
any of them cannot slip past the all-monospace check.

Args:
    paragraph: The paragraph to scan.
    style_font: The paragraph style's resolved font, used when a run
        inherits its typeface (``run.font.name`` is None) instead of
        setting it directly.

Returns:
    A (monospaced_char_count, total_char_count) tuple.
z.//w:rr   r   )
rQ  rR  rD   rk  rl  rl   rW  r‹   r@  r×   )
r  ró  Ú
style_fontÚr_elÚrunÚrunsÚ
mono_charsÚtotal_charsÚrun_lenrY  s
             rt   Ú_monospaced_char_countsÚ-MsWordDocumentBackend._monospaced_char_countsí  sÏ   € ð. "Ÿ™×*Ñ*¨8Ô4ó
â4�Ü˜4Ó+Ð+�×1Ñ1×7Ñ7×9÷ Ù4ð 	ð 
ð
 ˆ
ØˆÛˆCÜ˜#Ÿ(™(Ÿ.™.Ó*Ó+ˆGØÑ"ˆKØŸ™Ÿ™×,¨"×3Ñ3Ó5×;Ñ;Ó=×KÀˆIØ×1Ñ1Õ1ØÑ%’
ñ ð Ð&Ð&ùò
s   ž.C(ÁC(c                óü  ^• U R                   [        R                  :X  a  gU(       a#  UR                  =(       d    SR	                  5       OSm[        U4S jS 5       5      (       a  gUR                  nUR                  5       nU(       a+  [        R                  " SU[        R                  5      (       a  gU Vs1 s H  oUU R                  ;   d  M  UiM     nn[        US1-
  5      =(       dc    U R                  R                  U5      SL=(       d?    U R                  R                  U5      SL=(       d    [!        U5      ["        R$                  LnU R&                  =(       a    USS R)                  5       nU(       d  U(       d  gU R+                  U5      u  pšU	(       a  U
b  gU R-                  U5      nU R/                  X5      u  pÍUS	:X  d  XÍ-  U R0                  :  a  gU R3                  U5      (       + $ s  snf )
aþ  Return True if the paragraph reads as code set in a monospaced font.

Lower-precision fallback used only when the style name doesn't already
mark the paragraph as code: (nearly) every run must resolve to a
monospaced font and the text must look code-like.

Args:
    paragraph: The paragraph to classify.
    style: The already-resolved paragraph style, passed in to avoid
        re-reading the expensive ``paragraph.style`` property.

Returns:
    True if the font fallback classifies the paragraph as code.
Fr   c              3  ó,   >#   • U  H	  oT;   v •  M     g 7fr!  rƒ   )r„   ÚkwÚlowered_styles     €rt   r†   Ú9MsWordDocumentBackend._is_code_by_font.<locals>.<genexpr>)  s   øé € ÐUÒ-T r�]Ö"Ò-Tùs   ƒ)ÚcaptionÚfigureÚtabler—  z^(figure|table|listing)\s+\dÚ;Nr€   r   )r
  r   Ú	FURNITUREr‹   r@  r‰   rk  rl  ræ  r’   Ú
IGNORECASErÙ   r6   rÚ   r'  rÛ   r5   r4   ÚUNKNOWNr  Úisspacerù  rZ  rd  rØ   rT  )r  ró  rñ  Úraw_textÚstripped_textÚchÚstrong_hitsÚhas_code_charÚis_code_continuationrK  rL  r]  ra  rb  ri  s                 @rt   Ú_is_code_by_fontÚ&MsWordDocumentBackend._is_code_by_font  s·  ø€ ð( ×Ñ¤×!7Ñ!7Ó7Øæ6;˜Ÿ™×) r×0Ñ0Ô2ÀˆÜÔUÑ-TÓU×UÑUØà—>‘>ˆØ Ÿ™Ó(ˆÞ¤§¢Ø+¨]¼B¿M¹M÷!
ñ !
ð ñ
 %2ÓW¢M˜b¸4×;VÑ;VÑ5V—r¡MˆÐWô � ˜uÑ$Ó%÷ TØ×&Ñ&×-Ñ-¨mÓ<ÀDÐH÷Tà×%Ñ%×,Ñ,¨]Ó;À4ÐG÷Tô $ MÓ2Ô:K×:SÑ:SÐSð	 	ð  $×9Ñ9×T¸hÀrÈ¸l×>RÑ>RÓ>TÐÞÖ%9Øð ×0Ñ0°Ó;‰ˆÞ�VÑ'Øà×/Ñ/°Ó6ˆ
Ø"&×">Ñ">¸yÓ"UÑˆ
Ø˜!Ó˜zÑ7¸$×:TÑ:TÓTØà×)Ñ)¨)Ó4Ô4Ð4ùò/ Xs   Â;G9ÃG9c                óž  • UR                   nUc  gUR                  nUR                  =(       d    SnSnSn[        [	        USS5      =n[
        5      (       a  UR                  nUR                  nU(       d  gSU;   a:  UR                  S5      n[        U5      S:X  a  US   U R                  US   S5      4$ S	UR                  5       ;   =(       dY    S	UR                  5       ;   =(       d?    U=(       a    S	UR                  5       ;   =(       d    U=(       a    S	UR                  5       ;   n	U R                  U5      n
U
b  SU
s=::  a  S
::  d  O  Sn
U	(       a©  U
b  SU
4$ S	UR                  5       ;   a  U R                  U5      $ S	UR                  5       ;   a  U R                  U5      $ U(       a%  S	UR                  5       ;   a  U R                  U5      $ U(       a%  S	UR                  5       ;   a  U R                  U5      $ U R                  U5      (       d  U R                  X5      (       a  gU
b  U R                  X4XV5      (       d  SU
4$ US4$ )a  Classify a paragraph as a heading, code block or plain text.

Heading detection has two independent signals. The style *name* carries
the level for the usual English styles, while ``w:outlineLvl`` is
OOXML's own heading marker and is language-independent, which is what
makes localized styles (e.g. Czech ``Nadpis1``) resolvable at all. The
outline level therefore wins over name parsing when it denotes a real
heading, and it is also honoured on its own for styles that are not
recognizable by name. ``Title`` styles are left out of the latter so
they keep reaching their own branch; in practice they never carry
``w:outlineLvl`` anyway.
N)ÚNormalNr   rý  r�   r<  r   r€   r=  é	   r>  )ÚCodeN)rñ  rM  r‹   r+  rÿ  r?   rŠ   rl   rã  r@  r9  rD  rN  ry  Ú_is_title_style)r  ró  rñ  r—  r‹   Úbase_style_labelÚbase_style_namerý  rê  Ú
is_headingÚoutline_levels              rt   Ú_get_label_and_levelÚ*MsWordDocumentBackend._get_label_and_levelO  s1  € ð —‘ˆØ‰=Ø!à—^‘^ˆØ—J‘J×$ "ˆØ'+ÐØ&*ˆÜ¤G¨E°<ÀÓ$FÐF�jÌ×WÑWØ)×2Ñ2ÐØ(Ÿo™oˆOæØ!à�%‹<Ø—K‘K Ó$ˆEÜ�5‹z˜Q‹Ø˜Q‘x ×!1Ñ!1°%¸±(¸DÓ!AÐAÐAð ˜Ÿ™›Ñ&÷ JØ˜DŸJ™J›LÑ(÷Jà ×J YÐ2B×2HÑ2HÓ2JÑ%J÷Jð  ×H I°×1FÑ1FÓ1HÑ$Hð	 	ð ×:Ñ:¸5ÓAˆØÑ$¨Q°-Õ-DÀ1Õ-DØ ˆMæàÑ(Ø  -Ð/Ð/ð ˜EŸK™K›MÓ)Ø×2Ñ2°5Ó9Ð9Ø˜DŸJ™J›LÓ(Ø×2Ñ2°4Ó8Ð8Þ IÐ1A×1GÑ1GÓ1IÓ$IØ×2Ñ2Ð3CÓDÐDÞ 9°×0EÑ0EÓ0GÓ#GØ×2Ñ2°?ÓCÐCà×Ñ˜u×%Ñ%¨×)>Ñ)>¸y×)PÑ)PØàÑ$¨T×-AÑ-AØÐ)÷.
ñ .
ð ˜mÐ+Ð+à�dˆ{Ðrv   c                 ó&   • [        S U  5       5      $ )uÓ  Whether any of the given style ids/names denotes a title style.

Matches on the ``"title"`` substring, which reliably covers the
English built-in ``Title`` style.  Localized equivalents (e.g.
``"Titre"``, ``"Titel"``) do not contain the substring and would
not be excluded â€” but that gap is acceptable in practice because
neither Word nor LibreOffice writes ``w:outlineLvl`` on a Title
style, so the condition this guard protects is unreachable for
real documents.
c              3  óX   #   • U  H   o(       d  M  S UR                  5       ;   v •  M"     g7f)ÚtitleN)r@  )r„   r—  s     rt   r†   Ú8MsWordDocumentBackend._is_title_style.<locals>.<genexpr>¤  s    é € ÐIº°Ã5Ó+�7˜eŸk™k›mÖ+ºùs   ‚
*�*)r‰   )Úlabelss    rt   r  Ú%MsWordDocumentBackend._is_title_style˜  s   € ô ÑI¹ÓIÓIÐIrv   c                óB  • UR                   nU(       Gd
   UR                  b?  UR                  R                  S5      nU H  nUR                  S5      nUS;  d  M  Sn  O   U(       d`  UR                  R                  bI  UR                  R                  R                  S5      nU H  nUR                  S5      nUS;  d  M  Sn  O   U(       dO  UbL  UR
                  b?  UR
                  nUb0  UR                  R                   (       a  SnO[        USS 5      nUb  M0  U=(       d    SnUR                  =(       d    Sn	UR                  R                  =(       d    Sn
[        UR                  S L=(       a    UR                  5      nUR                  R                  =(       d    SnUR                  R                  =(       d    SnU(       a  [        R                   O&U(       a  [        R"                  O[        R$                  n['        UU	UU
US9$ ! [         a     Nþf = f)	Nz.//w:b | .//w:bCszA{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val)rþ  ÚfalseTz'./w:pPr/w:rPr/w:b | ./w:pPr/w:rPr/w:bCsrý  F)ÚboldÚitalicÚ	underlineÚstrikethroughÚscript)rŽ  rî  rR  rð  Ú_parentrñ  rW  rÿ  rF  r�  Ústriker6   r�  Ú	subscriptÚsuperscriptr"   ÚSUBÚSUPERÚBASELINEr!   )r'  r_  ró  Úis_boldÚb_tagsÚbrß   ÚpPr_bÚcurrent_styleÚ	is_italicÚis_strikethroughÚis_underlineÚis_subÚis_supr’  s                  rt   Ú_get_format_from_runÚ*MsWordDocumentBackend._get_format_from_run¦  sÌ  € ð —(‘(ˆçð'à—<‘<Ñ+Ø Ÿ\™\×/Ñ/Ð0CÓD�FÛ#˜ØŸe™eØ_ó˜ð  nÕ4Ø&*˜GÙ!ñ $ö  3§;¡;×#7Ñ#7Ñ#CØŸK™K×0Ñ0×6Ñ6ØAó�Eó #˜ØŸe™eØ_ó˜ð  nÕ4Ø&*˜GÙ!ñ #ö  Ø!Ñ-Ø!Ÿ™Ñ3à$-§O¡O�MØ'Ñ3Ø(×-Ñ-×2×2Ø&*˜GØ!ä(/°¸|ÈTÓ(R˜ð (Ó3ð ×"˜Uˆà—J‘J×' %ˆ	ØŸ8™8Ÿ?™?×3¨eÐä˜CŸM™M°Ð5×G¸#¿-¹-ÓHˆØ—‘×#Ñ#×, uˆØ—‘×%Ñ%×.¨ˆÞ%”—’¾6¬6¯<ª<ÄvÇÁˆäØØØ"Ø*Øñ
ð 	
øô ó Ùðús&   –AH ÁA#H ÃA	H ÄH È
HÈHc                ó$  • UR                   (       aO  [        UR                   5      R                  (       d  [        UR                   5      $  [	        UR                   5      $ g! [
         a#    [        R                  SUR                   5         gf = f)a´  Resolve a hyperlink's address to a URL or a local path.

Addresses without a URL scheme are treated as (relative) filesystem
paths. Addresses with a scheme are parsed as URLs.

Malformed URLs (e.g. an address containing spaces) are handled
gracefully: the invalid target is dropped and ``None`` is returned so
that the link text is still preserved and conversion of the rest of the
document continues. This avoids a single bad hyperlink aborting the
whole conversion.

Args:
    hyperlink: The DOCX hyperlink whose address should be resolved.

Returns:
    An ``AnyUrl`` for a valid URL, a ``Path`` for a scheme-less address,
    or ``None`` when there is no address or the URL is malformed.
z(Skipping malformed hyperlink address: %rN)Úaddressr   Úschemer   r&   r'   r¢  r²  )r  Ú	hyperlinks     rt   Ú_get_hyperlink_targetÚ+MsWordDocumentBackend._get_hyperlink_targetè  sz   € ð& ××Ü˜I×-Ñ-Ó.×5×5Ü˜I×-Ñ-Ó.Ð.ðÜ˜i×/Ñ/Ó0Ð0ð øô #ó Ü—‘Ø>À	×@QÑ@Qôñ ð	ús   ÁA" Á"*BÂBc                óº  ^	• / nU	4S jm	T	" UR                   5       GHº  n[        R                  " U5      R                  nUS:X  a™  SR	                  UR                  S[        R                  S95      n[        U5      S:X  a  Mh  UR                  S[        R                  S9nU(       a  U R                  [        US   U5      U5      OS nUR                  XWS 45        MÃ  US;  a  MË  US	:X  a  [        X15      O
[        X15      n[        U[        5      (       ay  UR                  UR                  UR                  (       a8  [        UR                  5      S:”  a  U R                  UR                  S   U5      OS U R!                  U5      45        GMu  [        U[        5      (       d  GM�  UR                  UR                  U R                  X�5      S 45        GM½     U$ )
Nc              3  óœ   >#   • U  H?  n[         R                  " U5      R                  nUS;   a  T" U5       S h  v•N   M;  Uv •  MA     g  N7f)N>   ÚinsÚsmartTagÚ	customXmlÚ	fldSimpler‹  )ÚnodeÚchildrµ  Ú_get_children_recursives      €rt   r´  ÚNMsWordDocumentBackend._iter_paragraph_content.<locals>._get_children_recursive  sE   øé € Û�Ü Ÿ;š; uÓ-×7Ñ7�ØÐLÓLÙ6°uÓ=×=Ò=à”Kò ñ >ùs   ƒ7AºA
»Arš  r   z.//w:sdtContent//w:t/text()rà   r   z.//w:sdtContent//w:r>   r°   r©  r°   )rQ  r#   rŒ  r�  r¡  rR  r§   r¸   rl   r¤  rD   rJ  rB   r+  rk  r`  rª  )
r  ró  r¤   r³  rµ  rk  r`  ÚfmtÚitemr´  s
            @rt   Ú_iter_paragraph_contentÚ-MsWordDocumentBackend._iter_paragraph_content  s¯  ø€ ð NPˆõ	 ñ -¨Y¯\©\×:ˆEÜ—{’{ 5Ó)×3Ñ3ˆHà˜5Ó Ø—w‘wØ—K‘KØ5Ü#8×#IÑ#Ið  ð ó�ô �t“9 “>Ùà—{‘{Ø*Ü4×EÑEð #ð �ö ð ×-Ñ-¬c°$°q±'¸9Ó.EÀyÔQàð ð
 —‘ ¨4Ð0Ô1ÙàÐ1Ó1Ùð ˜s“?ô �EÔ%ä˜uÓ0ð ô ˜$¤	×*Ñ*Ø—‘àŸ	™	ð  $ŸyŸy¬S°·±«^¸aÓ-?ð !×5Ñ5°d·i±iÀ±lÀIÔNà!%à×2Ñ2°4Ó8ð÷
ô ˜D¤#×&Ô&Ø—‘Ø—Y‘Y × 9Ñ 9¸$Ó JÈDÐQ÷ñ_ ;ðf ˆrv   c                óP   • SR                  S U R                  U5       5       5      $ )Nr   c              3  ó,   #   • U  H
  u  pnUv •  M     g 7fr!  rƒ   )r„   rk  Ú_formatÚ
_hyperlinks       rt   r†   Ú<MsWordDocumentBackend._get_paragraph_text.<locals>.<genexpr>K  s   é € ð 
â-TÑ)�˜zõ Ú-Tùs   ‚)r¡  r¸  rS  s     rt   Ú_get_paragraph_textÚ)MsWordDocumentBackend._get_paragraph_textJ  s+   € Ø�w‰wñ 
à-1×-IÑ-IÈ)Ô-Tó
ó 
ð 	
rv   c                ó:  • U R                  U5      R                  5       S:X  a  S/$ / nSnSnU R                  U5       Hš  u  pVn[        UR                  5       5      (       a  Xd:w  d  Ubj  [        UR                  5       5      S:”  a"  UR	                  UR                  5       US45        SnUb$  UR	                  UR                  5       Xg45        SnOUnX5-  nMœ     [        UR                  5       5      S:”  a"  UR	                  UR                  5       US45        U$ )zF
Extract paragraph elements along with their formatting and hyperlink
r   )r   NNNr   )r¿  rl  r¸  rl   rJ  )r  ró  Úparagraph_elementsÚ
group_textÚprevious_formatrk  rì   r©  s           rt   Ú_get_paragraph_elementsÚ-MsWordDocumentBackend._get_paragraph_elementsP  s'  € ð ×#Ñ# IÓ.×4Ñ4Ó6¸"Ó<Ø$Ð%Ð%ð ð 	ð ˆ
Øˆð (,×'CÑ'CÀIÖ'NÑ#ˆD˜)Ü�D—J‘J“L×!Ñ! fÓ&?ØÑ%ô �z×'Ñ'Ó)Ó*¨QÓ.Ø&×-Ñ-Ø#×)Ñ)Ó+¨_¸dÐCôð  �
ð Ñ(Ø&×-Ñ-¨t¯z©z«|¸VÐ.OÔPØ‘Dà&,�OàÑŠJñ% (Oô* ˆz×ÑÓ!Ó" QÓ&Ø×%Ñ% z×'7Ñ'7Ó'9¸?ÈDÐ&QÔRà!Ð!rv   c                ó�   •  UR                  SU R                  S    S35      n[        U5      S:„  $ ! [        [        4 a     gf = f)zÄCheck if a paragraph element contains a checkbox.

Args:
    element: The paragraph element to check for checkbox presence.

Returns:
    True if the element contains a checkbox, False otherwise.
ú.//{r·   ú	}checkboxr   F)r   r¸   rl   ÚAttributeErrorÚ	TypeError)r  r<  Ú
checkboxess      rt   Ú_has_checkboxÚ#MsWordDocumentBackend._has_checkboxz  sU   € ð	Ø Ÿ™Ø˜×-Ñ-¨eÑ4Ð5°ZÐ@óˆJô �z“? QÑ&Ð&øÜ¤	Ð*ó 	Ùð	ús   ‚/2 ²AÁAc                óÊ   • U R                   S   nUR                  SU S35      nU(       d  gUS   nUR                  SU S35      nUb  UR                  SU S35      nUS	:H  $ g)
zÚCheck if a checkbox in the paragraph is checked.

Args:
    element: The paragraph element containing the checkbox.

Returns:
    True if checked (w14:checked val="1"), False if unchecked
        (val="0" or missing).
r·   rÈ  rÉ  Fr   z}checkedr«   z}valÚ1)r¸   r   r¬  rð  )r  r<  Úw14_nsrÌ  ÚcheckboxÚchecked_elemrß   s          rt   Ú_is_checkbox_checkedÚ*MsWordDocumentBackend._is_checkbox_checked‹  s}   € ð ×&Ñ& uÑ-ˆØ—_‘_ u¨V¨H°JÐ%?Ó@ˆ
ÞØà˜a‘=ˆØ—}‘} u¨V¨H°IÐ%>Ó?ˆàÑ#Ø×"Ñ" R¨ x¨uÐ#5Ó6ˆCØ˜#‘:Ðàrv   c                óœ   • U R                  U5      (       d  gU R                  U5      (       a  [        R                  $ [        R                  $ )a  Get the appropriate checkbox label for a paragraph element.

Args:
    element: The paragraph element to check for checkbox.

Returns:
    DocItemLabel.CHECKBOX_SELECTED if checked, DocItemLabel.CHECKBOX_UNSELECTED
        if unchecked, or None if no checkbox is present.
N)rÍ  rÔ  r   ÚCHECKBOX_SELECTEDÚCHECKBOX_UNSELECTED)r  r<  s     rt   Ú_get_checkbox_labelÚ)MsWordDocumentBackend._get_checkbox_label£  sA   € ð ×!Ñ! '×*Ñ*Øà×$Ñ$ W×-Ñ-Ü×1Ñ1Ð1ä×3Ñ3Ð3rv   c                óª   • / SQnUR                  5       nU H8  nUR                  U5      (       d  M  U[        U5      S R                  5       n  U$    U$ )uç   Remove checkbox symbols from text.

Removes common checkbox symbols like â˜�, â˜‘, â˜’ from the beginning of text.

Args:
    text: The text string to clean.

Returns:
    The text with checkbox symbols removed from the beginning.
)u   â˜�u   â˜‘u   â˜’u   â–¡u   â– u   â–ªu   â–«N)rl  rˆ   rl   )r  rk  Úcheckbox_symbolsÚsymbols       rt   Ú_clean_checkbox_symbolsÚ-MsWordDocumentBackend._clean_checkbox_symbolsµ  sW   € ò MÐà�z‰z‹|ˆÛ&ˆFØ�‰˜v×&Ó&ØœC ›K˜MÐ*×0Ñ0Ó2�Øàˆñ 'ð
 ˆrv   c                óÎ  • [        US5      (       a{  UR                  5       bj  UR                  5       nUR                  5        Vs/ s H+  n[        R                  " U5      R
                  S:X  d  M)  UPM-     nn UR                  U5      nU$ / U/QUR                  5       Q7 HÓ  nS HL  nUR                  U5      nU(       d  M   [        R                  " SSU5      n	U	(       a  [        U	5      s  s  $ MN     UR                  S5      n
U
(       a;  [        R                  " SU
5      nU(       a   [        UR                  S	5      5      s  $ S
 H%  nUR                  U5      c  M  UR                   s  s  $    MÕ     UR"                  R%                  5        H`  nSU;   d  M  UR                  S5      nU(       d  M%  [        R                  " SU5      nU(       d  ME   [        UR                  S	5      5      s  $    [        US5      (       a  UR                   $ S$ s  snf ! [         a     GNœf = f! [        [        4 a     GM™  f = f! [         a     GNf = f! [         a     MÏ  f = f)z=Extract vertical position information from paragraph element.Ú	getparentNr›  )ÚyÚtopÚ	positionYz
y-positionÚpositionz[^0-9.]r   Ú	transformztranslate\([^,]+,\s*([0-9.]+)r€   )ÚdistTÚdistBÚanchorÚrelativeFromÚvmlrñ  ztop:([0-9.]+)ptÚ
sourceline)Úhasattrrá  Úgetchildrenr#   rŒ  r�  Úindexrá  r�  rð  ræ  rœ   ÚfloatrË  r'  r‘   rì  rï  Úvalues)r  Úparagraph_elementrc  r›  Ú
paragraphsÚparagraph_indexr‘  Ú	attr_nameÚvalueÚclean_valueræ  r’   Úns_urirñ  s                 rt   Ú_get_paragraph_positionÚ-MsWordDocumentBackend._get_paragraph_positionË  sC  € ô Ð% {×3Ñ3Ø!×+Ñ+Ó-Ñ9à&×0Ñ0Ó2ˆFð "×-Ñ-Ô/óÚ/�a´5·;²;¸q³>×3KÑ3KÈsÑ3R—Ñ/ð ð ðØ",×"2Ñ"2Ð3DÓ"E�Ø&Ð&ð
 OÐ(Ð)ÐNÐ,=×,KÑ,KÓ,MÔNˆDãP�	ØŸ™ Ó+�ß�5ðä&(§f¢f¨Z¸¸UÓ&C˜Þ&Ü#(¨Ó#5Ô5ñ 'ñ Qð Ÿ™ Ó-ˆIÞäŸ	š	Ð"BÀIÓN�ÞðÜ$ U§[¡[°£^Ó4Ò4ó J�	Ø—8‘8˜IÓ&Ó2ØŸ?™?Ô*ó Jñ5 Oð> (×-Ñ-×4Ñ4Ö6ˆFØ˜�à)×-Ñ-¨gÓ6�ß�5ÜŸIšIÐ&8¸%Ó@�Eß�uð!Ü#(¨¯©°Q«Ó#8Ò8ñ 7ô Ð(¨,×7Ñ7ð ×(Ñ(ð	
ð ð	
ùòoøô ó Úðûô '¬	Ð2ó Ûðûô &ó Úðûô&  *ó !Ú ð!úsT   Á(HÁ1HÁ:H Ã)H-Ä/IÇIÈ
H*È)H*È-IÉIÉ
IÉIÉ
I$É#I$c                ó2  ^	• [        5       n0 nU GH‚  nXB;   a  M  [        R                  " U5      R                  nUR	                  U5        US:X  ae  SnUR                  5        H!  m	[        U	4S jS 5       5      (       d  M  T	n  O   Xc;  a  / X6'   X6   R                  X@R                  U5      45        M§  US:X  al  UR                  SUR                  S9nUnXc;  a  / X6'   U H>  nX‚;  d  M
  UR	                  U5        X6   R                  X€R                  U5      45        M@     GM  UR                  SUR                  S9nUnXc;  a  / X6'   U H>  nX‚;  d  M
  UR	                  U5        X6   R                  X€R                  U5      45        M@     GM…     U$ )z6Collect and organize paragraphs from textbox elements.r›  Nc              3  ó@   >#   • U  H  oTR                   ;   v •  M     g 7fr!  )Útag)r„   ÚnsÚancestors     €rt   r†   ÚDMsWordDocumentBackend._collect_textbox_paragraphs.<locals>.<genexpr>(  s   øé € ÐUÒ8T°" §¡Ö-Ò8Tùs   ƒ)rŠ  ÚshapeÚtxbxr‰  ú.//w:prà   )rû   r#   rŒ  r�  r¨  r�  r‰   rJ  rù  r   rï  )
r  r½  Úprocessed_paragraphsÚcontainer_paragraphsr<  rµ  Úcontainer_idró  r›  rÿ  s
            @rt   Ú_collect_textbox_paragraphsÚ1MsWordDocumentBackend._collect_textbox_paragraphs  s¦  ø€ ô
 58³EÐð ð 	ô (ˆGàÓ.Ùä—{’{ 7Ó+×5Ñ5ˆHØ ×$Ñ$ WÔ-ð ˜3‹à#�Ø '× 5Ñ 5Ö 7�HÜÔUÑ8TÓU×UÓUØ'/˜Ùñ !8ð
  Ó;Ø9;Ð(Ñ6Ø$Ñ2×9Ñ9Ø×:Ñ:¸7ÓCÐDöð
 ˜]Ó*Ø$Ÿ_™_¨XÀ'Ç-Á-˜_ÐP�
Ø&�ØÓ;Ø9;Ð(Ñ6ã#�AØÕ4Ø,×0Ñ0°Ô3Ø,Ñ:×AÑAØ× <Ñ <¸QÓ ?Ð@öô $ð %Ÿ_™_¨XÀ'Ç-Á-˜_ÐP�
Ø&�ØÓ;Ø9;Ð(Ñ6ã#�AØÕ4Ø,×0Ñ0°Ô3Ø,Ñ:×AÑAØ× <Ñ <¸QÓ ?Ð@öô $ñW (ðd $Ð#rv   c                óh  • / nU R                  5       nUR                  [        R                  U R                  US-
     SU R
                  S9nUR                  UR                  5       5        U R                  U   nXPR                  U'   U R                  U5      n/ nUR                  5        H  n	[        U	S S9n
UR                  U
5        M!     [        5       nU GHD  u  pÍ[        XÀR                  5      nUR                  R!                  5       nU(       a  Xû;   a  MC  UR#                  U5        OXý4nUU;   a  M`  UR#                  U5        UR                  U R%                  XÂ5      5        U R'                  U5      nU R)                  U5      nUR+                  S[,        R.                  S9nU(       a%  U R1                  UU5      nUR                  U5        Mý  U(       a&  U R3                  UU5      nUR                  U5        GM*  U(       d  GM4  U R5                  UUS9  GMG     X`R                  U'   U$ )	z=Process textbox content and add it to the document structure.r€   rŠ  r–  c                ó>   • U S   S L U S   b  U S   4$ [        S5      4$ )Nr€   Úinf)rð  )r¹  s    rt   r“   Ú?MsWordDocumentBackend._handle_textbox_content.<locals>.<lambda>o  s.   € Ø�a‘D˜D�LØ˜a™DÑ,�A�a‘Dñä27¸³,ñrv   )r  r†  rà   r�  )r`  r¤  r   r¥  rø   r
  rJ  ro  r  rñ  Úsortedrª  rû   rC   r  rk  rl  r¨  r®  ró   rô   r   r§   r¸   r­  r¯  r³  )r  r½  rÝ   rp  r  Útextbox_groupÚoriginal_parentr  Úall_paragraphsró  Úsorted_container_paragraphsr  r›  rå  ró  rÂ  Úparagraph_idÚtb_drawing_blipÚtb_vml_imagesÚtb_drawingml_elsrÈ  rÊ  s                         rt   r©  Ú-MsWordDocumentBackend._handle_textbox_contentO  s  € ð #%ˆØ—‘Ó!ˆàŸ™Ü×$Ñ$Ø—<‘< ¨¡	Ñ*ØØ×,Ñ,ð	 &ð 
ˆð 	�‰˜×-Ñ-Ó/Ô0ð Ÿ,™, uÑ-ˆØ+�‰�UÑð  $×?Ñ?Ð@PÓQÐð ˆð /×5Ñ5Ö7ˆJä*0Øññ+Ð'ð ×!Ñ!Ð"=Ö>ñ 8ô  #›uÐô *‰KˆAä! !§]¡]Ó3ˆIØ$Ÿ>™>×/Ñ/Ó1ˆLæàÓ7ÙØ$×(Ñ(¨Õ6ð !-Ð7�ØÐ#7Ó7ÙØ$×(Ñ(¨Ô6à�O‰O˜D×6Ñ6°qÓ>Ô?ð #×2Ñ2°1Ó5ˆOØ ×9Ñ9¸!Ó<ˆMØ Ÿy™yØÔ+@×+QÑ+Qð  )ð  Ðö Ø×,Ñ,¨_¸cÓB�Ø—‘ Ö%ÞØ×4Ñ4°]ÀCÓH�Ø—‘ ×)ß!Ñ!Ø×&Ñ&¨3Ð>NÐ&ÔOñC *ðH .�‰�UÑØˆrv   c                ó¦  • / n/ n/ nU Vs/ s H)  nSUR                   ;   d  M  SUR                   ;  d  M'  UPM+     nnU(       GaZ  U GHQ  nSUR                   ;   a•  SUR                   ;  a…  [        [        U5      5      R                  5       n[	        U5      S:”  aR  UR                  U R                  R                  US95        UR                  U R                  R                  US95        M§  M©  UR                  5        H”  n	[        R                  " U	5      R                  n
U
S:X  d  M+  SU	R                   ;  d  M=  [        U	R                  [        5      (       d  M^  UR                  U	R                  5        UR                  U	R                  5        M–     GMT     GOOUR                  5        GH:  n[        R                  " U5      R                  nUS:X  ai  SUR                   ;  aY  [        UR                  [        5      (       a8  UR                  UR                  5        UR                  UR                  5        M‘  M“  SUR                   ;   d  M¥  SUR                   ;  d  M·  [        [        U5      5      R                  5       n[	        U5      S:”  d  Mê  UR                  U R                  R                  US95        UR                  U R                  R                  US95        GM=     [	        U5      S:  a  U/ 4$ [        R                  " SS	S	R!                  U5      5      R                  5       [        R                  " SS	U5      R                  5       :w  a  U/ 4$ S	nSnU H_  n[	        U5      S:X  a  M  UR#                  S
5      (       a  Xß-  nM0  UR%                  Xþ5      nUS:¼  a  Xß-  nU[	        U5      -   nM[  Xß-  nMa     XÔ4$ s  snf )NÚoMathÚ	oMathParar   )ÚEQrÁ  Úmathr€   z\s+r   ú<eq>)rý  rE  r-   rl  rl   rJ  rú   rì   Úiterr#   rŒ  r�  r+  rk  ræ  rœ   r¡  rˆ   r¬  )r  r<  rk  Ú
only_textsÚonly_equationsÚtexts_and_equationsr³  Údirect_omathsÚlatex_equationÚt_elemÚt_tagÚsubtrµ  Úoutput_textÚtext_posÚsubstrÚposs                    rt   Ú_handle_equations_in_textÚ/MsWordDocumentBackend._handle_equations_in_text£  sC  € Øˆ
ØˆØ Ðñ !ó
â �Ø˜%Ÿ)™)Ñ#ó à(3¸5¿9¹9Ñ(D÷ Ù ð 	ð 
÷ ô !�Ø˜eŸi™iÓ'¨K¸u¿y¹yÓ,HÜ%(¬°UÓ);Ó%<×%BÑ%BÓ%D�NÜ˜>Ó*¨QÓ.Ø&×-Ñ-Ø ×2Ñ2×9Ñ9¸^Ð9ÐLôð ,×2Ñ2Ø ×2Ñ2×9Ñ9¸^Ð9ÐLöñ	 /ð #(§*¡*¦,˜Ü %§¢¨FÓ 3× =Ñ =˜Ø  C�<¨F¸&¿*¹*Õ,DÜ)¨&¯+©+´s×;Ó;Ø *× 1Ñ 1°&·+±+Ô >Ø 3× :Ñ :¸6¿;¹;Ö Gô #/ó !ð*  Ÿ™Ÿ�Ü Ÿ;š; tÓ,×6Ñ6�Ø˜s“? v°T·X±XÓ'=Ü! $§)¡)¬S×1Ñ1Ø"×)Ñ)¨$¯)©)Ô4Ø+×2Ñ2°4·9±9Ö=ñ 2ð  §¡Õ(¨[ÀÇÁÕ-HÜ%(¬°TÓ):Ó%;×%AÑ%AÓ%C�NÜ˜>Ó*¨QÕ.Ø&×-Ñ-Ø ×2Ñ2×9Ñ9¸^Ð9ÐLôð ,×2Ñ2Ø ×2Ñ2×9Ñ9¸^Ð9ÐL÷ñ 'ô  ˆ~Ó Ó"Ø˜�8ˆOô �FŠF�6˜2˜rŸw™w zÓ2Ó3×9Ñ9Ó;Ü�vŠv�f˜b $Ó'×-Ñ-Ó/ó0ð
 ˜�8ˆOð ˆØˆã)ˆFÜ�6‹{˜aÓÙØ× Ñ  ×(Ñ(àÑ%’ð —i‘i Ó1�Ø˜!“8ØÑ)�KØ"¤S¨£[Ñ0’Hð  Ñ)’Kñ *ð  Ð*Ð*ùò]
s   ‹O£OµOc               óV   • [        U5      S:”  a  UR                  X R                  S9$ U$ )Nr€   ©rc  r
  )rl   Úadd_inline_groupr
  )r  rÝ   Úprev_parentrÂ  s       rt   Ú_create_or_reuse_parentÚ-MsWordDocumentBackend._create_or_reuse_parentû  s:   € ô Ð%Ó&¨Ó*ð × Ñ ¨×CUÑCUÐ ÐVð	
ð ð	
rv   Fc           
     ó  • / n[        XR                  5      nU R                  U5      nU R                  XR	                  U5      S9u  pxUc  U$ Un	UR                  5       nUn
U R                  U5      nU R                  U5      n[        U R                  X R                  U R                  5       S-
     5      [        5      U l        U R                  U5      u  pÞU R                  U5      u  nnUS:X  a  S nUbx  Ubu  US;  ao  U R!                  UU5      n[#        U5      S:”  a  U R%                  UUUUUUS9nOU R'                  UUUUUS9nUR)                  U5        U R+                  XÞUU5        U$ U R-                  5       Gb«  US;  Ga¤  Ub  US:X  Gaš  U R-                  5       U l        U(       a&  UR                  5       (       a  U R1                  5         OªU R2                  (       a™  U R2                  U R                  ;   a  U R                  R5                  U R2                  5      n[        U[6        5      (       aE  UU l        U R.                  U l        U R                  R5                  U R2                  S-
  5      U l        U R2                  (       ab  [?        [#        U R                  5      5       H$  nUU R2                  :¼  d  M  S U R                  U'   M&     U R2                  S-
  U l         S U l        O;[?        [#        U R                  5      5       H  nS U R                  U'   M     SU l         US	;   aŽ  [?        [#        U R                  5      5       H  nS U R                  U'   M     URC                  S [D        RF                  UU RH                  S
9nUU R                  S'   URK                  URM                  5       5        GOøSU;   a7  U RO                  U5      nU RQ                  X.UU5      nUR)                  U5        GO»[#        U5      S:”  Gaä  URR                  b(  [#        URR                  R                  5       5      S:X  GaA  [#        U5      S:”  Ga1  U R                  5       nU R                  US-
     n[#        U5      S:”  a•  U H�  nURU                  SS5      RU                  SS5      R                  5       n[#        U5      S:”  d  MD  URC                  [D        RV                  UUU RH                  S9nURK                  URM                  5       5        M�     GO URC                  [D        RV                  UURU                  SS5      RU                  SS5      U RH                  S9nURK                  URM                  5       5        GO5U R                  5       nURY                  U R                  US-
     U RH                  S9nURK                  URM                  5       5        U R[                  UUUUUS9  GOÇUS:X  GaÒ  U(       GdÊ  U R                  5       nU R                  US-
     nU	R]                  5       nU R                  UU5      nU R^                  (       a  S OUn [        U [        5      (       Ga   U RH                  U RH                  :X  aæ  UR`                  (       aÕ  UR`                  S   U L aÃ  U(       a  SU Rb                  S-   -  n!U RR                   U! U 3U l)        U Rd                   U! U 3U l2        SU l1        U Rf                  [h        Rj                  L a  [m        U RR                  5      U l3        OU =Rb                  S-  sl1        URK                  U RM                  5       5        SU l/        GOIU(       aS  SU l1        URo                  UUUU RH                  [m        U5      S9n"URK                  U"RM                  5       5        SU l/        OîU Rq                  U5        U R                  5       nU Rs                  UU R                  R5                  US-
  5      US9nU Hš  u  nn#n$U(       a  U Ru                  U5      OUn%U(       a  U%(       a  U%R                  5       (       d  MF  URC                  U(       a  UO[D        Rv                  UU%U#U$U RH                  S9n&URK                  U&RM                  5       5        Mœ     U R+                  XÞUU5        U(       a-  X@Rx                  U
'   U(       a  [{        U5      U R|                  U
'   U$ )N©r<  rk  r€   r   )ÚTitler>  r~  )rÝ   rK  rL  rk  Ú	equationsÚis_numbered)rÝ   rK  rL  Úelementsr6  )r4  r>  r~  )r4  )rc  r—  rk  r
  r>  r  r   ú</eq>r˜  r-  )rÝ   rc  rk  r5  rp  râ   Ú
F)rk  Úorigrc  r
  Úcode_language)rÝ   r/  rÂ  ©r—  rc  rk  Ú
formattingr©  r
  )?rC   r  rÅ  r*  r¿  rl  Ú_get_comment_ids_for_elementrÙ  r+  rJ  rø   r`  r   r  r„  rù  r1  rl   Ú_add_list_item_with_equationsÚ_add_list_itemrª  rM  rX  r  rv  r÷   rð  r   r  r  r  r   r  r¦  r   ÚTITLEr
  rJ  ro  r4  Ú_add_headingrk  rm   ÚFORMULAr.  Ú_add_inline_equations_to_parentÚrstripr  rj  r  r:  r;  r4   rq  r5   Úadd_codery  r0  rÞ  r§  r  rh  r  )'r  r<  rÝ   rŸ  rp  ró  rÂ  rk  r5  Úraw_paragraph_textÚpara_elementÚcomment_idsÚcheckbox_labelÚ
p_style_idÚp_levelrK  rL  r6  ÚliÚparent_itemr  rÇ  Úis_numbered_styleÚh1r  rc  ÚeqÚeq_textÚt1Úinline_equationÚ	code_textÚ	last_itemÚmerge_targetÚjoinerÚ	code_itemrì   r©  Ú
clean_textÚ	text_items'                                          rt   r®  Ú+MsWordDocumentBackend._handle_text_elements  s+  € ð #%ˆÜ˜g§}¡}Ó5ˆ	Ø!×9Ñ9¸)ÓDÐØ×8Ñ8Ø×":Ñ":¸9Ó"Eð 9ð 
‰ˆð ‰<ØˆOà!ÐØ�z‰z‹|ˆð ˆØ×7Ñ7¸Ó@ˆð ×1Ñ1°'Ó:ˆô
 &0Ø×!Ñ! #§|¡|°D·O±OÓ4EÈÑ4IÑ'JÓKÌXó&
ˆÔ"ð #×7Ñ7¸	ÓBÑˆ
Ø×0Ñ0°Ó;‰ˆˆvà�A‹:ØˆEð ÑØÑ"ØÐ">Ó>ð ×<Ñ<¸UÀFÓKˆKô �9‹~ Ó!Ø×7Ñ7ØØØ!ØØ'Ø +ð 8ð ‘ð ×(Ñ(ØØØ!Ø/Ø +ð )ð �ð �O‰O˜BÔØ× Ñ  °e¸VÔDØˆOà×ÑÓÒ*ØÐ"6Ô6Ø‘ *°Ô"6ð #×.Ñ.Ó0ˆDŒOÞ˜Ÿ
™
Ÿ™à×,Ñ,Õ.ð ×)×)¨d×.DÑ.DÈÏÉÓ.TØ"&§,¡,×"2Ñ"2°4×3IÑ3IÓ"J�KÜ! +¬y×9Ñ9Ø/:˜Ô,Ø59·_±_˜Ô2Ø6:·l±l×6FÑ6FØ ×2Ñ2°QÑ6ó7˜Ô3ð ×%×%Ü ¤ T§\¡\Ó!2Ö3�CØ˜d×4Ñ4Õ4Ø,0˜Ÿ™ SÓ)ñ 4ð "×3Ñ3°aÑ7�”
Ø)-�Õ&ä ¤ T§\¡\Ó!2Ö3�CØ(,�D—L‘L Ó%ñ 4à�”
à˜Ó"ÜœS §¡Ó.Ö/�Ø$(�—‘˜SÓ!ñ 0à—‘ØÜ"×(Ñ(ØØ"×0Ñ0ð	 ð ˆBð !ˆD�L‰L˜‰OØ�O‰O˜BŸJ™J›LÖ)Ø˜*Ó$Ø $× 9Ñ 9¸)Ó DÐØ×"Ñ" 3°Ð7HÓIˆBØ�O‰O˜BÖä�‹^˜aÔØ—‘Ñ&¬#¨i¯n©n×.BÑ.BÓ.DÓ*EÈÔ*JÔPSØóQàôQð Ÿ™Ó)�ØŸ™ e¨a¡iÑ0�Ü�y“> AÓ%Û'˜Ø"$§*¡*¨V°RÓ"8×"@Ñ"@ÀÈ"Ó"M×"SÑ"SÓ"U˜Ü˜w›<¨!Õ+Ø!$§¡Ü&2×&:Ñ&:Ø'-Ø%,Ø.2×.@Ñ.@ð	 ".ð "˜Bð %ŸO™O¨B¯J©J«LÖ9ó (ð Ÿ™Ü*×2Ñ2Ø%Ø!Ÿ\™\¨&°"Ó5×=Ñ=¸gÀrÓJØ&*×&8Ñ&8ð	 &ð �Bð —O‘O B§J¡J£LÖ1ð Ÿ™Ó)�Ø"%×"6Ñ"6ØŸ<™<¨°©	Ñ2À$×BTÑBTð #7ð #�ð —‘ × 7Ñ 7Ó 9Ô:à×4Ñ4ØØ*ØØ'Ø%ð 5ó ð ˜6Ô!¯.ð —O‘OÓ%ˆEØ—\‘\ %¨!¡)Ñ,ˆFØ*×1Ñ1Ó3ˆIð
 ×-Ñ-¨c°6Ó:ˆIØ#'×#=×#=™4À9ˆLä˜<¬×2Ò2Ø ×.Ñ.°$×2DÑ2DÓDØ—I—IØ—I‘I˜b‘M \Ò1æØ! T×%CÑ%CÀaÑ%GÑH�FØ+7×+<Ñ+<Ð*=¸f¸XÀiÀ[Ð(Q�LÔ%Ø+7×+<Ñ+<Ð*=¸f¸XÀiÀ[Ð(Q�LÔ%Ø56�DÔ2ð $×1Ñ1Ô5F×5NÑ5NÒNÜ5IØ(×-Ñ-ó6˜Ô2øð ×2Ò2°aÑ7Õ2Ø—‘ × 4Ñ 4Ó 6Ô7Ø-2�Ö*Þà12�Ô.ØŸL™LØ"Ø"Ø!Ø"&×"4Ñ"4Ü"6°yÓ"Að )ð �	ð —‘ 	× 1Ñ 1Ó 3Ô4Ø-2�Ô*øð
 ×'Ñ'¨Ô-Ø—O‘OÓ%ˆEØ×1Ñ1ØØ ŸL™L×,Ñ,¨U°Q©YÓ7Ø#5ð 2ð ˆFó
 ,>Ñ'��f˜iö ;I�D×0Ñ0°Ô6Èdð ö
 #®J¸j×>NÑ>N×>PÑ>PÙàŸL™LÞ,:™.Ä×@QÑ@QØ!Ø#Ø%Ø'Ø"&×"4Ñ"4ð )ð �	ð —‘ 	× 1Ñ 1Ó 3Ö4ñ% ,>ð( 	×Ñ˜Z°%¸Ô@ö Ø4<×#Ñ# LÑ1ÞÜ;?ÀÓ;L�×*Ñ*¨<Ñ8àˆrv   c                ó¢  • / nU R                  5       n[        U[        5      (       aÍ  X&:”  ar  [        Xb5       Hb  nUR	                  U R
                  US-
     [        R                  SU 3S9nUR                  UR                  5       5        X€R
                  U'   Md     O@X&:  a;  [        [        U R
                  5      5       H  n	X’:¼  d  M
  S U R
                  U	'   M     [        SU5      nUn
US-
  nUnOU R                  n
U R                  S-
  nSnU(       aë  XÀR                  ;   a  U R                  U==   S-  ss'   OSU R                  U'   U R                  U    SU 3nUS-   nXÐR                  ;   a%  SU R                  U'   US-  nXÐR                  ;   a  M%  US-
  nXàR                  ;   aT  U R                  U   S:X  a  U R                  U==   S-  ss'   U R                  U    SU 3nUS-  nXàR                  ;   a  MT  UR                  U R
                  U   UUS9nXðR
                  U
'   UR                  UR                  5       5        U$ )Nr€   zheader-)rc  r—  r‹   r”  r   r&  )rc  rk  r  )r`  r+  rà  r   r¤  rø   r   r¥  rJ  ro  rl   Úmaxr  rù   Úadd_heading)r  rÝ   Ú
curr_levelrk  rO  rp  r  r  Úgr1r  Úcurrent_levelÚparent_levelÚ	add_levelÚ
next_levelÚprevious_levelÚhds                   rt   rB  Ú"MsWordDocumentBackend._add_headingÿ  sL  € ð #%ˆØ—‘Ó!ˆÜ�j¤#×&Ñ&ØÓ!ä˜uÖ1�AØŸ-™-Ø#Ÿ|™|¨A°©EÑ2Ü(×0Ñ0Ø& q c˜]ð (ð �Cð
 —O‘O C§K¡K£MÔ2Ø&)—L‘L “Oò 2ð Ó#ä ¤ T§\¡\Ó!2Ö3�CØÕ(Ø,0˜Ÿ™ SÓ)ñ 4ô
 ˜Q 
Ó+ˆJØ&ˆMØ%¨™>ˆLØ"‰Ià ŸJ™JˆMØŸ:™:¨™>ˆLØˆIæØ×1Ñ1Ó1Ø×%Ñ% iÓ0°AÑ5Ô0à34�×%Ñ% iÑ0Ø×+Ñ+¨IÑ6Ð7°q¸¸Ð?ˆDð # Q™ˆJØ× 5Ñ 5Ó5Ø45�×%Ñ% jÑ1Ø˜a‘�
ð × 5Ñ 5Õ5ð
 '¨™]ˆNØ ×$9Ñ$9Ó9ð ×(Ñ(¨Ñ8¸AÓ=Ø×)Ñ)¨.Ó9¸QÑ>Ó9à×/Ñ/°Ñ?Ð@ÀÀ$ÀÐH�Ø !Ñ#�ð !×$9Ñ$9Õ9ð �_‰_Ø—<‘< Ñ-ØØð ð 
ˆð
 ')�‰�]Ñ#Ø�‰˜Ÿ
™
›Ô%Øˆrv   c           
     óî  • / n[        U R                  U   [        5      (       d  [        R	                  S5        U$ U(       d  U$ [        U5      S:X  a2  US   u  pxn	U(       a!  UR                  UUU R                  U   UUU	S9  U$ UR                  UUU R                  U   SS9n
UR                  U
S9nU H;  u  pxn	U(       d  M  UR                  [        R                  UUUU	U R                  S9  M=     U$ )	NúRParent element of the list item is not a ListGroup. The list item will be ignored.r€   r   )ÚmarkerÚ
enumeratedrc  rk  r=  r©  r   ©rk  rl  rc  rk  )rc  r<  )r+  rø   r   r¢  r²  rl   Úadd_list_itemr.  r¦  r   r§  r
  )r  rÝ   r7  rk  rl  r  rp  rk  rì   r©  Únew_itemÚ
new_parents               rt   Ú_add_formatted_list_itemÚ.MsWordDocumentBackend._add_formatted_list_itemF	  s  € ð #%ˆä˜$Ÿ,™, uÑ-¬y×9Ñ9Ü�L‰LØdôð ˆOÞØˆOäˆx‹=˜AÓØ&.¨q¡kÑ#ˆD˜)ÞØ×!Ñ!Ø!Ø)ØŸ<™<¨Ñ.ØØ%Ø'ð "ñ ð4 ˆð# ×(Ñ(ØØ%Ø—|‘| EÑ*Øð	 )ð ˆHð ×-Ñ-°XÐ-Ð>ˆJÛ+3Ñ'�˜iß�4Ø—L‘LÜ*×/Ñ/Ø)Ø!Ø#)Ø"+Ø&*×&8Ñ&8ð !ó ñ ,4ð ˆrv   c                ó‚   • U(       a#  U R                  X45        U R                  X45      nOSnU R                  XXuU5        g)z9Resolve enumeration marker and add a formatted list item.r   N)r  r,  rq  )r  rÝ   r7  rK  rL  r6  r  Úenum_markers           rt   Ú_add_list_item_with_markerÚ0MsWordDocumentBackend._add_list_item_with_markerw	  s<   € ö Ø×"Ñ" 5Ô1Ø×1Ñ1°%Ó@‰KàˆKØ×%Ñ% c°[ÈuÕUrv   )rp  c          	     ó  • UnU GH  n[        U5      S:X  a    GOUR                  UR                  5       SS9nUS   n	[        U5      S:X  a  SOUS   n[        U	5      S:”  aL  UR                  [        R
                  UU	U R                  S9n
Ub  UR                  U
R                  5       5        UR                  [        R                  UUR                  SS5      R                  SS5      U R                  S9nUc  Mù  UR                  UR                  5       5        GM     [        U5      S:”  a\  UR                  [        R
                  UUR                  5       U R                  S9nUb   UR                  UR                  5       5        ggg)	a•  Add text and inline equations as children of a parent element.

This helper method splits text by equation markers and adds alternating
TEXT and FORMULA elements as children of the given parent. This logic
is shared between regular paragraphs with inline equations and list items
with inline equations.

Args:
    doc: The DoclingDocument being constructed.
    parent: The parent element (inline_group) to add children to.
    text: The paragraph text with equation placeholders (e.g., "<eq>formula</eq>").
    equations: List of equation strings with markers (e.g., ["<eq>A=B</eq>", ...]).
    elem_ref: Optional list to append created element references to.
r   r€   )Úmaxsplitr   r˜  Nr  r8  )rl   rŠ   rl  r¦  r   r§  r
  rJ  ro  rC  rm   )r  rÝ   rc  rk  r5  rp  Útext_tmprQ  Úsplit_text_tmpÚpre_eq_textÚe1Úe2Úe3s                rt   rD  Ú5MsWordDocumentBackend._add_inline_equations_to_parentˆ	  so  € ð. ˆÜˆBÜ�8‹} Ó!Úà%Ÿ^™^¨B¯H©H«JÀ˜^ÐCˆNà(¨Ñ+ˆKÜ  Ó0°AÓ5‘r¸>È!Ñ;LˆHä�;Ó !Ó#Ø—\‘\Ü&×+Ñ+Ø!Ø$Ø"&×"4Ñ"4ð	 "ð �ð Ñ'Ø—O‘O B§J¡J£LÔ1à—‘Ü"×*Ñ*ØØ—Z‘Z ¨Ó+×3Ñ3°G¸RÓ@Ø"×0Ñ0ð	 ð ˆBð Ó#Ø—‘ §
¡
£×-ñ5 ô8 ˆx‹=˜1ÓØ—‘Ü"×'Ñ'ØØ—^‘^Ó%Ø"×0Ñ0ð	 ð ˆBð Ñ#Ø—‘ §
¡
£Õ-ð $ð rv   c               ó&  • / nU R                  5       nU R                  5       nU R                  5       b!  U R                  5       U:X  a‰  U R                  c|  XPl        X R                  ;  a,  U R                  U5        U R                  R                  U5        U R                  UUU R                  US-
     US9nXpR                  U'   UnX l	        XH4$ U R                  5       U:X  a¾  U R                  b±  Ub®  Xc:  a©  [        U R                  U-   S-   U R                  U-   S-   5       Hg  n	UR                  SU R                  R                  U	S-
  5      U R                  S9n
X R                  U	'   UR                  U
R                  5       5        Mi     U R                  U-   nXH4$ U R                  5       U:X  a]  U R                  bP  UbM  X6:  aH  U R                   H&  nX°R                  U-   :”  d  M  SU R                  U'   M(     U R                  U-   nXH4$ U R                  5       U:X  a9  [!        U R                  R                  US-
  5      ["        5      (       a  US-
  nXH4$ U R                  5       U:w  d1  [!        U R                  R                  US-
  5      ["        5      (       då  U R                  bP  U R                  U-   n[%        U R                  R'                  5       5       H  nX¸:”  d  M
  SU R                  U'   M     OUnX€l        X R                  ;  a,  U R                  U5        U R                  R                  U5        U R                  UUU R                  R                  US-
  5      US9nXpR                  U'   X l	        XH4$ US-
  nXH4$ )aƒ  Manage list structure and return elem_ref and use_level.

This helper method handles the list group creation and level management
that is common to both regular list items and list items with equations.
It determines whether to open a new list, continue an existing one, handle
indentation changes, or close lists based on the numbering context.

Contract with interleaved blocks: Word numbers list items continuously
per ``w:numId``, so items sharing a numId belong to the same list even
when paragraphs of a different numId (for example a bullet list placed
between two ordered items) appear in between. Counters are therefore
reset only the first time a numId is opened -- tracked in
``self.started_numids`` -- so a numId that reappears after an
intervening block resumes its numbering instead of restarting at 1
(see #3896).

Args:
    doc: The DoclingDocument being constructed.
    numid: The numbering ID from the DOCX paragraph properties.
    ilevel: The indentation level from the DOCX paragraph properties.

Returns:
    A tuple containing the list of references to created list groups and
    the level at which the list item should be added.
Nr€   )rÝ   rK  rc  rp  rh  ri  )r`  r[  rX  r÷   r  r  r¨  rs  rø   r  r   rn  rð  r
  rJ  ro  r+  r   rh  r  )r  rÝ   rK  rL  rp  r  Úprev_indentrr  Ú	use_levelr  Úlist_gr1r_  s               rt   Ú_manage_list_structureÚ,MsWordDocumentBackend._manage_list_structureÆ	  s�  € ð@ #%ˆØ—‘Ó!ˆØ×'Ñ'Ó)ˆà×ÑÓÑ%Ø×ÑÓ %Ó'¨D×,BÑ,BÑ,Jà%*Ô"ð ×/Ñ/Ó/Ø×:Ñ:¸5ÔAØ×#Ñ#×'Ñ'¨Ô.à×4Ñ4ØØØ—|‘| E¨A¡IÑ.Ø!ð	 5ð ˆGð #*�L‰L˜ÑØˆIØ#ŒOðL Ð"Ð"ðG ×ÑÓ %Ó'Ø×&Ñ&Ñ2ØÑ'ØÓ$äØ×&Ñ&¨Ñ4°qÑ8Ø×&Ñ&¨Ñ/°!Ñ3ö�ð ×-Ñ-ØØŸ<™<×+Ñ+¨A°©EÓ2Ø"&×"4Ñ"4ð .ð �ð
 #+—‘˜Q‘Ø—‘ × 0Ñ 0Ó 2Ö3ñð ×.Ñ.°Ñ7ˆIðf Ð"Ð"ða ×ÑÓ %Ó'Ø×&Ñ&Ñ2ØÑ'ØÓ$à—\”\�Ø×-Ñ-°Ñ6Õ6Ø&*�D—L‘L “Oñ "ð ×.Ñ.°Ñ7ˆIðP Ð"Ð"ðM ×ÑÓ 5Ó(¬ZØ�L‰L×Ñ˜U Q™YÓ'¬÷.
ñ .
ð  ™	ˆIðD Ð"Ð"ðA ×ÑÓ 5Ó(´
Ø�L‰L×Ñ˜U Q™YÓ'¬÷1
ñ 1
ð ×%Ñ%Ñ1Ø ×2Ñ2°VÑ;�	Ü˜dŸl™l×/Ñ/Ó1Ö2�AØ•}Ø*.˜Ÿ™ Q›ò 3ð "�	Ø)2Ô&ð
 ×/Ñ/Ó/Ø×:Ñ:¸5ÔAØ×#Ñ#×'Ñ'¨Ô.à×4Ñ4ØØØ—|‘|×'Ñ'¨	°A©Ó6Ø!ð	 5ð ˆGð '.�L‰L˜Ñ#Ø#ŒOð Ð"Ð"ð  ™	ˆIàÐ"Ð"rv   )r6  c               óº   • U(       d  / $ U R                  XUS9u  pgU(       a#  U R                  X#5        U R                  X#5      nOSnU R                  XX…U5        U$ )aß  Add a regular list item without inline equations.

Args:
    doc: The DoclingDocument being constructed.
    numid: The numbering ID from the DOCX paragraph properties.
    ilevel: The indentation level from the DOCX paragraph properties.
    elements: List of (text, formatting, hyperlink) tuples representing the paragraph content.
    is_numbered: Whether this is a numbered list (True) or bulleted list (False).

Returns:
    List of references to created document elements.
©rÝ   rK  rL  r   )r„  r  r,  rq  )	r  rÝ   rK  rL  r7  r6  rp  r‚  rt  s	            rt   r@  Ú$MsWordDocumentBackend._add_list_itemF
  sm   € ö* ØˆIà"×9Ñ9Ø¨ð :ð 
Ñˆö Ø×"Ñ" 5Ô1Ø×1Ñ1°%Ó@‰KàˆKà×%Ñ%Ø˜;°Yô	
ð ˆrv   c               óŠ  • U R                  XUS9u  pxU(       a#  U R                  X#5        U R                  X#5      n	OSn	[        U R                  U   [
        5      (       d  [        R                  S5        U$ UR                  U	UU R                  U   SS9n
UR                  U
U R                  S9nU R                  UUUUS9  U$ )a<  Add a list item that contains inline equations.

This method handles list items with inline formulas by creating an inline_group
structure similar to how non-list paragraphs with equations are handled. The text
is split by equation markers, and alternating TEXT and FORMULA elements are added
as children of the inline_group.

Args:
    doc: The DoclingDocument being constructed.
    numid: The numbering ID from the DOCX paragraph properties.
    ilevel: The indentation level from the DOCX paragraph properties.
    text: The paragraph text with equation placeholders (e.g., "<eq>formula</eq>").
    equations: List of equation strings with markers (e.g., ["<eq>A=B</eq>", ...]).
    is_numbered: Whether this is a numbered list (True) or bulleted list (False).

Returns:
    List of references to created document elements.
r‡  r   rj  rm  r-  )rÝ   rc  rk  r5  )r„  r  r,  r+  rø   r   r¢  r²  rn  r.  r
  rD  )r  rÝ   rK  rL  rk  r5  r6  rp  r‚  rt  Ú	list_itemÚinline_groups               rt   r?  Ú3MsWordDocumentBackend._add_list_item_with_equationsm
  sê   € ð8 #×9Ñ9Ø¨ð :ð 
Ñˆö Ø×"Ñ" 5Ô1Ø×1Ñ1°%Ó@‰KàˆKä˜$Ÿ,™, yÑ1´9×=Ñ=Ü�L‰LØdôð ˆOà×%Ñ%ØØ"Ø—<‘< 	Ñ*Øð	 &ð 
ˆ	ð ×+Ñ+ØØ×,Ñ,ð ,ð 
ˆð
 	×,Ñ,ØØØØð	 	-ñ 	
ð ˆrv   c                ó¾  • UR                  [        R                  U UUS9nU H¦  nUR                  R	                  U5        UR                  U5      nUR                  R                  U5      nUR                  5       UR                  ;   a)  UR                  R                  UR                  5       5        UR                  5       Ul        M¨     UR                  5       n	U	$ )N)r—  r‹   rc  r
  )	r¤  r   ÚUNSPECIFIEDrG  rJ  rH  rc  ro  Úremove)
Ú
group_namerÝ   Úprovs_in_cellÚdocling_tabler
  Úgroup_elementÚprovÚpr_itemÚitem_parentÚref_for_rich_cells
             rt   Ú_group_cell_elementsÚ*MsWordDocumentBackend._group_cell_elements®
  sÂ   € ð Ÿ™Ü×(Ñ(ØØ Ø'ð	 &ð 
ˆó "ˆDØ×"Ñ"×)Ñ)¨$Ô/Ø—l‘l 3Ó'ˆGØ!Ÿ.™.×0Ñ0°Ó5ˆKØ�‰Ó  K×$8Ñ$8Ó8Ø×$Ñ$×+Ñ+¨G¯O©OÓ,=Ô>Ø*×2Ñ2Ó4ˆGŽNñ "ð *×1Ñ1Ó3ÐØ Ð rv   c                ó  • / n[        XR                  5      n[        UR                  5      n[        UR                  5      n[
        R                  SU SU S35        US:X  a^  US:X  aX  UR                  S   R                  S   nU R                  5         SU l	        U R                  UR                  U5        SU l	        U$ [        XVS9nU R                  5       n	UR                  X€R                  U	S-
     U R                   S9n
UR#                  U
R%                  5       5        0 n['        UR                  5       GH/  u  pÍUR(                  nUR*                  R,                   GH  nXæ:¼  a    M4  UR.                  nUR1                  U5      nUR2                  [4        R6                  :X  a2  Ub/  US-   Ul        UR8                  UR:                  -
  Ul        UU-  nMy  [?        Xô5      nU RA                  UR                  URB                  S
9u  nn[        U5      S:X  a  URB                  nO"URE                  SS5      RE                  SS5      n/ nS	nU RG                  U5      nU(       a8  U RI                  5          U R                  UR                  U5      u  nnS	S	S	5        [
        R                  SU SU SU 35        [        U5      S:”  a?  S[        URJ                  5       SU SU 3n[L        RO                  UUUU
U R                   S9nU(       a  Ub  [Q        USUUUS-   UUU-   US:H  SUS9
nO[S        USUUUS-   UUU-   US:H  SS9	nURU                  U
US9  UX¾'   UU-  nGM     GM2     U$ ! , (       d  f       Nß= f)ae  Convert a ``w:tbl`` element into a Docling table.

Cells are emitted in a single pass over the rows. A row may start late
(``w:gridBefore``) or end early (``w:gridAfter``), so a cell's position
within its row does not identify its layout-grid column; the grid column
is therefore tracked explicitly while walking the row. A cell with
``vMerge="continue"`` holds no content of its own and instead extends the
cell still open at the same grid column.

Args:
    element: The ``w:tbl`` element to convert.
    doc: The DoclingDocument being constructed.

Returns:
    References to the items created for this table.
zTable grid with z
 rows and z columnsr€   r   T)Únum_rowsÚnum_cols)Údatarc  r
  Nr3  r  Ú$r8  zTable cell Ú,z rich? Úrich_cell_group_rA  )r
  F)
rk  Úrow_spanÚcol_spanÚstart_row_offset_idxÚend_row_offset_idxÚstart_col_offset_idxÚend_col_offset_idxÚcolumn_headerÚ
row_headerÚref©	rk  r¡  r¢  r£  r¤  r¥  r¦  r§  r¨  )Ú
table_itemÚcell)+r@   r  rl   ÚrowsÚcolumnsr¢  r£  Úcellsrv  r  r;  rî  r   r`  Ú	add_tablerø   r
  rJ  ro  Ú	enumerateÚgrid_cols_beforeÚ_trÚtc_lstÚ	grid_spanrð  ÚvMerger;   ÚCONTINUEr¤  r£  r¡  rA   r*  rk  rm   Ú_is_rich_table_cellrƒ  Útablesr§   r˜  r   r   Úadd_table_cell)r  r<  rÝ   rp  rm  r›  rœ  Úcell_elementr�  r  r’  Ú
open_cellsÚrow_idxÚrowÚgrid_colÚtcr¢  Úspannedr¬  rk  r5  r‘  r—  Úrich_table_cellrA  r�  Únew_cells                              rt   r«  Ú$MsWordDocumentBackend._handle_tablesÆ
  s�  € ð* #%ˆÜ˜W§m¡mÓ4ˆÜ�u—z‘z“?ˆÜ�u—}‘}Ó%ˆÜ�
‰
Ð% h Z¨z¸(¸À8ÐLÔMà�q‹=˜X¨›]Ø Ÿ:™: a™=×.Ñ.¨qÑ1ˆLð ×(Ñ(Ô*ð *.ˆDÔ&Ø×Ñ˜l×3Ñ3°SÔ9Ø)-ˆDÔ&ØˆOä (Ñ>ˆØ—‘Ó!ˆØŸ™ØŸl™l¨5°1©9Ñ5ÀT×EWÑEWð &ð 
ˆð 	�‰˜×-Ñ-Ó/Ô0à+-ˆ
Ü% e§j¡j×1‰LˆGØ×+Ñ+ˆHØ—g‘g—n•n�ØÓ'ÚØŸ<™<�à$Ÿ.™.¨Ó2�Ø—9‘9¤× 1Ñ 1Ó1°gÑ6IØ18¸1±�GÔ.à×2Ñ2°W×5QÑ5QÑQð Ô$ð  Ñ(�HÙä˜RÓ'�ð #'×"@Ñ"@Ø ŸM™M°·	±	ð #Að #‘��iô �y“> QÓ&ØŸ9™9‘DàŸ<™<¨°Ó4×<Ñ<¸WÀcÓJ�Dà/1�Ø48Ð!Ø(,×(@Ñ(@ÀÓ(F�æ"Ø×4Ñ4Õ6Ø+/×+<Ñ+<¸T¿]¹]ÈCÓ+PÑ(˜˜=÷ 7ä—
‘
˜[¨¨	°°8°*¸GÀOÐCTÐUÔVô �}Ó%¨Ó)ð +¬3¨s¯z©z«?Ð*;¸1¸X¸JÀaÈÀyÐQð ô )>×(RÑ(RØ"ØØ%Ø%Ø&*×&8Ñ&8ð )Sð )Ð%ö #Ð'8Ñ'DÜ,Ø!Ø!"Ø!)Ø-4Ø+2°Q©;Ø-5Ø+3°hÑ+>Ø&-°¡lØ#(Ø-ñ ‘Hô  )Ø!Ø!"Ø!)Ø-4Ø+2°Q©;Ø-5Ø+3°hÑ+>Ø&-°¡lØ#(ñ
 �Hð ×"Ñ"¨mÀ(Ð"ÑKØ'/�
Ñ$Ø˜HÑ$“ôY %ñ 2ð^ ˆ÷_ 7Õ6ús   É8 M1Í1
M?c                ó�   • U H@  nU R                  U5      (       a    gUR                  S[        R                  S9(       d  M@    g   g)z›Check if a docx element holds any BLIP as a child.

Args:
    element: a docx element

Returns:
    Whether the element contains a BLIP as a direct child.
Tr†  rà   F)ró   r   r§   r¸   )r  r<  r·  s      rt   Ú	_has_blipÚMsWordDocumentBackend._has_blipF  sN   € ó ˆDØ×#Ñ# D×)Ñ)ÙØ�|‰|ØÔ+@×+QÑ+Qð ÷ ð ñ ñ ð rv   c                óÎ  • UR                   n[        UR                  U R                   S35      5      n[	        U5      S:”  a  gSS1nU H(  nUR
                  R                  S5      S   nXd;  d  M(    g   U R                  U5      (       a  gU Hs  n[        UR                  U R                   S35      5      nU HC  n	[        X�R                  5      n
U
c  M  [        R                  U
5      nU[        5       :w  d  MB      g   Mu     U(       aY  [        US   U R                  5      nUR                  R                  5       (       a!  U R!                  UR"                  5      (       a  gg	)
a•  Determine whether a docx cell should be parsed as a Docling RichTableCell.

A docx cell can hold rich content and be parsed with a Docling RichTableCell.
However, this requires walking through the lxml elements and creating
node items. If the cell holds only plain text, a TableCell, the parsing
is simpler and using a TableCell is prefered.

Plain text means:
- The cell has only one paragraph
- The paragraph consists solely of runs with no run properties
  (no need of Docling formatting).
- No other block-level elements are present inside the cell element.

Args:
    cell: A docx cell

Returns:
    Whether the docx cell should be parsed as RichTableCell
r›  r€   TÚtcPrr¬   râ   r°   r   F)Ú_tcrh  Úiterchildrenr­   rl   rý  rŠ   rÆ  rD   r  r§   r¤  r!   rC   rk  rl  rN  rñ  )r  r¬  rÀ  ró  Úallowed_tagsr³  rý  Úparar`  Úrnr·  ÚfmÚ
first_paras                rt   r¸  Ú)MsWordDocumentBackend._is_rich_table_cellZ  s<  € ð( �X‰Xˆô ˜"Ÿ/™/¨T×-=Ñ-=Ð,>¸aÐ*@ÓAÓBˆ
Üˆz‹?˜QÓØð ˜V�}ˆÛˆEØ—)‘)—/‘/ #Ó& rÑ*ˆCØÕ&Ùñ ð �>‰>˜"×ÑØó ˆDÜ˜×)Ñ)¨T×-=Ñ-=Ð,>¸aÐ*@ÓAÓBˆDÛ�Ü §M¡MÓ2�ØÓ#Ü.×CÑCÀDÓI�BØœZ›\Õ)Ú#ó ñ ö Ü" :¨a¡=°$·-±-Ó@ˆJØ�‰×$Ñ$×&Ñ&¨4×+>Ñ+>¸z×?OÑ?O×+PÑ+PØð rv   c                ó`  • SnUR                  U5      n[        U SU R                  R                  5      nU(       ar  XVR                  ;   ac  UR                  U   nUR
                  (       a+  [        R                  " SU SUR                   3[        SS9  gUR                  nUR                  nU$ )a!  Get image data from a relationship ID.

Args:
    element: The XML element containing the relationship reference
    rel_attr: The attribute name for the relationship ID
    image_type: Type of image for warning messages

Returns:
    Image data as bytes, or None if not found or external
Nr  zSkipping external z reference: r<  )Ú
stacklevel)rð  rÿ  r  r…   ÚrelsÚis_externalÚwarningsÚwarnÚ
target_refÚUserWarningÚtarget_partÚblob)	r  r<  Úrel_attrÚ
image_typeÚ
image_dataÚrIdÚactive_partÚrelÚ
image_parts	            rt   Ú_get_image_from_relationshipÚ2MsWordDocumentBackend._get_image_from_relationship’  s˜   € ð $(ˆ
Ø�k‰k˜(Ó#ˆÜ˜d N°D·M±M×4FÑ4FÓGˆÞ�3×*Ñ*Ó*Ø×"Ñ" 3Ñ'ˆCØ��Ü—’Ø(¨¨°LÀÇÁÐ@PÐQÜØ òð
 àŸ™ˆJØ#Ÿ™ˆJØÐrv   c                óú   • U(       a  [         R                  OU R                  nUb5  UR                  U[        R
                  " USS9SUS9nUR                  5       $ UR                  USUS9nUR                  5       $ )aV  Add a picture element to the document.

Args:
    doc: The DoclingDocument being constructed
    parent: Parent node for the picture
    pil_image: PIL Image object, or None for placeholder
    is_spacer: Flag indicating whether the parsed image is a layout spacer artifact to be excluded

Returns:
    Reference to the added picture element
NéH   ©ÚimageÚdpi©rc  rè  rk  r
  )rc  rk  r
  )r   Ú	INVISIBLEr
  Úadd_picturer   Úfrom_pilro  )r  rÝ   rc  rÛ  Ú	is_spacerÚtarget_layerr›  s          rt   Ú_add_picture_to_docÚ)MsWordDocumentBackend._add_picture_to_doc°  s…   € ö$ 2;”|×-Ò-À×@RÑ@RˆØÑ Ø—‘ØÜ×'Ò'¨i¸RÑ@ØØ*ð	  ð ˆAð �y‰y‹{Ðð —‘ØØØ*ð  ð ˆAð
 �y‰y‹{Ðrv   c                óà  • U R                   c%  U R                  SL a  [        5       U l         SU l        U R                   c  g U R                  U R                  U R
                  5      nUR                  R                  n[        U5       H  nUR                  U5        M     UR                  5       nUR                  5       n[        U[        5      (       a.  U H'  nUR                  R                  [        U5      5        M)     O¨Ub�  [        U[         5      (       a  U/nUn	U	b_  ["        R$                  " U	5      R&                  n
X¢;   a%  UR                  R                  [        U	5      5        OU	R)                  5       n	U	b  M_  U	c  gO$UR                  R                  [        U5      5        [+        X0R                   S9nU$ ! [,         a"  n[.        R1                  SU 35         SnAgSnAff = f)aû  Convert XML element(s) to image by rendering through DOCX->PDF->PNG.

This method creates a temporary DOCX with the specified element(s),
converts it to PDF using LibreOffice, then renders to PNG.

Args:
    elements: Single XML element or list of elements to convert
    element_tag: Tag name(s) to look for in parent hierarchy when processing a
        single element. If None, elements are added directly without searching
        for parent.

Returns:
    PIL Image object, or None if conversion failed
NFT)Ú	converterz$Element conversion via DOCX failed: )rý   rþ   r+   r  rè   ré   rî  r=  rh  r�  Úadd_paragraphÚadd_runr+  Ú_rrJ  r   rE  r#   rŒ  r�  rá  r,   rF  r¢  r£  )r  r7  Úelement_tagÚtemp_docr=  r³  Únew_paraÚnew_rr‘  Úparent_elemrý  rÛ  rG  s                rt   Ú_convert_elements_via_docxÚ0MsWordDocumentBackend._convert_elements_via_docxÒ  s³  € ð& ×&Ñ&Ñ.Ø×/Ñ/°5Ò8ä)BÓ)DˆDÔ&Ø.2ˆDÔ+à×%Ñ%Ñ-Øð*	à×,Ñ,¨T×-@Ñ-@À$×BTÑBTÓUˆHØ×$Ñ$×)Ñ)ˆDÜ˜dž�Ø—‘˜EÖ"ñ $ð  ×-Ñ-Ó/ˆHØ×$Ñ$Ó&ˆEô ˜(¤D×)Ñ)Û$�DØ—H‘H—O‘O¤H¨T£NÖ3ò %ð Ñ*Ü! +¬s×3Ñ3Ø'2 m˜à"*�KØ%Ñ1Ü#Ÿkšk¨+Ó6×@Ñ@˜ØÓ-Ø!ŸH™HŸO™O¬H°[Ó,AÔBØ!Ø&1×&;Ñ&;Ó&=˜ð &Ó1ð #Ñ*Ø#ð +ð —H‘H—O‘O¤H¨XÓ$6Ô7ô .Ø×$>Ñ$>ñˆIð ÐøÜó 	Ü�J‰JÐ=¸a¸SÐAÔBÜûð	ús%   ÁD?G ÆG Æ9G Ç
G-ÇG(Ç(G-c           
     óT  • / nU(       Gaf  U R                  5       n[        U5      S:X  a  U R                  US-
     O8UR                  [        R
                  U R                  US-
     U R                  S9nU Hö  nU R                  USS5      nSnUc  [        R                  S5        Oc [        U5      n	[        R                  " U	5      n[        5       n
UR                  U
SS9  U
R                  S	5        [        R                  " U
5      nUc/  Ub,  Ub)  [        R#                  S5        U R%                  USS/5      nU R'                  U5      nUR)                  U R+                  X%XŒS95        Mø     U$ ! [        [         4 a$  n[        R                  S
U 35        Sn SnAN—SnAff = f)z-Handle DrawingML pictures with blip elements.r€   ©r—  rc  r
  zJ{http://schemas.openxmlformats.org/officeDocument/2006/relationships}embedrè  NzWarning: image cannot be foundÚPNG©rì   r   z+Warning: image cannot be loaded by Pillow: zADirect PIL loading failed, trying DOCX conversion via LibreOfficeÚdrawingÚpict©rî  )r`  rl   rø   r¤  r   ÚPICTURE_AREAr
  rã  r¢  r²  r   r$   rx   Úsaver    r%   ÚOSErrorr£  rü  rÝ  rJ  rð  )r  rº  rÝ   rp  r  rc  rè  rÞ  rÛ  Úimage_bytesÚ
test_bytesrG  rî  s                rt   r­  Ú&MsWordDocumentBackend._handle_pictures  s®  € ð #%ˆßØ—O‘OÓ%ˆEô �|Ó$¨Ó)ð —‘˜U Q™YÒ'à—]‘]Ü$×1Ñ1ØŸ<™<¨°©	Ñ2Ø"&×"4Ñ"4ð #ð ð ó &�Ø!×>Ñ>ØØ`Øó�
ð
 15�	àÑ%Ü—L‘LÐ!AÕBð)Ü&-¨jÓ&9˜Ü$)§J¢J¨{Ó$;˜	ô &-£Y˜
Ø!Ÿ™ z¸%˜Ñ@Ø"Ÿ™¨Ô*Ü$)§J¢J¨zÓ$:˜	ð
 Ñ$¨Ñ):¸zÑ?UÜ—J‘JØ[ôð !%× ?Ñ ?Ø 	¨6Ð2ó!�Ið !×5Ñ5°iÓ@�	Ø—‘Ø×,Ñ,Ø Yð -ð öñC &ðN ˆøô' 3´GÐ<ó )ÜŸ™Ð'RÐSTÐRUÐ%VÔWØ$(�	ûð)ús   Â)A"E3Å3F'ÆF"Æ"F'c           
     ó`  • / nU(       Gaf  U R                  5       n[        U5      S:X  a  U R                  US-
     O8UR                  [        R
                  U R                  US-
     U R                  S9nU Hö  nU R                  USS5      nSnUc  [        R                  S5        O• [        U5      n	[        R                  " U	5      n[        5       n
UR                  U
SS9  U
R                  S	5        [        R                  " U
5      nUc/  Ub,  U R'                  USS/5      nUc  [        R                  S5        U R)                  U5      nUR+                  U R-                  X%XŒS95        Mø     U$ ! [        [         ["        4 a%  n[        R%                  S
U S35        Sn SnAN�SnAff = f)a1  Handle VML (Vector Markup Language) images.

VML images are legacy format images often used for embedded objects like Visio
drawings, charts, etc. They use v:imagedata elements instead of a:blip
elements.

For EMF/WMF formats that PIL cannot render, we use the same approach as
DrawingML: create a temporary DOCX with the VML element, convert to PDF via
LibreOffice, then render to PNG.

Args:
    vml_imagedatas: List of v:imagedata elements
    doc: The DoclingDocument being constructed

Returns:
    List of RefItem references to the added picture elements
r€   rÿ  zG{http://schemas.openxmlformats.org/officeDocument/2006/relationships}idz	VML imageNz"Warning: VML image cannot be foundr   r  r   zDirect PIL loading failed: z, trying DOCX conversionÚobjectr  zXWarning: VML image cannot be loaded. Install LibreOffice for better VML/EMF/WMF support.r  )r`  rl   rø   r¤  r   r  r
  rã  r¢  r²  r   r$   rx   r  r    r%   r  rF  r£  rü  rÝ  rJ  rð  )r  Úvml_imagedatasrÝ   rp  r  rc  Ú	imagedatarÞ  rÛ  r  r	  rG  rî  s                rt   r¯  Ú*MsWordDocumentBackend._handle_vml_picturesS  s·  € ð( #%ˆßØ—O‘OÓ%ˆEô �~Ó&¨!Ó+ð —‘˜U Q™YÒ'à—]‘]Ü$×1Ñ1ØŸ<™<¨°©	Ñ2Ø"&×"4Ñ"4ð #ð ð ó ,�	Ø!×>Ñ>ØØ]Øó�
ð
 15�	àÑ%Ü—L‘LÐ!EÕFð)Ü&-¨jÓ&9˜Ü$)§J¢J¨{Ó$;˜	Ü%,£Y˜
Ø!Ÿ™ z¸%˜Ñ@Ø"Ÿ™¨Ô*Ü$)§J¢J¨zÓ$:˜	ð !Ñ(¨ZÑ-CØ$(×$CÑ$CØ%¨°&Ð'9ó%˜	ð %Ñ,Ü ŸL™Lð!Vôð
 !×5Ñ5°iÓ@�	Ø—‘Ø×,Ñ,Ø Yð -ð öñG ,ðR ˆøô/ 3´G¼YÐGó )ÜŸ
™
Ø9¸!¸Ð<TÐUôð %)�	ûð	)ús   Â)A"E3Å3F-ÆF(Æ(F-c                ó8  • U R                  5       nU R                  US-
     n U R                  USS9nUc  [        eU R	                  U5      nU R                  XXVS9  g! [        [        4 a*    [        R                  S5        U R                  XS5         gf = f)az  Handle DrawingML elements by converting to image via DOCX->PDF->PNG.

Blip-less DrawingML shapes (e.g., SmartArt, WordprocessingML shapes) need
to be rendered through LibreOffice to extract as images. Native charts are
handled separately by the _handle_chart method.

Args:
    doc: The DoclingDocument being constructed
    drawingml_els: List of DrawingML elements to process
r€   N©r÷  r  z3Warning: DrawingML image cannot be loaded by Pillow)	r`  rø   rü  r%   rÝ  rð  r  r¢  r²  )r  rÝ   rž  r  rc  rÛ  rî  s          rt   r³  Ú'MsWordDocumentBackend._handle_drawingmlž  s§   € ð —‘Ó!ˆØ—‘˜e a™iÑ(ˆð
	8Ø×7Ñ7¸ÐSWÐ7ÐXˆIØÑ Ü,Ð,à×1Ñ1°)Ó<ˆIØ×$Ñ$ S°)Ð$ÑQð 	øô	 '¬Ð0ó 	8Ü�L‰LÐNÔOØ×$Ñ$ S°$Õ7àð		8ús   ¤:A Á7BÂBc                ó:   • UR                  SU R                  S9SL$ )zÖReturn True when a ``w:drawing`` embeds a native chart.

A charted drawing holds a graphic frame whose ``c:chart`` element
references a ``word/charts/chartN.xml`` part (rather than an ``a:blip``
image or a shape).
ú
.//c:chartrà   N)r¬  r¸   )r  Ú
drawing_els     rt   r°  Ú'MsWordDocumentBackend._is_chart_drawingº  s%   € ð �O‰O˜L°T×5JÑ5JˆOÐKÐSWÐWð	
rv   c                óÎ  • UR                  SU R                  S9nUc  gUR                  SU R                  S    S35      nU(       d  g U R                  R                  R
                  U   n [        R                  " UR                  [        S9$ ! [         a    [        R                  SU5         gf = f! [        R                   a    [        R                  S	U5         gf = f)
a+  Resolve a charted ``w:drawing`` to the root of its chart part.

The drawing's ``c:chart@r:id`` is a relationship into the main document
part; we follow it to the ``chartN.xml`` payload and parse it with the
hardened XML parser. Returns None when the relationship or payload is
missing or malformed.
r  rà   Nr«   r°   z}idz0chart relationship %r not found in document part)Úparserz.could not parse chart part for relationship %r)r¬  r¸   rð  r  r…   Úrelated_partsrz   r¢  r£  r#   Ú
fromstringrÛ  rI   ÚXMLSyntaxError)r  r  rÏ  Úridr…   s        rt   Ú_resolve_chart_rootÚ)MsWordDocumentBackend._resolve_chart_rootÅ  sÕ   € ð —O‘O L¸T×=RÑ=R�OÐSˆ	ØÑØØ�m‰m˜b ×!6Ñ!6°sÑ!;Ð <¸DÐAÓBˆÞØð	Ø—=‘=×%Ñ%×3Ñ3°CÑ8ˆDð	Ü×#Ò# D§I¡IÔ6FÑGÐGøô	 ó 	Ü�J‰JÐIÈ3ÔOÙð	ûô
 ×#Ñ#ó 	Ü�J‰JÐGÈÔMÙð	ús$   Á
#B Á."B7 Â B4Â3B4Â7*C$Ã#C$c                óâ   • UR                  SU R                  S9nUbC  U H=  n[        R                  [        R
                  " U5      R                  5      nUc  M;  Us  $    [        R                  $ )zðClassify a chart from the first plot element under ``c:plotArea``.

The plot element name (``barChart``, ``lineChart``, ``pieChart``, ...) is
mapped to a docling classification label; unknown or combination charts
fall back to OTHER_CHART.
z.//c:plotArearà   )	r¬  r¸   rT   rð  r#   rŒ  r�  r   ÚOTHER_CHART)r  Ú
chart_rootÚ	plot_arear³  r—  s        rt   Ú_classify_chartÚ%MsWordDocumentBackend._classify_chartÞ  si   € ð —O‘O OÀ×@UÑ@U�OÐVˆ	ØÑ Û"�Ü8×<Ñ<Ü—K’K Ó&×0Ñ0ó�ð Ó$Ø ’Lñ #ô *×5Ñ5Ð5rv   c                óº   • U c  g [        U 5      nUR                  5       (       a  [	        [        U5      5      $ [	        U5      $ ! [        [        4 a    U s $ f = f)a  Format a cached chart value as cell text.

Numeric cache values (``c:numCache``) round-trip through float so they
read like the source data (``"4.4000000000000004"`` -> ``"4.4"``,
``"2"`` -> ``"2"``). Non-numeric labels are returned unchanged; None
becomes an empty string.
r   )rð  rË  rá  Ú
is_integerrE  rà  )rö  Únumbers     rt   Ú_chart_cell_textÚ&MsWordDocumentBackend._chart_cell_textï  s_   € ð ‰=Øð	Ü˜5“\ˆFð ×Ñ×ÑÜ”s˜6“{Ó#Ð#Ü�6‹{Ðøô	 œ:Ð&ó 	ØŠLð	ús   †A ÁAÁAc                óÔ  • Uc  / $ U R                   nSnS H  nUR                  SU 3US9nUc  M    O   Uc  / $ 0 nUR                  SUS9 HQ  n [        UR	                  SS5      5      nUR                  SUS9nU R                  Ub  UR                  OS5      XW'   MS     U(       d  / $ S	n	UR                  S
US9n
U
b1  U
R	                  S5      (       a   [        U
R	                  S5      5      n	[        U	/U Vs/ s H  owS-   PM	     sn-   5      n[        U5       Vs/ s H  ouR	                  US5      PM     sn$ ! [
         a     Mþ  f = f! [
         a    S	n	 Nlf = fs  snf s  snf )a  Read the cached ``c:pt`` values under a chart data source.

Handles both cached references (``c:numCache``/``c:strCache``) and inline
literals (``c:numLit``/``c:strLit``). Points are indexed by ``@idx`` and
gaps are filled with empty strings so every series aligns to the same rows.
N)ÚnumCacheÚstrCacheÚnumLitÚstrLitz.//c:rà   zc:ptÚidxrþ  úc:vr   z	c:ptCountrß   r€   r   )
r¸   r¬  r   rà  rð  rá  r(  rk  r^  r   )r  r²  rþ  Úcacherý  ÚpointsÚptr/  rö  ÚcountÚcount_elÚlengths               rt   Ú_read_chart_cacheÚ'MsWordDocumentBackend._read_chart_cache  s�  € ð ‰<ØˆIØ×"Ñ"ˆØˆÛ?ˆCØ—I‘I  c U˜m¸�IÐ;ˆEØÓ Ùñ @ð ‰=ØˆIà!#ˆØ—-‘- °2�-Ó6ˆBðÜ˜"Ÿ&™& ¨Ó,Ó-�ð —G‘G˜E¨b�GÐ1ˆEØ×/Ñ/Ø#Ñ/�—
’
°TóˆF‹Kñ 7ö ØˆIàˆØ—:‘:˜k°b�:Ð9ˆØÑ H§L¡L°×$7Ñ$7ðÜ˜HŸL™L¨Ó/Ó0�ô �e�W±6Ó:²6¨C a¤±6Ñ:Ñ:Ó;ˆÜ/4°V¬}Ó=ª}¨—
‘
˜3 Ö#©}Ñ=Ð=øô# ó Úðûô ó Ø’ðüâ:ùÚ=s0   ÁD=ÃE Ã;E 
ÄE%Ä=
EÅ
EÅEÅEc                óì   • UR                  SU R                  S9nUc  gU R                  U5      nU(       a  US   $ UR                  SU R                  S9nUb  U R                  UR                  5      $ S$ )zFReturn a chart series' name from its ``c:tx`` (cached ref or literal).zc:txrà   r   r   r0  )r¬  r¸   r7  r(  rk  )r  ÚseriesÚtxÚcachedÚliterals        rt   Ú_chart_series_nameÚ(MsWordDocumentBackend._chart_series_name+  sv   € à�[‰[˜¨D×,AÑ,Aˆ[ÐBˆØ‰:ØØ×'Ñ'¨Ó+ˆÞØ˜!‘9ÐØ—'‘'˜%¨D×,AÑ,A�'ÐBˆØ6=Ñ6Iˆt×$Ñ$ W§\¡\Ó2ÐQÈrÐQrv   c                ó¨  • U R                   nUR                  SUS9nUc  gUR                  SUS9nUc  gUR                  SUS9 Vs/ s H!  oUR                  (       d  M  UR                  PM#     nnSR	                  U5      R                  5       nU(       d-  U R                  U5      nU(       a  US   R                  5       OSnU=(       d    S$ s  snf )zÏExtract the chart's title text, or None when it has no title.

A chart title is DrawingML rich text (``a:t`` runs) under ``c:chart/
c:title``; some charts instead reference a cell, cached in a ``c:strRef``.
zc:chartrà   Nzc:titlez.//a:tr   r   )r¸   r¬  r   rk  r¡  rl  r7  )	r  r!  rþ  Úchartrˆ  rÁ  r`  rk  r<  s	            rt   Ú_chart_title_textÚ'MsWordDocumentBackend._chart_title_text6  s½   € ð ×"Ñ"ˆØ—‘ 	°b�Ð9ˆØ‰=ØØ—
‘
˜9°�
Ð4ˆØ‰=ØØ %§¡¨hÀ2 Ñ FÓQÒ F˜1Ï&Í&“�—”Ñ FˆÐQØ�w‰w�t‹}×"Ñ"Ó$ˆÞØ×+Ñ+¨EÓ2ˆFÞ(.�6˜!‘9—?‘?Ô$°BˆDØ�|�tÐùò Rs   ÁCÁCc                óX  • U R                   nUR                  SUS9nU(       d  g/ nU HB  nUR                  SUS9nUc  UR                  SUS9nU R                  U5      nU(       d  M@  Un  O   / nU HY  nUR                  SUS9n	U	c  UR                  SUS9n	U R                  U	5      n
UR	                  U R                  U5      U
45        M[     [        [        U5      /U VV
s/ s H  u  pº[        U
5      PM     sn
n-   5      nUS:X  a  gUS	-   nS	[        U5      -   n/ nS
/U VVs/ s H  u  nnUPM
     snn-   n[        U5       H)  u  nnUR	                  [        US	S	SS	UUS	-   SSS9	5        M+     [        U5       H‹  nUS	-   nU[        U5      :  a  UU   OS
nU/U VV
s/ s H  u  pºU[        U
5      :  a  U
U   OS
PM     sn
n-   n[        U5       H/  u  nnUR	                  [        US	S	UUS	-   UUS	-   SUS:H  S9	5        M1     M�     [        XÞUS9$ s  sn
nf s  snnf s  sn
nf )aš  Reconstruct a chart's underlying data grid as a TableData.

Layout produced (categories down the first column, one column per series):

    | <blank> | <series 0 name> | <series 1 name> | ...
    | cat_0   | val_0,0         | val_1,0         | ...
    | cat_1   | val_0,1         | val_1,1         | ...

The plotted numbers and labels come from each series' inline cache
(``c:numCache``/``c:strCache``), so no workbook reference resolution is
needed. Scatter charts use ``c:xVal``/``c:yVal`` in place of ``c:cat``/
``c:val``.

Args:
    chart_root: The parsed root of a ``chartN.xml`` part.

Returns:
    A TableData, or None if the chart exposes no usable series.
z.//c:serrà   Nzc:catzc:xValzc:valzc:yValr   r€   r   TFrª  )r›  rœ  Útable_cells)r¸   r   r¬  r7  rJ  r>  r^  rl   r±  r   r   r   )r  r!  rþ  Úseries_listÚ
categoriesr:  ÚcatÚresolvedr®  rß   rñ  rA  Únum_data_rowsr›  rœ  r¯  r‹   Úheader_labelsÚcol_idxr—  Údata_rowr½  ÚcategoryÚ	row_textsrk  s                            rt   Ú_chart_to_table_dataÚ*MsWordDocumentBackend._chart_to_table_dataJ  s~  € ð( ×"Ñ"ˆØ ×(Ñ(¨ÀÐ(ÐCˆÞØà "ˆ
Û!ˆFØ—+‘+˜g°"�+Ð5ˆCØ‰{Ø—k‘k (°r�kÐ:�Ø×-Ñ-¨cÓ2ˆHßˆxØ%�
Ùñ "ð 02ˆÛ!ˆFØ—+‘+˜g°"�+Ð5ˆCØ‰{Ø—k‘k (°r�kÐ:�Ø×+Ñ+¨CÓ0ˆFØ�N‰N˜D×3Ñ3°FÓ;¸VÐDÖEñ "ô œS ›_Ð-ÉgÔ0VÊgÁÀ´°V¶ÉgÒ0VÑVÓWˆØ˜AÓØà  1Ñ$ˆØ”s˜7“|Ñ#ˆØ!#ˆà˜±GÔ<²G©¨¨q£±GÒ<Ñ<ˆÜ'¨Ö6‰NˆG�UØ�L‰LÜØØØØ)*Ø'(Ø)0Ø'.°¡{Ø"&Ø$ñ
öñ 7ô ˜mÖ,ˆHØ ‘lˆGØ/7¼#¸j»/Ó/I�z (Ò+ÈrˆHØ!˜
á!(ô&â!(‘I�Að &.´°F³Ó%;�˜Ò!ÀÒCÙ!(ò&ñ ˆIô "+¨9Ö!5‘�˜Ø—‘ÜØ!Ø!"Ø!"Ø-4Ø+2°Q©;Ø-4Ø+2°Q©;Ø&+Ø$+¨q¡Lñ
öó "6ñ -ô,  (È5ÑQÐQùó[ 1Wùó  =ùó$&s   Ã%HÄ)H Æ&"H&
c                ó�   • U R                  U/SS9nUc1  U R                  (       a   [        R                  [        5        SU l        U$ )a	  Render a charted drawing to an image via LibreOffice.

Reuses the shared DOCX->PDF->PNG path, isolating just the chart drawing.
Returns None (and warns once) when LibreOffice is unavailable or the
render fails, so the chart still keeps its classification and data.
Nr  F)rü  rÿ   r¢  r²  Ú_CHART_RENDER_HINT)r  r  rè  s      rt   Ú_render_chart_imageÚ)MsWordDocumentBackend._render_chart_image¤  sB   € ð ×/Ñ/°°È$Ð/ÐOˆØ‰=˜T×;×;Ü�L‰LÔ+Ô,Ø-2ˆDÔ*Øˆrv   c                óÈ  • U R                  5       nU R                  US-
     nU R                  U5      nSnSnSnUb3  U R                  U5      nU R	                  U5      nU R                  U5      n[        U R                  [        5      =(       a    U R                  R                  n	Sn
U	(       a)  U R                  U5      nUb  [        R                  " USS9n
U(       a)  UR                  [        R                  UU R                   S9OSnUR#                  UU
UU R                   S9nUb*  [%        ['        [)        US9/S9Ub	  [+        US	9OSS
9Ul        UR/                  5       $ )uÆ  Add a native chart drawing as a classified PictureItem with its data.

The chart becomes a PictureItem whose meta carries (a) the chart-type
classification and (b) the chart's plotted numbers reconstructed as a
TableData â€” both derived from the chart part without LibreOffice. The
chart title, if any, becomes the picture caption. When
``render_chart_images`` is enabled and LibreOffice is available, a
rendered image is attached; on any failure the picture keeps its
classification and data without an image.

Args:
    doc: The DoclingDocument being constructed.
    chart_el: The ``w:drawing`` element embedding the chart.

Returns:
    A reference to the added picture, or None if it could not be added.
r€   Nræ  rç  )r—  rk  r
  rê  )Ú
class_name)Úpredictions)Ú
chart_data)ÚclassificationÚtabular_chart)r`  rø   r  r#  rP  rB  r+  r  r.   Úrender_chart_imagesrT  r   rí  r¦  r   ÚCAPTIONr
  rì  r   r   r   r   Úmetaro  )r  rÝ   rœ  r  rc  r!  rZ  Ú
table_dataÚcaption_textÚrender_chartsÚ	image_refÚchart_imageÚcaption_itemÚpictures                 rt   r±  Ú#MsWordDocumentBackend._handle_chart±  s|  € ð$ —‘Ó!ˆØ—‘˜e a™iÑ(ˆà×-Ñ-¨hÓ7ˆ
Ø<@ˆØ'+ˆ
Ø#'ˆØÑ!Ø!×1Ñ1°*Ó=ˆNØ×2Ñ2°:Ó>ˆJØ×1Ñ1°*Ó=ˆLô �t—|‘|Ô%9Ó:÷ 1Ø—‘×0Ñ0ð 	ð ˆ	ÞØ×2Ñ2°8Ó<ˆKØÑ&Ü$×-Ò-°KÀRÑH�	ö ð �L‰LÜ"×*Ñ*Ø!Ø"×0Ñ0ð ñ ð ð 	ð —/‘/ØØØ Ø×,Ñ,ð	 "ð 
ˆð Ñ%Ü&Ü=ä7À>ÑRð!ñ ð "Ñ-ô *°ZÒ@àñˆGŒLð �‰Ó Ð rv   c                ó@  ^ ^^^	• T R                   n[        T R                  5      nT R                  n[        R
                  T l         [        R                  " ST R                  S9m	[        5       mS	UUU U	4S jjnUR                   Hq  nUR                  (       a  U" UR                  S5        U" UR                  S5        UR                  (       a  U" UR                  S5        U" UR                  S5        Ms     ST l        ST l        UT l         UT l        UT l        g)
aŽ  Add section headers and footers.

Headers and footers are added in the furniture content and only the text paragraphs
are parsed. The paragraphs are attached to a single group item for the header or the
footer. Every section is visited; a header/footer definition that is inherited
("linked to previous") from an already-emitted section is skipped so it is not
duplicated. Sections with different_first_page_header_footer contribute both their
first-page and their regular header/footer, since both are actually used.

Args:
    docx_obj: A docx Document object to be parsed.
    doc: A DoclingDocument object to add the header and footer from docx_obj.
z?.//w:txbxContent|.//v:textbox//w:p|.//wps:txbx//w:p|.//a:p//a:trà   c                ó  >• U R                   n[        UR                  5      nUT;   a  g TR                  U5        S U R                   5        Vs/ s H  oD(       d  M  UPM     nnU R
                  nTR                  U R                  5      n[        T" U R                  5      5      S:„  nU(       d  U(       d  U(       d  U(       d  g [        STR                  5       H  n	S TR                  U	'   M     STl        T
R                  [        R                  UTR                   S9TR                  S'   STl        STl        UTl        TR)                  U R                  T
5        TR*                  R                   Tl        g s  snf )Nc              3  óT   #   • U  H  oR                   R                  5       v •  M      g 7fr!  )rk  rl  )r„   r›  s     rt   r†   ÚVMsWordDocumentBackend._add_header_footer.<locals>._add_hdr_ftr_part.<locals>.<genexpr>  s   é € Ð"Kº?°a§6¡6§<¡<§> >º?ùs   ‚&(r   râ   ©r—  r‹   r
  T)r…   rE  r  r¨  ró  r¹  rÆ  rî  rl   r   rö   rø   r  r¤  r   r¥  r
  r  r  r  r;  r  )r…   r‹   Úresolved_partr  ÚtxtÚparr¹  Úhas_blipÚhas_txbxr  rÝ   Úemitted_partnamesr  r¼  s             €€€€rt   Ú_add_hdr_ftr_partÚCMsWordDocumentBackend._add_header_footer.<locals>._add_hdr_ftr_part  s7  ø€ Ø ŸI™IˆMÜ˜=×1Ñ1Ó2ˆHØÐ,Ó,ØØ×!Ñ! (Ô+á"K¸4¿?º?Ô"KÓSÒ"K˜3Ës—3Ñ"KˆCÐSØ—[‘[ˆFØ—~‘~ d§m¡mÓ4ˆHÜ™: d§m¡mÓ4Ó5¸Ñ9ˆHæž6¦X¶Øô ˜2˜tŸ™Ö/�Ø"&�—‘˜Q“ñ 0àˆDŒJà!Ÿm™mÜ ×(Ñ(ØØ"×0Ñ0ð ,ð ˆD�L‰L˜‰Oð *.ˆDÔ&Ø-.ˆDÔ*Ø -ˆDÔØ×Ñ˜dŸm™m¨SÔ1Ø $§¡× 2Ñ 2ˆDÕùò7 Ts   Á
E>ÁE>zpage headerzpage footerTr   N)r‹   rE  ÚreturnÚNone)r
  Údictrø   r  r   ro  r#   rò   r¸   rû   ÚsectionsÚ"different_first_page_header_footerÚfirst_page_headerÚheaderÚfirst_page_footerÚfooterr  r  )
r  r  rÝ   Úcurrent_layerÚbase_parentsÚ
base_levelrr  Úsectionrq  r¼  s
   ` `     @@rt   r>  Ú(MsWordDocumentBackend._add_header_footer÷  sì   û€ ð ×*Ñ*ˆÜ˜DŸL™LÓ)ˆØ—Z‘Zˆ
Ü)×3Ñ3ˆÔä—[’[ØMØ×,Ñ,ñ
ˆ
ô '*£eÐ÷"	3ò "	3ðH  ×(Ô(ˆGØ×9×9Ù! '×";Ñ";¸]ÔKÙ˜gŸn™n¨mÔ<à×9×9Ù! '×";Ñ";¸]ÔKÙ˜gŸn™n¨mÖ<ñ )ð &*ˆÔ"Ø)*ˆÔ&Ø*ˆÔØ#ˆŒØˆ�
rv   c           	     ód  • [        UR                  5      S:X  a  gUR                   GHT  n/ nUR                  (       aD  SUR                   3nUR                  (       a  USUR                   S3-  nUR	                  U5        UR
                  (       a+  UR	                  SUR
                  R                  SS9 35        S	R                  U5      nUR                  (       a  UR                  R                  5       OS
nU(       a  U(       a	  SU SU 3nOU(       a  SU S3nOU(       a  UnOGM  / n	[        UR                  5      n
U R                  R                  5        H]  u  p¼X¬;   d  M  X°R                  ;   d  M  U R                  U    H-  n UR                  U5      nXé;  a  U	R	                  U5        M-  M/     M_     UR'                  [(        R*                  SU
 3[,        R.                  S9nUR1                  USUS9  U	(       aN  [3        UR4                  S9nU	 H5  n[7        U[8        5      (       d  M  UR                  R	                  U5        M7     ["        R%                  SU
 S[        U	5       S35        GMW     g! [          a$  n["        R%                  SU 35         SnAGM  SnAff = f)ag  Add document comments (reviewer annotations) and link to annotated items.

Comments are added in the NOTES content layer using the add_comment API.
Comments are linked to their annotated text items via the comments field
(FineRef references).

The comment text format is:
    [author: Name (initials), time: ISO-timestamp]: comment text

Examples:
    [author: Jane Editor (JE), time: 2026-01-04T05:48:07.000+00:00]: Review this.
    [author: John Doe]: Simple comment without timestamp.

Args:
    docx_obj: A docx Document object to be parsed.
    doc: A DoclingDocument object to add the comments from docx_obj.
r   Nzauthor: z (Ú)ztime: Úmilliseconds)Útimespecz, r   Ú[z]: Ú]zError resolving item ref: zcomment-rk  )rk  Útargetsrc  )ÚcrefzAdded comment z in group with z linked item(s))rl   ÚcommentsÚauthorÚinitialsrJ  Ú	timestampÚ	isoformatr¡  rk  rl  rE  Ú
comment_idr  r^  r  rH  rF  r¢  r£  r¤  r   ÚCOMMENT_SECTIONr   ÚNOTESÚadd_commentr    Úself_refr+  r   )r  r  rÝ   ÚcommentÚmetadata_partsÚ
author_strÚmetadata_prefixÚcomment_textÚ	full_textrˆ  r�  Úpara_idrI  Úitem_refr·  rG  Úcomment_groupÚ	group_refr¢   s                      rt   r?  Ú#MsWordDocumentBackend._add_commentsC  sz  € ô& ˆx× Ñ Ó! QÓ&Øð  ×(Õ(ˆGàˆNØ�~�~Ø'¨¯©Ð'7Ð8�
Ø×#×#Ø B w×'7Ñ'7Ð&8¸Ð":Ñ:�JØ×%Ñ% jÔ1Ø× × Ø×%Ñ%Ø˜W×.Ñ.×8Ñ8À.Ð8ÐQÐRÐSôð #Ÿi™i¨Ó7ˆOØ3:·<·<˜7Ÿ<™<×-Ñ-Ô/ÀRˆLæ¦<Ø Ð0°°L°>ÐB‘	Þ Ø Ð0°Ð2‘	ÞØ(‘	ò ð "$ˆGÜ˜W×/Ñ/Ó0ˆJð )-×(BÑ(B×(HÑ(HÖ(JÑ$�ØÕ,à×"9Ñ"9Õ9Ø(,×(?Ñ(?ÀÔ(H˜HðMØ'/×'7Ñ'7¸Ó'< Ø#'Ó#6Ø$+§N¡N°4Ö$8ñ $7ó )Iñ	 )Kð  ŸM™MÜ ×0Ñ0Ø 
˜|Ð,Ü*×0Ñ0ð *ð ˆMð �O‰OØØØ$ð ñ ö Ü#¨×)?Ñ)?Ñ@�	Û%�Fô " &¬'×2Ó2ØŸ™×.Ñ.¨yÖ9ñ	 &ô �J‰JØ   ¨O¼CÀ»L¸>ÈÐY÷òE )øôP $-ó MÜ $§
¡
Ð-GÈÀsÐ+K× LÓ LûðMús   Æ'JÊ
J/	ÊJ*	Ê*J/	c                ó¼  • U R                   (       d  gSS0n U R                   R                  R                  nUR                  SU5       Hà  nUnUR                  SU5      nUR                  SU5      n[	        5       nU H.  nUR                  S5      n	U	(       d  M  UR                  U	5        M0     U H.  n
U
R                  S5      n	U	(       d  M  UR                  U	5        M0     U(       d  M¤  [        U5      U R                  U'   [        R                  S[        U5       S	U 35        Mâ     g! [         a"  n[        R                  S
U 35         SnAgSnAff = f)zÄExtract comment range markers from the document.

Parses the DOCX XML to find commentRangeStart and commentRangeEnd markers
and builds a map of paragraph elements to their associated comment IDs.
Nr�   r©   r  ú.//w:commentRangeStartú.//w:commentRangeEndú@{http://schemas.openxmlformats.org/wordprocessingml/2006/main}idzFound z comment(s) for paragraph z!Error extracting comment ranges: )r  r<  r=  r   rû   rð  r¨  rh  r  r¢  r£  rl   rF  )r  rá   r=  ró  rš  Úcomment_startsÚcomment_endsrI  Ústart_markerr�  Ú
end_markerrG  s               rt   r  Ú-MsWordDocumentBackend._extract_comment_ranges   sN  € ð �}�}Øð ÐOð
ˆ
ð#	@à—=‘=×(Ñ(×-Ñ-ˆDØ!Ÿ\™\¨(°JÖ?�	Ø#�ð "+×!2Ñ!2Ð3KÈZÓ!X�Ø(×0Ñ0Ð1GÈÓT�ô "›e�ã$2�LØ!-×!1Ñ!1ØZó"�J÷ "�zØ#Ÿ™¨
Ö3ñ %3ó #/�JØ!+§¡ØZó"�J÷ "�zØ#Ÿ™¨
Ö3ñ #/÷ �;Ü:>¸{Ó:K�D×.Ñ.¨wÑ7Ü—J‘JØ ¤ [Ó!1Ð 2Ð2LÈWÈIÐVöò7 @øô> ó 	@Ü�J‰JÐ:¸1¸#Ð>×?Ñ?ûð	@ús+   ˜B D/ Â0D/ ÃD/ Ã.A D/ Ä/
EÄ9EÅEc                óº  • SS0n[        5       nUR                  SU5       H.  nUR                  S5      nU(       d  M  UR                  U5        M0     UR                  SU5       H.  nUR                  S5      nU(       d  M  UR                  U5        M0     UR                  SU5       H.  nUR                  S5      nU(       d  M  UR                  U5        M0     U$ )z>Return the set of comment IDs attached to a paragraph element.r�   r©   r   r¢  r¡  z.//w:commentReference)rû   r   rð  r¨  )r  r<  rá   rI  rk  r�  s         rt   r>  Ú2MsWordDocumentBackend._get_comment_ids_for_elementÓ  s×   € ð ÐOð
ˆ
ô !$£ˆà—o‘oÐ&>À
ÖKˆFØŸ™ØRóˆJ÷ ˆzØ—‘ 
Ö+ñ Lð —o‘oÐ&<¸jÖIˆFØŸ™ØRóˆJ÷ ˆzØ—‘ 
Ö+ñ Jð —o‘oÐ&=¸zÖJˆFØŸ™ØRóˆJ÷ ˆzØ—‘ 
Ö+ñ Kð Ðrv   )"rð   r  r  r  r  ró   r  r
  r  rÿ   r  rý   rþ   rú   r  r  r  r  r  r  r÷   r  r  rö   rù   r  r  rø   rè   rü   r  rõ   rô   rñ   r!  )r  r0   rè   úBytesIO | Pathr  zMsWordBackendOptions | Nonert  ru  )rt  r6   )rt  zset[InputFormat])rt  r   )rè   rª  ré   rE  rt  ÚDocxDocument)r‹   rE  r  ú
int | NonerK  r¬  rL  r¬  )rt  ú
str | None)rt  r¬  )rt  rà  )rK  rà  rc  úNodeItem | Nonert  r6   )
rÝ   r   rK  rà  rc  r®  rp  úlist[RefItem]rt  r   )rt  ru  )rk  rE  rt  ru  )r=  r=   rÝ   r   rt  z%tuple[DoclingDocument, list[RefItem]])rÛ  úImage.Image | Nonert  r6   )r   )râ  r­  r  r¬  rt  r¬  )ré  rE  rt  ú	list[str])ró  rC   rt  ztuple[int | None, int | None])rñ  úParagraphStyle | Nonert  ztuple[str | None, str | None])rK  rà  rø  rà  rt  zBaseOxmlElement | None)rK  rà  rø  rà  rt  rà  )rK  rà  )rK  rà  rø  rà  rt  rE  )r÷  rà  rø  rà  rt  r6   )ró  rC   rt  r6   )rñ  r²  rt  r¬  )rA  rE  rt  útuple[str, int | None])rÝ   r   rc  r®  rt  r®  )rñ  r²  rt  r6   )rñ  r²  rt  rE  )ró  rC   r]  rE  rt  ztuple[int, int])ró  rC   rñ  r²  rt  r6   )ró  rC   rt  r³  )rŠ  r­  rt  r6   )r_  rD   ró  zParagraph | Nonert  zFormatting | None)r©  rB   rt  zAnyUrl | Path | None)ró  rC   rt  z9list[tuple[str, Formatting | None, AnyUrl | Path | None]])ró  rC   rt  rE  )ró  rC   )r<  r=   rt  r6   )r<  r=   rt  zDocItemLabel | None)rk  rE  rt  rE  )r½  zlist[etree._Element]rt  zDdict[etree._Element | None, list[tuple[etree._Element, int | None]]])r½  rh  rÝ   r   rt  r¯  )rÝ   r   r/  r®  rÂ  rh  rt  r®  )F)r<  r=   rÝ   r   rŸ  r6   rt  r¯  )
rÝ   r   r`  r¬  rk  rE  rO  r6   rt  r¯  )rÝ   r   r7  rh  rk  rE  rl  r6   r  rà  rt  r¯  )rÝ   r   r7  rh  rK  rà  rL  rà  r6  r6   r  rà  rt  ru  )rÝ   r   rc  r   rk  rE  r5  r±  rp  zlist[RefItem] | Nonert  ru  )rÝ   r   rK  rà  rL  rà  rt  ztuple[list[RefItem], int])rÝ   r   rK  rà  rL  rà  r7  rh  r6  r6   rt  r¯  )rÝ   r   rK  rà  rL  rà  rk  rE  r5  r±  r6  r6   rt  r¯  )r�  rE  rÝ   r   r‘  r¯  r’  r   r
  r   rt  r   )r<  r=   rÝ   r   rt  r¯  )r¬  rA   rt  r6   )rè  )r<  r   rÜ  rE  rÝ  rE  rt  zbytes | None)
rÝ   r   rc  r®  rÛ  r°  rî  r6   rt  r   )r7  zAny | list[Any]r÷  zstr | list[str] | Nonert  r°  )rº  r   rÝ   r   rt  r¯  )r  r   rÝ   r   rt  r¯  )rÝ   r   rž  r   )r  r   rt  r6   )r  r   rt  ú
Any | None)r!  r   rt  r   )rö  r­  rt  rE  )r²  r´  rt  r±  )r:  r   rt  rE  )r!  r   rt  r­  )r!  r   rt  zTableData | None)r  r   rt  r°  )rÝ   r   rœ  r   rt  zRefItem | None)r  r«  rÝ   r   rt  ru  )r<  r=   rt  zset[str])uÚ__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rª   Ú__annotations__r­   r¸   rº   Ú	frozensetrÃ   rÊ   rÌ   r×   rØ   rÙ   ræ  ÚcompilerÚ   Ú	MULTILINErÛ   r(   rï   r#  Úclassmethodr(  r-  r1  rB  Ústaticmethodr  rM  rQ  rT  rX  r[  r`  rd  rs  rv  ry  r   rƒ  r;  rÝ  rã  rë  rù  rò  r  r  r  r  r,  r1  r4  r9  rD  rJ  rN  rT  rZ  rd  ry  r„  r  r¤  rª  r¸  r¿  rÅ  rÍ  rÔ  rÙ  rÞ  rù  r  r©  r*  r0  r®  rB  rq  ru  rD  r„  r@  r?  r   r	  r˜  r«  rÆ  r¸  rã  rð  rü  r­  r¯  r³  r°  r  r#  r(  r7  r>  rB  rP  rT  r±  r>  r?  r  r>  Ú__static_attributes__Ú__classcell__)r  s   @rt   r§   r§   ÷   s¢  ø‡ ñð" W€Eˆ:ÓVØ " 5 '¨˜n€K�Ó,ð EØEØRØØVØKØ,ØRØ6ØFØEñÐ�eó ð /1Ð Ó0ØOá/8ò		
ó0ÐÐ,ó ðñ .7ò
	
ó.€OÐ*ó ðð 02Ð  *Ó1ØVá.7ò	
ó/ÐÐ+ó ðð +.Ð˜<Ó-Ø_á4=¸hÓ4GÐÐ1ÓGðð 24·²Ø7ó2ÐÐ.ó ðð 13·
²
ð	ð 	�‰ó1ÐÐ-ó ð	ð ð
 04ð	\+àð\+ð 'ð\+ð -ð	\+ð
 
÷\+ó ð\+ð| óó ðð Øóó ó ðð ñ#ó ð#ð Øó3ó ó ð3ð óó ðð< ðØ&ðØ7:ðà	óó ðð0/àð/ð ð/ð ð	/ð
 ô/ô)ô*ô*ô+ôô

ð'àð'ð ð'ð  ð	'ð
  ð'ð 
ô'ôR+ô	+ð ñGó ðGð@~#àð~#ð ð~#ð
 
/ô~#ô@ö2ô"ðØ"ðà	&ôð:'Ø*ð'à	&ô'ôR+ôZ
ô
'ô(ô'%ôRô(
ôô4!ð(3Ø"ð3Ø,;ð3à	ô3ô"ô4:ôð<"'Ø"ð"'Ø03ð"'à	ô"'ðH<5Ø"ð<5Ø+@ð<5à	ô<5ô|GðR óJó ðJð à59ð?
Øð?
Ø"2ð?
à	ô?
ó ð?
ôBð@@Ø"ð@à	Bô@ôD
ô("ôTô"ô04ô$ò,D
ðL<$Ø 4ð<$à	Mô<$ð|RàðRð ðRð 
ô	RòhV+ðp
ð ð
ð %ð	
ð
 !ð
ð 
ô
ð" !&ð	uà ðuð ðuð ð	uð
 
õuðx #(ðEàðEð ðEð ð	Eð
  ðEð 
õEðN/àð/ð ð/ð ð	/ð
 ð/ð ð/ð 
ô/ðbVàðVð ðVð ð	Vð
 ðVð ðVð ðVð 
ôVð0 *.ñ<.ð ð<.ð ð	<.ð
 ð<.ð ð<.ð 'ð<.ð 
õ<.ð|~#ð ð~#ð ð	~#ð
 ð~#ð 
#ô~#ðN "ñ%ð ð%ð ð	%ð
 ð%ð ð%ð ð%ð 
õ%ð^ "ñ?ð ð?ð ð	?ð
 ð?ð ð?ð ð?ð ð?ð 
õ?ðB ð '3×&7Ñ&7ð!Øð!àð!ð %ð!ð !ð	!ð
 $ð!ð 
ô!ó ð!ð.~à ð~ð ð~ð 
ô	~ô@ô(6ðr >EðØðØ&)ðØ7:ðà	õðF  ð àð ð  ð ð &ð	 ð
 ð ð 
õ ðF PTðFØ'ðFØ6LðFà	õFðP7Øð7Ø&5ð7à	ô7ðrIØ!ðIØ(7ðIà	ôIôVô8	
ôô26ð" óó ðô$'>ôR	Rôô(XRôtôD!ôLJ ôX[ôz1@÷fò rv   r§   )ro   rE  rt  rE  )r{   úzipfile.ZipFilert  r6   )r‹   rE  rt  r6   )r{   rÂ  rt  r   )‡Ú
__future__r   Úloggingræ  rÖ  r•   Ú
contextlibr   r|  r   Úior   Úpathlibr   Útypingr   r	   r
   Úurllib.parser   Údocling_core.types.docr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Údocling_core.types.doc.documentr    r!   r"   Úlxmlr#   ÚPILr$   r%   Úpydanticr&   r'   Útyping_extensionsr(   Ú docling.backend.abstract_backendr)   Ú$docling.backend.docx.drawingml.utilsr*   r+   r,   Údocling.backend.docx.latex.ommlr-   Ú!docling.datamodel.backend_optionsr.   Údocling.datamodel.base_modelsr/   Údocling.datamodel.documentr0   r1   Údocling.exceptionsr2   r3   Údocling.utils.code_languager4   r5   Ú	getLoggerrµ  r¢  r7   rº  r8   rÞ   r9   Údocx.documentr«  Údocx.enum.styler:   Údocx.oxml.simpletypesr;   Údocx.oxml.tabler<   Údocx.oxml.xmlchemyr=   Údocx.styles.styler>   r?   Ú
docx.tabler@   rA   Údocx.text.hyperlinkrB   Údocx.text.paragraphrC   Údocx.text.runrD   rê   rG  rë   rS  Ú	XMLParserrI   Ú	BAR_CHARTÚ
LINE_CHARTÚ	PIE_CHARTÚSCATTER_CHARTr   rT   rV   rW   rX   rY   r[   r\   r]   r^   r¼  r_   r»  rg   ru   r}   r�   r¥   r§   rƒ   rv   rt   Ú<module>rè     sŒ  ðö #ã Û 	Û Û Ý %Ý Ý Ý ß 'Ñ 'Ý !÷÷ ÷ ÷ ÷ ó ÷, HÑ GÝ ß -ß ,Ý &å G÷ñ õ
 8Ý BÝ :ß Aß ?ß Oà×Ò˜Ó"€à€�Ó Ø)-Ð Ð&Ó -ðÝÝ6Ý-Ý.Ý%Ý2ß;ß'Ý-Ý-Ý!à€Oð
Að ðð ð  Ÿ/š/ØØØØñ	Ð �%ó ðð +×4Ñ4Ø,×6Ñ6Ø+×6Ñ6Ø-×8Ñ8Ø*×4Ñ4Ø,×6Ñ6Ø/×9Ñ9Ø.×<Ñ<Ø+×7Ñ7Ø-×9Ñ9ñRÐ  Ð"Nó ðð 'DÐ ˜Ó CØ Hà$HÐ �zÓ HØ <à%;Ð �lÓ ;Ø Yà,Ð �*Ó ,Ø aà"+Ð �ZÓ +Ø gà,=Ð ˜zÓ =Ø aà+AÐ ˜jÓ AØ bð 5nØ4mð JKð Sdñ	5Ð Ð1ó ð hàŸZšZØ4óÐ �Uó ð 8á4=òó	5Ð Ð1ó 	ð Eô
;ôô	Cô#ôLy7Ð6õ y7øðW ó ØÖûðús   Ã-AI ÉI)ÉI$É$I)