
    
i                        S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SK	J
r
  S SKr S SKJr  S SKJr  S SKrS SKJrJrJrJrJr  SrSSS	S
SSSS.rSrSr\R:                  " S5      r\R:                  " S5      r\R:                  " S5      r \R:                  " S5      r!/ SQr" " S S\#5      r$ " S S\#5      r% " S S\&5      r' " S S\#5      r( " S S\(5      r) " S  S!\(5      r* " S" S#\(5      r+ " S$ S%\+5      r, " S& S'\+5      r- " S( S)\(5      r. " S* S+\(5      r/ " S, S-\#5      r0 " S. S/\#5      r1 " S0 S1\#5      r2S4S2 jr3S4S3 jr4g! \ a
    S SKJr   GN(f = f)5    N)OrderedDict)unquote)etree)	Directoryget_pages_for_items
guess_typeparse_html_stringparse_string)r      r   z$http://www.w3.org/XML/1998/namespacezhttp://www.idpf.org/2007/opsz$http://www.daisy.org/z3986/2005/ncx/zhttp://www.idpf.org/2007/opfz/urn:oasis:names:tc:opendocument:xmlns:containerz http://purl.org/dc/elements/1.1/zhttp://www.w3.org/1999/xhtml)XMLEPUBDAISYOPFCONTAINERNSDCXHTMLMETA-INF/container.xmla  <?xml version="1.0" encoding="utf-8"?>
<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
  <rootfiles>
    <rootfile media-type="application/oebps-package+xml" full-path="%(folder_name)s/content.opf"/>
  </rootfiles>
</container>
z<!DOCTYPE ncx PUBLIC "-//NISO//DTD ncx 2005-1//EN" "http://www.daisy.org/z3986/2005/ncx-2005-1.dtd">
<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1" />z<?xml version="1.0" encoding="utf-8"?><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops"/>z<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" epub:prefix="z3998: http://www.daisy.org/z3998/2012/vocab/structure/#"></html>aS  <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" lang="en" xml:lang="en">
 <head>
  <style>
    body { margin: 0em; padding: 0em; }
    img { max-width: 100%; max-height: 100%; }
  </style>
 </head>
 <body>
   <img src="" alt="" />
 </body>
</html>)
image/jpeg	image/jpgz	image/pngzimage/svg+xmlc                       \ rS rSrSS jrSrg)Sectionb   c                     Xl         X l        g N)titlehref)selfr   r   s      D/home/ubuntu/wiki/venv/lib/python3.13/site-packages/ebooklib/epub.py__init__Section.__init__c   s    
	    )r   r   N) __name__
__module____qualname____firstlineno__r   __static_attributes__ r!   r   r   r   b   s    r!   r   c                       \ rS rSrSS jrSrg)Linkh   Nc                 (    Xl         X l        X0l        g r   r   r   uid)r   r   r   r/   s       r   r   Link.__init__i   s    	
r!   r.   r   r#   r)   r!   r   r+   r+   h   s    r!   r+   c                        \ rS rSrS rS rSrg)EpubExceptionr   c                     Xl         X l        g r   codemsg)r   r6   r7   s      r   r   EpubException.__init__s   s    	r!   c                 ,    [        U R                  5      $ r   )reprr7   r   s    r   __str__EpubException.__str__w   s    DHH~r!   r5   N)r$   r%   r&   r'   r   r<   r(   r)   r!   r   r2   r2   r   s    r!   r2   c                   J    \ rS rSrSrSS jrS rS rS rSS jr	S	 r
S
 rSrg)EpubItem~   z%
Base class for the items in a book.
Nc                     Xl         X l        X0l        U=(       d    [        R                  " S5      U l        SU l        XPl        SU l        g)a   
:Args:
  - uid: Unique identifier for this item (optional)
  - file_name: File name for this item (optional)
  - media_type: Media type for this item (optional)
  - content: Content for this item (optional)
  - manifest: Manifest for this item (optional)
r"   TN)	id	file_name
media_typesixbcontent	is_linearmanifestbook)r   r/   rC   rD   rG   rI   s         r   r   EpubItem.__init__   s:     "$+#%%) 	r!   c                     U R                   $ )zU
Returns unique identifier for this item.

:Returns:
  Returns uid number as string.
rB   r;   s    r   get_idEpubItem.get_id   s     wwr!   c                     U R                   $ )z
Returns name for this item. By default it is always file name but it does not have to be.

:Returns:
  Returns file name for this item.
