Ë
    £…j‹  ã                   ó–   — d dl Z d dlZd dlmZ d dlmZ d dlmZmZm	Z	m
Z
 ddlmZ ddlmZ dd	lmZ g d
¢ZdgZdddœZ G d„ de«      Zy)é    N)Úminidom)ÚDocument)ÚBinaryIOÚAnyÚDictÚListé   )ÚHtmlConverteré   )ÚDocumentConverterResult)Ú
StreamInfo)zapplication/epubzapplication/epub+zipzapplication/x-epub+zipz.epubz	text/htmlzapplication/xhtml+xml)z.htmlz.xhtmlc                   ó†   ‡ — e Zd ZdZˆ fd„Zdedededefd„Z	dededede
fd„Zd	ed
ededz  fd„Zd	ed
edee   fd„Zˆ xZS )ÚEpubConverterzv
    Converts EPUB files to Markdown. Style information (e.g.m headings) and tables are preserved where possible.
    c                 ó@   •— t         ‰| �  «        t        «       | _        y )N)ÚsuperÚ__init__r
   Ú_html_converter)ÚselfÚ	__class__s    €úf/root/aria/tools/markitdown-venv/lib/python3.12/site-packages/markitdown/converters/_epub_converter.pyr   zEpubConverter.__init__   s   ø€ Ü‰ÑÔÜ,›ˆÕó    Úfile_streamÚstream_infoÚkwargsÚreturnc                 óÊ   — |j                   xs dj                  «       }|j                  xs dj                  «       }|t        v ryt        D ]  }|j                  |«      sŒ y y)NÚ TF)ÚmimetypeÚlowerÚ	extensionÚACCEPTED_FILE_EXTENSIONSÚACCEPTED_MIME_TYPE_PREFIXESÚ
startswith)r   r   r   r   r   r    Úprefixs          r   ÚacceptszEpubConverter.accepts#   sg   € ð  ×(Ñ(Ò.¨B×5Ñ5Ó7ˆØ ×*Ñ*Ò0¨b×7Ñ7Ó9ˆ	àÔ0Ñ0Øä1ò 	ˆFØ×"Ñ" 6Õ*Ùð	ð r   c                 óÚ  — t        j                  |d«      5 }t        j                  |j	                  d«      «      }|j                  d«      d   j                  d«      }t        j                  |j	                  |«      «      }| j                  |d«      | j                  |d«      | j                  |d«      | j                  |d	«      | j                  |d
«      | j                  |d«      | j                  |d«      dœ}|j                  d«      D �	ci c]#  }	|	j                  d«      |	j                  d«      “Œ% }
}	|j                  d«      }|D �	cg c]  }	|	j                  d«      ‘Œ }}	dj                  |j                  d«      d d «      }|D �cg c]  }||
v r|r
|› d|
|   › �n|
|   ‘Œ }}g }|D ]ä  }||j                  «       v sŒ|j	                  |«      5 }t        j                  j                  |«      }t        j                  j                  |«      d   j!                  «       }t"        j%                  |«      }| j&                  j)                  |t+        |||¬«      «      }|j-                  |j.                  j1                  «       «       d d d «       Œæ g }|j3                  «       D ]N  \  }}t5        |t6        «      rdj                  |«      }|sŒ*|j-                  d|j9                  «       › d|› �«       ŒP |j;                  ddj                  |«      «       t=        dj                  |«      |d   ¬«      cd d d «       S c c}	w c c}	w c c}w # 1 sw Y   �Œ¬xY w# 1 sw Y   y xY w)NÚrzMETA-INF/container.xmlÚrootfiler   z	full-pathzdc:titlez
dc:creatorzdc:languagezdc:publisherzdc:datezdc:descriptionzdc:identifier)ÚtitleÚauthorsÚlanguageÚ	publisherÚdateÚdescriptionÚ
identifierÚitemÚidÚhrefÚitemrefÚidrefú/éÿÿÿÿr	   )r   r    Úfilenamez, z**z:** ú
z

