
    Fe"q                    .   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+  ejZ                  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jr                  d(      Z: G d) d*e      Z; G d+ d,e      Z< G d- d.e      Z= G d/ d0e      Z>d4d5d1Z?e?Z@ G d2 d3e      ZAy# e,$ r dZ+Y w xY w)6z#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<   y)ManifestItemstrhrefid
media_typeN__name__
__module____qualname____annotations__     </usr/lib/python3/dist-packages/sphinx/builders/_epub_base.pyr&   r&   S   s    
IGOr1   r&   c                  "    e Zd ZU ded<   ded<   y)Spiner'   idrefboollinearNr+   r0   r1   r2   r4   r4   Y   s    JLr1   r4   c                  ,    e Zd ZU ded<   ded<   ded<   y)Guider'   typetitleuriNr+   r0   r1   r2   r9   r9   ^   s    
IJ	Hr1   r9   c                  @    e Zd ZU ded<   ded<   ded<   ded<   ded<   y	)
NavPointr'   navpointint	playordertextrefurilist[NavPoint]childrenNr+   r0   r1   r2   r>   r>   d   s    MN
IKr1   r>   c                    | j                  dd      } t        j                  |       } t        j                  | |      } | j                  dd      } | S )Nz&quot;")replacer   educateDashesOldSchooleducateQuotes)tlanguages     r2   sphinx_smarty_pantsrM   l   sI    			(C A**1-A!!!X.A			#x AHr1   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"dZd#dZd$d	Z 	 	 	 	 	 	 d%d
Z!d&dZ"d!dZ#d'dZ$d(dZ%d)dZ&d*d+dZ'd, fdZ(d-dZ)d.dZ*d!dZ+d! fdZ,d!dZ-	 	 d/	 	 	 	 	 d0 fdZ.d!dZ/d1d2dZ0d3dZ1d!dZ2d4d5dZ3d6dZ4d7dZ5d!dZ6d!d Z7 xZ8S )8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 c                    t         |           d| _        d| _        d| _        d| _        i | _        | j                  dd      | _        g | _	        y )Nr#   r   	use_indexepub)
superinit
out_suffixlink_suffixrA   tocidid_cacheget_builder_configrR   refnodesself	__class__s    r2   rU   zEpubBuilder.init   sK    "#
(*00fE.0r1   c                H    t        | j                  | j                  ddg      S )NhtmlrS   )r   configtagsr]   s    r2   create_build_infozEpubBuilder.create_build_info   s    dii&&1ABBr1   c                Z    | j                   j                  | j                   j                  fS N)ra   
epub_themeepub_theme_optionsrc   s    r2   get_theme_configzEpubBuilder.get_theme_config   s!    {{%%t{{'E'EEEr1   c                    | j                   j                  |      }|s-d| j                  j                  d      z  }|| j                   |<   |S )zReturn a unique id for name.zepub-%drS   )rY   getenvnew_serialno)r]   namer)   s      r2   make_idzEpubBuilder.make_id   sG     ]]t$TXX226::B"$DMM$	r1   c                   t        |t        j                        r|j                  d      r|d   }|j	                  d      r|S |j
                  j                  d   }t        ddd      D ]h  }| j                  |z  |v s|j                  |t        j                  |      t        t        j                  |j                                     d        |S  |S t        |t        j                        r|D ]  }| j                  ||      } |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   	referencerk   