rC   r;   s    r   get_nameEpubItem.get_name   s     ~~r!   c                     [         R                  " U R                  5       5      u  pUR                  5       n[        R
                  " [        R                  5       H  u  p4X$;   d  M  Us  $    [        R                  $ )a  
Guess type according to the file extension. Might not be the best way how to do it, but it works for now.

Items can be of type:
  - ITEM_UNKNOWN = 0
  - ITEM_IMAGE = 1
  - ITEM_STYLE = 2
  - ITEM_SCRIPT = 3
  - ITEM_NAVIGATION = 4
  - ITEM_VECTOR = 5
  - ITEM_FONT = 6
  - ITEM_VIDEO = 7
  - ITEM_AUDIO = 8
  - ITEM_DOCUMENT = 9
  - ITEM_COVER = 10

We map type according to the extensions which are defined in ebooklib.EXTENSIONS.

:Returns:
  Returns type of the item as number.
)	zip_pathsplitextrR   lowerrE   	iteritemsebooklib
EXTENSIONSITEM_UNKNOWN)r   _extr/   ext_lists        r   get_typeEpubItem.get_type   s[    , ""4==?3iik ]]8+>+>?MC
 @ $$$r!   c                 ^    Uc  [         R                  " S5      nU R                  =(       d    U$ )z
Returns content of the item. Content should be of type 'str' (Python 2) or 'bytes' (Python 3)

:Args:
  - default: Default value for the content if it is not already defined.

:Returns:
  Returns content of the item.
r"   )rE   rF   rG   )r   defaults     r   get_contentEpubItem.get_content   s%     ?eeBiG||&w&r!   c                     Xl         g)zF
Sets content value for this item.

:Args:
  - content: Content value
N)rG   )r   rG   s     r   set_contentEpubItem.set_content   s	     r!   c                 4    SR                  U R                  S9$ )Nz<EpubItem:{id}>rM   formatrB   r;   s    r   r<   EpubItem.__str__   s     ''477'33r!   )rJ   rG   rC   rB   rH   rI   rD   )Nr"   r"   NTr   )r$   r%   r&   r'   __doc__r   rN   rR   r_   rc   rf   r<   r(   r)   r!   r   r?   r?   ~   s*    $%>'4r!   r?   c                   6   ^  \ rS rSrSrSU 4S jjrS rSrU =r$ )EpubNcx   z5Represents Navigation Control File (NCX) in the EPUB.c                 *   > [         [        U ]  XSS9  g )Napplication/x-dtbncx+xml)r/   rC   rD   )superrn   r   r   r/   rC   	__class__s      r   r   EpubNcx.__init__   s    gt%#Oi%jr!   c                 4    SR                  U R                  S9$ )Nz<EpubNcx:{id}>rM   ri   r;   s    r   r<   EpubNcx.__str__   s    &&$''&22r!   r)   )ncxztoc.ncx)	r$   r%   r&   r'   rl   r   r<   r(   __classcell__rt   s   @r   rn   rn      s    ;k3 3r!   rn   c                   <   ^  \ rS rSrSrSU 4S jjrS rS rSrU =r	$ )	EpubCover   z*
Represents Cover image in the EPUB file.
c                 (   > [         [        U ]  XS9  g )Nr/   rC   )rr   r|   r   rs   s      r   r   EpubCover.__init__   s    i'C'Er!   c                 "    [         R                  $ r   )rY   
ITEM_COVERr;   s    r   r_   EpubCover.get_type       """r!   c                 J    SR                  U R                  U R                  S9$ )Nz<EpubCover:{id}:{file_name}>rB   rC   rj   rB   rC   r;   s    r   r<   EpubCover.__str__        -444>>4ZZr!   r)   )	cover-imgr"   
r$   r%   r&   r'   rl   r   r_   r<   r(   ry   rz   s   @r   r|   r|      s    F#[ [r!   r|   c                      ^  \ rS rSrSrSr         SU 4S jjrS rS rS r	S r
S	 rS
 rS rS rS rS rS rSS jrS rSrU =r$ )EpubHtml   z,
Represents HTML document in the EPUB file.
chapterc
                    > [         [        U ]  XX45        XPl        X`l        Xpl        Xl        Xl        / U l        / U l	        / U l
        / U l        g r   )rr   r   r   r   lang	directionmedia_overlaymedia_durationmetaslinks
propertiespages)r   r/   rC   rD   rG   r   r   r   r   r   rt   s             r   r   EpubHtml.__init__  sM     	h&szK
	"*,


r!   c                     g)N
Returns if this document is chapter or not.

:Returns:
  Returns book value.
Tr)   r;   s    r   
is_chapterEpubHtml.is_chapter  s     r!   c                 "    [         R                  $ )zt
Always returns ebooklib.ITEM_DOCUMENT as type of this document.

:Returns:
  Always returns ebooklib.ITEM_DOCUMENT
)rY   ITEM_DOCUMENTr;   s    r   r_   EpubHtml.get_type$  s     %%%r!   c                     Xl         g)zy
Sets language for this book item. By default it will use language of the book but it
can be overwritten with this call.
Nr   r   r   s     r   set_languageEpubHtml.set_language.  s	    
 	r!   c                     U R                   $ )z
Get language code for this book item. Language of the book item can be different from
the language settings defined globaly for book.

:Returns:
  As string returns language code.
r   r;   s    r   get_languageEpubHtml.get_language5  s     yyr!   c                 :    U R                   R                  U5        g)zv
Add additional <meta> to the document.

>>> add_meta(name='viewport', content='width=device-width, initial-scale=1')
N)r   appendr   kwgss     r   add_metaEpubHtml.add_meta?  s     	

$r!   c                 (    S U R                    5       $ )zi
Returns list of additional metas defined for this document.

:Returns:
  As tuple return list of metas.
c              3   $   #    U  H  ov   M     g 7fr   r)   ).0metas     r   	<genexpr>%EpubHtml.get_metas.<locals>.<genexpr>N       ,   )r   r;   s    r   	get_metasEpubHtml.get_metasG       -,,r!   c                     U R                   R                  U5        UR                  S5      S:X  a-  SU R                  ;  a  U R                  R                  S5        ggg)z
Add additional link to the document. Links will be embeded only inside of this document.

>>> add_link(href='styles.css', rel='stylesheet', type='text/css')
typetext/javascriptscriptedN)r   r   getr   r   s     r   add_linkEpubHtml.add_linkP  sP     	

$88F000&&z2 1 1r!   c                 (    S U R                    5       $ )zi
Returns list of additional links defined for this document.

:Returns:
  As tuple return list of links.
c              3   $   #    U  H  ov   M     g 7fr   r)   )r   links     r   r   %EpubHtml.get_links.<locals>.<genexpr>b  r   r   r   r;   s    r   	get_linksEpubHtml.get_links[  r   r!   c                 0   ^ U4S jU R                    5       $ )za
Returns list of additional links of specific type.

:Returns:
  As tuple returns list of links.
c              3   V   >#    U  H  oR                  S S5      T:X  d  M  Uv   M      g7f)r   r"   N)r   )r   r   	link_types     r   r   -EpubHtml.get_links_of_type.<locals>.<genexpr>k  s#     Qxx/Cy/Ps   )	)r   )r   r   s    `r   get_links_of_typeEpubHtml.get_links_of_typed  s     RQQr!   c                    UR                  5       [        R                  :X  a  U R                  UR	                  5       SSS9  UR                  5       [        R
                  :X  a  U R                  UR	                  5       SS9  gg)z
Add other item to this document. It will create additional links according to the item type.

:Args:
  - item: item we want to add defined as instance of EpubItem

stylesheettext/cssr   relr   r   )srcr   N)r_   rY   
ITEM_STYLEr   rR   ITEM_SCRIPTr   items     r   add_itemEpubHtml.add_itemm  s`     ==?h111MMt}}LzMR==?h222MMdmmo4EMF 3r!   c                     [        U R                  5      nUR                  5       n[        UR                  S5      5      S:w  a~  UR                  S5      n[        R                  " USSSS9nUR                  [        R                  " S5      5      (       a*  UR                  [        R                  " S	5      5      nUS
U $ U$ [        R                  " S5      $ ! [         a    [        R                  " S5      s $ f = f)z
Returns content of BODY element for this HTML document. Content will be of type 'str' (Python 2)
or 'bytes' (Python 3).

:Returns:
  Returns content of this document.
r"   bodyr   Tutf-8Fpretty_printencodingxml_declarationz<body>z</body>   )r	   rG   	ExceptionrE   rF   getroottreelenfindr   tostring
startswithrindex)r   	html_tree	html_rootr   tree_strns         r   get_body_contentEpubHtml.get_body_contentz  s    	)$,,7I ))+	y~~f%&!+>>&)D~~dafgH ""355?33OOCEE)$45!}$OuuRy%  	559	s   C  C<;C<c                 (   [        U R                  R                  U R                  5      5      nUR	                  5       nUR                  SU R                  =(       d    U R                  R                  5        U R                  =(       d    U R                  R                  UR                  S[        S   -  '    [        U R                  5      nUR                  5       n[         R"                  " US5      nU R$                   H  n[         R"                  " USU5      nM     U R&                  S:w  a(  [         R"                  " US5      n	U R&                  U	l        U R*                   HQ  n
U
R-                  S5      S	:X  a!  [         R"                  " US
U
5      nSUl        M9  [         R"                  " USU
5      nMS     [         R"                  " US5      nU R.                  (       a8  UR                  SU R.                  5        UR                  SU R.                  5        UR1                  S5      nUb(  UR3                  5        H  nUR5                  U5        M     [         R6                  " USSSS9nU$ ! [         a    [        R                  " S5      s $ f = f)z
Returns content for this document as HTML string. Content will be of type 'str' (Python 2)
or 'bytes' (Python 3).

:Args:
  - default: Default value for the content if it is not defined.

:Returns:
  Returns content of this document.
r   {%s}langr   r"   headr   r   r   r   scriptr   r   dirTr   r   )r
   rJ   get_template_template_namegetrootsetr   languageattrib
NAMESPACESr	   rG   r   rE   rF   r   r   
SubElementr   r   textr   r   r   r   getchildrenr   r   )r   rb   tree	tree_rootr   
_html_root_headr   _meta_titlelnk_lnk_bodyr   ir   s                   r   rc   EpubHtml.get_content  s    DII2243F3FGHLLN	fdii=499+=+=>;?99;Z		HZHZ	j&778
	)$,,7I **,
   F3JJD$$UFD9E  ::%%eW5F**FK::Cwwv"33''x=	''vs; $   F3>>IIeT^^,MM%0~~f%%%'Q ( >>$TG]ab]  	559	s   9I. . JJc                 J    SR                  U R                  U R                  S9$ )Nz<EpubHtml:{id}:{file_name}>r   r   r;   s    r   r<   EpubHtml.__str__       ,33tww$..3YYr!   )	r   r   r   r   r   r   r   r   r   )	Nr"   r"   Nr"   NNNNr   )r$   r%   r&   r'   rl   r   r   r   r_   r   r   r   r   r   r   r   r   r   rc   r<   r(   ry   rz   s   @r   r   r      s}     N 4& -	3-RG>ENZ Zr!   r   c                   H   ^  \ rS rSrSrSU 4S jjrS rU 4S jrS rSr	U =r
$ )	EpubCoverHtmli  z)
Represents Cover page in the EPUB file.
c                 D   > [         [        U ]  XUS9  X0l        SU l        g )N)r/   rC   r   F)rr   r  r   
image_namerH   )r   r/   rC   r  r   rt   s        r   r   EpubCoverHtml.__init__  s$    mT+PU+V$r!   c                     gr   Fr)   r;   s    r   r   EpubCoverHtml.is_chapter       r!   c                 z  > U R                   R                  S5      U l        [        [        [
        U ]  5       5      nUR                  5       nUR                  SS[        S   0S9nUS   R                  SU R                  5        US   R                  SU R                  5        [        R                  " US	S
S	S9nU$ )z
Returns content for cover page as HTML string. Content will be of type 'str' (Python 2) or 'bytes' (Python 3).

:Returns:
  Returns content of this document.
coverz//xhtml:imgxhtmlr   
namespacesr   r   altTr   r   )rJ   r   rG   r
   rr   r  rc   r   xpathr   r   r  r   r   r   )r   r   r   imagesr   rt   s        r   rc   EpubCoverHtml.get_content  s     yy--g6E-BDELLN	GZPWEX;YZq	eT__-q	eTZZ(>>$TG]abr!   c                 J    SR                  U R                  U R                  S9$ )Nz <EpubCoverHtml:{id}:{file_name}>r   r   r;   s    r   r<   EpubCoverHtml.__str__  s     188DGGt~~8^^r!   )rG   r  rH   )r  zcover.xhtmlr"   Cover)r$   r%   r&   r'   rl   r   r   rc   r<   r(   ry   rz   s   @r   r  r    s#    ,_ _r!   r  c                   <   ^  \ rS rSrSrSU 4S jjrS rS rSrU =r	$ )EpubNavi  z2
Represents Navigation Document in the EPUB file.
c                 ,   > [         [        U ]  XX4US9  g )N)r/   rC   rD   r   r   )rr   r"  r   )r   r/   rC   rD   r   r   rt   s         r   r   EpubNav.__init__  s    gt%ZXa 	& 	
r!   c                     gr  r)   r;   s    r   r   EpubNav.is_chapter  r  r!   c                 J    SR                  U R                  U R                  S9$ )Nz<EpubNav:{id}:{file_name}>r   r   r;   s    r   r<   EpubNav.__str__'  s     +22dgg2XXr!   r)   )navz	nav.xhtmlapplication/xhtml+xmlr"   N)
r$   r%   r&   r'   rl   r   r   r<   r(   ry   rz   s   @r   r"  r"    s    

Y Yr!   r"  c                   8   ^  \ rS rSrSrU 4S jrS rS rSrU =r	$ )	EpubImagei+  z$
Represents Image in the EPUB file.
c                 .   > [         [        U ]
  " U0 UD6  g r   )rr   r,  r   )r   argskwargsrt   s      r   r   EpubImage.__init__0  s    i'88r!   c                 "    [         R                  $ r   )rY   
ITEM_IMAGEr;   s    r   r_   EpubImage.get_type3  r   r!   c                 J    SR                  U R                  U R                  S9$ )Nz<EpubImage:{id}:{file_name}>r   r   r;   s    r   r<   EpubImage.__str__6  r   r!   r)   r   rz   s   @r   r,  r,  +  s    9#[ [r!   r,  c                   8   ^  \ rS rSrSU 4S jjrS rS rSrU =r$ )EpubSMILi:  c                 ,   > [         [        U ]  XSUS9  g )Napplication/smil+xml)r/   rC   rD   rG   )rr   r7  r   )r   r/   rC   rG   rt   s       r   r   EpubSMIL.__init__;  s    h&3Pfpw&xr!   c                 "    [         R                  $ r   )rY   	ITEM_SMILr;   s    r   r_   EpubSMIL.get_type>  s    !!!r!   c                 J    SR                  U R                  U R                  S9$ )Nz<EpubSMIL:{id}:{file_name}>r   r   r;   s    r   r<   EpubSMIL.__str__A  r  r!   r)   )Nr"   N)	r$   r%   r&   r'   r   r_   r<   r(   ry   rz   s   @r   r7  r7  :  s    y"Z Zr!   r7  c                       \ rS rSrS rS rS rS rS rS r	SS jr
SS
 jrSS jrS rSS jrS rS rS rS rS rS rS rS rS rSrg	)EpubBookiH  c                 2    S U l         U R                  5         g r   )EPUB_VERSIONresetr;   s    r   r   EpubBook.__init__I  s     

r!   c                 4   0 U l         / U l        / U l        / U l        / U l        / U l        / U l        SU l        SU l        SU l	        SU l
        SU l        SU l        SU l        SU l        [        [         ["        [$        S.U l        U R)                  SS	SS	S
R+                  SR-                  [.         Vs/ s H  n[1        U5      PM     sn5      5      S.5        U R3                  [1        [4        R6                  " 5       5      5        / U l        0 U l        gs  snf )z2Initialises all needed variables to default valuesrB   r   r   r"   enN)rx   r)  r   r  r   	generatorzEbook-lib {}.)namerG   )metadataitemsspineguider   tocbindingsIDENTIFIER_IDFOLDER_NAME_id_html	_id_image
_id_staticr   r   r   NCX_XMLNAV_XMLCHAPTER_XML	COVER_XML	templatesadd_metadatarj   joinVERSIONstrset_identifieruuiduuid4prefixesr  )r   ss     r   rD  EpubBook.resetP  s     



!!
!([[de ^-B-B388]dLe]dXYSQRV]dLeCf-gh		
 	C

-.  Mfs   3Dc                 d    Xl         U R                  SSU R                   SU R                  05        g)zX
Sets unique id for this epub

:Args:
  - uid: Value of unique identifier for this book
r   
identifierrB   N)r/   set_unique_metadatarQ  )r   r/   s     r   r_  EpubBook.set_identifierv  s,       |TXXdFXFX?YZr!   c                 J    Xl         U R                  SSU R                   5        g)zH
Set title. You can set multiple titles.

:Args:
  - title: Title value
r   r   N)r   r[  )r   r   s     r   	set_titleEpubBook.set_title  s     
$4r!   c                 6    Xl         U R                  SSU5        g)z
Set language for this epub. You can set multiple languages. Specific items in the book can have
different language settings.

:Args:
  - lang: Language code
r   r   N)r   r[  r   s     r   r   EpubBook.set_language  s     $
D1r!   c                     Xl         g)z>
:Args:
  - direction: Options are "ltr", "rtl" and "default"
N)r   )r   r   s     r   set_directionEpubBook.set_direction  s	     #r!   c           	          [        US9nX$l        U R                  U5        U(       a  [        US9nU R                  U5        U R	                  SSS[        SS/5      5        g)z
Set cover and create cover document if needed.

:Args:
  - file_name: file name of the cover page
  - content: Content for the cover image
  - create_page: Should cover page be defined. Defined as bool value (optional). Default value is True.
rQ   )r  Nr   r"   )rJ  r  )rG   r   )r|   rG   r   r  r[  r   )r   rC   rG   create_pagec0c1s         r   	set_coverEpubBook.set_cover  sX     +
b)4BMM"$K9JLd8e,fgr!   Nc           	          U R                  SSUSU05        U(       a  U R                  SSUSU-   SSS	.5        U(       a  U R                  SSUSU-   S
SS	.5        gg)zAdd author for this documentr   creatorrB   Nr   #zfile-aszmarc:relators)refinespropertyschemerole)r[  )r   authorfile_asr}  r/   s        r   
add_authorEpubBook.add_author  sm     	$	6D#;?fg39)_n'o dFDcCiU[gv2wx r!   c                     U[         ;   a	  [         U   nXR                  ;  a  0 U R                  U'   X R                  U   ;  a  / U R                  U   U'   U R                  U   U   R                  X445        g)zAdd metadataN)r   rK  r   r   	namespacerJ  valueotherss        r   r[  EpubBook.add_metadata  sn     
""9-IMM)')DMM)$}}Y//-/DMM)$T*i &--uo>r!   c                 f    U[         ;   a	  [         U   nU R                  U   R                  U/ 5      $ )zRetrieve metadata)r   rK  r   )r   r  rJ  s      r   get_metadataEpubBook.get_metadata  s2     
""9-I}}Y'++D"55r!   c                     U[         ;   a	  [         U   nXR                  ;   a'  X R                  U   ;   a  X44/U R                  U   U'   gU R                  XX45        g)ziAdd metadata if metadata with this identifier does not already exist, otherwise update existing metadata.N)r   rK  r[  r  s        r   rg  EpubBook.set_unique_metadata  sV     
""9-I%$--	2J*J/4o->DMM)$T*iu=r!   c                    UR                   S:X  aH  [        UR                  5       R                  5       5      u  p#U(       a  Ub  X1l         OX!l         OSUl         UR	                  5       (       d  [        U[        5      (       aS  SR                  U R                  S9Ul	        U =R                  S-  sl        U =R                  UR                  -  sl
        O|[        U[        5      (       a4  SR                  U R                  S9Ul	        U =R                  S-  sl        O3SR                  U R                  S	9Ul	        U =R                  S-  sl        Xl        U R                  R!                  U5        U$ )
z
Add additional item to the book. If not defined, media type and chapter id will be defined
for the item.

:Args:
  - item: Item instance
r"   zapplication/octet-streamzchapter_{id_html})id_html   zimage_{id_image})id_imagezstatic_{id_static})	id_static)rD   r   rR   rW   rN   
isinstancer   rj   rS  rB   r   r,  rT  rU  rJ   rL  r   )r   r   has_guessedrD   s       r   r   EpubBook.add_item  s    ??b (24==?3H3H3J(K%[)&0O&1O"<{{}}$))-44T]]4K"

djj(
D),,,33T^^3L!#.555P1$	

$r!   c                 Z    U R                  5        H  nUR                  U:X  d  M  Us  $    g)z
Returns item for defined UID.

>>> book.get_item_with_id('image_001')

:Args:
  - uid: UID for the item

:Returns:
  Returns item object. Returns None if nothing was found.
N)	get_itemsrB   )r   r/   r   s      r   get_item_with_idEpubBook.get_item_with_id  s*     NN$Dww#~ % r!   c                 b    U R                  5        H  nUR                  5       U:X  d  M  Us  $    g)z
Returns item for defined HREF.

>>> book.get_item_with_href('EPUB/document.xhtml')

:Args:
  - href: HREF for the item we are searching for

:Returns:
  Returns item object. Returns None if nothing was found.
N)r  rR   )r   r   r   s      r   get_item_with_hrefEpubBook.get_item_with_href  s-     NN$D}}$& % r!   c                 (    S U R                    5       $ )zS
Returns all items attached to this book.

:Returns:
  Returns all items as tuple.
c              3   $   #    U  H  ov   M     g 7fr   r)   r   r   s     r   r   %EpubBook.get_items.<locals>.<genexpr>6  r   r   rL  r;   s    r   r  EpubBook.get_items/  r   r!   c                 0   ^ U4S jU R                    5       $ )z
Returns all items of specified type.

>>> book.get_items_of_type(epub.ITEM_IMAGE)

:Args:
  - item_type: Type for items we are searching for

:Returns:
  Returns found items as tuple.
c              3   R   >#    U  H  oR                  5       T:X  d  M  Uv   M     g 7fr   )r_   )r   r   	item_types     r   r   -EpubBook.get_items_of_type.<locals>.<genexpr>D  s     L}})/Ks   '	'r  )r   r  s    `r   get_items_of_typeEpubBook.get_items_of_type8  s     MLLr!   c                 0   ^ U4S jU R                    5       $ )z
Returns all items of specified media type.

:Args:
  - media_type: Media type for items we are searching for

:Returns:
  Returns found items as tuple.
c              3   J   >#    U  H  oR                   T:X  d  M  Uv   M     g 7fr   )rD   )r   r   rD   s     r   r   3EpubBook.get_items_of_media_type.<locals>.<genexpr>P  s     M*/Ls   #	#r  )r   rD   s    `r   get_items_of_media_type EpubBook.get_items_of_media_typeF  s     NMMr!   c                      X R                   U'   g)aO  
Defines templates which are used to generate certain types of pages. When defining new value for the template
we have to use content of type 'str' (Python 2) or 'bytes' (Python 3).

At the moment we use these templates:
  - ncx
  - nav
  - chapter
  - cover

:Args:
  - name: Name for the template
  - value: Content for the template
N)rZ  )r   rJ  r  s      r   set_templateEpubBook.set_templateR  s       %tr!   c                 8    U R                   R                  U5      $ )ze
Returns value for the template.

:Args:
  - name: template name

:Returns:
  Value of the template.
)rZ  r   r   rJ  s     r   r   EpubBook.get_templated  s     ~~!!$''r!   c                 T    U R                   R                  SR                  XS95        g)z
Appends custom prefix to be added to the content.opf document

>>> epub_book.add_prefix('bkterms', 'http://booktype.org/')

:Args:
  - name: namespave name
  - uri: URI for the namespace
z{name}: {uri})rJ  uriN)rb  r   rj   )r   rJ  r  s      r   
add_prefixEpubBook.add_prefixp  s$     	_333GHr!   )rC  rR  rQ  rS  rT  rU  rP  r   rN  rL  r   rK  r  r   rb  rM  rZ  r   rO  r/   )T)NNrx  r   )r$   r%   r&   r'   r   rD  r_  rj  r   ro  ru  r  r[  r  rg  r   r  r  r  r  r  r  r   r  r(   r)   r!   r   rA  rA  H  sn    $L
[
52#h*
y?6	>$L$$-M
N%$
(Ir!   rA  c                       \ rS rSrSSSSSSSSSS.SSS	.
rSS jrS rS rS rS r	S r
S rS rS rS rS rS rS rS rS rSrg
)
EpubWriteri~  TGuidePagesFr  enabled
start_fromr   )
epub2_guideepub3_landmarkepub3_pageslandmark_titlepages_titlespine_directionpackage_direction
play_orderraise_exceptionscompresslevelNc                     Xl         X l        [        U R                  5      U l        U(       a  U R                  R                  U5        U R                  5         g r   )rC   rJ   dictDEFAULT_OPTIONSoptionsupdate_init_play_order)r   rJ  rJ   r  s       r   r   EpubWriter.__init__  s?    	D001LL(r!   c                     SSS.U l          U R                  S   S   U R                   S'   U R                  S   S   U R                   S'   g ! [         a     g f = f)NFr  r  r  r  r  )_play_orderr  KeyErrorr;   s    r   r  EpubWriter._init_play_order  sb    ',A>	*.,,|*DY*ODY'-1\\,-G-UD\* 		s   >A 
AAc                    U R                   R                  S/ 5       H1  n[        US5      (       d  M  UR                  U R                  5        M3     U R                  R                  5        Hl  n[        U[        5      (       d  M  U R                   R                  S/ 5       H2  n[        US5      (       d  M  UR                  U R                  U5        M4     Mn     g )Npluginsbefore_writehtml_before_write)	r  r   hasattrr  rJ   r  r  r   r  r   plgr   s      r   processEpubWriter.process  s    <<##Ir2CsN++  + 3 II'')D$))<<++Ir:Cs$788--dii> ; *r!   c                     [         SU R                  R                  0-  nU R                  R	                  [
        U5        g )Nfolder_name)CONTAINER_XMLrJ   rR  outwritestrCONTAINER_PATH)r   container_xmls     r   _write_containerEpubWriter._write_container  s/    %		8M8M(NN.-8r!   c           
         [         S   [         S   S.nUR                  U R                  R                  5        [        R
                  " USUS9n[        R
                  " USSS05      nS	U R                  ;   a  U R                  S	   nOS
S KnUR                  R                  5       nUR                  S5      Ul
        [        R                  " U R                  R                  5       GH  u  pxU[         S   :X  ak  UR                  5        HU  n	U	 HL  n
SU
S   ;   a  U
S   S   S:X  a  M   [        R
                  " USU
S   5      nU
S
   (       a  U
S
   Ul
        ML  MN     MW     M~  [        R                  " U5       Hl  u  pU	 Ha  n
 U(       a$  [        R
                  " USU< SU< 3U
S   5      nO([        R
                  " USR%                  US9U
S   5      nU
S
   Ul
        Mc     Mn     GM     g ! [         a    [         R"                  " S5         GM  f = f! [         a'    [         R&                  " SR%                  US95         M  f = f)Nr   r   )dcopfrK  )nsmapr   r{  zdcterms:modifiedmtimer   z%Y-%m-%dT%H:%M:%SZr  zCould not create metadata.{}z{name})rJ  z#Could not create metadata "{name}".)r   r  rJ   r  r   r   r  datetimenowstrftimer   rE   rX   rK  values
ValueErrorloggingerrorrj   info)r   rootr  rK  elr  r  ns_namer  values2vrJ  s               r   _write_opf_metadataEpubWriter._write_opf_metadata  s    "$'
50ABTYY))*##D*EBh=O0PQdll"LL)E%%))+E..!56"}}TYY-?-?@OG*U++%}}G$%1-!A$z2BFX2X$H!&!1!1(FAaD!IB t*+A$  $ %  / &)]]6%:MD$b&%*%5%5hGUY@Z\]^_\`%a%*%5%5hUY@Z\]^_\`%a&'dBG % &;  A  * H#MM*FGGH  * b#LL)N)U)U[_)U)`abs%   */G1AH1 H	H	-I
		I
	c           
      l   [         R                  " US5      nS nU R                  R                  5        GH  nUR                  (       d  M  [        U[        5      (       aA  [         R                  " USUR                  5       UR                  UR                  SS.5        Mm  [        U[        5      (       aH  UR                  n[         R                  " USUR                  UR                  UR                  S.5        M  [        U[        5      (       a>  [         R                  " USUR                  UR                  UR                  SS.5        GM  UR                  UR                  UR                  S.n[        US5      (       a7  [        UR                  5      S:  a  S	R!                  UR                  5      US'   [        US
5      (       a  UR"                  b  UR"                  US'   [        US5      (       a  UR$                  b  UR$                  US'   [         R                  " USU5        GM     U$ )NrI   r   r)  )r   rB   
media-typer   )r   rB   r  cover-imager   r    r   media-overlayr   duration)r   r   rJ   r  rI   r  r"  rR   rB   rD   rn   rC   r|   r  r   r   r\  r   r   )r   r  rI   _ncx_idr   optss         r   _write_opf_manifestEpubWriter._write_opf_manifest  s   ##D*5 II'')D==$((  !]]_DGG4??jop
 D'**''  ft~~TWW\`\k\k&l D),,  !^^477$//ivw !%dggT__]4..3t3G!3K),$//)BD&411d6H6H6T,0,>,>D)4!122t7J7J7V'+':':D$  648E *H r!   c                 l   SU=(       d    S0nU R                   R                  (       a-  U R                  S   (       a  U R                   R                  US'   [        R                  " USU5      nU R                   R
                   GH  nSn[        U[        5      (       a   US   n[        U5      S:  a  US   S	:X  a  S
nOUn[        U[        5      (       a0  SUR                  5       0nUR                  (       a  U(       d  S	US'   O[        U[        5      (       a0  SUR                  5       0nUR                  (       a  U(       d  S	US'   O=SU0n U R                   R                  U5      n	U	R                  (       a  U(       d  S	US'   [        R                  " USU5        GM     g ! [         a     N*f = f)NrO  rx   r  page-progression-directionrM  Tr   r  noFidreflinearitemref)rJ   r   r  r   r   rM  r  tupler   r   rN   rH   r?   r  r   )
r   r  ncx_idspine_attributesrM  _itemrH   r   r  itms
             r   _write_opf_spineEpubWriter._write_opf_spine  sd   !6?U3994<<0A#B=AYY=P=P9:  w0@AYY__E I%''Qxu:>Qx4'$)	$))/~~Y%)DND(++/~~Y%)DN))44T:C==	)-X UIt4I %B ! s   8F&&
F32F3c           	         [        U R                  R                  5      S:  a  U R                  R	                  S5      (       a  [
        R                  " US0 5      nU R                  R                   H  nSU;   a1  UR	                  S5      nU(       a  UR                  nUR                  nO$UR	                  SS5      nUR	                  SS5      nWc  Sn[
        R                  " USUR	                  S	S5      UWS
.5      nM     g g g )Nr   r  rN  r   r   r"   r   	referencer   )r   r   r   )	r   rJ   rN  r  r   r   r   rC   r   )r   r  rN  r   chap_hrefr  _refs           r   _write_opf_guideEpubWriter._write_opf_guide:  s     tyy!#(8(8(G(G$$T7B7E		T>88F+D $!% HHVR0E!XXgr2F>F'';&"1EPV`e(f ( )H#r!   c                     [        U R                  R                  5      S:  aN  [        R                  " US0 5      nU R                  R                   H  n[        R                  " USU5        M     g g )Nr   rP  	mediaType)r   rJ   rP  r   r   )r   r  rP  r   s       r   _write_opf_bindingsEpubWriter._write_opf_bindingsP  sX    tyy!!"Q&''j"=H		**  ;= + 'r!   c                     [         R                  " USSSS9nU R                  R                  SR	                  U R
                  R                  S9U5        g )NTr   r   z{FOLDER_NAME}/content.opf)rR  )r   r   r  r  rj   rJ   rR  )r   r  r   s      r   _write_opf_fileEpubWriter._write_opf_fileV  sE    >>$TG]ab5<<I^I^<_aijr!   c                 @   [         S   U R                  R                  SS.nU R                  R                  (       a-  U R                  S   (       a  U R                  R                  US'   [
        R                  " SU5      nS/U R                  R                  -   nSR                  U5      UR                  S	'   U R                  U5        U R                  U5      nU R                  X$5        U R                  U5        U R                  U5        U R                  U5        g )
Nr   z3.0)xmlnsunique-identifierversionr  r   packagez0rendition: http://www.idpf.org/vocab/rendition/#r  prefix)r   rJ   rQ  r   r  r   Elementrb  r\  r   r  r  r  r  r  r  )r   package_attributesr  rb  r  s        r   
_write_opfEpubWriter._write_opf[  s    &!%!8!8

 994<<0C#D(,		(;(;u%}}Y(:;FG$))J\J\\ # 2H 	  & **40 	d, 	d# 	  & 	T"r!   c                 
  ^^ [        U R                  R                  S5      5      nUR                  5       nUR	                  SU R                  R
                  5        U R                  R
                  UR                  S[        S   -  '   [        R                  R                  UR                  5      m[        R                  " US5      n[        R                  " US5      nUR                  =(       d    U R                  R                  Ul        UR                    H/  n[        R                  " USUR#                  SS	5      S
SS.5      nM1     [        R                  " US5      nUR$                  (       a  UR	                  SUR$                  5        [        R                  " USS[        S   -  SSSSS05      n	[        R                  " U	S5      n
UR                  =(       d    U R                  R                  U
l        UU4S jmT" XR                  R&                  5        [)        U R                  R*                  5      S:  Ga  U R,                  R#                  S5      (       Gal  SSS.n[        R                  " USS[        S   -  S05      n[        R                  " US5      nU R,                  R#                  SS5      Ul        [        R                  " US5      nU R                  R*                   H  n[        R                  " US 5      nS!U;   a2  UR#                  S!S 5      nU(       a  UR                  nUR                  nO$UR#                  SS	5      nUR#                  SS	5      nUR#                  S"S	5      n[        R                  " US#S[        S   -  UR#                  UU5      S[.        R0                  " WT5      05      nWUl        M     U R,                  R#                  S$5      (       GaL  [3        U R                  R5                  [6        R8                  5       Vs/ s H  n[;        U[<        5      (       a  M  UPM     sn5      n[)        U5      S:  a  [        R                  " USS[        S   -  S%SS&S'S'05      n[        R                  " US5      nU R,                  R#                  S(S)5      Ul        [        R                  " US5      nU Hf  u  nnn[        R                  " US 5      nS*R?                  UUS+9nUn[        R                  " US#S[.        R0                  " UT5      05      nUUl        Mh     [        R@                  " US,S-S,S.9nU$ s  snf )/Nr)  r   r   r   r   r   r   r   r"   r   r   r   r   r   z{%s}typer   rO  rB   r}  zdoc-toch2c           
      H  > [         R                  " U S5      nU GH  n[        U[        5      (       d  [        U[        5      (       Gab  [         R                  " US5      n[        US   [
        5      (       a=  [         R                  " USS[        R                  " US   R                  T5      05      nO[        US   [        5      (       aP  US   R                  S:w  a=  [         R                  " USS[        R                  " US   R                  T5      05      nOl[        US   [        5      (       a=  [         R                  " USS[        R                  " US   R                  T5      05      nO[         R                  " US5      nUS   R                  Ul        T" XCS   5        GM  [        U[        5      (       ad  [         R                  " US5      n[         R                  " USS[        R                  " UR                  T5      05      nUR                  Ul        GM
  [        U[
        5      (       d  GM"  [         R                  " US5      n[         R                  " USS[        R                  " UR                  T5      05      nUR                  Ul        GM     g )	Nollir   ar   r"   spanr  )r   r   r  r  listr   rU   relpathrC   r   r   r+   r   r   )r  rL  r-  r   r.  r/  _create_sectionnav_dir_names         r   r3  ,EpubWriter._get_nav.<locals>._create_section  s   !!#t,BdE**jt.D.D))"d3B!$q'844!,,Rvx?O?OPTUVPWPaPaco?p6qr#DGW55$q',,":L!,,Rvx?O?OPTUVPWP\P\^j?k6lm#DGT22!,,Rvx?O?OPTUVPWP\P\^j?k6lm!,,R8!!W]]AF#BQ0d++))"d3B((S68;K;KDIIWc;d2efA!ZZAFh//))"d3B((S68;K;KDNN\h;i2jkA!ZZAF- r!   r   r  	rearnotes
bodymatter)notesr   	landmarksr  r  r-  r.  r   r   r/  r  z	page-listr   hiddenr  r  z{filename}#{pageref})filenamepagerefTr   r   )!r
   rJ   r   r   r   r   r   r   ospathdirnamerC   r   r   r   r   r   r   r   rO  r   rN  r  rU   r2  r   r  rY   r   r  r"  rj   r   ) r   r   nav_xmlr  r   r   _linkr  r   r)  content_titleguide_to_landscape_map	guide_navguide_content_titleguild_olelemli_itemr  r  r  
guide_typea_iteminserted_pagespagelist_navpagelist_content_titlepages_olr;  r<  labelr   r3  r4  s                                  @@r   _get_navEpubWriter._get_nav{  su   tyy55e<= ++,6:ii6H6HJE!223wwt~~6f-  w/ZZ2499??
 ZZE##fuyy'<\[efD  
 f->>HHUDNN+Z//d	
 ((d3!ZZ:499??	(4 	YY]]+
 tyy!#(8(89I(J(J/:L%Q"((uzJvDV7VXc6deI"'"2"29d"C'+||'7'78H''R$''	48H		**8T:T>88FD1D $!% HHVR0E!XXgr2F!XXfb1
))"Z%779O9S9ST^`j9k 0 0 E %+ (0 <<M**0"&))"="=h>T>T"Uw"U$]ghlnu]v"UwN >"Q&$//"Z%77g (  */)9)9,)M&.2ll.>.>}g.V&+ ++L$?0>,Hgu#..x>G2998U\9]E"F"--"H$4$4UL$IF #)FK 1? >>'w`deG xs   $UUc                   ^ ^	^
 [        T R                  R                  S5      5      nUR                  5       n[        R
                  " US5      n[        R
                  " UST R                  R                  SS.5      n[        R
                  " USSSS.5      n[        R
                  " USSSS.5      n[        R
                  " USSS	S.5      n[        R
                  " US
5      n[        R
                  " US5      nT R                  R                  Ul        [        R
                  " US5      nU 4S jm	U	U
U 4S jm
T
" UT R                  R                  S5        [        R                  " USSSS9nU$ )Nrx   r   r   zdtb:uid)rG   rJ  0z	dtb:depthzdtb:totalPageCountzdtb:maxPageNumberdocTitler   navMapc                    > U R                  S[        TR                  S   5      5        TR                  S==   S-  ss'   g )N	playOrderr  r  )r   r^  r  )	nav_pointr   s    r   _add_play_order,EpubWriter._get_ncx.<locals>._add_play_order   s7    MM+s4+;+;L+I'JK\*a/*r!   c           
      $  > U GH  n[        U[        5      (       d  [        U[        5      (       GaP  US   US   pT[        R                  " U SS[        U[
        5      (       a  UR                  5       OSR                  US905      nTR                  S   (       a  T" U5        [        R                  " US5      n[        R                  " US	5      nUR                  Ul
        S
n	[        U[
        5      (       a  UR                  n	OS[        U[        5      (       a  UR                  S
:w  a  UR                  n	O![        U[        5      (       a  UR                  n	[        R                  " USSU	05      n
T" XeUS-   5      nGM  [        U[        5      (       a  U nUR                  S5      nUb1  UR!                  S5      S
:X  a  UR#                  SUR                  5        [        R                  " U SSUR$                  05      nTR                  S   (       a  T" U5        [        R                  " US5      n[        R                  " US	5      nUR                  Ul
        [        R                  " USSUR                  05      n
GM  [        U[
        5      (       d  GM  U nUR                  S5      nUb1  UR!                  S5      S
:X  a  UR#                  SUR                  5        [        R                  " U SSUR                  5       05      nTR                  S   (       a  T" U5        [        R                  " US5      n[        R                  " US	5      nUR                  Ul
        [        R                  " USSUR                  05      n
GM     U$ )Nr   r  navPointrB   z	sep_{uid})r/   r  navLabelr   r"   rG   r   )r  r  r1  r   r   r   rN   rj   r  r   r   rC   r   r   r+   r   r   r   r/   )r  rL  r/   r   section
subsectionnpnlntr   _nc_parent_contentrY  r3  r   s                r   r3  ,EpubWriter._get_ncx.<locals>._create_section$  s   dE**jt.D.D*.q'47Z))" j(6S6S'.."2YdYkYkpsYkYtB ''	2'+))"j9B))"f5B%mmBG D!'844&00#GW55',,":L&||#GT22&||**2y5$-HC)"#'BCd++!G&||I6H+#<<."4$LL		:))#zD$((;KLB''	2'+))"j9B))"f5B"jjBG**2y5$)):LMCh//!G&||I6H+#<<."4$LL?))#zD$++-;PQB''	2'+))"j9B))"f5B"jjBG**2y5$..:QRCE H Jr!   r   Tr   r   )r
   rJ   r   r   r   r   r/   r   r   rO  r   )r   rx   r  r   _uid	doc_titler   nav_mapr   rY  r3  s   `        @@r   _get_ncxEpubWriter._get_ncx  s-   49911%89{{}f- f$))--QZ.[\f#{.STf#G[.\]f#GZ.[\$$T:6	  F3YY__
 ""42	0E	N 	2>>$TG]abr!   c                 V   U R                   R                  5        GH  n[        U[        5      (       aX  U R                  R                  SR                  U R                   R                  UR                  S9U R                  5       5        Mq  [        U[        5      (       aY  U R                  R                  SR                  U R                   R                  UR                  S9U R                  U5      5        M  UR                  (       aY  U R                  R                  SR                  U R                   R                  UR                  S9UR                  5       5        GMI  U R                  R                  SR                  UR                  S9UR                  5       5        GM     g )Nz{FOLDER_NAME}/{file_name})rR  rC   z{file_name}rQ   )rJ   r  r  rn   r  r  rj   rR  rC   rj  r"  rP  rI   rc   r   s     r   _write_itemsEpubWriter._write_itemsq  s3   II'')D$((!!/66499CXCXdhdrdr6sMMO D'**!!/66499CXCXdhdrdr6sMM$' !!/66499CXCXdhdrdr6s$$&
 !!-"6"6"6"PRVRbRbRde# *r!   c                    [         R                  (       a6  [        R                  " U R                  S[        R
                  5      U l        OA[        R                  " U R                  S[        R
                  U R                  S   S9U l        U R                  R                  SS[        R                  S9  U R                  5         U R                  5         U R                  5         U R                  R                  5         g )Nwr  )r  mimetypezapplication/epub+zip)compress_type)rE   PY2zipfileZipFilerC   ZIP_DEFLATEDr  r  r  
ZIP_STOREDr  r(  rm  closer;   s    r   writeEpubWriter.write  s    77t~~sG<P<PQDHW%9%9VeIfDH 	*&<GL^L^_r!   )r  rJ   rC   r  r  r   )r$   r%   r&   r'   r  r   r  r  r  r  r  r  r  r  r  r(  rP  rj  rm  ry  r(   r)   r!   r   r  r  ~  s    !""'q9!O 
?9.b`,\+5Z,>k
#@KZgRf(r!   r  c                   x    \ rS rSrSS0rSS jrS rS rS rS	 r	S
 r
S rS rS rSS jrS rS rS rS rSrg)
EpubReaderi  
ignore_ncxTNc                     Xl         [        5       U l        S U l        SU l        SU l        [        U R                  5      U l        U(       a  U R                  R                  U5        U R                  5         g )Nr"   )rC   rA  rJ   zfopf_fileopf_dirr  r  r  r  _check_deprecated)r   epub_file_namer  s      r   r   EpubReader.__init__  sX    'J	D001LL( r!   c                 h    U R                   R                  S5      c  [        R                  " SSS9  g g )Nr}  zEIn the future version we will turn default option ignore_ncx to True.   
stacklevel)r  r   warningswarnr;   s    r   r  EpubReader._check_deprecated  s,    <<L)1MManop 2r!   c                    U R                   R                  S/ 5       H1  n[        US5      (       d  M  UR                  U R                  5        M3     U R                  R                  5        Hl  n[        U[        5      (       d  M  U R                   R                  S/ 5       H2  n[        US5      (       d  M  UR                  U R                  U5        M4     Mn     g )Nr  
after_readhtml_after_read)	r  r   r  r  rJ   r  r  r   r  r  s      r   r  EpubReader.process  s    <<##Ir2CsL))tyy) 3 II'')D$))<<++Ir:Cs$566++DIIt< ; *r!   c                 :    U R                  5         U R                  $ r   )_loadrJ   r;   s    r   loadEpubReader.load  s    

yyr!   c                 d    [         R                  " U5      nU R                  R                  U5      $ r   )rU   normpathr  readr  s     r   	read_fileEpubReader.read_file  s%      &ww||D!!r!   c                     U R                  S5      n[        U5      nUR                  SS[        S   0S9 HU  nUR	                  S5      S:X  d  M  UR	                  S5      U l        [        R                  " U R
                  5      U l        MW     g )	Nr   z.//xmlns:rootfile[@media-type]r!  r   r  r  zapplication/oebps-package+xmlz	full-path)	r  r
   findallr   r   r  rU   r?  r  )r   meta_infr   	root_files       r   _load_containerEpubReader._load_container  s|    >>":;H%,':mC\9] & 
I }}\*.MM )k :'//>
r!   c                   ^ U R                   R                  5       nUR                  SS 5      U R                  l        UR                  SS 5      (       a   UR                  S5      U R                  l        U R                   R                  S[        S   < SS< 35      nUR                  n[        [        R                  " U5      5      nUR                  S S5      nUR                  5        Vs0 s H  of0 _M     snmU4S jnU GH  n[        R                  " U5      (       a  UR                  [        R                   L a  M>  UR                  US	-   :X  a}  UR                  S
5      n	[        UR#                  5       5      n
U	(       a  SU	;   a  U	R%                  SS5      u  pOS nU" UR                  R                  X5      XR&                  U
5        M  UR                  UR                  R)                  S5      S-   S  nUR*                  (       aM  UR*                  R-                  5       S:X  a/  US:X  a)  UR                  SS 5      nU(       a  XR                  l        [        UR#                  5       5      n
U" UR                  UR*                     XR&                  U
5        GM     TU R                  l        U R                  R1                  SS5      n[3        U5      S:  a  US   S   U R                  l        U R                  R1                  SS5       H@  u  pU
R                  S5      U R                  R
                  :X  d  M0  XR                  l        MB     g s  snf )Nr#  r"  r  r   r  rK  r"   c                 j   > U T;  a  0 TU '   TU    R                  U/ 5      nUR                  X#45        g r   )
setdefaultr   )nstagr  extrar  nsdicts        r   r   +EpubReader._load_metadata.<locals>.add_item  s8    r
BZ**33FMM5.)r!   r   rJ  :r  r  rf  rB   r   r   r   )	containerr   r   rJ   r#  rQ  r   r   r  r  rE   rX   r  r   	iselementr  CommentrL  splitr   rfindr%  rW   rK  r  r   r   r/   )r   container_rootrK  r  nstags
default_nsr  r   trJ  r  r%  r  _idtitlesr  r  s                   @r   _load_metadataEpubReader._load_metadata  sz   //1 +..y$?		 1488&4&8&89L&MDII# >>&&:e3Dj'QRcmmE*+ZZb)
!&0AR%0	* A??1%%%--)?uu
V++uuV}aggiC4K#'::c1#5LFD!FV4dFFFKeeAEEKK,q023HH!1T!9sl?R%%d+C25		/aggi*C@/ 2 $		''g6v;?$QilDIIO!YY33D,GMEzz$499#:#:: %		 HQ 1s   -Mc                 	   U R                   R                  S[        S   < SS< 35       GH  nUb  UR                  S[        S   -  :w  a  M#  UR	                  S5      nUR	                  SS5      nU(       a  UR                  S	5      nO/ nUS
:X  a  SnUS:X  ar  [        UR	                  S5      [        UR	                  S5      5      S9nU R                  [        R                  " U R                  UR                  5      5      Ul        GOUS:X  ar  [        UR	                  S5      [        UR	                  S5      5      S9nU R                  [        R                  " U R                  UR                  5      5      Ul        GO?US:X  Ga  SU;   aw  [        UR	                  S5      [        UR	                  S5      5      S9nU R                  [        R                  " U R                  UR	                  S5      5      5      Ul        GOSU;   aY  [!        5       nU R                  [        R                  " U R                  [        UR	                  S5      5      5      5      Ul        GO\[#        5       nUR	                  S5      Ul        [        UR	                  S5      5      Ul        X%l        UR	                  SS 5      Ul        UR	                  SS 5      Ul        U R                  [        R                  " U R                  UR-                  5       5      5      Ul        XEl        GOU[0        ;   Ga  SU;   a|  [3        UR	                  S5      [        UR	                  S5      5      S9nX%l        U R                  [        R                  " U R                  UR-                  5       5      5      Ul        GO[5        5       nUR	                  S5      Ul        [        UR	                  S5      5      Ul        X%l        U R                  [        R                  " U R                  UR-                  5       5      5      Ul        O[7        5       nUR	                  S5      Ul        [        UR	                  S5      5      Ul        X%l        U R                  [        R                  " U R                  UR-                  5       5      5      Ul        U R8                  R;                  U5        GM     g )Nr  r   r  rI   z{%s}itemr  r   r"   r  r   r   rq   rB   r   r   r9  r*  r)  r  r  r   r  )r  r   r   r  r   r  rn   r   r  rU   r\  r  rC   rG   r7  r"  r  r   rB   rD   r   r   rR   r   IMAGE_MEDIA_TYPESr|   r,  r?   rJ   r   )r   rrD   _propertiesr   eis         r   _load_manifestEpubReader._load_manifest	  sT   $$E1BJ%OPA}*z%7H*H!H|,J%%b1K(..s3

 [()
77tf8NO!^^HMM$,,,UV
55!%%+v9OP!^^HMM$,,,UV
66J& QUU4[GAEE&M<RSB!%dllAEERXM0Z![BJ
*&B!%dllGTUTYTYZ`TaLb0c!dBJ!BEE$KBE#*155=#9BL$.M'(uu_d'CB$()j$(?B%!%dllBKKM0Z![BJ$.M00 J."quuT{gaeeFm>TUB$.M!%dllBKKM0Z![BJ"BEE$KBE#*155=#9BL$.M!%dllBKKM0Z![BJ Zd&quuV}5 *!^^HMM$,,,VW
IIr"E Qr!   c                    ^ [        U5      nUR                  5       nUR                  S[        S   -  5      nU4S jmT" USS5      U R                  l        g )Nz
{%s}navMapr   c                   > Su  p4/ nU R                  5        H  nUR                  S[        S   -  :X  a  UR                  5       S   R                  nUR                  S[        S   -  :X  a  UR	                  SS5      nUR                  S[        S   -  :X  d  M  UR                  T" XaS	-   UR	                  S
S5      5      5        M     [        U5      S:  a  US:X  a  U$ [        X4S9U4$ [        XCU5      $ )N)r"   r"   z{%s}navLabelr   r   z{%s}contentr   r"   z{%s}navPointr  rB   r   )	r   r  r   r   r   r   r   r   r+   )elemsr   nidrO  rG   childrenr/  _get_childrens          r   r  ,EpubReader._parse_ncx.<locals>._get_childrenT  s    #NEH&&(55NZ-@@@MMOA.33E55MJw,???eeE2.G55NZ-@@@OOM!UAEE$O$LM ) 8}q 6#O4h??GC00r!   r   r"   )r
   r   r   r   rJ   rO  )r   datar   r   ri  r  s        @r   
_parse_ncxEpubReader._parse_ncxN  sK    D!LLN	..
70C!CD	1( &gq"5		r!   c                   ^^ [        U5      nUS:X  a  UR                  S5      S   nO&UR                  S5      n[        U5      S:X  a  g US   nUU4S jmUS:X  a'  T" UR                  S5      5      U R                  l        g Ub  T" UR                  S5      5      U R                  l        0 nU R                  R                   H(  n[        U[        5      (       d  M  XUR                  '   M*     U R                  R                   HE  n	 U	R                  R                  S5      u  pX;   d  M(  Xz   R                  R                  U	5        MG     g g ! [         a    U	R                  n
 NBf = f)NrO  z//nav[@*='toc']r   z//nav[@*='page-list']c           	        > / nU R                  S5       GHR  nUR                  S5      nUR                  S5      nUb  US   R                  5       nT	" U5      nUbl  UR                  S5      (       aV  [        R
                  " [        R                  " TUR                  S5      5      5      nUR                  [        XWS9U45        M  UR                  [        U5      U45        M  Uc  M  UR                  S5      (       d  M  UR                  5       n[        R
                  " [        R                  " TUR                  S5      5      5      nUR                  [        Xu5      5        GMU     U$ )Nr.  r-  r/  r   r   r  )
r  r   text_contentr   rU   r  r\  r   r   r+   )
	list_noderL  	item_nodesublist_node	link_noder   r  r   	base_path
parse_lists
           r   r  )EpubReader._parse_nav.<locals>.parse_listv  s   E&..t4	(~~d3%NN3/	+%aL557E),7H ,v1F1F'00y)--X^J_1`age&?%JKgenh%?@*y}}V/D/D%224E#,,X]]9immTZF[-\]DLLd!23# 5& Lr!   r-  ry  )r	   r  r   r   rJ   rO  r   rL  r  r   rC   r   r  r  r   )r   r  r  navtype	html_nodenav_node
_page_list	htmlfileshtmlfilepager;  r  r  s     `         @r   
_parse_navEpubReader._parse_navj  s9   %d+	e '89!<H #)@AJ:!#!!}H	0 e&x}}T':;DIIM!(t)<=DIIO
 I IIOOh114<h001 , 		)(,		(<%X ('--44T: ( " " )#yyH)s   
EE*)E*c                    U R                   R                  S[        S   < SS< 35      nU Vs/ s H%  o"R                  S5      UR                  SS5      4PM'     snU R                  l        UR                  SS	5      nU R                  R                  UR                  S
S 5      5        [        S U R                  R                   5       S 5      nU(       a  U R                  R                  S5      (       a  U(       dj   U R                  [        R                  " U R                  U R                  R                  U5      R                  5       5      5      nU R%                  U5        g g g s  snf ! [          a    [#        SS5      ef = f)Nr  r   r  rM  r  r	  yesrO  r"   r  c              3   T   #    U  H  n[        U[        5      (       d  M  Uv   M      g 7fr   r  r"  r  s     r   r   )EpubReader._load_spine.<locals>.<genexpr>       W/$Zg=V/   (	(r}  zCan not find ncx file.)r  r   r   r   rJ   rM  ro  nextrL  r  r  rU   r\  r  r  rR   r  r2   r  )r   rM  r  rO  nav_itemncxFiles         r   _load_spineEpubReader._load_spine  s1   ##
50A7$KLMRSUEE'NAEE(E,BCUS		iir"				*F MN W$))//WY]^<<##L11F"nnX]]4<<IcIcdgIhIqIqIs-tuG ( :B  T   F',DEEFs   ,E+ AE0 0Fc                    U R                   R                  S[        S   < SS< 35      nUbS  U Vs/ s H5  o"R                  S5      UR                  S5      UR                  S5      S.PM7     snU R                  l        g g s  snf )	Nr  r   r  rN  r   r   r   )r   r   r   )r  r   r   r   rJ   rN  )r   rN  r  s      r   _load_guideEpubReader._load_guide  sm    ##
50A7$KLpuvpuklfgXYX]X]^dXefpuvDIIO vs   <Bc                     U R                  U R                  5      n[	        U5      U l        U R                  5         U R                  5         U R                  5         U R                  5         [        S U R                  R                   5       S 5      nU(       a  U R                  R                  S5      (       d  U R                  R                  (       d9  U R!                  UR"                  [$        R&                  " UR(                  5      SS9  U R!                  UR"                  [$        R&                  " UR(                  5      SS9  g g ! [         a    [        SS5      ef = f)Nr  zCan not find container filec              3   T   #    U  H  n[        U[        5      (       d  M  Uv   M      g 7fr   r  r  s     r   r   ,EpubReader._load_opf_file.<locals>.<genexpr>  r  r  r}  rO  )r  r   )r  r  r  r2   r
   r  r  r  r  r  r  rJ   rL  r  r   rO  r  rG   rU   r?  rC   )r   rc  r  s      r   _load_opf_fileEpubReader._load_opf_file  s   	Ct}}-A &a W$))//WY]^||--TYY]] 0 0(2B2B8CUCU2V`efOOH,,h.>.>x?Q?Q.R\cOd   	C$ABB	Cs   E
 
E!c                 .   S U l         [        R                  (       a4  [        U R                  [
        [        [        R                  45      (       d>  [        R                  (       aq  [        U R                  [        R                  5      (       aH  [        R                  R                  U R                  5      (       a  [        U R                  5      U l         U R                   c5   [        R                  " U R                  S[        R                   SS9U l         U R)                  5         U R+                  5         U R                   R-                  5         g ! [        R"                   a    [%        SS5      e[        R&                   a    [%        SS5      ef = f)Nr  T)compression
allowZip64r   zBad Zip filer  zLarge Zip file)r  rE   PY3r  rC   r^  bytesr=  PathLikers  string_typesr>  isdirr   rt  ru  rv  
BadZipfiler2   LargeZipFiler  r  rx  r;   s    r   r  EpubReader._load  s   GG
4>>C3LMMGG
4>>C4D4DFFww}}T^^,,#DNN377?9!//$..#7K_K_lpq 	 %% 7#A~66'' 9#A'7889s   %4E A F)rJ   r  rC   r  r  r  r  r   )rO  )r$   r%   r&   r'   r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r(   r)   r!   r   r|  r|    sY    #T*O!q
=
"
	?<&|C#J687;r)&w
e*r!   r|  c                 D   [        XU5      nUR                  5          UR                  5         g! [         af    [        R
                  " SSS9  [        R                  " 5       u  pEnU(       a/  UR                  S5      (       a  [        R                  " XEU5         g gf = f)z
Creates epub file with the content defined in EpubBook.

>>> ebooklib.write_epub('book.epub', book)

:Args:
  - name: file name for the output file
  - book: instance of EpubBook
  - options: extra opions as dictionary (optional)
zIIn the future throwing exceptions while writing will be default behavior.r  r  r  FT)r  r  ry  OSErrorr  r  sysexc_infor   rE   reraise)rJ  rJ   r  epubr  r  tbs          r   
write_epubr    s     d'*DLLN

   anop<<>bw{{#566KKb!  s   / A+BBc                 \    [        X5      nUR                  5       nUR                  5         U$ )z
Creates new instance of EpubBook with the content defined in the input file.

>>> book = ebooklib.read_epub('book.epub')

:Args:
  - name: full path to the input file
  - options: extra options as dictionary (optional)

:Returns:
  Instance of EpubBook.
)r|  r  r  )rJ  r  readerrJ   s       r   	read_epubr  
  s(     &F;;=D
NNKr!   r   )5r  os.pathr=  	posixpathrU   r  r`  r  rt  collectionsr   rE   urllib.parser   ImportErrorurlliblxmlr   rY   ebooklib.utilsr   r   r   r	   r
   r]  r   r  r  rF   rV  rW  rX  rY  r  objectr   r+   r   r2   r?   rn   r|   r   r  r"  r,  r7  rA  r  r|  r  r  r)   r!   r   <module>r     s  "    
    # 
$   f f  2*3)D
,+
 * %% I J %%6
 eeE EE  	 N f 6 I `4v `4F3h 3[ [gZx gZT,_H ,_^Yh Y0[ [Zx ZsIv sIl	T TnP Pl
>Y7  s   E EE