r)   )Úmarkdownr)   )ÚzipfileÚZipFiler   ÚparseÚopenÚgetElementsByTagNameÚgetAttributeÚ_get_text_from_nodeÚ_get_all_texts_from_nodesÚjoinÚsplitÚnamelistÚosÚpathÚbasenameÚsplitextr   ÚMIME_TYPE_MAPPINGÚgetr   Úconvertr   Úappendr9   ÚstripÚitemsÚ
isinstanceÚlistÚ
capitalizeÚinsertr   )r   r   r   r   ÚzÚcontainer_domÚopf_pathÚopf_domÚmetadatar0   ÚmanifestÚspine_itemsÚspine_orderÚ	base_pathÚitem_idÚspineÚmarkdown_contentÚfileÚfr7   r    r   Úconverted_contentÚmetadata_markdownÚkeyÚvalues                             r   rK   zEpubConverter.convert5   sn  € ô �_‰_˜[¨#Ó.ð G	°!ô $ŸM™M¨!¯&©&Ð1IÓ*JÓKˆMØ$×9Ñ9¸*ÓEÀaÑH×UÑUØóˆHô
 —m‘m A§F¡F¨8Ó$4Ó5ˆGà×1Ñ1°'¸:ÓFØ×9Ñ9¸'À<ÓPØ ×4Ñ4°W¸mÓLØ!×5Ñ5°g¸~ÓNØ×0Ñ0°¸)ÓDØ#×7Ñ7¸ÐAQÓRØ"×6Ñ6°wÀÓPñ(ˆHð $×8Ñ8¸Ó@öàð ×!Ñ! $Ó'¨×):Ñ):¸6Ó)BÑBðˆHð ð "×6Ñ6°yÓAˆKØBMÖN¸$˜4×,Ñ,¨WÕ5ÐNˆKÐNð Ÿ™Ø—‘˜sÓ# C RÐ(óˆIð
  +öàØ˜hÑ&ñ 7@�9�+˜Q˜x¨Ñ0Ð1Ñ2ÀXÈgÑEVÑVðˆEð ð +-ÐØò T�Ø˜1Ÿ:™:›<Ò'ØŸ™ ›ð T¨Ü#%§7¡7×#3Ñ#3°DÓ#9˜Ü$&§G¡G×$4Ñ$4°XÓ$>¸qÑ$A×$GÑ$GÓ$I˜	Ü#4×#8Ñ#8¸Ó#C˜Ø,0×,@Ñ,@×,HÑ,HØÜ&Ø)1Ø*3Ø)1ôó-Ð)ð )×/Ñ/Ð0A×0JÑ0J×0PÑ0PÓ0RÔS÷Tð TðTð" !#ÐØ&Ÿn™nÓ.ò Q‘
��UÜ˜e¤TÔ*Ø ŸI™I eÓ,�EÚØ%×,Ñ,¨r°#·.±.Ó2BÐ1CÀ4ÈÀwÐ-OÕPð	Qð ×#Ñ# A t§y¡yÐ1BÓ'CÔDä*ØŸ™Ð%5Ó6¸hÀwÑ>Oô÷KG	ñ G	ùò,ùò Oùò÷Tñ Tú÷[G	ð G	ús]   —C9M!Ä(MÄ8M!ÅM
Å')M!ÆMÆ,M!ÇM!ÇB6MÊAM!ËA&M!ÍM!ÍMÍM!Í!M*ÚdomÚtag_nameNc                 óN   — | j                  ||«      }t        |«      dkD  r|d   S y)zKConvenience function to extract a single occurrence of a tag (e.g., title).r   N)rA   Úlen)r   re   rf   Útextss       r   r@   z!EpubConverter._get_text_from_node„   s+   € à×.Ñ.¨s°HÓ=ˆÜˆu‹:˜Š>Ø˜‘8ˆOàr   c                 óä   — g }|j                  |«      D ]Y  }|j                  sŒt        |j                  d«      sŒ'|j                  |j                  j                  j                  «       «       Œ[ |S )zMHelper function to extract all occurrences of a tag (e.g., multiple authors).Ú	nodeValue)r>   Ú
firstChildÚhasattrrL   rk   rM   )r   re   rf   ri   Únodes        r   rA   z'EpubConverter._get_all_texts_from_nodesŒ   s]   € àˆØ×,Ñ,¨XÓ6ò 	@ˆDØ�‹¤7¨4¯?©?¸KÕ#HØ—‘˜TŸ_™_×6Ñ6×<Ñ<Ó>Õ?ð	@ð ˆr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   Úboolr%   r   rK   r   Ústrr@   r   rA   Ú__classcell__)r   s   @r   r   r      s¥   ø„ ñô/ðàðð  ðð ð	ð
 
óð$MàðMð  ðMð ð	Mð
 
!óMð^ xð ¸3ð À3ÈÁ:ó ð¨Xð Àð ÈÈcÉ÷ r   r   )rE   r:   Ú
defusedxmlr   Úxml.dom.minidomr   Útypingr   r   r   r   r   r
   Ú_base_converterr   Ú_stream_infor   r"   r!   rI   r   © r   r   ú<module>r|      sP   ðÛ 	Û Ý Ý $ç ,Ó ,å *Ý 5Ý %òÐ ð $˜9Ð ð Ø%ñÐ ôx�Mõ xr   