startswithparent
attributesrangetoctree_templateappendr`   escapesspastextr   get_refnodes)r]   doctreeresultrC   rq   ru   elems          r2   r   zEpubBuilder.get_refnodes   s     gu/GKK4IX&F  !KLnn//	:Gq!R ))E1g=MM!&"&++f"5 #DKK0@$A B# 
    / 9**489r1   c                    t               }|D ]C  }|d   |v r&t        j                  t        d      |d   dd       0|j	                  |d          E y )NrC   zduplicated ToC entry found: %srS   duplicated_toc_entryr:   subtype)setloggerwarningr   add)r]   r   appearednodes       r2   check_refnodeszEpubBuilder.check_refnodes   s]     U 		-DH~)78N2	   T(^,		-r1   c                f   | j                   j                  | j                  j                  | dd      }| j	                  |g       | _        t        j                  | j                  j                        }|r!|dz  }| j
                  D ]  }||d   z   |d<    | j                  | j
                         y)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)	rl   get_and_resolve_doctreera   root_docr   r[   r   dirnametoc_add_files)r]   r   
master_diritems       r2   get_toczEpubBuilder.get_toc   s     ((224;;3G3G37AE 3 G ))'26\\$++"6"67
#J =!+d8n!<X=4==)r1   c                   |j                  ddt        j                  | j                  j                  | j
                  z         t        t        j                  | j                  j                  | j                  j                     j                                     d       t        | j                  j                        D ]J  \  }}|j                  ddt        j                  |      t        t        j                  |            d       L | j                  j                  D ]I  \  }}|j                  dt        j                  |      t        t        j                  |            d       K y)zDAdd the root_doc, pre and post files to a list of refnodes.
        r      rt   N)insertr`   r~   ra   r   rV   r   rl   titlesr   reversedepub_pre_filesepub_post_filesr}   )r]   r[   filerB   s       r2   r   zEpubBuilder.toc_add_files   s    	kk$++"6"6"HI 4 45<<>@ A
 	 #4;;#=#=> 	JD$OOA++d+DKK-.  	 ++55 	JD$OO++d+DKK-. 	r1   c                ,    ||j                  dd      z   S )z;Return a href/id attribute with colons replaced by hyphens.:-)rH   )r]   prefixfragments      r2   fix_fragmentzEpubBuilder.fix_fragment  s    ((c222r1   c                \    d
 fd}|j                  t        j                        D ]v  }d|v rS j                  j	                  |d         }|r3 j                  |j                  d      |j                  d            |d<   d|v s_ j                  d|d         |d<   x |j                  t        j                        D ]?  } ||       |j                  d      }t        |t        j                        s8 ||       A |j                  t        j                        D ]
  } ||        y	)zReplace colons with hyphens in href and id attributes.

        Some readers crash because they interpret the part as a
        transport protocol specification.
        c                x    g }| d   D ]*  }j                  d|      }||vs|j                  |       , || d<   y)zUpdate IDs of given *node*.idsrP   N)r   r}   )r   new_idsnode_idnew_idr]   s       r2   update_node_idz+EpubBuilder.fix_ids.<locals>.update_node_id  sL    !#G; +**2w7(NN6*+ "DKr1   rC   r      refidrP   T)ascendN)r   r   returnNone)findallr   rw   	refuri_rematchr   grouptarget	next_noderv   r   r   desc_signature)r]   treer   rw   mr   r   r   s   `       r2   fix_idszEpubBuilder.fix_ids  s   	" eoo6 	OI9$NN((8)<=*.*;*;AGGAJPQ
*SIh')#%)%6%6r9W;M%N	'"	O ll5<<0 	*F6"$..d.;I)U]]3y)	* #ll8+B+BC 	+N>*	+r1   c                j   dd}dd}dd}|dk(  ry|dk(  r5t        |j                  t        j                              } ||      \  }}d}	t	        |j                  t        j
                              D ];  }
|
j                  d	d
      }|j                  d      s(||
j                         vs;|
j                  j                  |
      dz   }|dk(  rb| j                  d|iz  }t        j                  ||      }|d   j                  | j                         |
j                  j                  ||       |dk(  st         	z  }|	dz  }	 ||      }|
j                  j                  ||        ||||      }j                  |       |d   d   |d<   |j#                  |d   d          |dz  }> y)z+Add visible link targets for external linksc                    t        j                  d      }|j                  t        j                  |             | j	                  |       |S )z.Create a footnote_reference node with childrenz[#]_)r   footnote_referencer}   Textnote_autofootnote_ref)doclabelfootnote_refs      r2   make_footnote_refz8EpubBuilder.add_visible_links.<locals>.make_footnote_ref,  s=     33F;L

5 12%%l3r1   r<   c                0   t        j                  |      }t        j                         }|j                  t        j                  |             |j                  |       |j                  dt        j                  d|             | j                  |       |S )z$Create a footnote node with childrenr   rP   )r   footnote	paragraphr}   r   r   r   note_autofootnote)r   r   r<   r   paras        r2   make_footnotez4EpubBuilder.add_visible_links.<locals>.make_footnote3  sh    ~~c*H??$DKK

