ó
    �®žjÞ¬  ã                  ó  • % S r SSKJr  SSKrSSKrSSKJrJr  SSKJ	r	  SSK
Jr  SSK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  SS	KJrJr  SS
KJr  SSK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+  SSK,J-r-  Sr.S\/S'   Sr0S\/S'    SSK1J2r2J3r3J4r4  SS
KJr  Sr.Sr7\Rp                  " \95      r:SS/r;S\/S'   Sr<S\/S '   S!r=S\/S"'   S#r>S\/S$'   S%r?S\/S&'   S'r@S\/S('   S)rAS\/S*'   S+S0S,S0S-S0S.S0S/\R„                  0S/\R†                  0S0.rDS1\/S2'   \" SS39 " S4 S55      5       rE " S6 S!\"5      rF " S7 S8\"5      rG " S9 S:\"5      rH " S; S<\"5      rI " S= S>\"5      rJ " S? S@\%5      rKg! \5 a  r6\6r0 Sr6C6NØSr6C6ff = f)Aa  Backend to parse articles in JATS (Journal Article Tag Suite) XML format.

JATS is a standard XML format used by publishers and journal archives including
PubMed Central (PMC), bioRxiv, and medRxiv for representing journal articles.

Security Note:
    This module uses lxml.etree.XMLParser with secure configuration to protect
    against XML External Entity (XXE) attacks and XML bombs. The parser is
    configured with:

    - resolve_entities: False (prevents entity resolution attacks)
    - no_network: True (blocks all network access)
    - dtd_validation: False (disables DTD validation)
    - load_dtd: False (prevents loading external DTDs)

    This configuration ensures safe parsing of JATS XML files while blocking
    external entity fetching and preventing XXE attacks.
é    )ÚannotationsN)Ú	dataclassÚreplace)ÚBytesIO)ÚPath)ÚFinalÚcast)	ÚDocItemLabelÚDoclingDocumentÚDocumentOriginÚ	GroupItemÚ
GroupLabelÚNodeItemÚ	TableCellÚ	TableDataÚTextItem)Ú
FormattingÚScript)Úetree)ÚAnyUrlÚValidationError)Ú	TypedDictÚoverride)ÚDeclarativeDocumentBackend)ÚHTMLDocumentBackend)ÚInputFormat)ÚInputDocument)ÚDocumentLoadErrorFÚboolÚ_BS4_AVAILABLEzImportError | NoneÚ_BS4_IMPORT_ERROR)ÚBeautifulSoupÚNavigableStringÚTagTz�The 'beautifulsoup4' and 'lxml' packages are required to process JATS files. Install them with `pip install 'docling-slim[format-xml-jats]'`.zJATS-journalpublishingzJATS-archivezFinal[list[str]]ÚJATS_DTD_URLÚAcknowledgmentsz
Final[str]ÚDEFAULT_HEADER_ACKNOWLEDGMENTSÚAbstractÚDEFAULT_HEADER_ABSTRACTÚ	FootnotesÚDEFAULT_HEADER_FOOTNOTESÚ
ReferencesÚDEFAULT_HEADER_REFERENCESzet al.ÚDEFAULT_TEXT_ETALz"{http://www.w3.org/1999/xlink}hrefÚ_XLINK_HREFÚboldÚitalicÚ	underlineÚstrikethroughÚscript)r0   r1   r2   ÚstrikeÚsubÚsupz*Final[dict[str, dict[str, bool | Script]]]Ú_JATS_FORMAT_TAG_MAP)Úslotsc                  óJ   • \ rS rSr% SrS\S'   S\S'   SrS\S	'   SrS
\S'   Srg)ÚInlineSegmentéZ   a%  An ordered inline run of styled text or an inline formula.

Attributes:
    label: Docling item label that classifies this inline run when it is
        emitted as a text item.
    text: Literal text carried by the run, or the LaTeX body when the run
        is a formula.
    formatting: Emphasis accumulated from the enclosing tags (bold, italic,
        underline, strike, sub, sup), or ``None`` when the run is unstyled.
    hyperlink: External link target inherited from an enclosing ``ext-link``,
        or ``None`` when the run is unlinked.
r
   ÚlabelÚstrÚtextNúFormatting | NoneÚ
formattingúAnyUrl | Path | NoneÚ	hyperlink© )	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__rA   rC   Ú__static_attributes__rD   ó    Ú]/home/mande/repo/quber/.venv/lib/python3.13/site-packages/docling/backend/xml/jats_backend.pyr;   r;   Z   s*   ‡ ñð ÓØ
ƒIØ$(€JÐ!Ó(Ø&*€IÐ#Ö*rL   r;   c                  ó*   • \ rS rSr% S\S'   S\S'   Srg)r(   éo   r>   r=   ÚcontentrD   N©rE   rF   rG   rH   rJ   rK   rD   rL   rM   r(   r(   o   s   ‡ ØƒJØ†LrL   c                  ó*   • \ rS rSr% S\S'   S\S'   Srg)ÚAuthorét   r>   Únamez	list[str]Úaffiliation_namesrD   NrQ   rD   rL   rM   rS   rS   t   s   ‡ Ø
ƒIØ Ö rL   rS   c                  óp   • \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S	'   S\S
'   S\S'   Srg)ÚCitationéy   r>   Úauthor_namesÚtitleÚsourceÚyearÚvolumeÚpageÚpub_idÚpublisher_nameÚpublisher_locrD   NrQ   rD   rL   rM   rX   rX   y   s2   ‡ ØÓØƒJØƒKØ
ƒIØƒKØ
ƒIØƒKØÓØÖrL   rX   c                  ó4   • \ rS rSr% S\S'   S\S'   S\S'   Srg)ÚTableé…   r>   r=   ÚcaptionrP   rD   NrQ   rD   rL   rM   rd   rd   …   s   ‡ ØƒJØƒLØ†LrL   rd   c                  ó4   • \ rS rSr% S\S'   S\S'   S\S'   Srg	)
ÚXMLComponentsé‹   r>   r[   úlist[Author]Úauthorsúlist[Abstract]ÚabstractrD   NrQ   rD   rL   rM   rh   rh   ‹   s   ‡ ØƒJØÓØÖrL   rh   c                  ól  ^ • \ rS rSrSr\S+U 4S jj5       r\S,S j5       r\\S,S j5       5       r	\S 5       r
\\S-S j5       5       r\S.S j5       r\S/S0S	 jj5       r\S1S
 j5       r\S2S j5       r\S3S j5       r\S4S j5       r\S2S j5       r\S5S j5       rS6S jrS7S jrS8S jrS9S jrS:S jr      S;S jrS;S jrS<S jrS2S jr        S=S jr\S>S j5       r\S?S j5       r \S@S j5       r!\SAS j5       r"\  SB       SCS jj5       r#\ S/         SDS jj5       r$\      SES  j5       r%\        SFS! j5       r&        S=S" jr'      S;S# jr(\SGS$ j5       r)        SHS% jr*        S=S& jr+S;S' jr,        S=S( jr-  SB           SIS) jjr.S*r/U =r0$ )JÚJatsDocumentBackendé‘   uü  Backend to parse articles in XML format tagged according to JATS definition.

The Journal Article Tag Suite (JATS) is an definition standard for the
representation of journal articles in XML format. Several publishers and journal
archives provide content in JATS format, including PubMed CentralÂ® (PMC), bioRxiv,
medRxiv, or Springer Nature.

Refer to https://jats.nlm.nih.gov for more details on JATS.

The code from this document backend has been developed by modifying parts of the
PubMed Parser library (version 0.5.0, released on 12.08.2024):
Achakulvisut et al., (2020).
Pubmed Parser: A Python Parser for PubMed Open-Access XML Subset and MEDLINE XML
  Dataset XML Dataset.
