
    -Pht                    p   d Z ddlmZ ddlZddlZddlZddlZddlZddlm	Z	 ddl
mZmZ ddlmZ ddlmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddl!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z(m)Z)m*Z* erddl
m+Z+ ddl,m-Z-m.Z. 	 ddl/m0Z0 dZ1n# e2$ r dZ1Y nw xY w e j3        e4          Z5dZ6dZ7dZ8dZ9dZ:dZ;ddd Z<d!d"d#d$d%d&d'd'd(d)d*d+Z=d,Z> ej?        d-          Z@ G d. d/e          ZA G d0 d1e          ZB G d2 d3e          ZC G d4 d5e          ZDd>d?d;ZEeEZF G d< d=e          ZGdS )@z#Base class of epub2/epub3 builders.    )annotationsN)Path)TYPE_CHECKING
NamedTuple)quote)ZIP_DEFLATED
ZIP_STOREDZipFile)nodes)smartquotes)addnodes)StandaloneHTMLBuilder)	BuildInfo)__)logging)_StrPath)status_iterator)copy_asset_file)copyfile	ensuredirrelpath)Any)ElementNode)ImageTFzepub-cover.xhtmlztoctree-l%dz
 [%(uri)s]z#%d	Footnoteszlink-targetzTable of ContentsCover)toccoverzapplication/xhtml+xmlztext/css	image/pngz
image/webp	image/gifimage/svg+xml
image/jpegzfont/otfzfont/ttfz	font/woff).xhtmlz.cssz.pngz.webpz.gif.svgz.jpgz.jpegz.otfz.ttfz.woff)r%   z([^#:]*#)(.*)c                  .    e Zd ZU ded<   ded<   ded<   dS )ManifestItemstrhrefid
media_typeN__name__
__module____qualname____annotations__     Z/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sphinx/builders/_epub_base.pyr'   r'   Z   s+         IIIGGGOOOOOr2   r'   c                  $    e Zd ZU ded<   ded<   dS )Spiner(   idrefboollinearNr,   r1   r2   r3   r5   r5   `   s"         JJJLLLLLr2   r5   c                  .    e Zd ZU ded<   ded<   ded<   dS )Guider(   typetitleuriNr,   r1   r2   r3   r:   r:   e   s+         IIIJJJHHHHHr2   r:   c                  B    e Zd ZU ded<   ded<   ded<   ded<   ded<   d	S )
NavPointr(   navpointint	playordertextrefurilist[NavPoint]childrenNr,   r1   r2   r3   r?   r?   k   sB         MMMNNNIIIKKKr2   r?   entr(   languagereturnc                    |                      dd          } t          j        |           } t          j        | |          } |                      dd          } | S )Nz&quot;")replacer   educateDashesOldSchooleducateQuotes)rH   rI   s     r3   sphinx_smarty_pantsrP   s   sO    			(C  A*1--A!!X..A			#x  AHr2   c                  ~    e Zd ZU dZdZg dZdZdZdZdZ	dZ
dZdZeZeZeZeZeZeZeZ e            Zded<   dZdM fd
ZdNdZ dOdZ!dPdZ"dQdZ#dRdZ$dMdZ%dSdZ&dTdZ'dUd!Z(	 dVdWd$Z)dX fd&Z*dYd(Z+dZd+Z,dMd,Z-dM fd-Z.dMd.Z/	 d[d0d0d1d\ fd:Z0dMd;Z1d]d^d>Z2d_d?Z3dMd@Z4	 d`dadFZ5dbdHZ6dcdJZ7dMdKZ8dMdLZ9 xZ:S )dEpubBuilderzBuilder that outputs epub files.

    It creates the metainfo files container.opf, toc.ncx, mimetype, and
    META-INF/container.xml.  Afterwards, all necessary files are zipped to an
    epub file.
    F)r"   r    r!   r#   Tr   template_dir rJ   Nonec                    t                                                       d| _        d| _        d| _        d| _        i | _        |                     dd          | _        g | _	        d S )Nr$   r   	use_indexepub)
