
    ~Ti1                       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m	Z	 ddl
mZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ er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  ej@                  e!      Z" G d de	      Z#dddZ$dddZ%dddZ&dZ'dZ(dZ)e)dz   Z* ejV                  de) d e* d!      Z, G d" d#ejZ                        Z.d'd$Z/d(d%Z0d)d&Z1y)*z5Build epub3 files.

Originally derived from epub.py.
    )annotationsN)TYPE_CHECKING
NamedTuple)package_dir)
_epub_base)ENUM)__)logging)copy_asset_file)make_filename)Set)Any)Sphinx)Config)ExtensionMetadatac                  ,    e Zd ZU ded<   ded<   ded<   y)NavPointstrtextrefurilist[NavPoint]childrenN)__name__
__module____qualname____annotations__     H/home/agent/.local/lib/python3.12/site-packages/sphinx/builders/epub3.pyr   r   !   s    
IKr   r   ltrrtl)
horizontalverticalr#   r"   zvertical-rlzhorizontal-tb)r#   r"   z<!DOCTYPE html>zU<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">u   :|[A-Z]|_|[a-z]|[À-Ö]|[Ø-ö]|[ø-˿]|[Ͱ-ͽ]|[Ϳ-῿]|[‌-‍]|[⁰-↏]|[Ⰰ-⿯]|[、-퟿]|[豈-﷏]|[ﷰ-�]|[𐀀-󯿿]z2\-|\.|[0-9]|\u00b7|[\u0300-\u036f]|[\u203f-\u2040](z)(z)*c                       e Zd ZdZdZ ed      ZdZ ej                  dd      Z
eZeZdZddZd fd	Zd fd
ZddZddZddZ xZS )Epub3BuilderzBuilder that outputs epub3 files.

    It creates the metainfo files content.opf, nav.xhtml, toc.ncx, mimetype,
    and META-INF/container.xml. Afterwards, all necessary files are zipped to
    an epub file.
    epubzThe ePub file is in %(outdir)s.F	templatesepub3Tc                    | j                          | j                          | j                          | j                          | j	                          | j                          | j                          y)z/Create the metainfo files and finally the epub.N)get_tocbuild_mimetypebuild_containerbuild_contentbuild_navigation_doc	build_toc
build_epubselfs    r   handle_finishzEpub3Builder.handle_finish\   sO    !!#r   c                   | j                   j                  }t        j                  d      x}t	        j
                  t        |            }nt	        j
                         }t        | !         }t        j                  | j                   j                        |d<   t        j                  | j                   j                        |d<   t        j                  |      |d<   t        j                  |      |d<   t        j                  t	        j                   d|            |d<   t        j                  | j                   j"                        |d<   | j                   j$                  |d	<   |S )
zaCreate a dictionary with all metadata for the content.opf
        file properly escaped.
        SOURCE_DATE_EPOCHdescriptioncontributorpage_progression_directionibook_scroll_axisz%Y-%m-%dT%H:%M:%SZdateversionepub_version)configepub_writing_modeosgetenvtimegmtimeintsupercontent_metadatahtmlescapeepub_descriptionepub_contributorPAGE_PROGRESSION_DIRECTIONSgetIBOOK_SCROLL_AXISstrftimer<   r=   )r3   writing_modesource_date_epoch
time_tuplemetadata	__class__s        r   rF   zEpub3Builder.content_metadataf   s    {{44!#+>!??LS):%;<JJ7+-"&++dkk.J.J"K"&++dkk.J.J"K1L1P1P2
-. ):(=(=l(K$%;;t}}5I:'VW"kk$++*=*=>#';;#;#; r   c                   t         |   |       | j                  j                  }t        j                  |      | j                  d<   | j                  | j                  d<   | j                  | j                  d<   d| j                  d<   y )Ntheme_writing_modehtml_taguse_meta_charsetTskip_ua_compatible)	rE   prepare_writingr>   r?   THEME_WRITING_MODESrL   globalcontextrV   rW   )r3   docnamesrO   rS   s      r   rY   zEpub3Builder.prepare_writing}   sw    ){{443F3J3J<3X/0)-:&151F1F-.37/0r   c                   t        ddg       g}d}|D ]c  }|d   s
|d   j                  d      d   }|| j                  v r0|d   | j                  j                  kD  rMt        |d   |d   g       }|d   |k(  r@|j                          |d   j                  j                  |       |j                  |       |d   |dz   k(  r5|dz  }|d   j                  j                  |       |j                  |       |d   |k  ri|d   t        |      k  r"|j                          |d   t        |      k  r"|d   }|d   j                  j                  |       |j                  |       Yd	}t        |       |d   j                  S )
ac  Create the toc navigation structure.

        This method is almost same as build_navpoints method in epub.py.
        This is because the logical navigation structure of epub3 is not
        different from one of epub2.

        The difference from build_navpoints method is templates which are used
        when generating navigation documents.
         r   r   r   #level   z+Should never reach here. It might be a bug.)
