ó
    �®žj —  ã                  ór  • % S SK J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  S SKJrJrJr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  S S
KJ r J!r!J"r"J#r#  S SK$J%r%J&r&  S SK'J(r(  S SK)J*r*  S SK+J,r,  S SK-J.r.J/r/  S SK0J1r1  S SK2J3r3  S SK4J5r5  S SK6J7r7  Sr8S\9S'   Sr:S\9S'    S SK;r;S SK<r;S SK=r;S SK;J>r>  Sr8\R‚                  " \B5      rCSrDSrES\E S3rFS\E S3rG " S  S!\H\5      rI " S" S#\!5      rJ " S$ S%\!5      rK\%\\J\K4   \"" S&S'94   rLS+S( jrM " S) S*\(5      rNg! \? a  r@\@r: Sr@C@NrSr@C@ff = f),é    )ÚannotationsN)Údeepcopy)ÚEnum)Úunescape)ÚBytesIO)ÚPath)ÚLiteralÚOptionalÚUnionÚcast)
ÚDocItemLabelÚDoclingDocumentÚDocumentOriginÚ
FormattingÚImageRefÚListItemÚNodeItemÚ	TableCellÚ	TableDataÚTextItem)ÚAnyUrlÚ	BaseModelÚFieldÚTypeAdapter)Ú	AnnotatedÚoverride)ÚDeclarativeDocumentBackend)ÚHTMLDocumentBackend)ÚImageResourceLoader)ÚHTMLBackendOptionsÚMarkdownBackendOptions)ÚInputFormat)ÚInputDocument)ÚDocumentLoadError)Údetect_code_languageFÚboolÚ_MARKO_AVAILABLEzImportError | NoneÚ_MARKO_IMPORT_ERROR)ÚMarkdownTzyThe 'marko' package is required to process Markdown files. Install it with `pip install 'docling-slim[format-markdown]'`.ÚDOCLING_DOC_MD_HTML_EXPORTz#_#_z
_START_#_#z	_STOP_#_#c                  ó    • \ rS rSrSrSrSrSrg)Ú_PendingCreationTypeéK   zCoordOrigin.ÚheadingÚ	list_item© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚHEADINGÚ	LIST_ITEMÚ__static_attributes__r0   ó    ÚW/home/mande/repo/quber/.venv/lib/python3.13/site-packages/docling/backend/md_backend.pyr,   r,   K   s   † Ùà€GØƒIr9   r,   c                  ó.   • \ rS rSr% SrS\S'   S\S'   Srg)	Ú_HeadingCreationPayloadéR   r.   zLiteral['heading']ÚkindÚintÚlevelr0   N)r1   r2   r3   r4   r>   Ú__annotations__r8   r0   r9   r:   r<   r<   R   s   ‡ Ø(€DÐ
Ó(Ø†Jr9   r<   c                  ó<   • \ rS rSr% SrS\S'   S\S'   SrS\S	'   S
rg)Ú_ListItemCreationPayloadéW   r/   zLiteral['list_item']r>   r&   Ú
enumeratedÚ ÚstrÚmarkerr0   N)r1   r2   r3   r4   r>   rA   rH   r8   r0   r9   r:   rC   rC   W   s   ‡ Ø!,€DÐ
Ó,ØÓØ€FˆCÖr9   rC   r>   )Údiscriminatorc                ót   • [         (       d  g[        S U  5       5      nU=(       a    [        S U  5       5      $ )a€  Return True when children consist solely of RawText/Literal runs separated
by LineBreak nodes (soft or hard), with at least one break present.

Such content is fully handled by the pending-line-break merge paths and does
not need an inline_group wrapper.  Multiple plain runs without any LineBreak
(e.g. `RawText + Literal + RawText` from an escaped character) return False
so they still use the regular inline_group path.

Args:
    children: Inline child nodes of a marko Paragraph, Heading, or ListItem
        paragraph to inspect.

Returns:
    True if all children are plain-text runs joined only by line breaks,
    False otherwise.
Fc              3  ój   #   • U  H)  n[        U[        R                  R                  5      v •  M+     g 7f©N)Ú
isinstanceÚmarkoÚinlineÚ	LineBreak©Ú.0Úcs     r:   Ú	<genexpr>Ú*_only_plain_line_breaks.<locals>.<genexpr>y   s$   é € ÐLÂ8¸a”J˜q¤%§,¡,×"8Ñ"8×9Ð9Â8ùs   ‚13c              3  óô   #   • U  Hn  n[        U[        R                  R                  [        R                  R                  45      =(       d$    [        U[        R                  R
                  5      v •  Mp     g 7frL   )rM   rN   rO   ÚRawTextr	   rP   rQ   s     r:   rT   rU   z   sW   é € ð ò ˆAô 	�1”u—|‘|×+Ñ+¬U¯\©\×-AÑ-AÐBÓC÷ 	1Ü�aœŸ™×/Ñ/Ó0ô	1âùs   ‚A6A8)r'   ÚanyÚall)ÚchildrenÚ	has_breaks     r:   Ú_only_plain_line_breaksr\   f   s@   € ÷" ÒØÜÑLÁ8ÓLÓL€IØ÷ œñ ñ óó ð r9   c                  óJ  ^ • \ rS rSr\R
                  " S5      r\R
                  " S5      r\SS j5       r	\SS j5       r
\SS j5       r\SS j5       r\SS j5       rS S!S	 jjr S      S"S
 jjr\ S#     S$U 4S jjj5       rS%S jr   S&             S'S jjr  S(           S)S jjr                      S*S jrSSSS.                       S+S jjrS,S jrS-S jrS.S jrS r\S.S j5       r\S/S j5       rS0S jrSrU =r $ )1ÚMarkdownDocumentBackendé�   z&(#\d+|#x[0-9a-fA-F]+|\w+);z:?-+:?c                óþ   • U R                  S5      nU(       a  US   R                  5       (       d  USS nU(       a  US   R                  5       (       d  USS nU Vs/ s H  o"R                  5       PM     sn$ s  snf )z°Split a table row into its cells.

The leading and trailing pipes are optional in GFM, so an empty field is
only dropped when it comes from a pipe at the very edge of the row.
Ú|r   é   Néÿÿÿÿ)ÚsplitÚstrip)ÚrowÚcellsÚcells      r:   Ú_split_table_rowÚ(MarkdownDocumentBackend._split_table_row…   si   € ð —	‘	˜#“ˆÞ˜˜q™Ÿ™×)Ñ)Ø˜!˜"�IˆEÞ˜˜r™Ÿ™×*Ñ*Ø˜#˜2�JˆEÙ).Ó/ª —
‘
–©Ñ/Ð/ùÒ/s   ÁA:c                ót   • [         R                  U 5      n[        U5      =(       a    [        S U 5       5      $ )zAWhether a row is a GFM table delimiter row, e.g. ``--- | :---:``.c              3  ó`   #   • U  H$  n[         R                  R                  U5      v •  M&     g 7frL   )r^   Ú_DELIMITER_CELL_REÚ	fullmatch)rR   rh   s     r:   rT   Ú<MarkdownDocumentBackend._is_delimiter_row.<locals>.<genexpr>—   s)   é € ð #
ÚSXÈ4Ô#×6Ñ6×@Ñ@À×FÐFÒSXùs   ‚,.)r^   ri   r&   rY   )rf   rg   s     r:   Ú_is_delimiter_rowÚ)MarkdownDocumentBackend._is_delimiter_row“   s9   € ô (×8Ñ8¸Ó=ˆÜ�E‹{÷ 
œsñ #
ÙSXó#
ó  
ð 	
r9   c                óŒ   • [        U SS5      n[        U[        5      (       a  U$ SR                  S U=(       d    /  5       5      $ )z³The text of an inline node, its markers dropped.

A pipe goes on delimiting cells inside emphasis, code spans and links,
so the markers can go but the text they wrap has to stay.
rZ   NrF   c              3  óL   #   • U  H  n[         R                  U5      v •  M     g 7frL   )r^   Ú_inline_text)rR   Úchilds     r:   rT   Ú7MarkdownDocumentBackend._inline_text.<locals>.<genexpr>¥   s"   é € ð 
ÚES¸EÔ#×0Ñ0°×7Ð7Â^ùs   ‚"$)ÚgetattrrM   rG   Újoin)ÚnoderZ   s     r:   rt   Ú$MarkdownDocumentBackend._inline_text›   sI   € ô ˜4 ¨TÓ2ˆÜ�h¤×$Ñ$ØˆOØ�w‰wñ 
ØEMÇ^ÐQSÀ^ó
ó 
ð 	
r9   c                óJ  • S/nU R                    Hp  n[        U[        R                  R                  5      (       a$  [        U5      S:X  a    O7UR                  S5        MP  US==   [        R                  U5      -  ss'   Mr     [        U5      S:  d'  US   R                  5       R                  S5      (       a  gSUS   ;  d  [        R                  US   5      (       d  g[        [        R                  US   5      5      [        [        R                  US   5      5      :H  $ )a©  Whether a paragraph is a GFM table whose header has no leading pipe.

Tables that do start with a pipe are detected line by line and must not
go through here, so that their existing behaviour is left untouched.
Without a leading pipe the header is indistinguishable from prose, so
the delimiter row on the second line is the only reliable signal - hence
the lookahead at paragraph level, where all lines are visible at once.
rF   é   rc   r   ra   Frb   )rZ   rM   rN   rO   rP   ÚlenÚappendr^   rt   ÚlstripÚ
startswithrp   ri   )ÚelementÚlinesru   s      r:   Ú_starts_pipeless_tableÚ.MarkdownDocumentBackend._starts_pipeless_table©   sú   € ð �ˆØ×%Ô%ˆEÜ˜%¤§¡×!7Ñ!7×8Ñ8Ü�u“: “?ÙØ—‘˜RÖ à�b“	Ô4×AÑAÀ%ÓHÑH•	ñ &ô ˆu‹:˜‹>˜U 1™XŸ_™_Ó.×9Ñ9¸#×>Ñ>ØØ�e˜A‘hÓÔ&=×&OÑ&OØ�!‰H÷'
ñ '
ð ô Ô*×;Ñ;¸EÀ!¹HÓEÓFÌ#Ü#×4Ñ4°U¸1±XÓ>óK
ñ 
ð 	
r9   c                óF   • S n[         R                  R                  X5      $ )Nc                óJ   • U R                  S5      nUS;   a  U$ [        U5      $ )Nr   )z&#124;z&#x7C;z&vert;)Úgroupr   )ÚmatchÚentitys     r:   ÚreplaceÚ>MarkdownDocumentBackend._unescape_except_pipe.<locals>.replaceÌ   s*   € Ø—[‘[ “^ˆFð Ð7Ó7Ø�ä˜FÓ#Ð#r9   )r^   Ú
_ENTITY_REÚsub)ÚtextrŠ   s     r:   Ú_unescape_except_pipeÚ-MarkdownDocumentBackend._unescape_except_pipeÊ   s    € ò	$ô '×1Ñ1×5Ñ5°gÓDÐDr9   c                ó¢   ^• SnU4S jn[         R                  " X4U5      n[        U5      [        U5      :w  a  [        R                  " S5        U$ )Nz_+c                óR   >• U R                  S5      n[        U5      T:”  a  ST-  $ U$ )Nr   Ú_)r‡   r}   )rˆ   Úunderscore_sequenceÚ
max_lengths     €r:   Úreplace_matchÚLMarkdownDocumentBackend._shorten_underscore_sequences.<locals>.replace_matchÛ   s6   ø€ Ø"'§+¡+Øó#Ðô
 Ð&Ó'¨*Ó4Ø˜ZÑ'Ð'à*Ð*r9   ú6Detected potentially incorrect Markdown, correcting...)Úrer�   r}   ÚwarningsÚwarn)ÚselfÚmarkdown_textr•   Úpatternr–   Úshortened_texts     `   r:   Ú_shorten_underscore_sequencesÚ5MarkdownDocumentBackend._shorten_underscore_sequences×   sD   ø€ àˆõ		+ô Ÿš ¸ÓFˆäˆ~Ó¤# mÓ"4Ó4Ü�MŠMÐRÔSàÐr9   c                ó¾   • [         R                  " SUS-    S3[         R                  5      nUR                  SU5      u  pEUS:”  a  [        R
                  " S5        U$ )Nz^([ \t]*)(?:-\s+){rb   z
,}-?(?=\S)z\1- r   r˜   )r™   ÚcompileÚ	MULTILINEÚsubnrš   r›   )rœ   r�   r•   rž   rŸ   Úcounts         r:   Ú_shorten_leading_dash_sequencesÚ7MarkdownDocumentBackend._shorten_leading_dash_sequencesî   sX   € ô —*’*Ø" :°¡>Ð"2°+Ð>ÄÇÁó
ˆð !(§¡¨W°mÓ DÑˆà�1‹9Ü�MŠMÐRÔSàÐr9   Nc                óú  >• [         (       d  [        [        5      [        eUc
  [	        5       n[
        TU ]  XU5        [        R                  S5        X l	        SU l
        SU l        SU l        SU l        / U l        SU l        SU l        SU l        S U l         ['        U R                  [(        5      (       a_  U R                  R+                  5       R-                  S5      nU R/                  U5      U l        U R1                  U R                  5      U l        ['        U R                  [2        5      (       ac  [5        U R                  SS9 nUR7                  5       nU R/                  U5      U l        U R1                  U R                  5      U l        S S S 5        SU l
        [        R                  U R                  5        g ! , (       d  f       N5= f! [8         a  n[;        SU R<                   S	35      UeS nAff = f)
Nz#Starting MarkdownDocumentBackend...TrF   Fr   z	utf-8-sig©Úencodingz3Could not initialize MD backend for file with hash Ú.)r'   ÚImportErrorÚ_INSTALL_HINTr(   r!   ÚsuperÚ__init__Ú_logÚdebugÚpath_or_streamÚvalidÚmarkdownÚin_tableÚin_pipeless_tableÚmd_table_bufferÚ_pending_hard_line_breakÚ_pending_soft_line_breakÚ_html_blocksÚ_image_loaderrM   r   ÚgetvalueÚdecoder    r§   r   ÚopenÚreadÚ	Exceptionr$   Údocument_hash)	rœ   Úin_docr³   ÚoptionsÚtext_streamÚfÚ
md_contentÚeÚ	__class__s	           €r:   r°   Ú MarkdownDocumentBackend.__init__û   s­  ø€ ÷  ÒÜœmÓ,Ô2EÐEØ‰?Ü,Ó.ˆGÜ‰Ñ˜°Ô9ä�
‰
Ð8Ô9ð -ÔØˆŒ
ØˆŒàˆŒØ!&ˆÔØ*,ˆÔØ(-ˆÔ%Ø(-ˆÔ%Ø!"ˆÔØ<@ˆÔð
	Ü˜$×-Ñ-¬w×7Ñ7Ø"×1Ñ1×:Ñ:Ó<×CÑCÀKÓP�ð
 !%× BÑ BÀ;Ó O�”Ø $× DÑ DÀTÇ]Á]Ó S�”Ü˜$×-Ñ-¬t×4Ñ4Ü˜$×-Ñ-¸ÒDÈØ!"§¡£�Jð
 %)×$FÑ$FÀzÓ$R�D”MØ$(×$HÑ$HÈÏÉÓ$W�D”M÷ Eð ˆDŒJä�J‰J�t—}‘}Ô%ð
 	÷ EÕDûô ó 	Ü#ØEÀd×FXÑFXÐEYÐYZÐ[óàðûð	ús2   ÂB1G Å
AG Æ.G Ç 
GÇ
G Ç
G:ÇG5Ç5G:c                óR  • SU l         U R                  (       Ga	  [        R                  S5        U R                   H  n[        R                  U5        M     [        R                  S5        / n/ n[        U R                  5       H•  u  pR/ nUS:X  a@  [        R                  U5      nU H  nUR                  U5        M     UR                  U5        US:”  d  MU  [        R                  U5      n	U	 H  nUR                  U5        M     UR                  U5        M—     U(       a@  US   (       a6  [        US   5      n
U Vs/ s H  nUS U
 S/U
[        U5      -
  -  -   PM     nn[        U5       H_  u  pÍ[        U5       HK  u  pïSnSn[        [        UR                  5       5      UUUUU-   UUU-   US:H  SS9	nUR                  U5        MM     Ma     [        U5      n[        US   5      nSU l        / U l        [        UUUS9n[        U5      S:”  a  UR                  US	9  g s  snf )
NFz=== TABLE START ===z=== TABLE END ===r   rb   rF   )	rŽ   Úrow_spanÚcol_spanÚstart_row_offset_idxÚend_row_offset_idxÚstart_col_offset_idxÚend_col_offset_idxÚcolumn_headerÚ
row_header)Únum_rowsÚnum_colsÚtable_cells)Údata)r·   r¶   r±   r²   r¸   Ú	enumerater^   ri   r~   r}   r   r   re   r   Ú	add_table)rœ   ÚdocÚmd_table_rowÚtcellsÚresult_tableÚnr×   ÚheaderÚvalueÚvaluesÚnum_header_cellsrf   Útrow_indÚtrowÚtcol_indÚcellvalrÌ   rÍ   ÚicellrÔ   rÕ   Ú
table_datas                         r:   Ú_close_tableÚ$MarkdownDocumentBackend._close_table7  s#  € Ø!&ˆÔØ�=�=ˆ=Ü�J‰JÐ,Ô-Ø $× 4Ô 4�Ü—
‘
˜<Ö(ñ !5ä�J‰JÐ*Ô+Ø&(ˆFØˆLÜ#,¨T×-AÑ-AÖ#B‘�Ø�Ø˜“6Ü4×EÑEÀlÓS�FÛ!'˜ØŸ™ EÖ*ñ "(à ×'Ñ'¨Ô-Ø�q•5Ü4×EÑEÀlÓS�FÛ!'˜ØŸ™ EÖ*ñ "(à ×'Ñ'¨Ö-ñ $Cö   ¨Q§Ü#& |°A¡Ó#7Ð ñ  ,ó â+˜ð Ð)Ð)Ð*¨b¨TÐ5EÌÈCËÑ5PÑ-QÔQÙ+ð ð  ô
 #,¨LÖ"9‘�Ü)2°4®Ñ%�Hàð ð ð ô &Ü% g§m¡m£oÓ6Ø!)Ø!)Ø-5Ø+3°hÑ+>Ø-5Ø+3°hÑ+>Ø&.°!¡mØ#(ñ
�Eð —M‘M %Ö(ó% *9ñ #:ô* ˜<Ó(ˆHÜ˜<¨™?Ó+ˆHØ!ˆDŒMØ#%ˆDÔ ä"Ø!¨HÀ&ñˆJô �6‹{˜Q‹Ø—‘ :�Ñ.ØùòI s   Å"H$c           	     ó.   • UR                  UUUUUUS9nU$ )N)rŽ   rE   rH   ÚparentÚ
formattingÚ	hyperlink)Úadd_list_item)	rœ   rÚ   Úparent_itemrŽ   rE   rH   rí   rî   Úitems	            r:   Ú_create_list_itemÚ)MarkdownDocumentBackend._create_list_itemx  s2   € ð × Ñ ØØ!ØØØ!Øð !ð 
ˆð ˆr9   c                óf   • US:X  a  UR                  UUUUS9nU$ UR                  UUS-
  UUUS9nU$ )Nrb   )rŽ   rì   rí   rî   )rŽ   r@   rì   rí   rî   )Ú	add_titleÚadd_heading)rœ   rÚ   rð   rŽ   r@   rí   rî   rñ   s           r:   Ú_create_heading_itemÚ,MarkdownDocumentBackend._create_heading_itemŒ  s`   € ð �A‹:Ø—=‘=ØØ"Ø%Ø#ð	 !ð ˆDð ˆð —?‘?ØØ˜a‘iØ"Ø%Ø#ð #ð ˆDð ˆr9   c       
   
     óÔ  • [        U5      S:”  aØ  UR                  5       n[        U[        5      (       ao  U(       a  UR                  OSnU R                  UUUUR                  UR                  U	U
S9nU(       a)  [        [        U5      XŒ'   UR                  US5      S-   X|'   O3[        U[        5      (       a  U R                  UUUUR                  U	U
S9  [        U5      S:”  a  MØ  U$ )a7  Lazily create list items / headings when we first see their inline content.

Important: Marko list items/headings can contain inline nodes that are NOT RawText
(e.g. CodeSpan, Link). If we only flush on RawText, pending payloads can leak to
later nodes and attach to a wrong parent, producing a very deep tree.
r   N©rÚ   rð   rŽ   rE   rH   rí   rî   rb   ©rÚ   rð   rŽ   r@   rí   rî   )r}   ÚpoprM   rC   Úself_refrò   rE   rH   r   r   Úgetr<   r÷   r@   )rœ   rÚ   Úcreation_stackÚsnippet_textrð   Úlist_ordered_flag_by_refÚlist_start_by_refÚlist_item_counter_by_refÚlist_last_item_by_refrí   rî   Ú	to_createÚ
parent_refs                r:   Ú_flush_creation_stackÚ-MarkdownDocumentBackend._flush_creation_stack¦  sø   € ô( �.Ó! AÓ%Ø&×*Ñ*Ó,ˆIÜ˜)Ô%=×>Ñ>Þ5@˜[×1Ò1Àd�
Ø"×4Ñ4ØØ +Ø%Ø(×3Ñ3Ø$×+Ñ+Ø)Ø'ð 5ð �ö Ü8<¼XÀ{Ó8SÐ)Ñ5à0×4Ñ4°ZÀÓCÀaÑGð -Ñ8øô ˜IÔ'>×?Ñ?ð ×)Ñ)ØØ +Ø%Ø#Ÿ/™/Ø)Ø'ð *ñ ô/ �.Ó! AÕ%ð@ Ðr9   )rð   rí   rî   c               óv  • X;   a  g [        U[        R                  R                  5      (       d)  [        U[        R                  R                  5      (       a¿  [        UR                  5      S:”  a¦  U R                  U5        [        R                  SUR                  UR                  S   R                  5        [        UR                  5      S:”  a   U R                  UU
SUR                  UUS9n
GO¶UR                  [        UR                  S95        GO’[        U[        R                  R                  5      (       añ  SnUR                   HK  n[        U[        R                  R                  5      (       d  M.  [        UR                  5      S:”  d  MI  Sn  O   U R                  U5        [        R                  S	UR                   (       a  S
OS5        U(       aQ  UR#                  SU
S9n
UR                   XjR$                  '   UR                   (       a  UR&                  XzR$                  '   GOx[        U[        R                  R                  5      (       Gaä  [        UR                  5      S:”  GaÊ  [        UR                  S   =n[        R                  R(                  5      (       Ga‘  [        UR                  5      S:”  Gaw  U R                  U5        [        R                  S5        U
(       a  UR+                  U
R$                  S5      OSnU
(       a  U
R$                  OS nSnU(       a/  Ub,  UR+                  US5      nUR+                  US5      nUU-    S3nUR                   Vs/ s H0  n[        U[        R                  R                  5      (       a  M.  UPM2     nn[        U5      S:”  an  [-        U5      (       d^  U
(       a  U
R$                  OS nU R/                  UU
SUUUUS9n
U(       a+  [1        [        U
5      U	U'   UR+                  US5      S-   UU'   G	O…UR                  [3        UUS95        G	Oj[        U[        R4                  R6                  5      (       a¾  U R                  U5        [        R                  SUR8                  UR:                  5        S nUR8                  bE  UR8                  S:w  a5  [=        UR8                  5      nUR?                  [@        RB                  UUUS9nU RE                  UR:                  5      nURG                  U
UUS9  GOƒ[        U[        R4                  RH                  5      (       aE  [        R                  SUR                  5        U(       a  [K        U5      O	[M        5       nSUl'        GO[        U[        R4                  RP                  5      (       aE  [        R                  SUR                  5        U(       a  [K        U5      O	[M        5       nSUl)        GO§[        U[        R4                  RT                  5      (       a^  [        R                  SUR                  5        [W        [X        [Z        [\        [^        4      5      Ra                  UR:                  5      nGO [        U[        R4                  Rb                  [        R4                  Rd                  -  5      (       GaJ  [        R                  SUR                  5        [        UR                  [f        5      (       a  UR                  OSn[=        URi                  5       5      n[k        U5      =(       aQ    U Rl                  =(       d>    SU;   =(       a2    U Rn                  =(       d    URq                  5       Rs                  S5      nU(       a  SU l7        U Rn                  (       aƒ  U(       a|  U Ru                  URi                  5       5      nU Rv                  (       a/  U Rv                  [        U Rv                  5      S-
  ==   U-  ss'   GO�U Rv                  R                  U5        GOpU(       GaÕ  U R                  U5        U(       a(  U Ry                  UUUU
UUUU	UUS9
n
SU l=        SU l>        GO(U Rz                  (       a–  UR~                  (       a…  UR~                  S   R€                  U:X  ah  UR~                  S   R‚                  U:X  aK  UR~                  S   =R„                  SU-   -  slB        UR~                  S   =R†                  SU-   -  slC        OàU R|                  (       a–  UR~                  (       a…  UR~                  S   R€                  U:X  ah  UR~                  S   R‚                  U:X  aK  UR~                  S   =R„                  SU-   -  slB        UR~                  S   =R†                  SU-   -  slC        O9U Rz                  (       a  SOSnUR?                  [@        Rˆ                  U
UU-   UUS9  SU l=        SU l>        GO‘[        U[        R4                  RŠ                  5      (       a�  U R                  U5        [        R                  SUR                  5        [g        UR                  5      Ri                  5       nU(       a   U(       a  U Ry                  UUUU
UUUU	UUS9
n
g UR�                  U
UUUS 9  GOÙ[        U[        R                  RŽ                  [        R                  R�                  -  5      (       aÒ  [        UR                  5      S:”  a¹  [        UR                  S   =n[        R4                  Rb                  5      (       a�  [        UR                  Ri                  5       =n5      S:”  aX  U R                  U5        [        R                  S!UR                  5        UR�                  U
U[“        UUR”                  S"9UUS#9  GOÃ[        U[        R4                  R–                  5      (       a�  U Rn                  (       a2  [        R                  S$5        U Rv                  R                  S5        GOWUR˜                  (       a  [        R                  S%5        SU l>        GO([        R                  S&5        SU l=        GO
[        U[        R                  Rš                  5      (       a’  U =Rœ                  S-  slN        U R                  U5        [        R                  S'U5        [        URž                  5      S:”  a<  URž                  Ri                  5       n[          U [¢         3nUR�                  U
UUUS 9  OO[        U[f        5      (       d:  U R                  U5        [        R                  S([¥        U5      R¦                  5        [        U[        R                  R(                  5      (       a  [¨        R«                  U5      U l6        [­        US)/ 5      n[        U[        R                  R(                  [        R                  R                  -  5      (       a.  [        U5      S:”  a  [-        U5      (       d  UR¯                  U
S*9n
[        R                  RŽ                  [        R                  R�                  [        R4                  Rb                  4n [±        US)5      (       aë  [        UU 5      (       dÙ  UR                   HÈ  n[        U[        R                  R                  5      (       a  [        U[        R                  R                  5      (       aV  U
(       aO  U	R+                  U
R$                  S 5      (       a.  [        R                  S+U
R$                  5        XšR$                     n
U R³                  UUS-   UUUUUUU	U
UUS,9  MÊ     g g g s  snf )-Nr   z  - Heading level %s, content: %srb   rF   rû   )r@   FTz
 - List %sÚorderedÚ	unorderedÚlist)Únamerì   z - List itemr¬   rú   )rE   rH   z - Image with alt: %s, url: %s)ÚlabelrŽ   rí   rî   )rì   ÚimageÚcaptionz - Emphasis: %sz - StrongEmphasis: %sz - Link: %sz - RawText/Literal: %sra   )
rÚ   rÿ   r   rð   r  r  r  r  rí   rî   rc   Ú
Ú )r  rì   rŽ   rí   rî   z - Code Span: %s)rì   rŽ   rí   rî   z - Code Block: %s)Úhint)rì   rŽ   Úcode_languagerí   rî   zLine break in a tablezSoft line breakzHard line breakzHTML Block: %szSome other element: %srZ   )rì   z9walking into new List hanging from item of parent list %s)r�   ÚdepthrÚ   Úvisitedrÿ   r  r  r  r  rð   rí   rî   )ZrM   rN   ÚblockÚHeadingÚSetextHeadingr}   rZ   ré   r±   r²   r@   r÷   r~   r<   ÚListr   r
  Úadd_list_grouprý   ÚstartÚ	Paragraphrþ   r\   rò   r   rC   rO   ÚImageÚtitleÚdestr   Úadd_textr   ÚCAPTIONÚ_load_image_refÚadd_pictureÚEmphasisr   r   ÚitalicÚStrongEmphasisÚboldÚLinkr   r
   r   r   r   Úvalidate_pythonrW   r	   rG   re   r&   r·   r¶   r   r€   r�   r¸   r  r¹   rº   Útextsrí   rî   rŽ   ÚorigÚTEXTÚCodeSpanÚadd_codeÚ	CodeBlockÚ
FencedCoder%   ÚlangrP   ÚsoftÚ	HTMLBlockr»   ÚbodyÚ_START_MARKERÚ_STOP_MARKERÚtyper1   r^   rƒ   rw   Úadd_inline_groupÚhasattrÚ_iterate_elements)!rœ   r�   r  rÚ   r  rÿ   r  r  r  r  rð   rí   rî   Úhas_non_empty_list_itemsru   rE   r  rH   r  r¦   rñ   Únon_list_childrenÚfig_captionr  Ú	image_refÚoriginal_textr   Úis_table_rowÚprefixÚ
html_blockÚtext_to_addÚelement_childrenÚprocessed_block_typess!                                    r:   r;  Ú)MarkdownDocumentBackend._iterate_elementsÜ  s_  € ð$ ÓØô
 �w¤§¡× 3Ñ 3×4Ñ4Ü˜'¤5§;¡;×#<Ñ#<×=Ñ=Ü�'×"Ñ"Ó# aÓ'Ø×Ñ˜cÔ"Ü�J‰JØ2Ø—‘Ø× Ñ  Ñ#×,Ñ,ôô �7×#Ñ#Ó$ qÓ(Ø"×7Ñ7ØØ +ØØ!Ÿ-™-Ø)Ø'ð 8ð ’ð ×%Ñ%Ô&=ÀGÇMÁMÑ&RÖSä˜¤§¡×!1Ñ!1×2Ñ2Ø',Ð$Ø ×)Ô)�Ü˜e¤U§[¡[×%9Ñ%9×:Ó:¼sÀ5Ç>Á>Ó?RÐUVÕ?VØ/3Ð,Ùñ *ð
 ×Ñ˜cÔ"Ü�J‰J�|°'·/·/¡YÀ{ÔSÞ'Ø!×0Ñ0°fÀ[Ð0ÐQ�ØAHÇÁÐ(×)=Ñ)=Ñ>Ø—?—?Ø>E¿m¹mÐ%×&:Ñ&:Ñ;ùô �w¤§¡× 4Ñ 4×5Ò5Ü�G×$Ñ$Ó%¨Ô)Ü W×%5Ñ%5°aÑ%8Ð8˜E¼5¿;¹;×;PÑ;P×QÒQÜ�E—N‘NÓ# aÔ'à×Ñ˜cÔ"Ü�J‰J�~Ô&ö ð )×,Ñ,¨[×-AÑ-AÀ5ÔIàð ö
 AL¨×(<Ò(<ÐQUˆJØˆFÞ˜jÑ4Ø)×-Ñ-¨j¸!Ó<�Ø0×4Ñ4°ZÀÓC�Ø! E™M˜?¨!Ð,�ð "ŸNšNó>â*�DÜ! $¬¯©×(<Ñ(<×=÷ Ù*ð ð >ô Ð$Ó%¨Ó)Ô2IØ!÷3ñ 3ö -8�K×(Ò(¸Tð ð #×4Ñ4ØØ +ØØ)Ø!Ø)Ø'ð 5ð �ö Ü8<¼XÀ{Ó8SÐ)¨*Ñ5à0×4Ñ4°ZÀÓCÀaÑGð -¨ZÑ8ùð ×%Ñ%Ü,¸
È6ÑRöô ˜¤§¡×!3Ñ!3×4Ñ4Ø×Ñ˜cÔ"Ü�J‰JÐ7¸¿¹ÈÏÉÔUà.2ˆKØ�}‰}Ñ(¨W¯]©]¸bÓ-@Ü  §¡Ó/�Ø!Ÿl™lÜ&×.Ñ.ØØ)Ø'ð	 +ð �ð ×,Ñ,¨W¯\©\Ó:ˆIØ�O‰O ;°iÈˆOÓUä˜¤§¡×!6Ñ!6×7Ñ7Ü�J‰JÐ(¨'×*:Ñ*:Ô;Þ1;œ *Ô-ÄÃˆJØ $ˆJÖä˜¤§¡×!<Ñ!<×=Ñ=Ü�J‰JÐ.°×0@Ñ0@ÔAÞ1;œ *Ô-ÄÃˆJØ"ˆJŽOä˜¤§¡×!2Ñ!2×3Ñ3Ü�J‰J�} g×&6Ñ&6Ô7Ü#¤H¬U´6¼4°<Ñ-@Ñ$AÓB×RÑRØ—‘óŠIô ˜¤§¡×!5Ñ!5¼¿¹×8LÑ8LÑ!L×MÒMÜ�J‰JÐ/°×1AÑ1AÔBä$.¨w×/?Ñ/?Ä×$EÑ$E�× Ò È2ð ô $ M×$7Ñ$7Ó$9Ó:ˆLÜ Ó-÷ 	ð ×&Ñ&÷ à˜<Ñ'÷ RØŸ™×P¨-×*>Ñ*>Ó*@×*KÑ*KÈCÓ*Pð ö Ø $�”Ø�}�}¦Ø#×9Ñ9¸-×:MÑ:MÓ:OÓP�à×'×'Ø×(Ñ(¬¨T×-AÑ-AÓ)BÀQÑ)FÓGÈ<ÑWÕGà×(Ñ(×/Ñ/°Ö=ßà×!Ñ! #Ô&æ!Ø"&×"<Ñ"<ØØ'5Ø%1Ø$/Ø1IØ*;Ø1IØ.CØ#-Ø"+ð #=ð #�Kð 5:�DÔ1Ø49�DÖ1ð ×5×5ØŸIŸIØŸI™I b™M×4Ñ4¸
ÓBØŸI™I b™M×3Ñ3°yÓ@àŸ	™	 "™×*Ò*¨d°\Ñ.AÑAÕ*ØŸ	™	 "™×*Ò*¨d°\Ñ.AÑAÖ*à×5×5ØŸIŸIØŸI™I b™M×4Ñ4¸
ÓBØŸI™I b™M×3Ñ3°yÓ@àŸ	™	 "™×*Ò*¨c°LÑ.@Ñ@Õ*ØŸ	™	 "™×*Ò*¨c°LÑ.@Ñ@Ö*à)-×)F×)F¡ÈB˜ØŸ™Ü".×"3Ñ"3Ø#.Ø!'¨,Ñ!6Ø'1Ø&/ð %ñ ð 5:�DÔ1Ø49�DÔ1ùä˜¤§¡×!6Ñ!6×7Ñ7Ø×Ñ˜cÔ"Ü�J‰JÐ)¨7×+;Ñ+;Ô<Ü˜w×/Ñ/Ó0×6Ñ6Ó8ˆLö ¦,Ø"×8Ñ8ØØ#1Ø!-Ø +Ø-EØ&7Ø-EØ*?Ø)Ø'ð 9ð �ð Ø�L‰LØ"Ø!Ø%Ø#ð	 ó ô �w¤§¡× 5Ñ 5¼¿¹×8NÑ8NÑ N×OÑOÜ�G×$Ñ$Ó%¨Ó)Ü W×%5Ñ%5°aÑ%8Ð8˜E¼5¿<¹<×;OÑ;O×PÑPÜ U§^¡^×%9Ñ%9Ó%;Ð<�LÓ=ÀÓAà×Ñ˜cÔ"Ü�J‰JÐ*¨G×,<Ñ,<Ô=Ø�L‰LØ"Ø!Ü2°<ÀgÇlÁlÑSØ%Ø#ð ó ô ˜¤§¡×!7Ñ!7×8Ñ8Ø�}�}Ü—
‘
Ð2Ô3Ø×$Ñ$×+Ñ+¨BÖ/Ø——Ü—
‘
Ð,Ô-Ø04�Ö-ä—
‘
Ð,Ô-Ø04�Ö-ä˜¤§¡×!6Ñ!6×7Ñ7Ø×Ò Ñ"ÕØ×Ñ˜cÔ"Ü�J‰JÐ'¨Ô1ä�G—L‘LÓ! AÓ%à$Ÿ\™\×/Ñ/Ó1�
ô "/ °
¨|¼L¸>ÐJ�Ø—‘Ø&Ø$Ø)Ø'ð	 ñ øô ˜g¤s×+Ñ+Ø×!Ñ! #Ô&Ü—
‘
Ð3´T¸'³]×5KÑ5KÔLä�gœuŸ{™{×4Ñ4×5Ñ5ô &=×%SÑ%SØó&ˆDÔ"ô # 7¨J¸Ó;Ðä�w¤§¡× 5Ñ 5¼¿¹×8KÑ8KÑ K×LÑLÜÐ$Ó%¨Ó)Ü+Ð,<×=Ñ=à×.Ñ.°kÐ.ÐBˆKô �K‰K×!Ñ!Ü�K‰K×"Ñ"Ü�L‰L× Ñ ð!
Ðô �7˜J×'Ñ'´
ØÐ*÷1
ñ 1
ð !×)Ô)�ä˜w¬¯©×(<Ñ(<×=Ñ=Ü" 5¬%¯+©+×*:Ñ*:×;Ñ;Þ#Ø-×1Ñ1°+×2FÑ2FÈ×MÑMä—J‘JØSØ#×,Ñ,ôð #8×8LÑ8LÑ"M�Kà×&Ñ&Ø!Ø !™)ØØ#Ø#1Ø-EØ&7Ø-EØ*?Ø +Ø)Ø'ð 'ó ò *ð1
Ð'ùò]>s   Í/-~6Î ~6c                óÄ   • U R                   cH  [        [        U R                  5      n[	        UR
                  UR                  UR                  S9U l         U R                   $ )a  Lazily build the shared image-resource loader.

Resolving and decoding image sources (``data:`` URIs, local files, and
remote URLs) together with the relevant safety limits is shared with the
HTML backend through :class:`ImageResourceLoader`, so that logic is not
duplicated here.
)Úenable_local_fetchÚenable_remote_fetchÚmax_image_data_base64_bytes)r¼   r   r!   rÄ   r   rI  rJ  rK  )rœ   Ú
md_optionss     r:   Ú_get_image_loaderÚ)MarkdownDocumentBackend._get_image_loader:  sW   € ð ×ÑÑ%ÜÔ4°d·l±lÓCˆJÜ!4Ø#-×#@Ñ#@Ø$.×$BÑ$BØ,6×,RÑ,Rñ"ˆDÔð
 ×!Ñ!Ð!r9   c                óî   • [        [        U R                  5      nUR                  (       a  U(       d  gUR                  b  [        UR                  5      OSnU R                  5       R                  X5      $ )z§Resolve and decode a Markdown image source into an ``ImageRef``.

Returns ``None`` when image loading is disabled, the source is empty, or
the image cannot be loaded.
N)r   r!   rÄ   Úfetch_imagesÚ
source_urirG   rM  Úload_image_ref)rœ   r   rL  Ú	base_paths       r:   r#  Ú'MarkdownDocumentBackend._load_image_refK  s`   € ô Ô0°$·,±,Ó?ˆ
Ø×&×&®dØà*4×*?Ñ*?Ñ*KŒC�
×%Ñ%Ô&ÐQUð 	ð ×%Ñ%Ó'×6Ñ6°tÓGÐGr9   c                ó   • U R                   $ rL   )r´   ©rœ   s    r:   Úis_validÚ MarkdownDocumentBackend.is_validY  s   € Ø�z‰zÐr9   c                ó„   • [        U R                  [        5      (       a  U R                  R                  5         S U l        g rL   )rM   r³   r   ÚcloserV  s    r:   ÚunloadÚMarkdownDocumentBackend.unload\  s/   € Ü�d×)Ñ)¬7×3Ñ3Ø×Ñ×%Ñ%Ô'Ø"ˆÕr9   c                ó   • g)NFr0   ©Úclss    r:   Úsupports_paginationÚ+MarkdownDocumentBackend.supports_paginationa  s   € àr9   c                ó$   • [         R                  1$ rL   )r"   ÚMDr^  s    r:   Úsupported_formatsÚ)MarkdownDocumentBackend.supported_formatse  s   € ä—‘ÐÐr9   c                óâ  ^ • [         R                  S5        [        T R                  R                  =(       d    SST R
                  S9n[        T R                  R                  =(       d    SUS9nT R                  5       (       GaR  [        5       nUR                  T R                  5      nT R                  USUS [        5       / 0 0 0 0 S9
  T R                  US9  T R                  S:”  aì  [         nUR#                  5       nU 4S	 jnS
[$         3[&         S34 H	  nU" XhS9nM     ST l        [)        [+        USS95      n	[-        [.        T R0                  5      n
[3        U
R4                  U
R6                  U
R8                  U
R:                  SSS9n[=        U	[>        R@                  UT R                  R                  US9nU" UU	US9nURC                  5       nU$ [E        ST R
                   S35      e)Nzconverting Markdown...Úfileztext/markdown)ÚfilenameÚmimetypeÚbinary_hash)r  Úoriginr   )
r�   r  rÚ   rð   r  rÿ   r  r  r  r  )rÚ   c                ór   >• [         R                  " USU 5      u  p#UTR                  :w  a  [        S5      eU$ )NrF   z:An internal error has occurred during Markdown conversion.)r™   r¥   r»   ÚRuntimeError)ÚtxtÚregexÚ_txtr¦   rœ   s       €r:   Ú_restore_original_htmlÚ?MarkdownDocumentBackend.convert.<locals>._restore_original_html�  s<   ø€ Ü"$§'¢'¨%°°SÓ"9‘K�DØ × 1Ñ 1Ó1Ü*ØXóð ð  �Kr9   z<pre>\s*<code>\s*z\s*</code>\s*</pre>)rn  ro  zutf-8rª   F)rI  rJ  rP  rQ  Úinfer_furniturerõ   )r³   ÚformatÚbackendrh  Úbackend_options)rÃ   r³   rÄ   zCannot convert md with z$ because the backend failed to init.)#r±   r²   r   rg  r  rÂ   r   ÚstemrW  r)   Úparserµ   r;  Úsetré   r»   r   Úexport_to_htmlr6  r7  r   Úbytesr   r!   rÄ   r    rI  rJ  rP  rQ  r#   r"   ÚHTMLÚconvertrm  )rœ   rk  rÚ   Úmarko_parserÚ
parsed_astÚhtml_backend_clsÚhtml_strrq  ro  ÚstreamrL  Úhtml_optionsrÃ   Úhtml_backend_objs   `             r:   r}  ÚMarkdownDocumentBackend.converti  sî  ø€ Ü�
‰
Ð+Ô,äØ—Y‘Y—^‘^×- vØ$Ø×*Ñ*ñ
ˆô  4§9¡9§>¡>×#;°VÀFÑKˆà�=‰=�?Š?ä#›:ˆLØ%×+Ñ+¨D¯M©MÓ:ˆJà×"Ñ"Ø"ØØØ Ü›Ø!Ø)+Ø"$Ø)+Ø&(ð #ñ ð ×Ñ #ÐÑ&ð × Ñ  1Ó$ä#6Ð Ø×-Ñ-Ó/�õ ð )¬¨Ð8Ü$�~Ð%8Ð9ó�Eñ  6¸(ÑP’Hñ	ð
 %&�Ô!ä ¤ x¸'Ñ!BÓC�Ü!Ô"8¸$¿,¹,ÓG�
Ü1Ø'1×'DÑ'DØ(2×(FÑ(FØ!+×!8Ñ!8Ø)×4Ñ4Ø$)Ø#ñ �ô 'Ø#)Ü&×+Ñ+Ø,Ø!ŸY™YŸ^™^Ø$0ñ�ñ $4Ø!Ø#)Ø(ñ$Ð ð
 '×.Ñ.Ó0�ð
 ˆ
ô Ø)¨$×*<Ñ*<Ð)=Ð=aÐbóð r9   )
r»   r¼   r¹   rº   r·   r¶   rµ   r¸   r³   r´   )rf   rG   Úreturnz	list[str])rf   rG   r†  r&   )r†  rG   )r�   zmarko.block.Paragraphr†  r&   )rŽ   rG   r†  rG   )é
   )r�   rG   r•   r?   )r�   rG   r•   r?   r†  rG   rL   )rÃ   r#   r³   zUnion[BytesIO, Path]rÄ   z Optional[MarkdownBackendOptions])rÚ   r   )rF   NN)rÚ   r   rð   úOptional[NodeItem]rŽ   rG   rE   r&   rH   rG   rí   úOptional[Formatting]rî   úOptional[Union[AnyUrl, Path]])NN)rÚ   r   rð   rˆ  rŽ   rG   r@   r?   rí   r‰  rî   rŠ  )rÚ   r   rÿ   úlist[_CreationPayload]r   rG   rð   rˆ  r  údict[str, bool]r  údict[str, int]r  r�  r  údict[str, ListItem]rí   r‰  rî   rŠ  r†  rˆ  )r�   zmarko.element.Elementr  r?   rÚ   r   r  zset[marko.element.Element]rÿ   r‹  r  rŒ  r  r�  r  r�  r  rŽ  rð   rˆ  rí   r‰  rî   rŠ  )r†  r   )r   rG   r†  zOptional[ImageRef])r†  r&   )r†  zset[InputFormat])r†  r   )!r1   r2   r3   r4   r™   r£   rŒ   rm   Ústaticmethodri   rp   rt   rƒ   r�   r    r§   r   r°   ré   rò   r÷   r  r;  rM  r#  rW  r[  Úclassmethodr`  rd  r}  r8   Ú__classcell__)rÉ   s   @r:   r^   r^   �   s×  ø† Ø—’Ð:Ó;€JØŸš IÓ.Ðàó0ó ð0ð ó
ó ð
ð ó
ó ð
ð ó
ó ð
ð@ ó
Eó ð
Eöð0 57ðØ ðØ.1ðà	õð ð
 59ð	9àð9ð -ð9ð 2÷	9ó ð9ôv?ðN Ø+/Ø37ðàðð (ðð ð	ð
 ðð ðð )ðð 1õð4 ,0Ø37ðàðð (ðð ð	ð
 ðð )ðð 1õð44ð ð4ð /ð	4ð
 ð4ð (ð4ð #2ð4ð *ð4ð #1ð4ð  3ð4ð )ð4ð 1ð4ð 
ô4ðH +/Ø+/Ø37ñ!\ð 'ð\ð ð	\ð
 ð\ð ,ð\ð
ð\ð #2ð\ð *ð\ð #1ð\ð  3ð\ð (ð\ð )ð\ð  1õ!\ô|
"ô"Hôò#ð
 óó ðð ó ó ð ÷Oò Or9   r^   )rZ   r  r†  r&   )OÚ
__future__r   Úloggingr™   rš   Úcopyr   Úenumr   Úhtmlr   Úior   Úpathlibr   Útypingr	   r
   r   r   Údocling_core.types.docr   r   r   r   r   r   r   r   r   r   Úpydanticr   r   r   r   Útyping_extensionsr   r   Ú docling.backend.abstract_backendr   Údocling.backend.html_backendr   Ú+docling.backend.utils.image_resource_loaderr   Ú!docling.datamodel.backend_optionsr    r!   Údocling.datamodel.base_modelsr"   Údocling.datamodel.documentr#   Údocling.exceptionsr$   Údocling.utils.code_languager%   r'   rA   r(   rN   Úmarko.elementÚmarko.inliner)   r­   rÈ   Ú	getLoggerr1   r±   r®   Ú_MARKER_BODYr6  r7  rG   r,   r<   rC   Ú_CreationPayloadr\   r^   r0   r9   r:   Ú<module>rª     sT  ðö #ã Û 	Û Ý Ý Ý Ý Ý ß 1Ó 1÷÷ ÷ ÷ ;Ó :ß 1õõ =Ý K÷õ 6Ý 4Ý 0Ý <ð Ð �$Ó Ø*.Ð Ð'Ó .ðÛÛÛÝàÐð ×Ò˜Ó"€ðEð ð
 ,€Ø�|�n JÐ/€Ø�l�^ 9Ð-€ô˜3 ô ô˜iô ô
˜yô ð Ø	ØØ ð	"ññ 
˜Ñð	!ñÐ ôô6wÐ8õ wøðK ó ØÕûðús   Â+D$ Ä$D6Ä*D1Ä1D6