superinit
out_suffixlink_suffixrB   tocidid_cacheget_builder_configrW   refnodesself	__class__s    r3   rZ   zEpubBuilder.init   sZ    "#
(*00fEE.0r2   r   c                V    t          | j        | j        t          ddh                    S )NhtmlrX   )r   configtags	frozensetrb   s    r3   create_build_infozEpubBuilder.create_build_info   s%    diFF;K1L1LMMMr2   'tuple[str, dict[str, str | int | bool]]c                2    | j         j        | j         j        fS N)rf   
epub_themeepub_theme_optionsri   s    r3   get_theme_configzEpubBuilder.get_theme_config   s    {%t{'EEEr2   namer(   c                    | j                             |          }|s'd| j                            d          z  }|| j         |<   |S )zReturn a unique id for name.zepub-%drX   )r^   getenvnew_serialno)rb   rq   r*   s      r3   make_idzEpubBuilder.make_id   sL     ]t$$ 	%TX226:::B"$DM$	r2   doctreer   resultlist[dict[str, Any]]c                .   t          |t          j                  r|                    d          r|d         }|                    d          r|S |j        j        d         }t          ddd          D ]l}| j        |z  |v r^|	                    |t          j        |          t          t          j        |                                                    d            nmn5t          |t          j                  r|D ]}|                     ||          }|S )z>Collect section titles, their depth in the toc and the refuri.rD   )zhttp://zhttps://zirc:zmailto:classes   r   levelrD   rC   )
isinstancer   	referencers   
startswithparent
attributesrangetoctree_templateappendre   escapesspastextr   get_refnodes)rb   rw   rx   rD   r{   r   elems          r3   r   zEpubBuilder.get_refnodes   s)    gu// 	9GKK4I4I 	9X&F  !KLL n/	:Gq!R  )E1g==MM!&"&+f"5"5 #DK0@0@$A$A B B# #   
 E > // 	9 9 9**488r2   r   c                    t                      }|D ]Y}|d         |v r2t                              t          d          |d         dd           >|                    |d                    Zd S )NrD   zduplicated ToC entry found: %srX   duplicated_toc_entryr;   subtype)setloggerwarningr   add)rb   r   appearednodes       r3   check_refnodeszEpubBuilder.check_refnodes   s     UU 		- 		-DH~))788N2	      T(^,,,,		- 		-r2   c                F   | j                             | j        j        | dd          }|                     |g           | _        t          | j        j                  j        }| j        D ]}t          ||d         z            |d<   | 	                    | j                   dS )zyGet the total table of contents, containing the master_doc
        and pre and post files not managed by Sphinx.
        FTprune_toctreesincludehiddenrD   N)