r   splitignored_filesr>   epub_tocdepthpopr   appendlenRuntimeError)r3   navnodesnavstackr`   nodefilenavpointunreachables           r   build_navlistzEpub3Builder.build_navlist   s    %-RR$8#9 	0D<>'',Q/Dt)))G}t{{888Vd8nbAHG}%%%,,X6)g%!)+
%%,,X6)g&7mc(m3LLN 7mc(m3W%%,,X6)K";//5	08 {###r   c                    t        j                  | j                  j                        t        j                  | j                  d         |dS )z_Create a dictionary with all metadata for the nav.xhtml file
        properly escaped.
        toc)lang
toc_localenavlist)rG   rH   r>   epub_languageguide_titles)r3   ru   s     r   navigation_doc_metadataz$Epub3Builder.navigation_doc_metadata   s>    
 KK 9 9:++d&7&7&>?
 	
r   c                .   t         j                  t        d             | j                  j                  dk(  rb| j
                  j                  | j                  j                  | | j                  dd      }| j                  |g       }| j                  |       n| j                  }| j                  |      }t        | j                  dz  | j                  | j!                  |      d       d| j"                  vr| j"                  j%                  d       y	y	)
z"Write the metainfo file nav.xhtml.zwriting nav.xhtml file...defaultF)tagsprune_toctreesincludehiddenznav.xhtml.jinjaT)contextforcez	nav.xhtmlN)loggerinfor	   r>   epub_tocscopeenvget_and_resolve_doctreeroot_docr{   get_refnodestoc_add_filesrefnodesrp   r   template_diroutdirrx   filesrg   )r3   doctreer   ru   s       r   r/   z!Epub3Builder.build_navigation_doc   s    B234;;$$	1hh66$$YY$# 7 G (("5Hx( }}H$$X. 11KK009		
 djj(JJk* )r   )returnNone)r   dict[str, Any])r\   zSet[str]r   r   )rj   zlist[dict[str, Any]]r   r   )ru   r   r   r   )r   r   r   __doc__namer	   epilogsupported_remote_imagesr   joinpathr   DOCTYPEdoctypeHTML_TAGrV   rW   r4   rF   rY   rp   rx   r/   __classcell__)rS   s   @r   r&   r&   J   sc     D12F#';''W=LGH.8($T
+r   r&   c                p   | j                   j                  dk7  ry | j                  j                  st        j                  t        d             t        j                  | j                  j                        st        j                  t        d             | j                  j                  st        j                  t        d             | j                  j                  st        j                  t        d             | j                  j                  st        j                  t        d             | j                  j                  st        j                  t        d             | j                  j                  st        j                  t        d             | j                  j                  st        j                  t        d	             | j                  j                   st        j                  t        d
             | j                  j"                  st        j                  t        d             y y )Nr'   zHconf value "epub_language" (or "language") should not be empty for EPUB3z2conf value "epub_uid" should be XML NAME for EPUB3zGconf value "epub_title" (or "html_title") should not be empty for EPUB3z6conf value "epub_author" should not be empty for EPUB3z;conf value "epub_contributor" should not be empty for EPUB3z;conf value "epub_description" should not be empty for EPUB3z9conf value "epub_publisher" should not be empty for EPUB3zIconf value "epub_copyright" (or "copyright")should not be empty for EPUB3z:conf value "epub_identifier" should not be empty for EPUB3z2conf value "version" should not be empty for EPUB3)builderr   r>   rv   r   warningr	   _XML_NAME_PATTERNmatchepub_uid
epub_titleepub_authorrJ   rI   epub_publisherepub_copyrightepub_identifierr<   apps    r   validate_config_valuesr      s   
{{6! ::##0	
 ""3::#6#67rNOP::  0	
 ::!!rRST::&&LM	
 ::&&LM	
 ::$$rUVW::$$0	
 ::%%rVWX::rNOP r   c                   g }|j                   D ]?  }t        |t              r|j                  |i f       '	 |\  }}|j                  ||f       A ||_         y# t        $ r" t
        j                  t        d      |       Y tw xY w)z9Convert string styled epub_css_files to tuple styled one.zinvalid css_file: %r, ignoredN)epub_css_files
isinstancer   rg   	Exceptionr   r   r	   )r   r>   r   entryfilenameattrss         r   convert_epub_css_filesr     s    79N&& 	eS!!!5"+."'%%%x&78	 +F	  r"ABEJs   A(BBc           	        | j                  t               | j                  dd dt        t        h             | j                  dddt        t
        h             | j                  dddt        t        h             | j                  d	i dt        t        h             | j                  d
d dt        t        h             | j                  dd dt        t        h             | j                  dd dt        t        h             | j                  dd dt        t        h             | j                  dd dt        t        h             | j                  dddt        t        h             | j                  dddt        t        h             | j                  dddt        t        h             | j                  dddt        t        t        h             | j                  dddt        t        t        h             | j                  dg dt        t        t        h             | j                  dg dt        t        t        h             | j                  dd dt        t        t        h             | j                  d g dt        t        t        h             | j                  d!d"dt        t        h             | j                  d#d$dt        t        h             | j                  d%d&dt        t        h             | j                  d'd(dt        t        h             | j                  d)d*dt        t        h             | j                  d+d,dt        t        h             | j                  d-d. dt        t        h             | j                  d/ddt        t        h             | j                  d0ddt        t        h             | j                  d1d2dt        d2d3             | j                  d4t        d56       | j                  d7t               d8d$d$d9S ):Nepub_basenamec                ,    t        | j                        S N)r   projectr2   s    r   <lambda>zsetup.<locals>.<lambda>&  s    ]4<<0 r   r^   )typesr=   g      @r'   
epub_themeepub_theme_optionsr   c                    | j                   S r   )r   r2   s    r   r   zsetup.<locals>.<lambda>0  s
    4<< r   r   c                    | j                   S r   authorr2   s    r   r   zsetup.<locals>.<lambda>3  s
    DKK r   rv   c                "    | j                   xs dS )Nen)languager2   s    r   r   zsetup.<locals>.<lambda>7  s    T]]*d r   r   c                    | j                   S r   r   r2   s    r   r   zsetup.<locals>.<lambda><  s
    t{{ r   r   c                    | j                   S r   )	copyrightr2   s    r   r   zsetup.<locals>.<lambda>?  s
    t~~ r   r   unknownepub_schemer   r   
epub_coverr   
epub_guideepub_pre_filesepub_post_filesr   c                    | j                   S r   )html_css_files)r>   s    r   r   zsetup.<locals>.<lambda>J  s    v,, r   epub_exclude_filesre      epub_tocdupTr   rz   epub_fix_imagesFepub_max_image_widthr   epub_show_urlsinlineepub_use_indexc                    | j                   S r   )html_use_indexr2   s    r   r   zsetup.<locals>.<lambda>Y  s    T(( r   rI   rJ   r?   r"   r#   zconfig-initedi   )priorityzbuilder-initedbuiltin)r<   parallel_read_safeparallel_write_safe)add_builderr&   add_config_value	frozensetr   floatdictlisttuplerD   boolr   connectr   r   r   s    r   setupr      s   OOL! 0
	   V9eW+=   vvYu=MN-r6D6ARS/y#?O   /y#?O   *	   2F)SEBR   5vYPSuEU   *IvYPSuEUV	6C5AQRYYu=MNr5	4-8PQr5	4-8PQ)2uItUm<TU*BYe}=UV,u&	   b%y$/G   !U)SE:JKe9dV;LM)U)SEBRS*E5	4&@QR/EC5AQR)8V9cUCST(	   +YiQTPUFVW+YiQTPUFVW\6lJ9W  
 KK!7#KFKK "89 "# r   )r   r   r   r   )r   r   r>   r   r   r   )r   r   r   r   )2r   
__future__r   rG   r@   rerB   typingr   r   sphinxr   sphinx.buildersr   sphinx.configr   sphinx.localer	   sphinx.utilr
   sphinx.util.fileutilr   sphinx.util.osutilr   collections.abcr   r   sphinx.applicationr   r   sphinx.util.typingr   	getLoggerr   r   r   rK   rM   rZ   r   r   _xml_name_start_char_xml_name_charcompiler   EpubBuilderr&   r   r   r   r   r   r   <module>r      s
  
 #  	 	  ,  &    0 ,#)$4			8	$z   
  
 ! 
  1 	/  PP  BJJ#7"8>:J"MN K+:)) K+\4Qn+"Kr   