3(OOD!OOAu{{2u56!!(+Or1   c                   t        | j                  t        j                              }|r/|d   }|j                  |j                  j                  |      dz   fS | j                  t        j                        D ]T  }t        |      dk(  s|j                         t        k(  s*|j                  |j                  j                  |      dz   fc S  t        | j                  t        j                              }t        j                         }|j                  t        j                  t                     |j                  |       ||j                  |      dz   fS )zfFind or create a spot to place footnotes.

            The function returns the tuple (parent, index).rs   r   )listr   r   r   ry   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||ENN34CWyy"))//""5"999U\\2 Dt9>dkkm7L&L;;(9(9$(?!(CCCD t||ENN34C,,.CJJuzz"789JJsO		#***r1   noNr   r   rC   rP   )zhttp:zhttps:zftp:inlinerq   r   r   r   )r   nodes.documentr   r'   r   znodes.footnote_reference)r   r   r   r'   r<   r'   r   znodes.footnote)r   r   r   ztuple[Element, int])r   r   r   r   r   rw   rk   rx   r   ry   r   link_target_templater   r}   css_link_target_classr   FOOTNOTE_LABEL_TEMPLATEadd_backref)r]   r   	show_urlsr   r   r   r   fn_spotfn_idxnrr   r<   idxlinkr   r   r   s                    r2   add_visible_linkszEpubBuilder.add_visible_links)  s   	 		+* 
"t||ENN34C+D1OGVBeoo67 	 D((8R(C~~9:s$++-?Wkk''-1(33uclBC <<S1DO**4+E+EFKK&&sD1*,3b8E!GB#4S%#@LKK&&sL9,S%=HNN684,4UOA,>L)((e)<Q)?@aKF%	 r1   c                    | j                  |       | j                  || j                  j                         t        |   ||       y)zWrite one document file.

        This method is overwritten in order to fix fragment identifiers
        and to add visible external links.
        N)r   r   ra   epub_show_urlsrT   	write_doc)r]   docnamer   r^   s      r2   r   zEpubBuilder.write_docl  s:     	Ww(B(BC'7+r1   c                   |D ]  \  }}|D ]  \  }\  }}}t        |      D ][  \  }\  }}	| j                  j                  |	      }
|
s'|| j                  |
j	                  d      |
j	                  d            f||<   ] |D ]n  \  }}t        |      D ][  \  }\  }}	| j                  j                  |	      }
|
s'|| j                  |
j	                  d      |
j	                  d            f||<   ] p   y)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  s    " 	[MD'7> [3
3UHd+4U+; O'Q,,T2A$*$($5$5aggaj!''!*$M$OaO
 5= [0M=/8/G [+NVT NN00606040A0A!''!*aggVWj0Y0[M!,[[[	[r1   c                B    t        j                  |      d   }|t        v S )z=Does the filename extension indicate a vector graphic format?rs   )r   splitextVECTOR_GRAPHICS_EXTENSIONS)r]   filenameexts      r2   is_vector_graphicszEpubBuilder.is_vector_graphics  s!    mmH%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                  |            }| j&                  j(                  r|j*                  dv r|j-                         }| j&                  j.                  dkD  r]|j0                  \  }}| j&                  j.                  }||kD  r3t3        ||z  |z        }|j5                  ||ft        j6                        }	 |j9                  t        j                  | j                  | j                  |             . y# t        $ r | j                  |      s=t         j#                  t        d      t        j                  | j                  |             	 t%        t        j                  | j                  |      t        j                  | j                  | j                  |             nT# t        $ rH}t         j#                  t        d      t        j                  | j                  |      |       Y d}~nd}~ww xY wY 3w xY w# t        $ rI}t         j#                  t        d      t        j                  | j                  |      |       Y d}~d}~ww xY w)	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   ra   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  sC   
 	$))DKK78"4;;3G0H'#&t{{#3TXX5G5GI 	AC;;s#Djj4;;!<= {{**88v% ++-C{{//!3"%(([[552:u45B**b"Xu}}=CA4;;tDE9	A
  
..s3NN2&U#V#'99T[[##>@ETYYt{{C8!YYt{{DMM4HJ ENN2&E#F#'99T[[##>E EE 
0  Ar"BC#yyc:CA AAsV   3F-/:J4-AJ1AIJ1	J*">J% J1%J**J10J14	L=>LLc                   | j                   r| j                  j                  s| j                  j                  rDt        s-t
        j                  t        d             t        | %          y| j                          yt        | %          yy)zzCopy image files to destination directory.
        This overwritten method can use Pillow to convert image files.
        z&Pillow not found - copying image filesN)r  ra   r  r  r   r   r   r   rT   copy_image_filesr  r\   s    r2   r  zEpubBuilder.copy_image_files  sa     ;;{{**dkk.N.NNN2&N#OPG,.--/(* r1   c                     y rf   r0   rc   s    r2   copy_download_fileszEpubBuilder.copy_download_files  s    r1   c                    |j                  d      r%d|v r!| j                  sy| j                  |d          | j                  |d<   t        |   |||||       y)zCreate a rendered page.

        This method is overwritten for genindex pages in order to fix href link
        attributes.
        genindexgenindexentriesNdoctype)rx   rR   r   r$  rT   handle_page)r]   pagenameaddctxtemplatenameoutfilename	event_argr^   s         r2   r%  zEpubBuilder.handle_page  s\     z*/@F/J>>f%678 LLyHflKSr1   c                    t         j                  t        d             t        t	        j
                  | j                  d      | j                         y)z!Write the metainfo file mimetype.zwriting mimetype file...mimetypeN)r   infor   r   r   r  template_dirr  rc   s    r2   build_mimetypezEpubBuilder.build_mimetype  s3    B123		$"3"3Z@$++Nr1   c                    t         j                  t        d             t        j                  | j
                  d      }t        |       t        t        j                  | j                  d      |       y)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]   outnamer  s      r2   build_containerzEpubBuilder.build_container  sK    B?@A4;;