rt   get_and_resolve_doctreerf   
master_docr   r`   r   r   r(   toc_add_files)rb   rw   
master_diritems       r3   get_toczEpubBuilder.get_toc   s     (22K"Dd 3 
 
 ))'266$+0118
M 	> 	>D d8n!<==DNN4=)))))r2   r`   c                   |                     ddt          j        | j        j        | j        z             t          t          j        | j        j        | j        j                 	                                                    d           t          | j        j                  D ]P\  }}|                     ddt          j        |          t          t          j        |                    d           Q| j        j        D ]O\  }}|                    dt          j        |          t          t          j        |                    d           PdS )z;Add the root_doc, pre and post files to a list of refnodes.r      r~   N)insertre   r   rf   root_docr[   r   rt   titlesr   reversedepub_pre_filesepub_post_filesr   )rb   r`   filerC   s       r3   r   zEpubBuilder.toc_add_files   sR   +dk&:T_&LMMK0D E L L N NOO  		
 		
 		
 #4;#=>> 	 	JD$OO"k$//D 1 122     +5 	 	JD$OO+d++DK--..     	 	r2   prefixfragmentc                4    ||                     dd          z   S )z;Return a href/id attribute with colons replaced by hyphens.:-)rM   )rb   r   r   s      r3   fix_fragmentzEpubBuilder.fix_fragment  s    ((c2222r2   treenodes.documentc                    d fd}|                     t          j                  D ]}d|v ra j                            |d                   }|r?                     |                    d          |                    d                    |d<   d	|v r                     d
|d	                   |d	<   |                     t          j                  D ]H} ||           |                    d          }t          |t          j
                  r ||           I|                     t          j                  D ]} ||           dS )zReplace colons with hyphens in href and id attributes.

        Some readers crash because they interpret the part as a
        transport protocol specification.
        r   r   rJ   rU   c                    g }| d         D ]1}                     d|          }||vr|                    |           2|| d<   dS )zUpdate IDs of given *node*.idsrT   N)r   r   )r   new_idsnode_idnew_idrb   s       r3   update_node_idz+EpubBuilder.fix_ids.<locals>.update_node_id  s[    !#G; + +**2w77((NN6***!DKKKr2   rD   r      refidrT   T)ascendN)r   r   rJ   rU   )findallr   r   	refuri_rematchr   grouptarget	next_noder   r   r   desc_signature)rb   r   r   r   mr   r   r   s   `       r3   fix_idszEpubBuilder.fix_ids  sm   	" 	" 	" 	" 	" 	" eo66 	O 	OI9$$N((8)<== T*.*;*;AGGAJJPQ

*S*SIh')##%)%6%6r9W;M%N%N	'"ll5<00 	* 	*FN6"""$..d.;;I)U]33 *y)))"ll8+BCC 	+ 	+NN>****	+ 	+r2   inline	show_urlsc                   dd}dd
}dd}|dk    rdS |dk    r<t          |                    t          j                            } ||          \  }}d}	t	          |                    t          j                            D ]\}
|
                    dd          }|                    d          r-||
                                vr|
j	        
                    |
          dz   }|dk    r]| j        d|iz  }t          j        ||          }|d                             | j                   |
j	                            ||           |dk    rt           |	z  }|	dz  }	 |||          }|
j	                            ||            ||||          }|                    ||           |d         d         |d<   |                    |d         d                    |dz  }^dS )z+Add visible link targets for external linksdocr   labelr(   rJ   nodes.footnote_referencec                    t          j        d          }|                    t          j        |                     |                     |           |S )z.Create a footnote_reference node with childrenz[#]_)r   footnote_referencer   Textnote_autofootnote_ref)r   r   footnote_refs      r3   make_footnote_refz8EpubBuilder.add_visible_links.<locals>.make_footnote_ref;  sL     !3F;;L
5 1 1222%%l333r2   r=   nodes.footnotec                H   t          j        |          }t          j                    }|                    t          j        |                     |                    |           |                    dt          j        d|                     |                     |           |S )z$Create a footnote node with childrenr   rT   )r   footnote	paragraphr   r   r   r   note_autofootnote)r   r   r=   r   paras        r3   make_footnotez4EpubBuilder.add_visible_links.<locals>.make_footnoteD  s    ~c**H?$$DKK
3(((OOD!!!OOAu{2u55666!!(+++Or2   r   tuple[Element, int]c                   t          |                     t          j                            }|r,|d         }|j        |j                            |          dz   fS |                     t          j                  D ]X}t          |          dk    rC|                                t          k    r&|j        |j                            |          dz   fc S Yt          |                     t          j                            }t          j                    }|                    t          j        t                               |                    |           ||                    |          dz   fS )zsFind or create a spot to place footnotes.

            The function returns the tuple (parent, index).
            r}   r   )listr   r   r   r   indexrubriclenr   FOOTNOTES_RUBRIC_NAMEnextdocumentr   r   )r   fnsfnr   r   rubs         r3   footnote_spotz4EpubBuilder.add_visible_links.<locals>.footnote_spotN  s&    t||EN3344C :Wy")//""5"5"999U\22 D Dt99>>dkkmm7L&L&L;(9(9$(?(?!(CCCCCt||EN3344C,..CJJuz"788999JJsOOO		#***r2   noNr   r   rD   rT   )zhttp:zhttps:zftp:r   r{   r   r   r   )r   r   r   r(   rJ   r   )r   r   r   r(   r=   r(   rJ   r   )r   r   rJ   r   )r   r   r   r   r   r   rs   r   r   r   r   link_target_templater   r   css_link_target_classr   FOOTNOTE_LABEL_TEMPLATEadd_backref)rb   r   r   r   r   r   r   fn_spotfn_idxnrr   r=   idxlinkr   r   r   s                    r3   add_visible_linkszEpubBuilder.add_visible_links6  s   
	  	  	  	 	 	 	 		+ 	+ 	+ 	+, F
