
    zi"q                    H   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mZ ddlm	Z	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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(m)Z) 	 ddl*m+Z+ n# e,$ r dZ+Y nw xY w ej-        e.          Z/dZ0dZ1dZ2dZ3dZ4dZ5dddZ6ddddd d!d"d"d#d$d%d&Z7d'Z8 ej9        d(          Z: G d) d*e          Z; G d+ d,e          Z< G d- d.e          Z= G d/ d0e          Z>d9d:d6Z?e?Z@ G d7 d8e          ZAdS );z#Base class of epub2/epub3 builders.    )annotationsN)path)TYPE_CHECKINGAny
NamedTuple)quote)ZIP_DEFLATED
ZIP_STOREDZipFile)nodes)smartquotes)addnodes)	BuildInfoStandaloneHTMLBuilder)__)logging)status_iterator)copy_asset_file)copyfile	ensuredirrelpath)ElementNode)Imagez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__     e/var/www/tmov.alphamb/tmov_inventario/venv/lib/python3.11/site-packages/sphinx/builders/_epub_base.pyr&   r&   S   s+         IIIGGGOOOOOr1   r&   c                  $    e Zd ZU ded<   ded<   dS )Spiner'   idrefboollinearNr+   r0   r1   r2   r4   r4   Y   s"         JJJLLLLLr1   r4   c                  .    e Zd ZU ded<   ded<   ded<   dS )Guider'   typetitleuriNr+   r0   r1   r2   r9   r9   ^   s+         IIIJJJHHHHHr1   r9   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+   r0   r1   r2   r>   r>   d   sB         MMMNNNIIIKKKr1   r>   entr'   languagereturnc                    |                      dd          } t          j        |           } t          j        | |          } |                      dd          } | S )Nz&quot;")replacer   educateDashesOldSchooleducateQuotes)rG   rH   s     r2   sphinx_smarty_pantsrO   l   sO    			(C  A*1--A!!X..A			#x  AHr1   c                  X    e Zd Z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dZdZdK fdZdLd
ZdMdZdNdZ dOdZ!dPdZ"dKdZ#dQdZ$dRdZ%dSdZ&dTdUd"Z'dV fd$Z(dWd&Z)dXd)Z*dKd*Z+dK fd+Z,dKd,Z-	 	 dYdZ fd7Z.dKd8Z/d[d\d;Z0d]d=Z1dKd>Z2d^d_dDZ3d`dFZ4dadHZ5dKdIZ6dKdJZ7 xZ8S )bEpubBuilderz
    Builder 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"   T rI   Nonec                    t                                                       d| _        d| _        d| _        d| _        i | _        |                     dd          | _        g | _	        d S )Nr#   r   	use_indexepub)
