
    }cjq                     <   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 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,          Z-dZ.dZ/dZ0dZ1dZ2dZ3dddZ4ddddddd d d!d"d#d$Z5d%Z6 ej7        d&          Z8 G d' d(e	          Z9 G d) d*e	          Z: G d+ d,e	          Z; G d- d.e	          Z<d6d0e=d1e=d2e=fd3Z>e>Z? G d4 d5e          Z@dS )7z#Base class of epub2/epub3 builders.    N)path)AnyDictList
NamedTupleSetTuple)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__     :lib/python3.11/site-packages/sphinx/builders/_epub_base.pyr'   r'   M   s+         
IIIGGGOOOOOr2   r'   c                   $    e Zd ZU eed<   eed<   dS )SpineidreflinearN)r,   r-   r.   r/   r0   boolr1   r2   r3   r5   r5   S   s"         JJJLLLLLr2   r5   c                   .    e Zd ZU eed<   eed<   eed<   dS )GuidetypetitleuriNr+   r1   r2   r3   r:   r:   X   s+         
IIIJJJ	HHHHHr2   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-   r.   r/   r0   intr   r   r1   r2   r3   r?   r?   ^   sF         MMMNNN
IIIKKK3ir2   r?   entlanguagereturnc                     |                      dd          } t          j        |           } t          j        | |          } |                      dd          } | S )Nz&quot;")replacer   educateDashesOldSchooleducateQuotes)rG   rH   s     r3   sphinx_smarty_pantsrO   g   sO    			(C  A*1--A!!X..A			#x  AHr2   c                   B    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)e!d*e'ddf fd+Z8d;d,Z9d>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Z@d3e=d7e&e>         de"e!e'f         fd8ZAd;d9ZBd;d:ZC xZDS )@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   Nc                     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_configrT   refnodesself	__class__s    r3   rW   zEpubBuilder.init   sZ    "#
(*00fEE.0r2   c                 <    t          | j        | j        ddg          S )NhtmlrU   )r   configtagsr_   s    r3   create_build_infozEpubBuilder.create_build_info   s    di&&1ABBBr2   c                 2    | j         j        | j         j        fS N)rc   
epub_themeepub_theme_optionsre   s    r3   get_theme_configzEpubBuilder.get_theme_config   s    {%t{'EEEr2   namec                     | j                             |          }|s'd| j                            d          z  }|| j         |<   |S )zReturn a unique id for name.zepub-%drU   )r[   getenvnew_serialno)r_   rl   r)   s      r3   make_idzEpubBuilder.make_id   sL     ]t$$ 	%TX226:::B"$DM$	r2   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.rC   zhttp://zhttps://zirc:zmailto:classes   r   levelrC   rB   )
isinstancer   	referencern   
startswithparent
attributesrangetoctree_templateappendrb   escapesspastextr   get_refnodes)r_   rr   rs   rC   ru   ry   elems          r3   r   zEpubBuilder.get_refnodes   sk    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r2   r   c                     t                      }|D ]Y}|d         |v r2t                              t          d          |d         dd           >|                    |d                    Zd S )NrC   zduplicated ToC entry found: %srU   duplicated_toc_entryr;   subtype)setloggerwarningr   add)r_   r   appearednodes       r3   check_refnodeszEpubBuilder.check_refnodes   s     UU 		- 		-DH~) -788N2	      T(^,,,,		- 		-r2   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)	ro   get_and_resolve_doctreerc   root_docr   r]   r   dirnametoc_add_files)r_   rr   
master_diritems       r3   get_toczEpubBuilder.get_toc   s     (224;3G37AE 3 G G ))'266\$+"677
 	=#J = =!+d8n!<X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 )zDAdd the root_doc, pre and post files to a list of refnodes.
        r      rx   N)insertrb   r   rc   r   rX   r   ro   titlesr   reversedepub_pre_filesepub_post_filesr   )r_   r]   filerB   s       r3   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--..     	 	r2   prefixfragmentc                 4    ||                     dd          z   S )z;Return a href/id attribute with colons replaced by hyphens.:-)rL   )r_   r   r   s      r3   fix_fragmentzEpubBuilder.fix_fragment   s    ((c2222r2   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   rI   Nc                     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       r3   update_node_idz+EpubBuilder.fix_ids.<locals>.update_node_id  s]    !#G; + +**2w77( +NN6***!DKKKr2   rC   r      refidrR   T)ascend)r   findallr   r{   	refuri_rematchr   grouptarget	next_noderz   r   desc_signature)r_   r   r   r{   mr   r   r   s   `       r3   fix_idszEpubBuilder.fix_ids  s   	" 	"T 	" 	" 	" 	" 	" 	" eo66 	O 	OI9$ TN((8)<== T*.*;*;AGGAJJPQ

*S*SIh')# O%)%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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labelrI   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      r3   make_footnote_refz8EpubBuilder.add_visible_links.<locals>.make_footnote_ref&  sJ     3F;;L
5 1 1222%%l333r2   r=   c                 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        r3   make_footnotez4EpubBuilder.add_visible_links.<locals>.make_footnote-  s    ~c**H?$$DKK
3(((OOD!!!OOAu{2u55666!!(+++Or2   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).rw   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_spot7  s-    t||EN3344C :Wy")//""5"5"999U\22 D Dt99> Ddkkmm7L&L D;(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   rC   rR   zhttp:zhttps:zftp:r   ru   r   r   r   )r   r   r/   r   r   r	   r   rE   r   r   r   r{   rn   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                    r3   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;;==0H 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   rc   epub_show_urlsrV   	write_doc)r_   r   rr   r`   s      r3   r   zEpubBuilder.write_docg  sR     	Ww(BCCC'7+++++r2   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                r3   fix_genindexzEpubBuilder.fix_genindexq  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!,[[[	[ 	[r2   filenamec                 H    t          j        |          d         }|t          v S )z=Does the filename extension indicate a vector graphic format?rw   )r   splitextVECTOR_GRAPHICS_EXTENSIONS)r_   r   exts      r3   is_vector_graphicszEpubBuilder.is_vector_graphics  s"    mH%%b)000r2   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   rc   epub_fix_imagesmodeconvertepub_max_image_widthsizeresizeBICUBICsave)	r_   srcdestimgerrwidthheightnwnhs	            r3   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 >"%([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  rc   r
  r  r   r   r   r   rV   copy_image_filesr  r^   s    r3   r  zEpubBuilder.copy_image_files  s     ; 	+{* +dk.N + 0NN2&N#O#OPPPGG,,.....--/////((*****	+ 	+r2   c                     d S rh   r1   re   s    r3   copy_download_fileszEpubBuilder.copy_download_files  s    r2   	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|   rT   r   r(  rV   handle_page)r_   r   r!  r"  r#  r$  r`   s         r3   r)  zEpubBuilder.handle_page  s     z** 	9/@F/J 	9> f%67888 LyHflKSSSSSr2   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  re   s    r3   build_mimetypezEpubBuilder.build_mimetype  sD    B122333	$"3Z@@$+NNNNNr2   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-  )r_   r0  r  s      r3   build_containerzEpubBuilder.build_container  sc    B?@@AAA4;
33&	$"3_EEvNNNNNr2   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-%drF   )rH   datemanifest_itemsspinesguides)rb   r   rc   
epub_titleepub_authorepub_uidepub_languageepub_publisherepub_copyrightepub_schemeepub_identifierr   )r_   metadatas     r3   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%'!"r2   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 ]c\  }}}|                                 t'          |          D ]7}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        |          t7          j        |                     |                    t7          j        | j        |                             }	|d                             |	           | j	                            |           9et=                      }
| j        D ]}d|d         v r|d         | j        v rtA          t7          j        |                     |d                             d          }|d                             |           |
!                    |d                    | j"        D ]}tA          t7          j        |                     |d         | j        z                       d          }|d                             |           |
!                    |d         | j        z              | j        rutA          t7          j        |                     d| j        z                       d          }|d                             |           |
!                    d| j        z              | j	        D ]p}||
vrj|                    | j                  rPtA          t7          j        |                     |                    d          }|d                             |           qd}| j
        j#        r| j
        j#        \  }}|                    t          j        d          }t7          j        |                     |                    |d<   |rtA          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                             tU          t7          j        |          t7          j        |          t7          j        |                               |rN|rL|d                             tU          d| j+        d         t7          j        | j$                                       |r_| j        rX|d                             tU          d| j+        d         t7          j        | j        d         d                                        tY          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.ncxr/  z	Thumbs.dbzehthumbs.dbz	.DS_Storez	nav.xhtml.epubr&  Nrw   )z.jsz.xmlz!unknown mimetype for %s, ignoringrU   unknown_project_filesr   r   r;  #rC   Tr<  r   Fr   )imager<   r   r=  zcontent.opf_t).r   r,  r   rG  r  endswithossepr   filesrc   epub_basenameepub_exclude_filesignored_filesrT   r   rX   walksortsortedr   r  r   media_typesr   rL   r'   rb   r   rq   r   r]   r5   r   domain_indices