""t||EN3344C+mD11OGVBeo6677 	  	 D((8R((C~~9::  s$++--?W?Wk''--1((3uclBC <S11DO**4+EFFFK&&sD1111*,,3b8E!GB#4#4S%#@#@LK&&sL999,}S%==HNN68444,4UOA,>L)((e)<Q)?@@@aKF%	  	 r2   docnamec                    |                      |           |                     || j        j                   t	                                          ||           dS )zWrite one document file.

        This method is overwritten in order to fix fragment identifiers
        and to add visible external links.
        N)r   r   rf   epub_show_urlsrY   	write_doc)rb   r   rw   rc   s      r3   r   zEpubBuilder.write_doc~  sR     	Ww(BCCC'7+++++r2   'list[tuple[str, list[tuple[str, Any]]]]c                   |D ]\  }}|D ]\  }\  }}}t          |          D ]e\  }\  }}	| j                            |	          x}
rA||                     |
                    d          |
                    d                    f||<   f|D ]z\  }}t          |          D ]e\  }\  }}	| j                            |	          x}
rA||                     |
                    d          |
                    d                    f||<   f{dS )z'Fix href attributes for genindex pages.r   r   N)	enumerater   r   r   r   )rb   r   _keycolumns
_entrynamelinkssubitemsiismainr   r   _subentrynamesubentrylinkss                r3   fix_genindexzEpubBuilder.fix_genindex  sG    " 	 	MD'7> 
 