superinit
out_suffixlink_suffixrA   tocidid_cacheget_builder_configrU   refnodesself	__class__s    r2   rX   zEpubBuilder.init   sZ    "#
(*00fEE.0r1   r   c                <    t          | j        | j        ddg          S )NhtmlrV   )r   configtagsr`   s    r2   create_build_infozEpubBuilder.create_build_info   s    di&&1ABBBr1   tuple[str, dict]c                2    | j         j        | j         j        fS N)rd   
epub_themeepub_theme_optionsrf   s    r2   get_theme_configzEpubBuilder.get_theme_config   s    {%t{'EEEr1   namer'   c                    | j                             |          }|s'd| j                            d          z  }|| j         |<   |S )zReturn a unique id for name.zepub-%drV   )r\   getenvnew_serialno)r`   rn   r)   s      r2   make_idzEpubBuilder.make_id   sL     ]t$$ 	%TX226:::B"$DM$	r1   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.rC   )zhttp://zhttps://zirc:zmailto:classes   r   levelrC   rB   )
isinstancer   	referencerp   
startswithparent
attributesrangetoctree_templateappendrc   escapesspastextr   get_refnodes)r`   rt   ru   rC   rx   r|   elems          r2   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r1   r   c                    t                      }|D ]Y}|d         |v r2t                              t          d          |d         dd           >|                    |d                    Zd S )NrC   zduplicated ToC entry found: %srV   duplicated_toc_entryr:   subtype)setloggerwarningr   add)r`   r   appearednodes       r2   check_refnodeszEpubBuilder.check_refnodes   s     UU 		- 		-DH~))788N2	      T(^,,,,		- 		-r1   c                :   | j                             | j        j        | dd          }|                     |g           | _        t          j        | j        j                  }|r|dz  }| j        D ]}||d         z   |d<   |                     | j                   dS )zwGet the total table of contents, containing the root_doc
        and pre and post files not managed by sphinx.
        FTprune_toctreesincludehidden/rC   N)	rq   get_and_resolve_doctreerd   root_docr   r^   r   dirnametoc_add_files)r`   rt   
master_diritems       r2   get_toczEpubBuilder.get_toc   s     (224;3G37AE 3 G G ))'266\$+"677
 	=#J = =!+d8n!<X4=)))))r1   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 )zDAdd the root_doc, pre and post files to a list of refnodes.
        r      r{   N)insertrc   r   rd   r   rY   r   rq   titlesr   reversedepub_pre_filesepub_post_filesr   )r`   r^   filerB   s       r2   r   zEpubBuilder.toc_add_files   sZ    	k$+"6"HII 45<<>>@ @ A A
 
 	 	 	 #4;#=>> 	 	JD$OOA+d++DK--..       
 +5 	 	JD$OO+d++DK--..     	 	r1   prefixfragmentc                4    ||                     dd          z   S )z;Return a href/id attribute with colons replaced by hyphens.:-)rL   )r`   r   r   s      r2   fix_fragmentzEpubBuilder.fix_fragment  s    ((c2222r1   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   rI   rS   c                    g }| d         D ]1}                     d|          }||vr|                    |           2|| d<   dS )zUpdate IDs of given *node*.idsrR   N)r   r   )r   new_idsnode_idnew_idr`   s       r2   update_node_idz+EpubBuilder.fix_ids.<locals>.update_node_id  s[    !#G; + +**2w77((NN6***!DKKKr1   rC   r      refidrR   T)ascendN)r   r   rI   rS   )findallr   r~   	refuri_rematchr   grouptarget	next_noder}   r   r   desc_signature)r`   r   r   r~   mr   r   r   s   `       r2   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>****	+ 	+r1   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'   rI   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      r2   make_footnote_refz8EpubBuilder.add_visible_links.<locals>.make_footnote_ref,  sJ     3F;;L
5 1 1222%%l333r1   r<   nodes.footnotec                H   t          j        |          }t          j                    }|                    t          j        |                     |                    |           |                    dt          j        d|                     |                     |           |S )z$Create a footnote node with childrenr   rR   )r   footnote	paragraphr   r   r   r   note_autofootnote)r   r   r<   r   paras        r2   make_footnotez4EpubBuilder.add_visible_links.<locals>.make_footnote3  s    ~c**H?$$DKK
3(((OOD!!!OOAu{2u55666!!(+++Or1   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 )zfFind or create a spot to place footnotes.

            The function returns the tuple (parent, index).rz   r   )listr   r   r   r   indexrubriclenr   FOOTNOTES_RUBRIC_NAMEnextdocumentr   r   )r   fnsfnr   r   rubs         r2   footnote_spotz4EpubBuilder.add_visible_links.<locals>.footnote_spot=  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		#***r1   noNr   r   rC   rR   )zhttp:zhttps:zftp:r   rx   r   r   r   )r   r   r   r'   rI   r   )r   r   r   r'   r<   r'   rI   r   )r   r   rI   r   )r   r   r   r   r   r~   rp   r   r   r   r   link_target_templater   r   css_link_target_classr   FOOTNOTE_LABEL_TEMPLATEadd_backref)r`   r   r   r   r   r   r   fn_spotfn_idxnrr   r<   idxlinkr   r   r   s                    r2   add_visible_linkszEpubBuilder.add_visible_links)  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%	  	 r1   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   rd   epub_show_urlsrW   	write_doc)r`   r   rt   ra   s      r2   r   zEpubBuilder.write_docl  sR     	Ww(BCCC'7+++++r1   'list[tuple[str, list[tuple[str, Any]]]]c                   |D ]\  }}|D ]\  }\  }}}t          |          D ]e\  }\  }}	| j                            |	          }
|
rA||                     |
                    d          |
                    d                    f||<   f|D ]z\  }}t          |          D ]e\  }\  }}	| j                            |	          }
|
rA||                     |
                    d          |
                    d                    f||<   f{dS )z'Fix href attributes for genindex pages.r   r   N)	enumerater   r   r   r   )r`   r   _keycolumns
