
    O&iq                     L   d 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m	Z	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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"m#Z# ddl$m%Z% ddl&m'Z' 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/          Z0dZ1dZ2dZ3dZ4dZ5dZ6dddZ7dddddd d!d!d"d#d$d%Z8d&Z9 ej:        d'          Z; G d( d)e	          Z< G d* d+e	          Z= G d, d-e	          Z> G d. d/e	          Z?d7d1e@d2e@d3e@fd4ZAeAZB G d5 d6e          ZCdS )8z#Base class of epub2/epub3 builders.    N)path)AnyDictList
NamedTupleOptionalSetTuple)quote)ZIP_DEFLATED
ZIP_STOREDZipFile)nodes)ElementNode)smartquotes)addnodes)	BuildInfoStandaloneHTMLBuilder)__)loggingstatus_iterator)copy_asset_file)format_date)copyfile	ensuredir)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application/x-font-otfzapplication/x-font-ttfzapplication/font-woff).xhtmlz.cssz.pngz.webpz.gif.svgz.jpgz.jpegz.otfz.ttfz.woff)r'   z([^#:]*#)(.*)c                   .    e Zd ZU eed<   eed<   eed<   dS )ManifestItemhrefid
media_typeN__name__
__module____qualname__str__annotations__     g/home/geonatureadmin/si_en_reseau/tutos/venv/lib/python3.11/site-packages/sphinx/builders/_epub_base.pyr)   r)   N   s+         
IIIGGGOOOOOr4   r)   c                   $    e Zd ZU eed<   eed<   dS )SpineidreflinearN)r.   r/   r0   r1   r2   boolr3   r4   r5   r7   r7   T   s"         JJJLLLLLr4   r7   c                   .    e Zd ZU eed<   eed<   eed<   dS )GuidetypetitleuriNr-   r3   r4   r5   r<   r<   Y   s+         
IIIJJJ	HHHHHr4   r<   c                   N    e Zd ZU eed<   eed<   eed<   eed<   ee         ed<   dS )NavPointnavpoint	playordertextrefurichildrenN)r.   r/   r0   r1   r2   intr   r   r3   r4   r5   rA   rA   _   sF         MMMNNN
IIIKKK3ir4   rA   entlanguagereturnc                     |                      dd          } t          j        |           } t          j        | |          } |                      dd          } | S )Nz&quot;")replacer   educateDashesOldSchooleducateQuotes)rI   rJ   s     r5   sphinx_smarty_pantsrQ   h   sO    			(C  A*1--A!!X..A			#x  AHr4   c                   N    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d; fdZdefd	Zde e!e"f         fd
Z#de!de!fdZ$de%de&e"e!e'f                  de&e"e!e'f                  fdZ(de&e"e!e'f                  ddfdZ)d;dZ*de&e"e!e'f                  ddfdZ+de!de!de!fdZ,de-j.        ddfdZ/d<de-j.        de!ddfdZ0de!de-j.        ddf fdZ1de&e e!e&e e!e'f                  f                  ddfdZ2d e!de3fd!Z4d;d"Z5d; fd#Z6d;d$Z7	 	 d=d&e!d'e"d(e!d)e8e!         d*e'ddf fd+Z9d;d,Z:d>d.e!ddfd/Z;de"e!e'f         fd0Z<d;d1Z=d?d2e"e!e'f         d3e>d4e3de?fd5Z@de&e"e!e'f                  de&e?         fd6ZAd3e>d7e&e?         de"e!e'f         fd8ZBd;d9ZCd;d:ZD xZES )@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 rK   Nc                     t                                                       d| _        d| _        d| _        d| _        i | _        |                     dd          | _        g | _	        d S )Nr&   r   	use_indexepub)
superinit
out_suffixlink_suffixrC   tocidid_cacheget_builder_configrV   refnodesself	__class__s    r5   rY   zEpubBuilder.init   sZ    "#
(*00fEE.0r4   c                 <    t          | j        | j        ddg          S )NhtmlrW   )r   configtagsra   s    r5   create_build_infozEpubBuilder.create_build_info   s    di&&1ABBBr4   c                 2    | j         j        | j         j        fS N)re   
epub_themeepub_theme_optionsrg   s    r5   get_theme_configzEpubBuilder.get_theme_config   s    {%t{'EEEr4   namec                     | j                             |          }|s'd| j                            d          z  }|| j         |<   |S )zReturn a unique id for name.zepub-%drW   )r]   getenvnew_serialno)ra   rn   r+   s      r5   make_idzEpubBuilder.make_id   sL     ]t$$ 	%TX226:::B"$DM$	r4   doctreeresultc                    t          |t          j                  r|                    d          r|d         }|                    d          s?|                    d          s*|                    d          s|                    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.rE   zhttp://zhttps://zirc:zmailto:classes   r   levelrE   rD   )
isinstancer   	referencerp   
startswithparent
attributesrangetoctree_templateappendrd   escapesspastextr   get_refnodes)ra   rt   ru   rE   rw   r{   elems          r5   r   zEpubBuilder.get_refnodes   si    gu// 	9GKK4I4I 	9X&F  ++ v/@/@/L/L ##F++/5/@/@/K/Kn/	:Gq!R  )E1g==MM!&"&+f"5"5 #DK0@0@$A$A B B# #   
 E > // 	9 9 9**488r4   r   c                     t                      }|D ]Y}|d         |v r2t                              t          d          |d         dd           >|                    |d                    Zd S )NrE   zduplicated ToC entry found: %srW   duplicated_toc_entryr=   subtype)setloggerwarningr   add)ra   r   appearednodes       r5   check_refnodeszEpubBuilder.check_refnodes   s     UU 		- 		-DH~))788N2	      T(^,,,,		- 		-r4   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/rE   N)	rq   get_and_resolve_doctreere   root_docr   r_   r   dirnametoc_add_files)ra   rt   
master_diritems       r5   get_toczEpubBuilder.get_toc   s     (224;3G37AE 3 G G ))'266\$+"677
 	=#J = =!+d8n!<X4=)))))r4   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      rz   N)insertrd   r   re   r   rZ   r   rq   titlesr   reversedepub_pre_filesepub_post_filesr   )ra   r_   filerD   s       r5   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--..     	 	r4   prefixfragmentc                 4    ||                     dd          z   S )z;Return a href/id attribute with colons replaced by hyphens.:-)rN   )ra   r   r   s      r5   fix_fragmentzEpubBuilder.fix_fragment   s    ((c2222r4   treec                     dt           ddf 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   rK   Nc                     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_idra   s       r5   update_node_idz+EpubBuilder.fix_ids.<locals>.update_node_id	  s[    !#G; + +**2w77((NN6***!DKKKr4   rE   r      refidrT   T)ascend)r   findallr   r}   	refuri_rematchr   grouptarget	next_noder|   r   desc_signature)ra   r   r   r}   mr   r   r   s   `       r5   fix_idszEpubBuilder.fix_ids  s{   	" 	"T 	" 	" 	" 	" 	" 	" 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>****	+ 	+r4   inline	show_urlsc                    dt           j        dt          dt           j        fd}dt           j        dt          dt          dt           j        fd}dt           j        dt
          t          t          f         fd}|d	k    rd