3&		$"3"3_EvNr1   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_EPOCHr;   authoruidlang	publisher	copyrightschemer)   z%Y-%m-%ddatemanifest_itemsspinesguides)osgetenvtimegmtimer@   r`   r~   ra   
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  sf   
 "$+>!??LS):%;<JJ#% KK(>(>?![[)@)@A++dkk&:&:;;;t{{'@'@A $DKK,F,F G $DKK,F,F G![[)@)@AT[[%@%@A;;t}}Z'LM%'!"r1   c                8   t         j                  t        d             | j                         }g | _        dddddddd	d
| j
                  j                  dz   g
| j
                  j                  z   | _        | j                  s(| j                  j                  d| j                  z          t        j                  | j                        D ]i  \  }}}|j                          t!        |      D ]C  }t#        t%        j&                  ||      | j                        }|| j                  v r=t%        j(                  |      d   }|| j*                  vr'|dvr"t         j-                  t        d      |dd       |j/                  t        j0                  d      }t3        t5        j6                  t9        |            t5        j6                  | j;                  |            t5        j6                  | j*                  |               }|d   j                  |       | j                  j                  |       F l t=               }	| j>                  D ]u  }
d|
d   v r|
d   | j                  v rtA        t5        j6                  | j;                  |
d               d      }|d   j                  |       |	jC                  |
d          w | jD                  D ]u  }tA        t5        j6                  | j;                  |d   | j                  z               d      }|d   j                  |       |	jC                  |d   | j                  z          w | j                  rmtA        t5        j6                  | j;                  d| j                  z               d      }|d   j                  |       |	jC                  d| j                  z          | j                  D ]e  }||	vs|jG                  | j                        s$tA        t5        j6                  | j;                  |            d      }|d   j                  |       g d}| j
                  jH                  r| j
                  jH                  \  }}|j/                  t        j0                  d      }t5        j6                  | j;                  |            |d<   |rtA        t5        j6                  | j;                  | jJ                              d      }|d   jM                  d|       | jJ                  | j                  vrt%        j(                  | jJ                        d   }| j                  j                  | jJ                         t3        t5        j6                  | jJ                        t5        j6                  | j;                  | jJ                              t5        j6                  | j*                  |               }|d   j                  |       t5        j6                  |      | j
                  jN                  d}| jQ                  t%        j(                  | jJ                        d   ||       |	jC                  | jJ                         d}d}| j
                  jR                  r| j
                  jR                  D ]  \  }}}|jU                  d      d   }|| j                  vr| j                  j                  |       |dk(  rd}|dk(  rd}|d   j                  tW        t5        j6                  |      t5        j6                  |      t5        j6                  |                    |rK|rI|d   j                  tW        d| jX                  d   t5        j6                  | jJ                                     |r[| j>                  rO|d   j                  tW        d| jX                  d   t5        j6                  | j>                  d   d                      t[        t%        j&                  | j\                  d       | j                  |       y)!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.ncxMETA-INF/container.xmlz	Thumbs.dbzehthumbs.dbz	.DS_Storez	nav.xhtml.epubr"  rs   )z.jsz.xmlz!unknown mimetype for %s, ignoringrS   unknown_project_filesr   r   r<  #rC   Tr=  r   FNr   )imager;   r   r>  zcontent.opf_t)/r   r-  r   rO  filesra   epub_basenameepub_exclude_filesignored_filesrR   r}   rV   r?  walkr  sortsortedr   r   r  r   media_typesr   rH   sepr&   r`   r~   r   ro   r   r[   r4   r   domain_indicesendswith
epub_covercoverpage_namer   projectr%  
epub_guidesplitr9   guide_titlesr   r.  )r]   rN  rootdirsrX  r   r   r   r   
spinefilesrefnodespiner-  rn   	html_tmplrW  ctxauto_add_coverauto_add_tocr:   r<   r;   r   s                          r2   build_contentzEpubBuilder.build_content  s    	B456((* !#
*J')A)=+)4;;+D+Dw+NP KK**	+
 ~~%%j4??&BC!#!5 	,D$IIKUm ,"499T2#6Dt111mmH-b1d... /1r*M'NPX,2<S ' U#++BFFC8#DKKh$@$(KKX0F$G$(KK0@0@0E$FH )*11$7

!!(+#,	,, U
}} 	.Ggh''x D$6$66$++dll783D&EFMEX%%e,NN78,-	. '' 	6D$++dll47T__3L&MNPTUEX%%e,NN47T__45	6 >>$++dll:3O&PQSWXEX%%e,NN:78JJ 	1D:%$--*Hdkk$,,t*<=uE"))%0	1 	;;!!#{{55E9MM"&&#.E $DLL,? @HWdkk$,,t7J7J*KLdS"))!U3&&djj8--(;(;<R@CJJ%%d&9&9:'D4G4G(H(,DLLATAT4U(V(,D4D4DS4I(JLD -.55d; $E 2T[[=P=PQ  MM$"5"56q93	Kt223;;!!$(KK$:$: 
C c5yy~a(tzz)JJ%%d+7?%*N5=#(L"))%D0A04E0B04C0@+B C
C iX%%eG,0,=,=g,F,0KK8K8K,L'N O DMMX%%eE,0,=,=e,D,0KKa8H8R,S'U V
 			$"3"3_Et{{T\]r1   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   rX   r>   )r]   r   ru   incrs       r2   new_navpointzEpubBuilder.new_navpointd  sO     NNaN