_entrynamelinkssubitemsiismainr   r   _subentrynamesubentrylinkss                r2   fix_genindexzEpubBuilder.fix_genindexv  sZ    " 	[ 	[MD'7> [ [3
3UHd+4U+;+; O O'Q,,T22A O$*$($5$5aggajj!''!**$M$M$Oa4< [ [0M=/8/G/G [ [+NVT N0066 [06040A0A!''!**aggVWjj0Y0Y0[M!,[[[	[ 	[r1   filenamer6   c                H    t          j        |          d         }|t          v S )z=Does the filename extension indicate a vector graphic format?rz   )r   splitextVECTOR_GRAPHICS_EXTENSIONS)r`   r   exts      r2   is_vector_graphicszEpubBuilder.is_vector_graphics  s"    mH%%b)000r1   c           
        t          t          j        | j        | j                             t          | j        t          d          dt          | j                  | j	        j
                  D ]^}| j        |         }	 t          j        t          j        | j        |                    }n# t          $ r |                     |          s@t                               t          d          t          j        | j        |                     	 t%          t          j        | j        |          t          j        | j        | j        |                     nX# t          $ rK}t                               t          d          t          j        | j        |          |           Y d}~nd}~ww xY wY Aw xY w| j        j        r|j        dv r|                                }| j        j        dk    rS|j        \  }}| j        j        }||k    r7t3          ||z  |z            }|                    ||ft          j                  }	 |                    t          j        | j        | j        |                     # t          $ rL}t                               t          d          t          j        | j        |          |           Y d}~Xd}~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 insteadzcannot copy image file %r: %sN)Pr   zcannot write image file %r: %s)r   r   joinoutdirimagedirr   imagesr   r   app	verbosityr   opensrcdirOSErrorr  r   r   r   rd   epub_fix_imagesmodeconvertepub_max_image_widthsizeroundresizeBICUBICsave)	r`   srcdestimgerrwidthheightnwnhs	            r2   copy_image_files_pilz EpubBuilder.copy_image_files_pil  s   
 	$)DK77888"4;3G0H0H'#&t{#3#3TX5GI I 	A 	AC;s#Dj4;!<!<== 
 
 
..s33 @NN2&U#V#V#'9T[##>#>@ @ @ETYt{C88!Yt{DM4HHJ J J J E E ENN2&E#F#F#'9T[##>#>E E E E E E E EE 
 {* (8v%% ++--C{/!33"%([52::u455B**b"Xu}==CA4;tDDEEEE A A Ar"BCC#yc::CA A A A A A A AA;	A 	AsX   ?,B--AF0AEF0
F)AF$F0$F))F0/F0 3I55
K?AKK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  rd   r  r  r   r   r   r   rW   copy_image_filesr#  r_   s    r2   r%  zEpubBuilder.copy_image_files  s     ; 	+{* +dk.N + 0NN2&N#O#OPPPGG,,.....--/////((*****	+ 	+r1   c                    d S rj   r0   rf   s    r2   copy_download_fileszEpubBuilder.copy_download_files  s    r1   	page.htmlNpagenameaddctxdicttemplatenameoutfilename
str | None	event_argr   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doctype)r   rU   r   r3  rW   handle_page)r`   r)  r*  r,  r-  r/  ra   s         r2   r4  zEpubBuilder.handle_page  s     z** 	9/@F/J/J> f%67888 LyHflKSSSSSr1   c                    t                               t          d                     t          t	          j        | j        d          | j                   dS )z!Write the metainfo file mimetype.zwriting mimetype file...mimetypeN)r   infor   r   r   r	  template_dirr
  rf   s    r2   build_mimetypezEpubBuilder.build_mimetype  sD    B122333	$"3Z@@$+NNNNNr1   META-INF/container.xmloutnamec                    t                               t          d                     t          j        | j        d          }t          |           t          t          j        | j        d          |           dS )z/Write the metainfo file META-INF/container.xml.z&writing META-INF/container.xml file...zMETA-INFzcontainer.xmlN)	r   r7  r   r   r	  r
  r   r   r8  )r`   r;  r
  s      r2   build_containerzEpubBuilder.build_container  sc    B?@@AAA4;
33&	$"3_EEvNNNNNr1   dict[str, Any]c                "   t          j        d          x}"t          j        t	          |                    }nt          j                    }i }t          j        | j        j                  |d<   t          j        | j        j	                  |d<   t          j        | j        j
                  |d<   t          j        | j        j                  |d<   t          j        | j        j                  |d<   t          j        | j        j                  |d<   t          j        | j        j                  |d	<   t          j        | j        j                  |d
<   t          j        t          j        d|                    |d<   g |d<   g |d<   g |d<   |S )zaCreate a dictionary with all metadata for the content.opf
        file properly escaped.
        SOURCE_DATE_EPOCHNr;   authoruidlang	publisher	copyrightschemer)   z%Y-%m-%ddatemanifest_itemsspinesguides)osgetenvtimegmtimer@   rc   r   rd   