3
3UHd)25)9)9 U U%A~ N00666q U#)4+<+<QWWQZZQR+T+T#Ta4<  0M=-6}-E-E  )>FD $ 4 4T : ::1  & $ 1 1!''!**aggajj I I0M!,	
	 	r2   filenamer7   c                ^    t           j                            |          d         }|t          v S )z=Does the filename extension indicate a vector graphic format?r}   )ospathsplitextVECTOR_GRAPHICS_EXTENSIONS)rb   r  exts      r3   is_vector_graphicszEpubBuilder.is_vector_graphics  s(    gx((,000r2   c                   t          | j        | j        z             t          | j        t          d          dt          | j                  | j        j                  D ]}| j        |         }	 t          j
        | j        |z            }n# t          $ r |                     |          s0t                              t          d          | j        |z             	 t!          | j        |z  | j        | j        z  |z  d           nH# t          $ r;}t                              t          d          | j        |z  |           Y d}~nd}~ww xY wY w xY w| j        j        r|j        dk    r|                                }| j        j        d	k    rS|j        \  }}| j        j        }||k    r7t/          ||z  |z            }|                    ||ft          j                  }	 |                    | j        | j        z  |z             # t          $ r<}t                              t          d
          | j        |z  |           Y d}~d}~ww xY wdS )zCopy images using Pillow, the Python Imaging Library.
        The method tries to read and write the files with Pillow, converting
        the format and resizing the image if necessary/possible.
        zcopying images... brownz-cannot read image file %r: copying it insteadTforcezcannot copy image file %r: %sNPr   zcannot write image file %r: %s)r   outdirimagedirr   imagesr   r   app	verbosityr   opensrcdirOSErrorr	  r   r   r   rf   epub_fix_imagesmodeconvertepub_max_image_widthsizeroundresizeBICUBICsave)	rb   srcdestimgerrwidthheightnwnhs	            r3   copy_image_files_pilz EpubBuilder.copy_image_files_pil  s   
 	$+-..."K#$$H
 
 /	 /	C ;s#Djs!233   ..s33 NNJKKc)  c)dm3d:"    
    NN:;;c)        %& {* (8s?? ++--C{/!33"%([52::u455B**b"Xu}==Ct}4t;<<<<   788K#%       U/	 /	sU   /BAE*DE
E1EEEEE$%H
I1IIc                V   | j         r| j        j        s| j        j        rft          sIt
                              t          d                     t                      	                                 dS | 
                                 dS t                      	                                 dS dS )zzCopy image files to destination directory.
        This overwritten method can use Pillow to convert image files.
        z&Pillow not found - copying image filesN)r  rf   r  r  PILLOW_AVAILABLEr   r   r   rY   copy_image_filesr(  ra   s    r3   r+  zEpubBuilder.copy_image_files  s     ; 	+{* +dk.N +' 0NN2&N#O#OPPPGG,,.....--/////((*****	+ 	+r2   c                    d S rm   r1   ri   s    r3   copy_download_fileszEpubBuilder.copy_download_files  s    r2   	page.htmlNoutfilename	event_argpagenameaddctxdict[str, Any]templatenamer0  Path | Noner1  r   c                   |                     d          r(d|v r$| j        sdS |                     |d                    | j        |d<   t	                                          |||||           dS )zCreate a rendered page.

        This method is overwritten for genindex pages in order to fix href link
        attributes.
        genindexgenindexentriesNdoctyper/  )r   rW   r  r:  rY   handle_page)rb   r2  r3  r5  r0  r1  rc   s         r3   r;  zEpubBuilder.handle_page  s     z** 	9/@F/J/J> f%67888 Lyfly 	 	
 	
 	
 	
 	
r2   c                    t                               t          d                     t          | j        dz  | j        dz  d           dS )z!Write the metainfo file mimetype.zwriting mimetype file...mimetypeTr  N)r   infor   r   rS   r  ri   s    r3   build_mimetypezEpubBuilder.build_mimetype  sV    B122333
*K*$	
 	
 	
 	
 	
 	
r2   META-INF/container.xmloutnamec                    t                               t          d                     | j        dz  }t	          |           t          | j        dz  |dz  d           dS )z/Write the metainfo file META-INF/container.xml.z&writing META-INF/container.xml file...zMETA-INFzcontainer.xmlTr  N)r   r>  r   r  r   r   rS   )rb   rA  r  s      r3   build_containerzEpubBuilder.build_container  sn    B?@@AAAz)&/_$	
 	
 	
 	
 	
 	
r2   c                   t          j        d          x}"t          j        t	          |                    }nt          j                    }t          j        | j        j                  t          j        | j        j	                  t          j        | j        j
                  t          j        | j        j                  t          j        | j        j                  t          j        | j        j                  t          j        | j        j                  t          j        | j        j                  t          j        t          j        d|                    g g g d}|S )zaCreate a dictionary with all metadata for the content.opf
        file properly escaped.
        SOURCE_DATE_EPOCHNz%Y-%m-%d)r<   authoruidlang	publisher	copyrightschemer*   datemanifest_itemsspinesguides)r  getenvtimegmtimerA   re   r   rf   
epub_titleepub_authorepub_uidepub_languageepub_publisherepub_copyrightepub_schemeepub_identifierstrftime)rb   source_date_epoch
time_tuplemetadatas       r3   content_metadatazEpubBuilder.content_metadata  s    "$+>!?!??LS):%;%;<<JJJ [!788k$+"9::;t{344K 9::T[%?@@T[%?@@k$+"9::+dk9::Kj* E EFF $
 $
 r2   c                2   t                               t          d                     |                                 }g | _        dddddddd	d
| j        j        dz   g
| j        j        | _        | j	        s"| j        
                    d| j        z              t          j        | j                  D ]\  }}}t          |          }|                                 t#          |          D ]J}t%          ||z  | j                  }|| j        v r%t          j                            |          d         }|| j        vr0|dvr+t                               t          d          |dd           |                    t          j        d          }t3          t5          j        t9          |                    t5          j        |                     |                    t5          j        | j        |                             }	|d         
                    |	           | j        
                    |           Lt=                      }
