
    %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dS )    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                 n    t                                                       t                      | _        d S )N)super__init__r
   _html_converter)self	__class__s    m/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/markitdown/converters/_epub_converter.pyr   zEpubConverter.__init__   s+    ,    file_streamstream_infokwargsreturnc                     |j         pd                                }|j        pd                                }|t          v rdS t          D ]}|                    |          r dS dS )N TF)mimetypelower	extensionACCEPTED_FILE_EXTENSIONSACCEPTED_MIME_TYPE_PREFIXES
startswith)r   r   r   r   r   r    prefixs          r   acceptszEpubConverter.accepts#   s      (.B5577 *0b7799	00041 	 	F""6** tt ur   c                 <   t          j        |d          5 }t          j        |                    d                    }|                    d          d                             d          }t          j        |                    |                    }|                     |d          |                     |d          |                     |d          |                     |d	          |                     |d
          |                     |d          |                     |d          d}d |                    d          D             |                    d          }	d |	D             }
d	                    |
                    d          d d                   fd|
D             }g }|D ]}||                                v r|                    |          5 }t          j                            |          }t          j                            |          d                                         }t"                              |          }| j                            |t+          |||                    }|                    |j                                                   d d d            n# 1 swxY w Y   g }|                                D ]^\  }}t5          |t6                    rd	                    |          }|r-|                    d|                                 d|            _|                    dd	                    |                     t=          d	                    |          |d                   cd d d            S # 1 swxY w Y   d S )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
identifierc                 `    i | ]+}|                     d           |                     d          ,S )idhrefgetAttribute.0items     r   
<dictcomp>z)EpubConverter.convert.<locals>.<dictcomp>Q   sF        !!$''):):6)B)B  r   r7   itemrefc                 8    g | ]}|                     d           S )idrefr3   r5   s     r   
<listcomp>z)EpubConverter.convert.<locals>.<listcomp>X   s&    NNN$4,,W55NNNr   /c                 F    g | ]}|v r d |          n|         S )r=    )r6   item_id	base_pathmanifests     r   r<   z)EpubConverter.convert.<locals>.<listcomp>^   sQ       h&& 7@V922x0222XgEV&&&r   r	   )r   r    filenamez, z**z:** 
z

r)   )markdownr)   )zipfileZipFiler   parseopengetElementsByTagNamer4   _get_text_from_node_get_all_texts_from_nodesjoinsplitnamelistospathbasenamesplitextr   MIME_TYPE_MAPPINGgetr   convertr   appendrF   stripitems
isinstancelist
capitalizeinsertr   )r   r   r   r   zcontainer_domopf_pathopf_dommetadataspine_itemsspine_orderspinemarkdown_contentfilefrD   r    r   converted_contentmetadata_markdownkeyvaluerB   rC   s                         @@r   rW   zEpubConverter.convert5   sL    _[#.. G	! $M!&&1I*J*JKKM$99*EEaHUU H
 mAFF8$4$455G11':FF99'<PP 44WmLL!55g~NN00)DD#77AQRR"66wPP( (H #88@@  H "66yAAKNN+NNNK s##CRC( I    *  E +- T T1::<<'' T#%7#3#3D#9#9$&G$4$4X$>$>q$A$G$G$I$I	#4#8#8#C#C,0,@,H,H&)1*3)1  - -) )//0A0J0P0P0R0RSSST T T T T T T T T T T T T T T !#&nn.. Q Q
UeT** - IIe,,E Q%,,-O#..2B2B-O-O-O-OPPP##Atyy1B'C'CDDD*%566hw>O  KG	 G	 G	 G	 G	 G	 G	 G	 G	 G	 G	 G	 G	 G	 G	 G	 G	 G	s8   GNCJ0$N0J44N7J48CNNNdomtag_nameNc                 h    |                      ||          }t          |          dk    r|d         S dS )zKConvenience function to extract a single occurrence of a tag (e.g., title).r   N)rM   len)r   rn   ro   textss       r   rL   z!EpubConverter._get_text_from_node   s4    ..sH==u::>>8O4r   c                     g }|                     |          D ]O}|j        rFt          |j        d          r1|                    |j        j                                                   P|S )zMHelper function to extract all occurrences of a tag (e.g., multiple authors).	nodeValue)rK   
firstChildhasattrrX   rt   rY   )r   rn   ro   rr   nodes        r   rM   z'EpubConverter._get_all_texts_from_nodes   sn    ,,X66 	@ 	@D @74?K#H#H @T_6<<>>???r   )__name__
__module____qualname____doc__r   r   r   r   boolr%   r   rW   r   strrL   r   rM   __classcell__)r   s   @r   r   r      s        / / / / /   	
 
   $MM  M 	M
 
!M M M M^x 3 3:    X  c        r   r   )rQ   rG   
defusedxmlr   xml.dom.minidomr   typingr   r   r   r   r   r
   _base_converterr   _stream_infor   r"   r!   rU   r   r@   r   r   <module>r      s   				        $ $ $ $ $ $ , , , , , , , , , , , , * * * * * * 5 5 5 5 5 5 % % % % % %    $9  %  x x x x xM x x x x xr   