Journal of Open Source Software, 5(46), 1979,
https://doi.org/10.21105/joss.01979
c                ó0  >^^• [         (       d  [        [        5      [        e[        TU ]  X5        X l        S U l        SU l        SU l	         [        U R                  [        5      (       a  U R                  R                  S5        [        R                  " SSSSS9n[        R                  " U R                  US9U l        U R                   R"                  mTR$                  (       a&  ['        U4S j[(         5       5      (       a  SU l	        g TR*                  R-                  5        H=  mTR$                  (       d  M  ['        U4S j[(         5       5      (       d  M6  SU l	          g    g ! [.         a  n[1        SU R2                   S	35      UeS nAff = f)
Nr   FT)Úresolve_entitiesÚload_dtdÚ
no_networkÚdtd_validation)Úparserc              3  ó@   >#   • U  H  oTR                   ;   v •  M     g 7f©N©Ú
system_url)Ú.0ÚkwdÚdoc_infos     €rM   Ú	<genexpr>Ú/JatsDocumentBackend.__init__.<locals>.<genexpr>½   s   øé € ð +Ú6B¨s�x×*Ñ*Ö*²lùó   ƒc              3  ó@   >#   • U  H  oTR                   ;   v •  M     g 7frx   ry   )r{   r|   Úents     €rM   r~   r   Ã   s   øé € ð *Ú5A¨c˜3Ÿ>™>Ö)²\ùr€   z5Could not initialize JATS backend for file with hash Ú.)r    ÚImportErrorÚ_INSTALL_HINTr!   ÚsuperÚ__init__Úpath_or_streamÚrootÚhlevelÚvalidÚ
isinstancer   Úseekr   Ú	XMLParserÚparseÚtreeÚdocinforz   Úanyr%   ÚinternalDTDÚiterentitiesÚ	Exceptionr   Údocument_hash)ÚselfÚin_docrˆ   rv   Úexcr}   r‚   Ú	__class__s        @@€rM   r‡   ÚJatsDocumentBackend.__init__¤   s_  ú€ çŠ~ÜœmÓ,Ô2CÐCÜ‰Ñ˜Ô0Ø,Ôð &*ˆŒ	ØˆŒØ ˆŒ
ð	Ü˜$×-Ñ-¬w×7Ñ7Ø×#Ñ#×(Ñ(¨Ô+Ü—_’_Ø!&ØØØ$ñ	ˆFô -2¯KªKØ×#Ñ#¨Fñ-ˆDŒIð '+§i¡i×&7Ñ&7ˆHØ×"×"¤sô +Ý6Bó+÷ (ñ (ð "�”
ØØ×+Ñ+×8Ñ8Ö:�Ø—>—>‘>¤cô *Ý5Aó*÷ 'ó 'ð "&�D”JÙò ;øô ó 	Ü#ØGÈ×HZÑHZÐG[Ð[\Ð]óàðûð	ús1   ÁCE, Ä,E, Å E, Å E, Å)E, Å,
FÅ6FÆFc                ó   • U R                   $ rx   )r‹   ©r—   s    rM   Úis_validÚJatsDocumentBackend.is_validÍ   s   € à�z‰zÐrL   c                ó   • g)NFrD   ©Úclss    rM   Úsupports_paginationÚ'JatsDocumentBackend.supports_paginationÑ   s   € ð rL   c                ó„   • [        U R                  [        5      (       a  U R                  R                  5         S U l        g rx   )rŒ   rˆ   r   Úcloser�   s    rM   ÚunloadÚJatsDocumentBackend.unloadÖ   s/   € ä�d×)Ñ)¬7×3Ñ3Ø×Ñ×%Ñ%Ô'Ø"ˆÕrL   c                ó$   • [         R                  1$ rx   )r   ÚXML_JATSr¡   s    rM   Úsupported_formatsÚ%JatsDocumentBackend.supported_formatsÜ   s   € ô ×$Ñ$Ð%Ð%rL   c                óä  •  [        U R                  R                  =(       d    SSU R                  S9n[	        U R                  R
                  =(       d    SUS9nSU l        U R                  5       nU R                  X#5        U R                  R                  S5      nU R                  (       a.  [        U5      S:”  a  U R                  X R                  US   5        U R                  R                  S5      nU R                  (       a.  [        U5      S:”  a  U R                  X R                  US   5        U$ ! [         a,    [        R!                  ["        R$                  " 5       5         W$ f = f)NÚfilezapplication/xml)ÚfilenameÚmimetypeÚbinary_hash)rU   Úoriginr   z//bodyz//back)r   r®   rU   r–   r   ÚstemrŠ   Ú_parse_metadataÚ_add_metadatar�   Úxpathr‰   ÚlenÚ_walk_linearr•   Ú_logÚerrorÚ	tracebackÚ
format_exc)r—   r²   ÚdocÚxml_componentsÚbodyÚbacks         rM   ÚconvertÚJatsDocumentBackend.convertá   s  € ð	/ä#ØŸ™Ÿ™×1¨6Ø*Ø ×.Ñ.ñˆFô
 " t§y¡y§~¡~×'?¸ÈÑOˆCØˆDŒKð -1×,@Ñ,@Ó,BˆNð ×Ñ˜sÔ3ð —9‘9—?‘? 8Ó,ˆDØ�y�yœS ›Y¨›]Ø×!Ñ! #§y¡y°$°q±'Ô:ð —9‘9—?‘? 8Ó,ˆDØ�y�yœS ›Y¨›]Ø×!Ñ! #§y¡y°$°q±'Ô:ð ˆ
øô ó 	/Ü�J‰J”y×+Ò+Ó-Õ.àˆ
ð	/ús   ‚D5D9 Ä92E/Å.E/c                ó˜  • / SQnU R                   U;  a-  U R                  (       a  U R                  R                  SS5      OSn[        U 5       Hw  nUR                   U;  a  U[        R                  XA5      -  nU(       a  UR                  U5      U-   nX4R                  (       a  UR                  R                  SS5      OS-  nMy     U$ )N)Útermúdisp-formulaúinline-formulaÚ
Ú Ú )Útagr?   r   Úlistro   Ú	_get_textÚrstripÚtail)ÚnodeÚsepÚ	skip_tagsr?   Úchilds        rM   rÌ   ÚJatsDocumentBackend._get_text  s©   € â>ˆ	ð —‘ 	Ó)¨d¯i¯ið �I‰I×Ñ˜d CÔ(àð 	ô
 ˜$–ZˆEØ�y‰y 	Ó)àÔ+×5Ñ5°eÓAÑA�ÞØ—{‘{ 3Ó'¨#Ñ-�Ø·Z·Z�E—J‘J×&Ñ& t¨SÔ1ÀRÑGŠDñ  ð ˆrL   c                óR   • U (       a  SR                  U R                  5       5      $ S$ )NrÈ   rÉ   )ÚjoinÚsplit©r?   s    rM   Ú_normalize_whitespaceÚ)JatsDocumentBackend._normalize_whitespace  s   € æ)-ˆs�x‰x˜Ÿ
™
›Ó%Ð5°2Ð5rL   c                óf   • [         R                  SR                  U R                  5       5      5      $ )NrÈ   )ro   rØ   rÕ   Úitertext)rÏ   s    rM   Ú_get_node_textÚ"JatsDocumentBackend._get_node_text  s"   € ä"×8Ñ8¸¿¹À$Ç-Á-Ã/Ó9RÓSÐSrL   c                ó*  • / nU  H˜  nUR                   S:X  aD  [        R                  [        R                  U5      5      nU(       a  UR	                  U5        MU  MW  UR                   S:X  d  Mi  [        R                  U5      nU(       d  M‡  UR	                  U5        Mš     [        R                  SR                  U5      5      nU(       d  gU R                  S5      n[        U5      S:”  a&  [        R                  US   5      nU(       a  U SU 3$ U$ )NÚpÚsecrÈ   rÉ   útitle|labelr   ú: )
rÊ   ro   rØ   rÌ   ÚappendÚ_parse_abstract_sectionrÕ   r¶   r·   rÜ   )Úsection_nodeÚsection_textsÚ
child_nodeÚparagraph_textÚsection_textÚsection_contentÚ
label_noder=   s           rM   rä   Ú+JatsDocumentBackend._parse_abstract_section  só   € à#%ˆã&ˆJØ�~‰~ Ó$Ü!4×!JÑ!JÜ'×1Ñ1°*Ó=ó"�ö "Ø!×(Ñ(¨Ö8ñ "à—‘ 5Õ(Ü2×JÑJÈ:ÓV�ß�<Ø!×(Ñ(¨Ö6ñ 'ô .×CÑCØ�H‰H�]Ó#ó
ˆö Øà!×'Ñ'¨Ó6ˆ
Üˆz‹?˜QÓÜ'×6Ñ6°zÀ!±}ÓEˆEÞØ˜  ?Ð"3Ð4Ð4àÐrL   c                ó&  • / nS HJ  nU R                  U5       H2  n[        R                  U5      nU(       d  M!  UR                  U5        M4     ML     U(       a$  [        R	                  SR                  U5      5      $ [        R                  U 5      $ )N)Úprefixúgiven-namesÚsurnameÚsuffixrÈ   )r¶   ro   rÜ   rã   rØ   rÕ   )Ú	name_nodeÚ
name_partsÚtag_nameÚ	part_nodeÚ	part_texts        rM   Ú_parse_structured_nameÚ*JatsDocumentBackend._parse_structured_name9  sx   € à "ˆ
ÛFˆHØ&Ÿ_™_¨XÖ6�	Ü/×>Ñ>¸yÓI�	ß�9Ø×%Ñ% iÖ0ó 7ñ Gö Ü&×<Ñ<¸S¿X¹XÀjÓ=QÓRÐRä"×1Ñ1°)Ó<Ð<rL   c                óÂ   • S HY  nU R                  U5       HA  nUS:X  a  [        R                  U5      nO[        R                  U5      nU(       d  M=  Us  s  $    M[     g)N)rU   ústring-nameúcollab-nameÚcollabrU   rÉ   )r¶   ro   r÷   rÜ   )rÏ   rô   rò   rU   s       rM   Ú_parse_name_alternativesÚ,JatsDocumentBackend._parse_name_alternativesG  sW   € ãHˆHØ!ŸZ™Z¨Ö1�	Ø˜vÓ%Ü.×EÑEÀiÓP‘Dä.×=Ñ=¸iÓH�Dß�4Ø”Kó 2ñ Ið rL   c                óŽ  • U R                  S5       H#  n[        R                  U5      nU(       d  M!  Us  $    U R                  S5       H#  n[        R                  U5      nU(       d  M!  Us  $    U R                  S5       H#  n[        R	                  U5      nU(       d  M!  Us  $    S H=  nU R                  U5       H%  n[        R                  U5      nU(       d  M!  Us  s  $    M?     S H=  nU R                  U5       H%  n[        R	                  U5      nU(       d  M!  Us  s  $    M?     U R                  S5      (       a  gg)	NrU   rú   zname-alternatives)rû   rü   )zcollab-name-alternativeszcollab-alternativesÚ	anonymousÚ	AnonymousrÉ   )r¶   ro   r÷   rÜ   rý   )Úauthor_noderò   rU   Úalternatives_noderô   s        rM   Ú_parse_contrib_nameÚ'JatsDocumentBackend._parse_contrib_nameT  s+  € à$×*Ñ*¨6Ö2ˆIÜ&×=Ñ=¸iÓHˆDßˆtØ’ñ 3ð
 %×*Ñ*¨=Ö9ˆIÜ&×5Ñ5°iÓ@ˆDßˆtØ’ñ :ð
 "-×!2Ñ!2Ð3FÖ!GÐÜ&×?Ñ?Ð@QÓRˆDßˆtØ’ñ "Hó
 2ˆHØ(×.Ñ.¨xÖ8�	Ü*×9Ñ9¸)ÓD�ß�4Ø”Kó 9ñ 2ó LˆHØ%0×%6Ñ%6°xÖ%@Ð!Ü*×CÑCÐDUÓV�ß�4Ø”Kó &Añ Lð ×Ñ˜[×)Ñ)ØàrL   c                óŽ   • SS/nS nU H8  nU R                   R                  SU 35      n[        U5      S:”  d  M2  US   n  U$    U$ )Núarticle-metaúbook-part-metaú.//r   )r�   r¶   r·   )r—   Ú