a
tzz14>>Vd8nb: 	:r1   c           	        g }|j                  t        ddddg              d}d}|D ]  }|d   s
|d   j                  d      d   }|| j                  v r0|d   | j                  j
                  kD  rM|d   |k(  rS| j                  ||      }|j                          |d	   j                  j                  |       |j                  |       n|d   |d
z   k(  r|d
z  }|rE| j                  j                  r/|d	   j                  j                  | j                  ||d             | j                  ||      }|d	   j                  j                  |       |j                  |       n|d   |k  rz|d   t        |      k  r"|j                          |d   t        |      k  r"|d   }| j                  ||      }|d	   j                  j                  |       |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   rP   NrB   rC   rV  ru   rs   r   F)r}   r>   rg  r[  ra   epub_tocdepthru  poprE   epub_tocdupr   )r]   r   navstackru   lastnoder   r   r?   s           r2   build_navpointszEpubBuilder.build_navpointsm  s    $&!RR89 	D<>'',Q/Dt)))G}t{{888G}%,,T59%%,,X6)g%!)+
 7 7RL))001B1B8UTY1Z[,,T59%%,,X6)g&7mc(m3LLN 7mc(m3W,,T59%%,,X6)H=	@ {###r1   c                    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.
        r6  r;   ru   	navpoints)ra   rE  r`   r~   rC  )r]   ru   r  rN  s       r2   toc_metadatazEpubBuilder.toc_metadata  sR     $&++.. KK(>(>?! )r1   c                ~   t         j                  t        d             | j                  j                  dk(  rW| j
                  j                  | j                  j                  | dd      }| j                  |g       }| j                  |       n| j                  }| j                  |       | j                  |      }t        d | j                  D              }t        || j                  j                        }t!        t#        j$                  | j&                  d      | j(                  | j+                  ||             y)z Write the metainfo file toc.ncx.zwriting toc.ncx file...defaultFr   c              3  &   K   | ]	  }|d      yw)ru   Nr0   ).0r   s     r2   	<genexpr>z(EpubBuilder.build_toc.<locals>.<genexpr>  s     <dDM<s   z	toc.ncx_tN)r   r-  r   ra   epub_tocscoperl   r   r   r   r   r[   r   r}  maxminrx  r   r   r  r.  r  r  )r]   r   r[   r  ru   s        r2   	build_toczEpubBuilder.build_toc  s    B012;;$$	1hh66t{{7K7K7;EEJ 7 LG (("5Hx( }}HH%((2	<dmm<<E4;;445		$"3"3[A4;;))%;	=r1   c                p   | j                   j                  dz   }t        j                  t	        d      |       t        j                  | j                  |      }t        |dt              5 }|j                  t        j                  | j                  d      dt               dD ]7  }|j                  t        j                  | j                  |      |t               9 | j                  D ]7  }|j                  t        j                  | j                  |      |t               9 	 ddd       y# 1 sw Y   yxY w)z~Write the epub file.

        It is a zip file with the mimetype file stored uncompressed as the first
        entry.
        rT  zwriting %s file...wr,  )rS  rQ  rR  N)ra   rY  r   r-  r   r   r  r  r   r	   writer
   rX  )r]   r1  epub_filenamerS   r   s        r2   
build_epubzEpubBuilder.build_epub  s     ++++g5B+,g6		$++w7]C6 	U$JJtyyj9:zRP U

499T[[(;X|TU JJ U

499T[[(;X|TU		U 	U 	Us   *B8D,,D5)r   r   )r   r   )r   ztuple[str, dict])rn   r'   r   r'   )r   r   r   list[dict[str, Any]]r   r  )r   r  r   r   )r[   r  r   r   )r   r'   r   r'   r   r'   )r   r   r   r   )r   )r   r   r   r'   r   r   )r   r'   r   r   r   r   )r   z'list[tuple[str, list[tuple[str, Any]]]]r   r   )r   r'   r   r6   )z	page.htmlNN)r&  r'   r'  dictr(  r'   r)  z
str | Noner*  r   r   r   )rS  )r1  r'   r   r   )r   dict[str, Any])T)r   r  ru   r@   rt  r6   r   r>   )r   r  r   rD   )ru   r@   r  rD   r   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_NAMErd  TOCTREE_TEMPLATEr|   LINK_TARGET_TEMPLATEr   CSS_LINK_TARGET_CLASSr   GUIDE_TITLESrh  MEDIA_TYPESr_  	REFURI_REr   r.  r$  rU   rd   ri   ro   r   r   r   r   r   r   r   r   r   r   r  r  r   r%  r/  r2  rO  rr  ru  r}  r  r  r  __classcell__)r^   s   @r2   rO   rO   y   sD    J+# N"'H"F#N'/1LKILG	1CF%9	0-*,3+BA F,[$1
%AN+ LWEIT!+T?BTNRTO
O2j^X:*$X	=(Ur1   rO   )en)rK   r'   rL   r'   r   r'   )Br  
__future__r   r`   r?  rerA  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>   rM   r   rO   r0   r1   r2   <module>r     sE   ) "  	 	   1 1  5 5  &  A   / 0 ; ;,
 
		8	$ $  #  # %   & ' 
 BJJ'	: J 
J z  
M	U' M	Uw  Es    D
 
DD