| j        D ]}d|d         v r|d         | j        v rtA          t5          j        |                     |d                             d          }|d         
                    |           |
!                    |d                    | j"        D ]}tA          t5          j        |                     |d         | j        z                       d          }|d         
                    |           |
!                    |d         | j        z              | j	        rutA          t5          j        |                     d| j        z                       d          }|d         
                    |           |
!                    d| j        z              | j        D ]p}||
vrj|#                    | j                  rPtA          t5          j        |                     |                    d          }|d         
                    |           qd}| j        j$        r| j        j$        \  }}|                    t          j        d          }t5          j        |                     |                    |d<   |rtA          t5          j        |                     | j%                            d          }|d         &                    d|           | j%        | j        vrt          j                            | j%                  d         }| j        
                    | j%                   t3          t5          j        | j%                  t5          j        |                     | j%                            t5          j        | j        |                             }	|d         
                    |	           t5          j        |          | j        j'        d}| (                    t          j                            | j%                  d         ||           |
!                    | j%                   d}d}| j        j)        r| j        j)        D ]\  }}}|*                    d          d         }|| j        vr| j        
                    |           |dk    rd}|dk    rd}|d         
                    tW          t5          j        |          t5          j        |          t5          j        |                               |rN|rL|d         
                    tW          d| j,        d         t5          j        | j%                                       |r_| j        rX|d         
                    tW          d| j,        d         t5          j        | j        d         d                                        t[          | j.        d z  | j        |d!           dS )"zWrite the metainfo file content.opf It contains bibliographic data,
        a file list and the spine (the reading order).
        zwriting content.opf file...z