epub_covercoverpage_namer   projectr)  
epub_guidesplitr:   guide_titlesr   r-  )r_   rF  olenrootdirsrR  r   r   r   r   
spinefilesrefnodespiner,  rl   	html_tmplrN  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((** {##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 mH--b1d..  /1 Ur*M'N'NPX,2<S ' U U U#++BFC88#DK$9$9$(KX0F0F$G$G$(K0@0E$F$FH H )*11$777
!!(++++#,( UU
} 	. 	.Ggh'' x D$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:% 1$--*H*H 1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 <-(;<<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\]]]]]r2   r   ry   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%drB   rC   )rA   rZ   r?   )r_   r   ry   rl  s       r3   new_navpointzEpubBuilder.new_navpoint\  sY      	 NNaNN

a

tz14>Vd8nb: : 	:r2   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   rM  ry   rw   r   F)r   r?   r_  rU  rc   epub_tocdepthrn  poprD   epub_tocdupr   )r_   r   navstackry   lastnoder   r   r@   s           r3   build_navpointszEpubBuilder.build_navpointse  sX    $&!RR88999 	 	D< >'',,Q/Dt)) G}t{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 #LLNNN 7mc(mm3 #W,,T599%,,X666))))HH{##r2   	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.
        r5  r<   ry   rw  )rc   r@  rb   r   r>  )r_   ry   rw  rF  s       r3   toc_metadatazEpubBuilder.toc_metadata  sI     $&+. K(>??! )r2   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 )ry   Nr1   ).0r   s     r3   	<genexpr>z(EpubBuilder.build_toc.<locals>.<genexpr>  s&      <<dDM<<<<<<r2   z	toc.ncx_tN)r   r,  r   rc   epub_tocscopero   r   r   r   r   r]   r   rv  maxminrq  r   r   r  r-  r  ry  )r_   rr   r]   rw  ry   s        r3   	build_toczEpubBuilder.build_toc  s0   B011222;$	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;))%;;	= 	= 	= 	= 	=r2   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.
        rK  zwriting %s file...wr+  )r/  rI  rJ  N)rc   rS  r   r,  r   r   r  r  r   r
   writer   rR  )r_   r0  epub_filenamerU   r   s        r3   
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   N)r   )r  NN)r/  )T)Er,   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_NAMEr\  TOCTREE_TEMPLATEr   LINK_TARGET_TEMPLATEr   CSS_LINK_TARGET_CLASSr   GUIDE_TITLESr`  MEDIA_TYPESrY  	REFURI_REr   r-  r(  rW   r   rf   r	   r/   r   rk   rq   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r8   r   r  r  r  r)  r.  r2  rG  rk  rE   r?   rn  rv  ry  r  r  __classcell__)r`   s   @r3   rQ   rQ   t   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>BT TC T TS T!$T8;TGK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r2   rQ   )rF   )Ar  rb   rP  rer   typingr   r   r   r   r   r	   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'   r5   r:   r?   r/   rO   r   rQ   r1   r2   r3   <module>r     sM   ) )  				 				       : : : : : : : : : : : : : : : : 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   4A; ;BB