S |dk    r<t          |	                    t           j                            } ||          \  }}d}	t          |	                    t           j                            D ]}
|
                    dd          }|                    d          s+|                    d          s|                    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doclabelrK   c                     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      r5   make_footnote_refz8EpubBuilder.add_visible_links.<locals>.make_footnote_ref'  sJ     3F;;L
5 1 1222%%l333r4   r?   c                 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        r5   make_footnotez4EpubBuilder.add_visible_links.<locals>.make_footnote.  s    ~c**H?$$DKK
3(((OOD!!!OOAu{2u55666!!(+++Or4   r   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).ry   r   )listr   r   r   r   indexrubriclenr   FOOTNOTES_RUBRIC_NAMEnextdocumentr   r   )r   fnsfnr   r   rubs         r5   footnote_spotz4EpubBuilder.add_visible_links.<locals>.footnote_spot8  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		#***r4   noNr   r   rE   rT   zhttp:zhttps:zftp:r   rw   r   r   r   )r   r   r1   r   r   r
   r   rG   r   r   r   r}   rp   r~   r   r   r   link_target_templater   r   css_link_target_classr   FOOTNOTE_LABEL_TEMPLATEadd_backref)ra   r   r   r   r   r   r   fn_spotfn_idxnrr   r?   idxlinkr   r   r   s                    r5   add_visible_linkszEpubBuilder.add_visible_links$  s   	 5> 	 # 	 %BZ 	  	  	  	 	u~ 	c 	 	 	 	 	 		+ 	+5#3F 	+ 	+ 	+ 	+* F
""t||EN3344C+mD11OGVBeo6677 	  	 D((8R((Cw''  3>>(+C+C  NN6** 034;;==0H0H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'	  	 r4   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   re   epub_show_urlsrX   	write_doc)ra   r   rt   rb   s      r5   r   zEpubBuilder.write_doch  sR     	Ww(BCCC'7+++++r4   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   )ra   r   _keycolumns
_entrynamelinkssubitemsiismainr   r   _subentrynamesubentrylinkss                r5   fix_genindexzEpubBuilder.fix_genindexr  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!,[[[	[ 	[r4   filenamec                 H    t          j        |          d         }|t          v S )z=Does the filename extension indicate a vector graphic format?ry   )r   splitextVECTOR_GRAPHICS_EXTENSIONS)ra   r   exts      r5   is_vector_graphicszEpubBuilder.is_vector_graphics  s"    mH%%b)000r4   c           
         t          t          j        | j        | j                             t          | j        t          d          dt          | j                  | j	        j
                  D ]Q}| 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    rF|j        \  }}| j        j        }||k    r*||z  |z  }|                    ||ft          j                  }	 |                    t          j        | j        | j        |                     # t          $ rL}t                               t          d          t          j        | j        |          |           Y d}~Kd}~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   re   epub_fix_imagesmodeconvertepub_max_image_widthsizeresizeBICUBICsave)	ra   srcdestimgerrwidthheightnwnhs	            r5   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:: 2+.B**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33I((