epub_titleepub_authorepub_uidepub_languageepub_publisherepub_copyrightepub_schemeepub_identifierstrftime)r`   source_date_epoch
time_tuplemetadatas       r2   content_metadatazEpubBuilder.content_metadata  sO   
 "$+>!?!??LS):%;%;<<JJJ#% K(>??![)@AA+dk&:;;;t{'@AA $DK,F G G $DK,F G G![)@AAT[%@AA;t}Z'L'LMM%'!"r1   c                   t                               t          d                     |                                 }g | _        dddddddd	d
| j        j        dz   g
| j        j        z   | _        | j	        s"| j        
                    d| j        z              t          j        | j                  D ]{\  }}}|                                 t!          |          D ]O}t#          t%          j        ||          | j                  }|| j        v r5t%          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        
                    |           Q}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[          t%          j        | j.        d           | j        |           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
.buildinfor6  content.opftoc.ncxr:  z	Thumbs.dbzehthumbs.dbz	.DS_Storez	nav.xhtml.epubr1  rz   )z.jsz.xmlz!unknown mimetype for %s, ignoringrV   unknown_project_filesr   r   rH  #rC   TrI  r   FNr   )imager;   r   rJ  zcontent.opf_t)/r   r7  r   r[  filesrd   epub_basenameepub_exclude_filesignored_filesrU   r   rY   rK  walkr
  sortsortedr   r   r	  r  media_typesr   rL   sepr&   rc   r   r   rs   r   r^   r4   r   domain_indicesendswith
epub_covercoverpage_namer   projectr4  
epub_guidesplitr9   guide_titlesr   r8  )r`   rZ  rootdirsrc  r   r   r  r   
spinefilesrefnodespiner7  rn   	html_tmplrb  ctxauto_add_coverauto_add_tocr:   r<   r;   r   s                          r2   build_contentzEpubBuilder.build_content  s    	B455666((** !#
*J')A)=+)4;+Dw+NP K*	+
 ~ 	D%%j4?&BCCC!#!5!5 	, 	,D$IIKKKUmm , ,"49T2#6#6DDt111mH--b1d... /11r*M'N'NPX,2<S ' U U U#++BFC88#DKh$@$@$(KX0F0F$G$G$(K0@0E$F$FH H )*11$777
!!(++++#,( 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-(;<<R@CJ%%d&9:::'D4G(H(H(,DLLAT4U4U(V(V(,D4DS4I(J(JL LD -.55d;;; $E 2 2T[=PQQ  M$"566q93	K K Kt2333;! 	C$(K$: 
C 
C c5yy~~a(tz))J%%d+++7??%*N5==#(L"))%D0A0A04E0B0B04C0@0@+B +B C C C C  	Oi 	OX%%eG,0,=g,F,0K8K,L,L'N 'N O O O  	VDM 	VX%%eE,0,=e,D,0Ka8H8R,S,S'U 'U V V V
 		$"3_EEt{T\]]]]]r1   r   r|   r@   incrr>   c                    |r| xj         dz  c_         | xj        dz  c_        t          d| j        z  | j         |d         |d         g           S )z;Create a new entry in the toc from the node at given level.r   z
navPoint%drB   rC   )rA   r[   r>   )r`   r   r|   r~  s       r2   new_navpointzEpubBuilder.new_navpointd  sY      	 NNaNN

a

tz14>Vd8nb: : 	:r1   rD   c           	        g }|                     t          ddddg                      d}d}|D ]}|d         s|d                             d          d         }|| j        v r7|d         | j        j        k    rN|d         |k    ra|                     ||          }|                                 |d	         j                             |           |                     |           nJ|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 |}	|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   rR   NrB   rC   ra  r|   rz   r   F)r   r>   rr  rf  rd   epub_tocdepthr  poprE   epub_tocdupr   )r`   r   navstackr|   lastnoder   r   r?   s           r2   build_navpointszEpubBuilder.build_navpointsm  sJ    $&!RR88999 	 	D< >'',,Q/Dt)))G}t{888G}%%,,T599%,,X666))))g%!)++
 \ 7 \RL)001B1B8UTY1Z1Z[[[,,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))))HH{##r1   	navpointsc                ~    i }| j         j        |d<   t          j        | j         j                  |d<   ||d<   ||d<   |S )z]Create a dictionary with all metadata for the toc.ncx file
        properly escaped.
        rB  r;   r|   r  )rd   rQ  rc   r   rO  )r`   r|   r  rZ  s       r2   toc_metadatazEpubBuilder.toc_metadata  sI     $&+. K(>??! )r1   c                r   t                               t          d                     | j        j        dk    rT| j                            | j        j        | dd          }|                     |g           }| 	                    |           n| j
        }|                     |           |                     |          }t          d | j
        D                       }t          || j        j                  }t!          t#          j        | j        d          | j        |                     ||                     dS )z Write the metainfo file toc.ncx.zwriting toc.ncx file...defaultFr   c              3  &   K   | ]}|d          V  dS )r|   Nr0   ).0r   s     r2   	<genexpr>z(EpubBuilder.build_toc.<locals>.<genexpr>  s&      <<dDM<<<<<<r1   z	toc.ncx_tN)r   r7  r   rd   epub_tocscoperq   r   r   r   r   r^   r   r  maxminr  r   r   r	  r8  r
  r  )r`   rt   r^   r  r|   s        r2   	build_toczEpubBuilder.build_toc  s.   B011222;$	11h66t{7K7;EEJ 7 L LG (("55Hx(((( }HH%%%((22	<<dm<<<<<E4;455	$"3[AA4;))%;;	= 	= 	= 	= 	=r1   c                ^   | j         j        dz   }t                              t	          d          |           t          j        | j        |          }t          |dt                    5 }|
                    t          j        | j        d          dt                     dD ]6}|
                    t          j        | j        |          |t                     7| j        D ]6}|
                    t          j        | j        |          |t                     7	 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.
        r_  zwriting %s file...wr6  )r:  r]  r^  N)rd   rd  r   r7  r   r   r	  r
  r   r	   writer
   rc  )r`   r;  epub_filenamerV   r   s        r2   
build_epubzEpubBuilder.build_epub  se    ++g5B+,,g666	$+w77]C66 	U$JJtyj99:zRRRP U U

49T[(;;X|TTTT J U U

49T[(;;X|TTTTU		U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	Us   (B,D""D&)D&)rI   rS   )rI   r   )rI   rh   )rn   r'   rI   r'   )rt   r   ru   rv   rI   rv   )r   rv   rI   rS   )r^   rv   rI   rS   )r   r'   r   r'   rI   r'   )r   r   rI   rS   )r   )r   r   r   r'   rI   rS   )r   r'   rt   r   rI   rS   )r   r   rI   rS   )r   r'   rI   r6   )r(  NN)r)  r'   r*  r+  r,  r'   r-  r.  r/  r   rI   rS   )r:  )r;  r'   rI   rS   )rI   r>  )T)r   r>  r|   r@   r~  r6   rI   r>   )r   rv   rI   rD   )r|   r@   r  rD   rI   r>  )9r,   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_NAMEro  TOCTREE_TEMPLATEr   LINK_TARGET_TEMPLATEr   CSS_LINK_TARGET_CLASSr   GUIDE_TITLESrs  MEDIA_TYPESrj  	REFURI_REr   r8  r3  rX   rg   rm   rs   r   r   r   r   r   r   r   r   r   r  r#  r%  r'  r4  r9  r=  r[  r}  r  r  r  r  r  __classcell__)ra   s   @r2   rQ   rQ   y   s7         J+ + +# N"'H"F#N'/1LKILG	1 	1 	1 	1 	1 	1C C C CF F F F      0- - - -* * * *   ,3 3 3 3+ + + +BA  A  A  A  A F, , , , , ,[ [ [ [$1 1 1 1
%A %A %A %AN+ + + + + +    LWEIT T T T T T TO O O O
O O O O O   2j^ j^ j^ j^X: : : : :*$ *$ *$ *$X	 	 	 	= = = =(U U U U U U U Ur1   rQ   )rF   )rG   r'   rH   r'   rI   r'   )Br  
__future__r   rc   rK  rerM  r   typingr   r   r   urllib.parser   zipfiler	   r
   r   docutilsr   docutils.utilsr   sphinxr   sphinx.builders.htmlr   r   sphinx.localer   sphinx.utilr   sphinx.util.displayr   sphinx.util.fileutilr   sphinx.util.osutilr   r   r   docutils.nodesr   r   PILr   ImportError	getLoggerr,   r   r  r  r  r   r   r  r  r  r  compiler  r&   r4   r9   r>   rO   r   rQ   r0   r1   r2   <module>r     s[   ) ) " " " " " "  				 				        1 1 1 1 1 1 1 1 1 1       5 5 5 5 5 5 5 5 5 5       & & & & & &       A A A A A A A A             / / / / / / 0 0 0 0 0 0 ; ; ; ; ; ; ; ; ; ; -,,,,,,,,   EEE 
	8	$	$ $  #  # %    &  ' 
 BJ''	    :       J   
    J       z        
M	U M	U M	U M	U M	U' M	U M	U M	U M	U M	Us    B BB