.buildinfor=  content.opftoc.ncxr@  z	Thumbs.dbzehthumbs.dbz	.DS_Storez	nav.xhtml.epubr8  r}   >   .js.xmlz!unknown mimetype for %s, ignoringrX   unknown_project_filesr   /rM  #rD   TrN  r   FNr   )imager<   r   rO  zcontent.opf.jinjacontextr  )/r   r>  r   r_  filesrf   epub_basenameepub_exclude_filesignored_filesrW   r   r[   r  walkr  r   sortsortedr   r  r  media_typesr   rM   sepr'   re   r   r   rv   r   r`   r5   r   domain_indicesendswith
epub_covercoverpage_namer   projectr;  
epub_guidesplitr:   guide_titlesr   rS   )rb   r^  rootdirsrl  	root_pathr   r  r  r   
spinefilesrefnodespiner>  rq   	html_tmplri  ctxauto_add_coverauto_add_tocr;   r=   r<   r   s                           r3   build_contentzEpubBuilder.build_content*  s    	B455666((** !#
$K%/
 [+
 ~ 	D%%j4?&BCCC!#!5!5 	, 	,D$T

IIIKKKUmm , ,"9r>4;??t111g&&x004d... /11BCC$!'$;	 '    #++BFC88#Kh00KX 6 677K 0 566 
 )*11$777
!!(++++/,4 UU
} 	. 	.Ggh'''x D$666$+dll783D&E&EFFMMEX%%e,,,NN78,----' 	6 	6D$+dll47T_3L&M&MNNPTUUEX%%e,,,NN47T_45555> 	9$+dll:3O&P&PQQSWXXEX%%e,,,NN:7888J 	1 	1D:%%$--*H*H%dk$,,t*<*<==uEE"))%000 	;! 	4#{5E9MM"&#..E $DLL,?,? @ @HW 4dk$,,t7J*K*KLLdSS"))!U333&dj88'**4+>??CCJ%%d&9:::'D$788DLL1D$E$EFFD$4S$9:: D
 -.55d;;; $E 2 2T[=PQQ  G$$T%899!<c9   t2333;! 	$(K$: 
 
 c5yy~~a(tz))J%%d+++7??%*N5==#(L"))$+d++T[-?-?SAQAQRR     	i 	X%%%g.K 344     	DM 	X%%%e,Ka 0 :;;    	 33K		
 	
 	
 	
 	
 	
r2   r   r   rA   incrr?   c                    |r| xj         dz  c_         | xj        dz  c_        t          d| j         | j         |d         |d         g           S )z;Create a new entry in the toc from the node at given level.r   navPointrC   rD   )rB   r]   r?   )rb   r   r   r  s       r3   new_navpointzEpubBuilder.new_navpoint  s]    
  	 NNaNN

a

#tz##T^T&\4>SU
 
 	
r2   rE   c                   t          ddddg           g}d}d}|D ]$}|d         s|d                             d          d         }|| j        v r7|d         | j        j        k    rN|d         |k    ra|                     ||          }|                                 |d	         j                            |           |                    |           ng|d         |d
z   k    r|d
z  }|rA| j        j	        r5|d	         j                            |                     ||d                     |                     ||          }|d	         j                            |           |                    |           n|d         |k     r|d         t          |          k     r-|                                 |d         t          |          k     -|d         }|                     ||          }|d	         j                            |           |                    |           nt          d          }t          |          |}&|d         j        S )zCreate the toc navigation structure.

        Subelements of a node are nested inside the navpoint.  For nested nodes
        the parent node is reinserted in the subnav.
        dummyr   rT   NrC   rD   rh  r   r}   r   Fznode has an invalid level)r?   r{  ro  rf   epub_tocdepthr  poprF   r   epub_tocdupr   r   
ValueError)	rb   r   navstackr   lastnoder   r   r@   msgs	            r3   build_navpointszEpubBuilder.build_navpoints  sX    %-WaR$D$D#E !	 !	D< >'',,Q/Dt)))G}t{888G}%%,,T599%,,X666))))g%!)++
  7 RL)00))(E5AA    ,,T599%,,X666))))g&&7mc(mm33LLNNN 7mc(mm33W,,T599%,,X666))))455 oo%HH{##r2   	navpointsc                `    | j         j        t          j        | j         j                  ||d}|S )z]Create a dictionary with all metadata for the toc.ncx file
        properly escaped.
        )rG  r<   r   r  )rf   rU  re   r   rS  )rb   r   r  r^  s       r3   toc_metadatazEpubBuilder.toc_metadata  s7    
 ;'[!788"	$
 $
 r2   c                V   t                               t          d                     | j        j        dk    rT| j                            | j        j        | dd          }|                     |g           }| 	                    |           n| j
        }|                     |           |                     |          }t          d | j
        D                       }t          || j        j                  }t!          | j        dz  | j        |                     ||          d           d	S )
z Write the metainfo file toc.ncx.zwriting toc.ncx file...defaultFr   c              3  &   K   | ]}|d          V  dS )r   Nr1   ).0r   s     r3   	<genexpr>z(EpubBuilder.build_toc.<locals>.<genexpr>
  s&      <<dDM<<<<<<r2   ztoc.ncx.jinjaTrj  N)r   r>  r   rf   epub_tocscopert   r   r   r   r   r`   r   r  maxminr  r   rS   r  r  )rb   rw   r`   r  r   s        r3   	build_toczEpubBuilder.build_toc  s/   B011222;$	11h66$d5PU 7  G (("55Hx(((( }HH%%%((22	<<dm<<<<<E4;455/K%%eY77		
 	
 	
 	
 	
 	
r2   c                   | j         j        dz   }t                              t	          d          |           | j        |z  }t          |dt                    5 }|                    | j        dz  dt                     dD ]&}|                    | j        |z  |t                     '| j
        D ]&}|                    | j        |z  |t                     '	 ddd           dS # 1 swxY w Y   dS )z~Write the epub file.

        It is a zip file with the mimetype file stored uncompressed as the first
        entry.
        rc  zwriting %s file...wr=  )r@  ra  rb  N)rf   rm  r   r>  r   r  r
   r   writer	   rl  )rb   rA  epub_filenamerX   r  s        r3   
build_epubzEpubBuilder.build_epub  sI    ++g5B+,,g666g-]C66 	K$JJt{Z/ZHHHP K K

4;18\JJJJ J K K

4;18\JJJJK		K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	Ks   A<C""C&)C&)rJ   rU   )rJ   r   )rJ   rk   )rq   r(   rJ   r(   )rw   r   rx   ry   rJ   ry   )r   ry   rJ   rU   )r`   ry   rJ   rU   )r   r(   r   r(   rJ   r(   )r   r   rJ   rU   )r   )r   r   r   r(   rJ   rU   )r   r(   rw   r   rJ   rU   )r   r   rJ   rU   )r  r(   rJ   r7   )r.  )r2  r(   r3  r4  r5  r(   r0  r6  r1  r   rJ   rU   )r@  )rA  r(   rJ   rU   )rJ   r4  )T)r   r4  r   rA   r  r7   rJ   r?   )r   ry   rJ   rE   )r   rA   r  rE   rJ   r4  );r-   r.   r/   __doc__
copysourcesupported_image_typessupported_remote_imagesadd_permalinksallow_sharp_as_current_pathembeddeddownload_supporthtml_scaled_image_linksearchCOVERPAGE_NAMErx  TOCTREE_TEMPLATEr   LINK_TARGET_TEMPLATEr   CSS_LINK_TARGET_CLASSr   GUIDE_TITLESr|  MEDIA_TYPESrs  	REFURI_REr   r   rS   r0   r:  rZ   rj   rp   rv   r   r   r   r   r   r   r   r   r  r	  r(  r+  r-  r;  r?  rC  r_  r  r  r  r  r  r  __classcell__)rc   s   @r3   rR   rR      sA          JUUU# N"'H"F#N'/1LKI%XZZL''''G	1 	1 	1 	1 	1 	1N N N NF F F F      4- - - -* * * *   83 3 3 3 +  +  +  +F 6>F  F  F  F  F P, , , , , ,   "1 1 1 1
5 5 5 5n+ + + + + +    (	
 $(
 
 
 
 
 
 
 
.
 
 
 
	
 	
 	
 	
 	
   2I
 I
 I
 I
X >B

 

 

 

 

,$ ,$ ,$ ,$\
 
 
 

 
 
 
0K K K K K K K Kr2   rR   )rG   )rH   r(   rI   r(   rJ   r(   )Hr  
__future__r   re   r  os.pathrerQ  pathlibr   typingr   r   urllib.parser   zipfiler   r	   r
   docutilsr   docutils.utilsr   sphinxr   sphinx.builders.htmlr    sphinx.builders.html._build_infor   sphinx.localer   sphinx.utilr   sphinx.util._pathlibr   sphinx.util.displayr   sphinx.util.fileutilr   sphinx.util.osutilr   r   r   r   docutils.nodesr   r   PILr   r*  ImportError	getLoggerr-   r   r  r  r  r   r   r  r  r  r  compiler  r'   r5   r:   r?   rP   r   rR   r1   r2   r3   <module>r     s   ) ) " " " " " "  				  				        , , , , , , , ,       5 5 5 5 5 5 5 5 5 5       & & & & & &       6 6 6 6 6 6 6 6 6 6 6 6             ) ) ) ) ) ) / / / / / / 0 0 0 0 0 0 ; ; ; ; ; ; ; ; ; ; -,,,,,,,,    
	8	$	$ $  #  # %    &  ' 
 BJ''	    :       J   
    J       z        `
K `
K `
K `
K `
K' `
K `
K `
K `
K `
Ks   B B%$B%