J>2AJ99J>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  re   r  r  r   r   r   r   rX   copy_image_filesr  r`   s    r5   r  zEpubBuilder.copy_image_files  s     ; 	+{* +dk.N + 0NN2&N#O#OPPPGG,,.....--/////((*****	+ 	+r4   c                     d S rj   r3   rg   s    r5   copy_download_fileszEpubBuilder.copy_download_files  s    r4   	page.htmlpagenameaddctxtemplatenameoutfilename	event_argc                     |                     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~   rV   r   r*  rX   handle_page)ra   r"  r#  r$  r%  r&  rb   s         r5   r+  zEpubBuilder.handle_page  s     z** 	9/@F/J/J> f%67888 LyHflKSSSSSr4   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  rg   s    r5   build_mimetypezEpubBuilder.build_mimetype  sD    B122333	$"3Z@@$+NNNNNr4   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   r.  r   r   r  r  r   r   r/  )ra   r2  r  s      r5   build_containerzEpubBuilder.build_container  sc    B?@@AAA4;
33&	$"3_EEvNNNNNr4   c                    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          d	d
                    |d<   g |d<   g |d<   g |d<   |S )zaCreate a dictionary with all metadata for the content.opf
        file properly escaped.
        r>   authoruidlang	publisher	copyrightschemer+   z%Y-%m-%drH   )rJ   datemanifest_itemsspinesguides)rd   r   re   
epub_titleepub_authorepub_uidepub_languageepub_publisherepub_copyrightepub_schemeepub_identifierr   )ra   metadatas     r5   content_metadatazEpubBuilder.content_metadata  s    $& K(>??![)@AA+dk&:;;;t{'@AA $DK,F G G $DK,F G G![)@AAT[%@AA;{:'M'M'MNN%'!"r4   c                    t                               t          d                     |                                 }| j                            t          j                  s| xj        t          j        z  c_        t          | j                  }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 ]p\  }}}|                                 t'          |          D ]D}t)          j        ||          |d         }|| j        v r*t)          j        |          d         }|| j        vr0|dvr+t                               t          d          |dd           }|                    t          j        d          }t5          t7          j        t;          |                    t7          j        |                     |                    t7          j        | j        |                             }	|d                             |	           | j	                            |           Frt?                      }
| j         D ]}d|d         v r|d         | j        v rtC          t7          j        |                     |d                             d          }|d                             |           |
"                    |d                    | j#        D ]}tC          t7          j        |                     |d         | j        z                       d          }|d                             |           |
"                    |d         | j        z              | j        rutC          t7          j        |                     d| j        z                       d          }|d                             |           |
"                    d| j        z              | j	        D ]p}||
vrj|                    | j                  rPtC          t7          j        |                     |                    d          }|d                             |           qd}| j
        j$        r| j
        j$        \  }}|                    t          j        d          }t7          j        |                     |                    |d<   |rtC          t7          j        |                     | j%                            d          }|d         &                    d|           | j%        | j	        vrt)          j        | j%                  d         }| j	                            | j%                   t5          t7          j        | j%                  t7          j        |                     | j%                            t7          j        | j        |                             }	|d                             |	           t7          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          t7          j        |          t7          j        |          t7          j        |                               |rN|rL|d                             tW          d| j,        d         t7          j        | j%                                       |r_| j         rX|d                             tW          d| j,        d         t7          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
.buildinfor-  content.opftoc.ncxr1  z	Thumbs.dbzehthumbs.dbz	.DS_Storez	nav.xhtml.epubr(  Nry   )z.jsz.xmlz!unknown mimetype for %s, ignoringrW   unknown_project_filesr   r   r=  #rE   Tr>  r   Fr!   )imager>   r    r?  zcontent.opf_t)/r   r.  r   rI  r  endswithossepr   filesre   epub_basenameepub_exclude_filesignored_filesrV   r   rZ   walksortsortedr   r  r   media_typesr   rN   r)   rd   r   r   rs   r   r_   r7   r   domain_indices
epub_covercoverpage_namer   projectr+  
epub_guidesplitr<   guide_titlesr   r/  )ra   rH  olenrootdirsrT  r   r   r   r   
spinefilesrefnodespiner.  rn   	html_tmplrP  ctxauto_add_coverauto_add_tocr=   r?   r>   r   s                           r5   build_contentzEpubBuilder.build_content  s    	B455666((** {##BF++ 	"KK26!KK4; "
*J')A)=+)4;+Dw+NP K*	+
 ~ 	D%%j4?&BCCC!#!5!5 	, 	,D$IIKKKUmm , ,9T2..tuu5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\]]]]]r4   r   r{   incrc                     |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%drD   rE   )rC   r\   rA   )ra   r   r{   rn  s       r5   new_navpointzEpubBuilder.new_navpoint]  sY      	 NNaNN

a

tz14>Vd8nb: : 	:r4   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   rT   NrD   rE   rO  r{   ry   r   F)r   rA   ra  rW  re   epub_tocdepthrp  poprF   epub_tocdupr   )ra   r   navstackr{   lastnoder   r   rB   s           r5   build_navpointszEpubBuilder.build_navpointsf  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{##r4   	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.
        r7  r>   r{   ry  )re   rB  rd   r   r@  )ra   r{   ry  rH  s       r5   toc_metadatazEpubBuilder.toc_metadata  sI     $&+. K(>??! )r4   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{   Nr3   ).0r   s     r5   	<genexpr>z(EpubBuilder.build_toc.<locals>.<genexpr>  s&      <<dDM<<<<<<r4   z	toc.ncx_tN)r   r.  r   re   epub_tocscoperq   r   r   r   r   r_   r   rx  maxminrs  r   r   r  r/  r  r{  )ra   rt   r_   ry  r{   s        r5   	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;))%;;	= 	= 	= 	= 	=r4   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.
        rM  zwriting %s file...wr-  )r1  rK  rL  N)re   rU  r   r.  r   r   r  r  r   r   writer   rT  )ra   r2  epub_filenamerW   r   s        r5   
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&)rK   N)r   )r!  NN)r1  )T)Fr.   r/   r0   __doc__
copysourcesupported_image_typessupported_remote_imagesadd_permalinksallow_sharp_as_current_pathembeddeddownload_supporthtml_scaled_image_linksearchCOVERPAGE_NAMEr^  TOCTREE_TEMPLATEr   LINK_TARGET_TEMPLATEr   CSS_LINK_TARGET_CLASSr   GUIDE_TITLESrb  MEDIA_TYPESr[  	REFURI_REr   r/  r*  rY   r   rh   r
   r1   r   rm   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r:   r   r  r  r   r   r+  r0  r4  rI  rm  rG   rA   rp  rx  r{  r  r  __classcell__)rb   s   @r5   rS   rS   u   s         J+ + +# N"'H"F#N'/1LKILG	1 	1 	1 	1 	1 	1C9 C C C CF%T	"2 F F F FC C    D $tCH~2F 4PTUXZ]U]P^K_    .-Dc3h$8 -T - - - -* * * *d4S>&: t    ,33 3# 3# 3 3 3 3+EN +t + + + +BB  B en B  B TX B  B  B  B H, ,u~ ,$ , , , , , ,[eCeCHo1F,F&G!H [T [ [ [ [$13 14 1 1 1 1
%A %A %A %AN+ + + + + +    LWHLT TC T TS T!)#TBETQUT T T T T TO O O O
O Os O$ O O O O$sCx.    &m^ m^ m^ m^^: :c3h : :4 :S[ : : : :*$T$sCx.%9 *$d8n *$ *$ *$ *$X	# 	$x. 	T#s(^ 	 	 	 	= = = =(U U U U U U U Ur4   rS   )rH   )Dr  rd   rR  rer   typingr   r   r   r   r   r	   r
   urllib.parser   zipfiler   r   r   docutilsr   docutils.nodesr   r   docutils.utilsr   sphinxr   sphinx.builders.htmlr   r   sphinx.localer   sphinx.utilr   r   sphinx.util.fileutilr   sphinx.util.i18nr   sphinx.util.osutilr   r   PILr   ImportError	getLoggerr.   r   r  r  r  r   r   r  r  r  r   compiler  r)   r7   r<   rA   r1   rQ   r   rS   r3   r4   r5   <module>r     se   ) )  				 				       D D D D D D D D D D D D D D D D D D       5 5 5 5 5 5 5 5 5 5       ( ( ( ( ( ( ( ( & & & & & &       A A A A A A A A       0 0 0 0 0 0 0 0 0 0 0 0 0 0 ( ( ( ( ( ( 2 2 2 2 2 2 2 2   EEE 
	8	$	$ $  #  # %    &$$$  ' 
 BJ''	    :       J   
    J       z    3 #      
J	U J	U J	U J	U J	U' J	U J	U J	U J	U J	Us   <B BB