meta_namesÚmetarU   rÏ   s        rM   Ú_find_metadataÚ"JatsDocumentBackend._find_metadatav  sW   € Ø!/Ð1AÐ Bˆ
Ø&*ˆÛˆDØ—9‘9—?‘? S¨¨ <Ó0ˆDÜ�4‹y˜1�}Ø˜A‘w�Øàˆñ ð ˆrL   c                óŒ  • / nU R                   R                  S5       GH!  n[        SSS9n/ nU H˜  nUR                  S:X  aD  [        R                  [        R                  U5      5      nU(       a  UR                  U5        MU  MW  UR                  S:X  d  Mi  [        R                  U5      nU(       d  M‡  UR                  U5        Mš     [        R                  SR                  U5      5      US'   UR                  S5      n[        U5      S	:”  a  [        R                  US	   5      US
'   UR                  U5        GM$     U$ )Nz.//abstractrÉ   )r=   rP   rß   rà   rÈ   rP   rá   r   r=   )r�   r¶   ÚdictrÊ   ro   rØ   rÌ   rã   rä   rÕ   r·   rÜ   )	r—   Úabs_listÚabs_noderm   Útextsrç   rè   ré   rë   s	            rM   Ú_parse_abstractÚ#JatsDocumentBackend._parse_abstract�  s  € Ø#%ˆàŸ	™	Ÿ™¨×6ˆHÜ!%¨B¸Ñ!;ˆHØ!ˆEã&�
Ø—>‘> SÓ(Ü%8×%NÑ%NÜ+×5Ñ5°jÓAó&�Nö &ØŸ™ ^Ö4ñ &à—^‘^ uÕ,Ü#6×#NÑ#NØ"ó$�L÷ $�|ØŸ™ \Ö2ñ 'ô #6×"KÑ"KØ—‘˜“ó#ˆH�YÑð "Ÿ™¨Ó6ˆJÜ�:‹ Ó"Ü$7×$FÑ$FÀzÐRSÁ}Ó$U�˜Ñ!à�O‰O˜H×%ñ5 7ð8 ˆrL   c                óR  • / nU R                  5       nUc  U$ / nUR                  S5       H¥  nSR                  UR                  5        Vs/ s H  oUR	                  5       (       d  M  UPM     sn5      nUR                  SS5      nUR                  S5      nU(       a!  UR                  US   R                   S35      nUR                  U5        M§     [        [        UR                  S5      U5      5      nUR                  S5       H�  n	S	/ S
.n
U	R                  S5       Vs/ s H  o»R                  S   PM     nnU H   nXØ;   d  M
  U
S   R                  X�   5        M"     [        R                  U	5      U
S'   U
S   (       d  M  UR                  U
5        M’     U$ s  snf s  snf )Nz.//aff[@id]ú, rÇ   rÈ   r=   r   z.//aff[@id]/@idz0.//contrib-group/contrib[@contrib-type="author"]rÉ   )rU   rV   zxref[@ref-type="aff"]ÚridrV   rU   )r  r¶   rÕ   rÛ   Ústripr   Úremoveprefixr?   rã   r  ÚzipÚattribro   r  )r—   rk   r  rV   Úaffiliation_nodeÚtÚaffr=   Úaffiliation_ids_namesr  ÚauthorÚaÚaffiliation_idsÚids                 rM   Ú_parse_authorsÚ"JatsDocumentBackend._parse_authors¢  s›  € à "ˆØ&*×&9Ñ&9Ó&;ˆØ‰<ØˆNàÐØ $§
¡
¨=Ö 9ÐØ—)‘)Ð(8×(AÑ(AÔ(CÓQÒ(C 1ÇwÁwÇyŸQÑ(CÑQÓRˆCØ—+‘+˜d CÓ(ˆCØ$×*Ñ*¨7Ó3ˆEÞà×&Ñ&¨%°©(¯-©-¨¸Ð';Ó<�Ø×$Ñ$ SÖ)ñ !:ô !%Ü�—
‘
Ð,Ó-Ð/@ÓAó!
Ðð
  Ÿ:™:Ø>ö
ˆKð Ø%'ñˆFð *5×):Ñ):Ð;RÔ)SóÚ)S A—‘˜”Ñ)Sð ð ó &�ØÕ.ØÐ.Ñ/×6Ñ6Ð7LÑ7PÖQñ &ô
 1×DÑDÀ[ÓQˆF�6‰NØ˜&—>Ùà�N‰N˜6Ö"ñ+
ð. ˆùòG Rùò*s   ÁF
Á'F
Ä$F$c           
     óL  ^• / SQn/ SQmU R                   R                  SR                  U Vs/ s H	  nSU S3PM     sn5      5       Vs/ s H5  nSR                  U4S j[        U5       5       5      R	                  5       PM7     nnSR                  U5      nU$ s  snf s  snf )	N)r  zcollection-metaz	book-metar  )úarticle-titleÚsubtitler[   r=   Ú|r	  z/title-grouprÈ   c              3  óœ   >#   • U  HA  nUR                   T;   d  M  UR                  R                  S S5      R                  5       v •  MC     g7f)rÇ   rÈ   N)rÊ   r?   r   r  )r{   ÚelemÚtitle_namess     €rM   r~   Ú3JatsDocumentBackend._parse_title.<locals>.<genexpr>Ù  sC   øé € ð â,�DØ—8‘8˜{Ñ*ó 5�—	‘	×!Ñ! $¨Ó,×2Ñ2×4Ð4Ú,ùs
   ƒA›1Az - )r�   r¶   rÕ   rË   r  )r—   r
  ÚitemÚ
title_nodeÚtitlesr?   r,  s         @rM   Ú_parse_titleÚ JatsDocumentBackend._parse_titleÐ  s²   ø€ ò!
ˆ
ò "Qˆð #Ÿi™iŸo™oØ—‘¹zÓJºz°t˜C ˜v \Ó2¹zÑJÓKôó	
ò�
ð �H‰Hô ä  Ô,óó ÷ ‰e‹gò	ñ
ð 	ð 	
ð �z‰z˜&Ó!ˆàˆùò Kùò	
s   ®BÁ<B!c                óf   • U R                  5       U R                  5       U R                  5       S.nU$ )zParsing JATS document metadata.)r[   rk   rm   )r1  r$  r  )r—   r¾   s     rM   r´   Ú#JatsDocumentBackend._parse_metadataç  s7   € ð ×&Ñ&Ó(Ø×*Ñ*Ó,Ø×,Ñ,Ó.ñ)
ˆð
 ÐrL   c                óè   • US    Hi  nUS   nUS   =(       d    [         nU(       d  M#  UR                  U R                  XPR                  S-   S9nUR	                  UU[
        R                  S9  Mk     g )Nrm   rP   r=   é   )Úparentr?   Úlevel©r7  r?   r=   )r)   Úadd_headingr‰   rŠ   Úadd_textr
   ÚTEXT)r—   r½   r¾   rm   r?   r[   r7  s          rM   Ú_add_abstractÚ!JatsDocumentBackend._add_abstractð  s~   € ð ' zÔ2ˆHØ  Ñ+ˆDØ! 'Ñ*×EÔ.EˆEÞÙØ—_‘_Ø—y‘y u·K±KÀ!±Oð %ð ˆFð �L‰LØØÜ"×'Ñ'ð ó ñ 3ð 	rL   c                óÌ  • US    Vs/ s H  o3S   PM	     nnSR                  U5      nUS    VVs/ s H  nUS     H  nUPM     M     nnnSR                  [        [        R                  U5      5      5      nU(       a)  UR	                  U R
                  U[        R                  S9  U(       a)  UR	                  U R
                  U[        R                  S9  g s  snf s  snnf )Nrk   rU   r  rV   z; r9  )rÕ   rË   r  Úfromkeysr;  r‰   r
   Ú	PARAGRAPH)	r—   r½   r¾   r.  rk   Úauthors_strr   ÚaffiliationsÚaffiliations_strs	            rM   Ú_add_authorsÚ JatsDocumentBackend._add_authors  sé   € ð 3AÀÒ2KÓLÒ2K¨$˜fœÑ2KˆÐLØ—i‘i Ó(ˆð )¨Ò3ô
â3�ØÐ2Õ3�ó á3ñ Ù3ð 	ñ 
ð
  Ÿ9™9¤T¬$¯-©-¸Ó*EÓ%FÓGÐÞØ�L‰LØ—y‘yØ Ü"×,Ñ,ð ñ ö
 Ø�L‰LØ—y‘yØ%Ü"×,Ñ,ð ñ ð 	ùò+ Mùó
s
   ˆC±C c                óÌ   • [        U[        5      (       a0  UR                  [        R                  :X  a  UR                  USUS9  g UR                  U[        R                  US9  g )NF)r?   Ú
enumeratedr7  )r?   r=   r7  )	rŒ   r   r=   r   ÚLISTÚadd_list_itemr;  r
   r<  )r—   r½   r7  r?   s       rM   Ú_add_citationÚ!JatsDocumentBackend._add_citation  sU   € Ü�fœi×(Ñ(¨V¯\©\¼Z¿_¹_Ó-LØ×Ñ 4°EÀ&ÐÑIð 	ð �L‰L˜d¬,×*;Ñ*;ÀFˆLÑKàrL   c           
     óÖ
  • SSSSSSSSSS.	n[         R                  S5        / nUR                  S5       H�  nUR                  S5      S   R                  R	                  SS5      R                  5       S-   UR                  S	5      S   R                  R	                  SS5      R                  5       -   nUR                  U5        M’     UR                  S
5      n[        U5      S:”  a-  US   R                  =(       d    [        nUR                  U5        SR                  U5      US'   / SQnS n	U H*  n
UR                  U
5      n[        U5      S:”  d  M%  US   n	  O   U	b  [        R                  U	5      O)UR                  R	                  SS5      R                  5       US'   / SQnU Hd  nUR                  U5      n[        U5      S:”  d  M%  US   R                  R	                  SS5      R                  5       X,R	                  SS5      '   Mf     [        UR                  S5      5      S:”  aÝ  / nUR                  S5       H«  nUR                  S5      =(       d    UR                  S5      nUR                  nU(       d  MA  U(       d  MJ  UR                  UR	                  SS5      R                  5       R                  5       S-   UR	                  SS5      R                  5       -   5        M­     U(       a  SR                  U5      US'   [        UR                  S5      5      S:”  a@  UR                  S5      S   R                  R	                  SS5      R                  5       US'   OÅ[        UR                  S5      5      S:”  a§  UR                  S5      S   R                  R	                  SS5      R                  5       US'   [        UR                  S5      5      S:”  aJ  US==   SUR                  S5      S   R                  R	                  SS5      R                  5       -   -  ss'   SnUS   (       a  UUS   R                  S5      S-   -  nUS   (       a  UUS   S-   -  nUS   (       a  UUS   S-   -  nUS   (       a   US    (       a  UUS     S3-  nUUS   S-   -  nUS!   (       a  UR                  S5      nUSUS!    S3-  nUS   (       a+  UR                  S5      nUS!   (       a  US"-  nUUS   S-   -  nUS#   (       a  UR                  S5      nUS$US#    S%3-  nUS   (       a  UR                  S5      S-   nUUS   -  n[         R                  S&5        U$ )'NrÉ   )	rZ   r[   r\   r]   r^   r_   r`   ra   rb   zCitation parsing startedz.//namerð   r   rÇ   rÈ   rï   z.//etalr  rZ   )r'  zchapter-titlez
data-titlezissue-titlez
part-titleztrans-titler[   )r\   r]   zpublisher-namezpublisher-locr^   Ú-Ú_zpub-idzassigning-authorityzpub-id-typerâ   r`   zelocation-idr_   ÚfpageÚlpageu   â€“rƒ   z. r\   ra   rb   r^   Ú:r]   z (z).zCitation flattened)r¹   Údebugr¶   r?   r   r  rã   r·   r.   rÕ   ro   rÌ   ÚgetÚupperrÍ   )r—   rÏ   ÚcitationÚnamesrò   Úname_strÚ	etal_nodeÚ	etal_textr0  r/  rU   Úfieldsr.  Ú	item_noder`   Úid_nodeÚid_typeÚid_textr?   s                      rM   Ú_parse_element_citationÚ+JatsDocumentBackend._parse_element_citation%  s2  € àØØØØØØØ Øñ

ˆô 	�
‰
Ð-Ô.ð ˆØŸ™ IÖ.ˆIà—‘ 	Ó*¨1Ñ-×2Ñ2×:Ñ:¸4ÀÓE×KÑKÓMØñà—/‘/ -Ó0°Ñ3×8Ñ8×@Ñ@ÀÀsÓK×QÑQÓSñTð ð
 �L‰L˜Ö"ñ /ð —J‘J˜yÓ)ˆ	Üˆy‹>˜AÓØ! !™×)Ñ)×>Ô->ˆIØ�L‰L˜Ô#Ø#'§9¡9¨UÓ#3ˆ�Ñ ò
ˆð -1ˆ
ÛˆDØŸ
™
 4Ó(ˆIÜ�9‹~ Õ!Ø& q™\�
Ùñ	 ð Ñ%ô  ×)Ñ)¨*Ô5à—‘×"Ñ" 4¨Ó-×3Ñ3Ó5ð 	�Ñò
ˆó ˆDØŸ
™
 4Ó(ˆIÜ�9‹~ Õ!à˜a‘L×%Ñ%×-Ñ-¨d°CÓ8×>Ñ>Ó@ð Ÿ™ c¨3Ó/Ó0ñ ô ˆt�z‰z˜(Ó#Ó$ qÓ(Ø "ˆFØŸ:™: hÖ/�Ø!Ÿ+™+Ð&;Ó<÷ ÀÇÁØ!óA�ð "Ÿ,™,�ß�7Ÿw˜wØ—M‘MØŸ™¨¨cÓ2×8Ñ8Ó:×@Ñ@ÓBØñà!Ÿ/™/¨$°Ó4×:Ñ:Ó<ñ=öñ 0ö Ø%)§Y¡Y¨vÓ%6�˜Ñ"ô ˆt�z‰z˜.Ó)Ó*¨QÓ.à—
‘
˜>Ó*¨1Ñ-×2Ñ2×:Ñ:¸4ÀÓE×KÑKÓMð �VÒô �—‘˜GÓ$Ó%¨Ó)Ø#Ÿz™z¨'Ó2°1Ñ5×:Ñ:×BÑBÀ4ÈÓM×SÑSÓUˆH�VÑÜ�4—:‘:˜gÓ&Ó'¨!Ó+Ø˜Ó Ø˜DŸJ™J wÓ/°Ñ2×7Ñ7×?Ñ?ÀÀcÓJ×PÑPÓRÑRñÓ ð ˆØ�N×#Ø�H˜^Ñ,×3Ñ3°CÓ8¸4Ñ?Ñ?ˆDØ�G×Ø�H˜WÑ%¨Ñ,Ñ,ˆDØ�H×Ø�H˜XÑ&¨Ñ-Ñ-ˆDØÐ$×%Ø˜×(Ø˜8 OÑ4Ð5°RÐ8Ñ8�Ø�HÐ-Ñ.°Ñ5Ñ5ˆDØ�H×Ø—;‘;˜tÓ$ˆDØ�a˜ Ñ*Ð+¨2Ð.Ñ.ˆDØ�F×Ø—;‘;˜tÓ$ˆDØ˜×!Ø˜‘�Ø�H˜VÑ$ tÑ+Ñ+ˆDØ�F×Ø—;‘;˜tÓ$ˆDØ�b˜ &Ñ)Ð*¨"Ð-Ñ-ˆDØ�H×Ø—;‘;˜sÓ# dÑ*ˆDØ�H˜XÑ&Ñ&ˆDä�
‰
Ð'Ô(àˆrL   c                óx   • [         R                  U5      nU(       a  UR                  [        R                  XBS9  g )N©r=   r?   r7  )ro   Ú_extract_tex_mathr;  r
   ÚFORMULA)r—   r½   r7  rÏ   Úformulas        rM   Ú_add_equationÚ!JatsDocumentBackend._add_equation£  s0   € ô &×7Ñ7¸Ó=ˆÞØ�L‰Lœ|×3Ñ3¸'ˆLÑQàrL   c                óh  • U R                   (       d  g U R                   R                  5       nS Hv  n[        U5      S[        U5      -  :”  d  M   UR                  U5      (       d  M8  UR	                  U5      (       d  MP  U[        U5      [        U5      *  R                  5       n  O   U=(       d    S $ )N)ú$$Ú$é   )r?   r  r·   Ú
startswithÚendswith)rÏ   r?   Ú	delimiters      rM   rd  Ú%JatsDocumentBackend._extract_tex_math¬  s‡   € à�y�yØØ�y‰y�‰Ó ˆÛ$ˆIä�D“	˜A¤ I£Ñ.Õ.Ø—O‘O I×.Ó.Ø—M‘M )×,Ó,àœC 	›N¬c°)«n¨_Ð=×CÑCÓE�Ùñ %ð �|�tÐrL   c                ól   • U[         ;  a  U $ U (       a  U O	[        5       nUR                  [         U   S9$ )N)Úupdate)r8   r   Ú
model_copy)rA   rÊ   Úbases      rM   Ú_merge_formattingÚ%JatsDocumentBackend._merge_formatting»  s3   € àÔ*Ó*ØÐÞ'‰z¬Z«\ˆØ�‰Ô&:¸3Ñ&?ˆÐ@Ð@rL   c                ó†   • U b  U R                  5       =n (       d  g  [        U 5      $ ! [         a    [        U 5      s $ f = frx   )r  r   r   r   )Úhrefs    rM   Ú_parse_ext_link_hrefÚ(JatsDocumentBackend._parse_ext_link_hrefÂ  sB   € à‰<¨¯
©
«Ð 4 Õ 4Øð	Ü˜$“<ÐøÜó 	Ü˜“:Òð	ús   �
( ¨A ¿A c                ó’   • / nU  H>  nUR                   R                  5       nU(       d  M&  UR                  [        X#S95        M@     U$ )Nr×   )r?   r  rã   r   )ÚsegmentsÚstrippedÚsegmentr?   s       rM   Ú_strip_segmentsÚ#JatsDocumentBackend._strip_segmentsË  s@   € à(*ˆÛˆGØ—<‘<×%Ñ%Ó'ˆDßˆtØ—‘¤¨Ñ ;Ö<ñ  ð ˆrL   c           
     ó"  • [         R                  XR                  5      n/ nU R                  (       aL  U R                  R	                  SS5      nU(       a)  UR                  [        [        R                  UUUS95        U  GH	  nUR                  n[        U[        5      (       a  UR                  S5      (       a  OlUS:X  aA  [         R                  U5      nUb(  UR                  [        [        R                  UUS95        O%UR                  [         R                  XcU5      5        UR                   (       d  M»  UR                   R	                  SS5      n	U	(       d  Mà  UR                  [        [        R                  U	UUS95        GM     U$ )NrÇ   rÈ   ©r=   r?   rA   rC   z}mathútex-math)r=   r?   rC   )ro   ru  rÊ   r?   r   rã   r;   r
   r<  rŒ   r>   rn  rd  re  ÚextendÚ_walk_inline_formularÎ   )
rÏ   rA   rC   Úcurrentr|  r?   rÒ   rÊ   rf  rÎ   s
             rM   r…  Ú(JatsDocumentBackend._walk_inline_formulaÔ  sI  € ô &×7Ñ7¸
ÇHÁHÓMˆØ(*ˆØ�9�9Ø—9‘9×$Ñ$ T¨3Ó/ˆDÞØ—‘Ü!Ü*×/Ñ/Ø!Ø#*Ø"+ñ	ôô ˆEØ—)‘)ˆCÜ˜c¤3×'Ñ'¨3¯<©<¸×+@Ñ+@àØ˜
Ó"Ü-×?Ñ?ÀÓF�ØÑ&Ø—O‘OÜ%Ü".×"6Ñ"6Ø!(Ø&/ñôøð —‘Ü'×<Ñ<¸UÈYÓWôð �z�z‰zØ—z‘z×)Ñ)¨$°Ó4�ß�4Ø—O‘OÜ%Ü".×"3Ñ"3Ø!%Ø'.Ø&/ñ	÷ñ- ð< ˆrL   c           	     óh  • UR                  SS5      nU(       d  gU (       ah  U S   R                  [        R                  :X  aG  U S   R                  U:X  a4  U S   R
                  U:X  a!  [        U S   U S   R                  U-   S9U S'   gU R                  [        [        R                  UUUS95        g)zAAppend text, coalescing when formatting and hyperlink both match.rÇ   rÈ   Néÿÿÿÿr×   r‚  )	r   r=   r
   r<  rA   rC   r?   rã   r;   )r|  r?   rA   rC   s       rM   Ú_append_runÚJatsDocumentBackend._append_run  s¢   € ð �|‰|˜D #Ó&ˆÞØæØ˜‘×"Ñ"¤l×&7Ñ&7Ó7Ø˜‘×'Ñ'¨:Ó5Ø˜‘×&Ñ&¨)Ó3ä" 8¨B¡<°h¸r±l×6GÑ6GÈ$Ñ6NÑOˆH�RŠLà�O‰OÜÜ&×+Ñ+ØØ)Ø'ñ	õrL   c                óä   • U Hj  nUR                   [        R                  :X  a8  [        R	                  U UR
                  UR                  UR                  5        MY  U R                  U5        Ml     g)zIExtend ``segments``, coalescing text with equal formatting and hyperlink.N)	r=   r
   r<  ro   rŠ  r?   rA   rC   rã   )r|  Úmorer~  s      rM   Ú_extend_segmentsÚ$JatsDocumentBackend._extend_segments#  sX   € ó
 ˆGØ�}‰}¤× 1Ñ 1Ó1Ü#×/Ñ/ØØ—L‘LØ×&Ñ&Ø×%Ñ%ö	ð —‘ Ö(ò rL   c           	     ó  • [         R                  U5      nU(       d  g[        U5      S:”  a  U R                  US9OUnU H>  nU R	                  UR
                  UR                  UR                  UR                  US9  M@     g)zHEmit inline segments under ``parent``, wrapping many in an inline group.Nr6  ©r7  )r=   r?   rA   rC   r7  )	ro   r  r·   Úadd_inline_groupr;  r=   r?   rA   rC   )r½   r7  r|  Ú	containerr~  s        rM   Ú_emit_inlineÚ JatsDocumentBackend._emit_inline3  sy   € ô
 '×6Ñ6°xÓ@ˆÞØÜ;>¸x»=È1Ó;L�C×(Ñ(°Ð(Ñ7ÐRXˆ	ÛˆGØ�L‰LØ—m‘mØ—\‘\Ø"×-Ñ-Ø!×+Ñ+Ø ð ó ò  rL   c                ó6  • UR                  S5      nU(       a&  [        R                  US   5      R                  5       OSnUR                  S5      n[	        U5      S:”  ai  Sn[        US   5       HD  nUR                  S5      (       a  M  U[        R                  U5      R                  5       S-   -  nMF     UR                  5       nOS nU U(       a	  U(       a  SOS U 3n	U	(       a  UR                  [        R                  U	S9OS n
UR                  X*S9  g )	Nr=   r   rÉ   rf   ú.//supplementary-materialrÈ   ©r=   r?   )r7  rf   )
r¶   ro   rÌ   r  r·   rË   r;  r
   ÚCAPTIONÚadd_picture)r—   r½   r7  rÏ   rë   r=   Úcaption_noderf   Úcaption_parÚfig_textÚfig_captions              rM   Ú_add_figure_captionsÚ(JatsDocumentBackend._add_figure_captionsE  s  € ð —Z‘Z Ó(ˆ
æDNÔ×)Ñ)¨*°Q©-Ó8×>Ñ>Ô@ÐTVð 	ð —z‘z )Ó,ˆäˆ|Ó˜qÓ ØˆGÜ# L°¡OÖ4�Ø×$Ñ$Ð%@×AÑAÙØÔ.×8Ñ8¸ÓE×KÑKÓMÐPSÑSÑS’ñ  5ð —m‘m“o‰GàˆGð !˜'®¶7¡#ÀÐ!CÀGÀ9ÐMˆö ð �L‰Lœ|×3Ñ3¸(ˆLÑCàð 	ð 	�‰˜vˆÑ;àrL   c                ój   • U R                  X5        U R                  X5        U R                  X5        g rx   )Ú
_add_titlerE  r=  ©r—   r½   r¾   s      rM   rµ   Ú!JatsDocumentBackend._add_metadatae  s/   € ð 	�‰˜Ô,Ø×Ñ˜#Ô.Ø×Ñ˜3Ô/àrL   c                óö  • U R                  S5      nUb  [        R                  S5        g SnSnU " S5       H¥  nSnSn[        U[        5      (       d  M  U" SS/5       H`  n[        U[        5      (       d  M  [        [        U5      n[        R                  " U5      u  pšXY-  nUR                  S:X  d  U
S:X  d  M^  S	nMb     [        X55      nU(       a  M   US-  nM§     [        R                  S
U SU S35        [        U5       Vs/ s H  n[        U5       Vs/ s H  nS PM     snPM!     nn[        X#/ S9nSnSnU " S5       GH#  n[        U[        5      (       d  M  U" SS/5      nSnSnU HR  n[        U[        5      (       d  M  [        R                  " U5      u  pºUR                  S:X  a  S	nS	nMH  U
S:X  d  MP  S	nMT     U(       d  US-  nSnOUS-  nSnU GH…  n[        U[        5      (       d  M  U" S5       HR  nUR                  R                  S5      n[        U5      S:X  d  M/  SUS    S3nUR                  [!        U5      5        MT     [        R"                  " U5      R%                  5       n[        R                  " U5      u  pšU(       a  U
S-  n
UU:  a#  XÏU-      U   b  US-  nUU:  a  XÏU-      U   b  M  [        XîU
-   5       H8  n[        U	5       H&  nUU-   U:  d  M  UU-   U:  d  M  UXÏU-      UU-   '   M(     M:     ['        UU
U	Xï-   Xï-   U
-   UUU	-   UU(       + =(       a    UR                  S:H  S9	nUR(                  R+                  U5        GMˆ     GM&     U$ s  snf s  snf )NÚtablezSkipping nested table.r   ÚtrTÚtdÚthr6  FzThe table has z
 rows and z cols.)Únum_rowsÚnum_colsÚtable_cellsr‰  rÆ   rj  é   )	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)Úfindr¹   rS  rŒ   r$   r	   r   Ú_get_cell_spansrU   ÚmaxÚranger   r?   rÖ   r·   Úreplace_withr#   Úget_textr  r   r¬  rã   )ÚelementÚnested_tablesrª  r«  ÚrowÚ	col_countÚis_row_headerÚcellÚcell_tagr¯  r®  rO  ÚgridÚdataÚstart_row_spanÚrow_idxÚcellsÚ
col_headerrµ  Ú	html_cellÚcol_idxrf  Ú
math_partsÚmath_formular?   ÚrÚcÚ
table_cells                               rM   Úparse_table_dataÚ$JatsDocumentBackend.parse_table_datan  s‹  € ð  Ÿ™ WÓ-ˆØÑ$Ü�J‰JÐ/Ô0Øð ˆØˆÙ˜4–=ˆCØˆIØ ˆMÜ˜c¤3×'Ñ'ÙÙ˜T 4˜LÖ)�Ü! #¤s×+Ñ+ÙÜ¤ T›?�Ü%8×%HÒ%HÈÓ%RÑ"�ØÑ%�	Ø—=‘= DÓ(¨H¸­MØ$)’Mñ *ô ˜8Ó/ˆHß �=Ø˜A‘’ñ !ô" 	�
‰
�^ H :¨Z¸°zÀÐHÔIä?DÀX¼ÓOº¸!¤U¨8¤_Ó5¢_ “t¡_Ô5¹ˆÐOä (È2ÑNˆð ˆØˆÙ˜4—=ˆCÜ˜c¤3×'Ñ'Ùñ ˜˜t˜Ó%ˆEð ˆJØˆJÛ"�	Ü˜i¬×-Ó-Ü"5×"EÒ"EÀiÓ"P‘K�AØ —~‘~¨Ó-Ø%*˜
Ø%*š
Ø! Q�Ø%*š
ñ #ö Ø˜1‘�Ø!"‘à !Ñ#�ð ˆGÜ"�	Ü! )¬S×1Ñ1Ùñ  )Ð)9Ö:�GØ!(§¡×!3Ñ!3°DÓ!9�JÜ˜:“¨!Õ+Ø)+¨J°q©M¨?¸"Ð'=˜Ø×,Ñ,¬_¸\Ó-JÖKñ	  ;ô +×3Ò3°IÓ>×DÑDÓF�Ü%8×%HÒ%HÈÓ%SÑ"�ÞØ ‘M�Hà˜hÓ&Ø ~Ñ5Ñ6°wÑ?ÑKà˜q‘L�Gð ˜hÓ&Ø ~Ñ5Ñ6°wÑ?ÓKô ˜~ÀÑ/HÖI�AÜ" 8ž_˜Ø" Q™;¨Õ1°gÀ±kÀHÕ6LØ=A˜D¨1¡Ñ-¨g¸©kÓ:ó -ñ Jô
 'ØØ%Ø%Ø)7Ñ)AØ'5Ñ'?À(Ñ'JØ)0Ø'.°Ñ'9Ø",Ø%/¤× K°Y·^±^ÀtÑ5Kñ
�
ð × Ñ ×'Ñ'¨
×3ôK #ñ5 !ðB ˆùòQ 6ùÒOs   Ä	M6ÄM1
Ä(M6Í1M6c                óR  • [        US   S5      nUR                  S5      n[        U[        5      (       d  g [        R                  U5      nUS   nUS   nU U(       a	  U(       a  SOS U 3n	U	(       a  UR                  [        R                  U	S9OS n
Ub  UR                  XbU
S	9  g )
NrP   zhtml.parserr¦  r=   rf   rÈ   rÉ   r˜  )rÄ  r7  rf   )
r"   r¶  rŒ   r$   ro   rÐ  r;  r
   r™  Ú	add_table)r—   r½   r7  Útable_xml_componentÚsoupÚ	table_tagrÄ  r=   rf   Ú
table_textÚtable_captions              rM   Ú
_add_tableÚJatsDocumentBackend._add_tableÖ  s±   € ô Ð0°Ñ;¸]ÓKˆØ—I‘I˜gÓ&ˆ	Ü˜)¤S×)Ñ)Øä"×3Ñ3°IÓ>ˆà# GÑ,ˆØ% iÑ0ˆØ"˜G®5¶W¡CÀ"Ð#EÀgÀYÐOˆ
ö ð �L‰Lœ|×3Ñ3¸*ˆLÑEàð 	ð
 ÑØ�M‰M˜t¸MˆMÑJàrL   c                óT  • SSSS.n[        UR                  S5      5      S:”  a  UR                  S5      S   nO5[        UR                  S5      5      S:”  a  UR                  S5      S   nOS nUb(  [        R                  " U5      R	                  S5      US'   UR                  S5      nU(       ai  Sn[        US   5       HD  nUR                  S	5      (       a  M  U[        R                  U5      R                  5       S
-   -  nMF     UR                  5       nOS nUb  XtS'   [        UR                  S5      5      S:”  a!  UR                  S5      S   R                  US'    U R                  XU5        g ! [         a&    [        R                  SU R                  < 35         g f = f)NrÉ   )r=   rf   rP   r¦  r   zalternatives/tablezutf-8rP   rf   r—  rÈ   r=   zSkipping unsupported table in )r·   r¶   r   ÚtostringÚdecoderË   ro   rÌ   r  r?   rÙ  r•   r¹   Úwarningr®   )	r—   r½   r7  rÏ   r¦  Útable_content_noder›  rf   rœ  s	            rM   Ú_add_tablesÚJatsDocumentBackend._add_tablesí  s”  € ð "$°¸rÑBˆô ˆt�z‰z˜'Ó"Ó# aÓ'Ø!%§¡¨GÓ!4°QÑ!7ÑÜ�—‘Ð0Ó1Ó2°QÓ6Ø!%§¡Ð,@Ó!AÀ!Ñ!DÑà!%ÐØÑ)Ü$Ÿ~š~Ð.@ÓA×HÑHÈÓQˆE�)Ñð —z‘z )Ó,ˆæØˆGÜ# L°¡OÖ4�Ø×$Ñ$Ð%@×AÑAÙØÔ.×8Ñ8¸ÓE×KÑKÓMÐPSÑSÑS’ñ  5ð —m‘m“o‰GàˆGØÑØ&�)Ñô ˆt�z‰z˜'Ó"Ó# aÓ'Ø!ŸZ™Z¨Ó0°Ñ3×8Ñ8ˆE�'‰Nð	IØ�O‰O˜C¨Ô/ð 	øô ó 	IÜ�L‰LÐ9¸$¿)¹)¹ÐGÕHàð	Iús   Å$E7 Å7-F'Æ&F'c                óR   • UR                  S US   [        R                  S9U l        g )Nr[   r9  )r;  r
   ÚTITLEr‰   r£  s      rM   r¢  ÚJatsDocumentBackend._add_title  s0   € Ø—L‘LØØ Ñ(Ü×$Ñ$ð !ð 
ˆŒ	ð
 	rL   c                ó8  • UR                  SS9 Vs/ s H+  n[        R                  [        R                  U5      5      PM-     nnU(       d  g UR	                  S5      nU(       a%  [        R                  US   5      =(       d    [        O[        nU R                  S-   nUR                  XrUS9n	UR                  [        R                  SU	S9n
U HA  nUR                  U
S	S
9nUR                  US9nUR                  [        R                   UUS9  MC     g s  snf )NÚfn)rÊ   r[   r   r6  ©r?   r7  r8  Ú	footnotes©r=   rU   r7  rÉ   )r7  r?   r‘  rc  )Úiterchildrenro   rØ   rÌ   r¶   rÜ   r+   rŠ   r:  Ú	add_groupr   rI  rJ  r’  r;  r
   ÚFOOTNOTE)r—   r½   r7  rÏ   ræ  rè  r[   Ú
title_textrŠ   ÚheadingÚfootnote_groupr.  Ú	list_itemÚinline_items                 rM   Ú_add_footnote_groupÚ'JatsDocumentBackend._add_footnote_group  s"  € ð ×'Ñ'¨DÐ'Ñ1ó 
â1�ô  ×5Ñ5Ô6I×6SÑ6SÐTVÓ6WÖXÙ1ð 	ð  
ö ØØ—
‘
˜7Ó#ˆö ô  ×.Ñ.¨u°Q©xÓ8×TÔ<Tøä)ð 	ð
 —k‘k A‘oˆØ—/‘/ zÈ�/ÐOˆØŸ™Ü—/‘/ØØð 'ð 
ˆó
 ˆDØ×)Ñ)°ÀbÐ)ÐIˆIØ×.Ñ.°iÐ.Ð@ˆKØ�L‰LÜ"×+Ñ+ØØ"ð ó ò ùò' 
s   ’2Dc           	     óÔ
  • S/n/ SQnUn[         R                  XCR                  5      n	Un
UR                  S:X  a-  [         R                  UR	                  [
        5      5      nUb  Un
/ nUR                  U;  a1  UR                  (       a   [         R                  XÃR                  Xš5        [        U5       GH…  nSnUR                  S:X  a(  UR                  U;   a  [         R                  XU5        / nUR                  S;   a‰  UR                  S5      nS n[        U5      S:”  a  [         R                  US   5      nOUR                  S	:X  a  [        nU(       a/  U =R                  S
-  sl        UR                  UX R                  S9nGOðUR                  S:X  a!  UR!                  ["        R$                  SUS9nGO¿UR                  S:X  a»  / n/ nU Hj  nUR                  S:X  a4  UR'                  [         R                  U5      R)                  5       5        MG  UR                  S:X  d  MY  UR'                  U5        Ml     SR+                  S U 5       5      nUR-                  UUS9nU H  nU R/                  XU5        M     SnGOôUR                  S:X  a  U R1                  XU5        SnGOÎUR                  S:X  a  U R3                  XU5        SnGO¨UR                  S:X  a  SnGO”UR                  S:X  a  U R5                  UUU5        SnGOmUR                  S:X  a~  UR                  S:w  an  UR                  S5      n[        U5      S:”  a  [         R                  US   5      O[6        nUR                  UUS9nUR!                  U["        R$                  SS9nOßUR                  S:X  a&  U R9                  U5      nU R;                  XU5        SnO©UR                  S:X  a8  [         R                  U5      R)                  5       nU R;                  XU5        SnOaUR                  S:X  a  U R=                  XU5        SnO<UR                  S:X  a,  [         R?                  U[         RA                  XÙU
5      5        SnU(       dƒ  U R/                  XXÙU
5      nURC                  5       R                  S:X  a  UR                  U;   d  [         R?                  UU5        UR                  S;   a  W(       a  U =R                  S
-  sl        URD                  (       d  GMe  [         R                  XÍRD                  Xš5        GMˆ     UR                  S:X  a  [         R                  XU5        / $ U$ )NrÄ   )Úackrà   rË   z
boxed-textrÅ   Úfigzext-linkFrß   )rà   rõ  rá   r   rõ  r6  rç  rË   ré  z	list-itemrÈ   c              3  ó6   #   • U  H  o(       d  M  Uv •  M     g 7frx   rD   )r{   Úparts     rM   r~   Ú3JatsDocumentBackend._walk_linear.<locals>.<genexpr>}  s   é € ÐD²¨»t§¡²ùs   ‚
�	)r?   r7  Trö  z
table-wrapzsuplementary-materialzfn-groupzref-list)r7  r=   rU   zelement-citationzmixed-citationrƒ  rÆ   )#ro   ru  rÊ   ry  rT  r/   r?   rŠ  rË   r”  r¶   r·   rÌ   r'   rŠ   r:  rë  r   rI  rã   r  rÕ   rJ  r¸   rŸ  rà  rò  r-   r`  rK  rg  rŽ  r…  Ú	getparentrÎ   )r—   r½   r7  rÏ   rA   rC   rÑ   Ú
flush_tagsÚ
new_parentr†  Úcurrent_hyperlinkÚext_linkÚinline_segmentsrÒ   Ú	stop_walkÚheaderr?   Ú
text_partsÚnested_listsr+  ÚnestedÚchild_segmentss                         rM   r¸   Ú JatsDocumentBackend._walk_linear@  s¾  € ð �Hˆ	ÚPˆ
Ø%ˆ
Ü%×7Ñ7¸
ÇHÁHÓMˆØ%ÐØ�8‰8�zÓ!Ü*×?Ñ?ÀÇÁÌÓ@UÓVˆHØÑ#Ø$,Ð!Ø/1ˆØ�8‰8˜9Ó$¨¯¯Ü×+Ñ+Ø§¡¨Gôô ˜$—ZˆEØ#ˆIð �x‰x˜3‹ 5§9¡9°
Ó#:Ü#×0Ñ0°¸oÔNØ"$�ð �y‰y˜NÓ*ØŸ™ ]Ó3�Ø#'�Ü�v“; “?Ü.×8Ñ8¸À¹ÓC‘DØ—Y‘Y %Ó'Ü9�DÞØ—K’K 1Ñ$•KØ!$§¡Ø!¨&¿¹ð "1ð "�Jùð —‘˜fÓ$Ø Ÿ]™]Ü$Ÿ/™/°¸vð +ð ’
ð —‘˜kÓ)ð )+�
Ø57�ã!�DØ—x‘x 3“Ø"×)Ñ)Ô*=×*GÑ*GÈÓ*M×*SÑ*SÓ*UÖVØŸ™ VÕ+Ø$×+Ñ+¨DÖ1ñ	 "ð —x‘xÑD±ÓDÓD�à ×.Ñ.ØØ!ð /ð �
ó
 +�FØ×%Ñ% c°vÖ>ñ +ð !’	à—‘˜eÓ#Ø×)Ñ)¨#°uÔ=Ø ’	Ø—‘˜lÓ*Ø× Ñ  ¨eÔ4Ø ’	Ø—‘Ð5Ó5Ø ’	Ø—‘˜jÓ(Ø×(Ñ(ØØØôð
 !’	Ø—‘˜jÓ(¨T¯X©X¸Ó-CØŸ™ ]Ó3�ô ˜6“{ Q“ô (×1Ñ1°&¸±)Ô<ä2ð ð
 !Ÿ_™_°$¸v˜_ÐF�
Ø Ÿ]™]Ø%¬Z¯_©_À6ð +ð ‘
ð —‘Ð0Ó0Ø×3Ñ3°EÓ:�Ø×"Ñ" 3°Ô5Ø ‘	Ø—‘Ð.Ó.Ü*×4Ñ4°UÓ;×AÑAÓC�Ø×"Ñ" 3°Ô5Ø ‘	Ø—‘˜jÓ(Ø×"Ñ" 3°Ô6Ø ‘	Ø—‘Ð.Ó.ä#×4Ñ4Ø#Ü'×<Ñ<ØÐ(9óôð !�	ö Ø!%×!2Ñ!2Ø UÐ5Fó"�ð Ÿ™Ó(×,Ñ,°Ó3¸¿¹ÀJÓ8NÜ'×8Ñ8Ø'¨ôð —9‘9 Ó.¶4Ø—K’K 1Ñ$•Kð �z�zŠzÜ#×/Ñ/Ø#§Z¡Z°÷ñ_  ðh �8‰8�s‹?Ü×,Ñ,¨S¸/ÔJØˆIØÐrL   )rŠ   rˆ   r‰   r�   r‹   )r˜   r   rˆ   zBytesIO | PathÚreturnÚNone)r  r   )r  zset[InputFormat])r  r   rx   )rÏ   úetree._ElementrÐ   ú
str | Noner  r>   )r?   r
  r  r>   )rÏ   r	  r  r>   )rå   r	  r  r>   )rò   r	  r  r>   )r  r	  r  r>   )r  zetree._Element | None)r  rl   )r  rj   )r  r>   )r  rh   )r½   r   r¾   rh   r  r  )r½   r   r7  r   r?   r>   r  r  )r½   r   r7  r   rÏ   r	  r  r  )rÏ   r	  r  r
  )rA   r@   rÊ   r>   r  r@   )rx  r
  r  rB   )r|  úlist[InlineSegment]r  r  )NN)rÏ   r	  rA   r@   rC   rB   r  r  )
r|  r  r?   r>   rA   r@   rC   rB   r  r  )r|  r  r�  r  r  r  )r½   r   r7  r   r|  r  r  r  )r¼  r$   r  zTableData | None)r½   r   r7  r   rÔ  rd   r  r  )r½   r   r7  r   rÏ   r	  rA   r@   rC   rB   r  r  )1rE   rF   rG   rH   rI   r   r‡   rž   Úclassmethodr£   r§   r«   rÁ   ÚstaticmethodrÌ   rØ   rÜ   rä   r÷   rý   r  r  r  r$  r1  r´   r=  rE  rK  r`  rg  rd  ru  ry  r  r…  rŠ  rŽ  r”  rŸ  rµ   rÐ  rÙ  rà  r¢  rò  r¸   rK   Ú__classcell__)rš   s   @rM   ro   ro   ‘   sò  ø† ñð$ ö&ó ð&ðP óó ðð Øóó ó ðð ñ#ó ð#ð
 Øó&ó ó ð&ð óó ðð> õó ðð" ó6ó ð6ð óTó ðTð óó ðð: ó=ó ð=ð ó
ó ð
ð óó ðôB	ôôB,ô\ô.ðØ"ðØ4Aðà	ôô&ô4ô|ð|Ø"ðØ,4ðØ<Jðà	ôð óó ðð óAó ðAð óó ðð óó ðð ð )-Ø*.ð0Øð0à%ð0ð (ð0ð 
ô	0ó ð0ðd ð
 +/ð	Ø%ðàðð &ðð (ð	ð
 
ôó ðð6 ð)Ø%ð)Ø-@ð)à	ó)ó ð)ð ðØðØ&.ðØ:Mðà	óó ðð"Ø"ðØ,4ðØ<Jðà	ôð@Ø"ðØ4Aðà	ôð óeó ðeðNØ"ðØ,4ðØKPðà	ôð.'Ø"ð'Ø,4ð'Ø<Jð'à	ô'ôRð àð ð ð ð ð	 ð
 
ô ðN )-Ø*.ðNàðNð ðNð ð	Nð
 &ðNð (ðNð 
÷Nó NrL   ro   )LrI   Ú
__future__r   Úloggingr»   Údataclassesr   r   Úior   Úpathlibr   Útypingr   r	   Údocling_core.types.docr
   r   r   r   r   r   r   r   r   Údocling_core.types.doc.documentr   r   Úlxmlr   Úpydanticr   r   Útyping_extensionsr   r   Ú docling.backend.abstract_backendr   Údocling.backend.html_backendr   Údocling.datamodel.base_modelsr   Údocling.datamodel.documentr   Údocling.exceptionsr   r    rJ   r!   Úbs4r"   r#   r$   r„   Úer…   Ú	getLoggerrE   r¹   r%   r'   r)   r+   r-   r.   r/   ÚSUBÚSUPERr8   r;   r(   rS   rX   rd   rh   ro   rD   rL   rM   Ú<module>r$     s°  ðòõ& #ã Û ß *Ý Ý ß ÷
÷ 
õ 
÷ ?Ý ß ,ß 1å GÝ <Ý 5Ý 4Ý 0à€�Ó Ø(,Ð Ð%Ó ,ðß7Ñ7Ýà€Nð
Gð ð
 ×Ò˜Ó"€à":¸NÐ!K€ÐÓ KØ->Ð  
Ó >Ø&0Ð ˜Ó 0Ø'2Ð ˜*Ó 2Ø(4Ð ˜:Ó 4Ø (Ð �:Ó (Ø>€ˆZÓ >ð �TˆNØ˜ÐØ˜tÐ$Ø Ð%Ø�f—j‘jÐ!Ø�f—l‘lÐ#ñDÐ Ð@ó ñ �Ñ÷+ð +ó ð+ô(ˆyô ô
!ˆYô !ô
	ˆyô 	ôˆIô ô�Iô ô}Ð4õ }øði ó ØÕûðús   ÂE, Å,E>Å2E9Å9E>