
    O&i=*                     ~   d 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 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  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' G d dej(                  Z)deddfdZ*dededdfd Z+dedee,ef         fd!Z-dS )"z5Build epub3 files.

Originally derived from epub.py.
    N)path)AnyDictList
NamedTupleSetTuple)package_dir)Sphinx)
_epub_base)ENUMConfig)__)loggingxmlname_checker)copy_asset_file)format_date)make_filenamec                   :    e Zd ZU eed<   eed<   ee         ed<   dS )NavPointtextrefurichildrenN)__name__
__module____qualname__str__annotations__r   r        b/home/geonatureadmin/si_en_reseau/tutos/venv/lib/python3.11/site-packages/sphinx/builders/epub3.pyr   r      s4         
IIIKKK3i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">c                       e Zd ZdZdZ ed          ZdZ ej	        e
dd          ZeZeZdZdd
Zdeeef         f fdZdee         dd	f fdZdeeeef                  dee         fdZdee         deeef         fdZddZ xZS )Epub3Builderz
    Builder 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epub3TreturnNc                    |                                   |                                  |                                  |                                  |                                  |                                  |                                  dS )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_finishF   s}    !!###r    c                    | j         j        }t                                                      }t	          j        | j         j                  |d<   t	          j        | j         j                  |d<   t          	                    |          |d<   t          	                    |          |d<   t	          j        t          dd                    |d<   t	          j        | j         j                  |d	<   | j         j        |d
<   |S )zaCreate a dictionary with all metadata for the content.opf
        file properly escaped.
        descriptioncontributorpage_progression_directionibook_scroll_axisz%Y-%m-%dT%H:%M:%SZenlanguagedateversionepub_version)configepub_writing_modesupercontent_metadatahtmlescapeepub_descriptionepub_contributorPAGE_PROGRESSION_DIRECTIONSgetIBOOK_SCROLL_AXISr   r@   rA   )r5   writing_modemetadata	__class__s      r!   rE   zEpub3Builder.content_metadataP   s     {477++--"&+dk.J"K"K"&+dk.J"K"K1L1P1PQ]1^1^-.(9(=(=l(K(K$%;{3GRV'W'W'WXX"k$+*=>>#';#; r    docnamesc                     t                                          |           | j        j        }t                              |          | j        d<   | j        | j        d<   | j        | j        d<   d| j        d<   d S )Ntheme_writing_modehtml_taguse_meta_charsetTskip_ua_compatible)	rD   prepare_writingrB   rC   THEME_WRITING_MODESrK   globalcontextrS   rT   )r5   rP   rM   rO   s      r!   rV   zEpub3Builder.prepare_writing`   su    ))){43F3J3J<3X3X/0)-:&151F-.37/000r    navnodesc                    g }|                     t          ddg                      d}|D ]}|d         s|d                             d          d         }|| j        v r7|d         | j        j        k    rNt          |d         |d         g           }|d         |k    rJ|                                 |d         j                             |           |                     |           |d         |dz   k    r<|dz  }|d         j                             |           |                     |           |d         |k     r|d         t          |          k     r-|                                 |d         t          |          k     -|d         }|d         j                             |           |                     |           t          d	          |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.)
appendr   splitignored_filesrB   epub_tocdepthpopr   lenRuntimeError)r5   rY   navstackr]   nodefilenavpoints          r!   build_navlistzEpub3Builder.build_navlisti   s    $&R,,--- 	R 	RD< >'',,Q/Dt)))G}t{888Vd8nbAAHG}%%%,,X666))))g%!)++
%,,X666))))g&&7mc(mm33LLNNN 7mc(mm33W%,,X666))))"#PQQQ{##r    navlistc                     i }t          j        | j        j                  |d<   t          j        | j        d                   |d<   ||d<   |S )z_Create a dictionary with all metadata for the nav.xhtml file
        properly escaped.
        langtoc
toc_localerl   )rF   rG   rB   epub_languageguide_titles)r5   rl   rN   s      r!   navigation_doc_metadataz$Epub3Builder.navigation_doc_metadata   sM     ;t{'@AA!%T->u-E!F!F%r    c                     t                               t          d                     | j        j        dk    rT| j                            | j        j        | dd          }|                     |g           }| 	                    |           n| j
        }|                     |          }t          t          j        | j        d          | j        |                     |                     d| j        vr| j                            d           dS dS )z"Write the metainfo file nav.xhtml.zwriting nav.xhtml file...defaultF)prune_toctreesincludehiddenznav.xhtml_tz	nav.xhtmlN)loggerinfor   rB   epub_tocscopeenvget_and_resolve_doctreeroot_docget_refnodestoc_add_filesrefnodesrk   r   r   jointemplate_diroutdirrs   filesr`   )r5   doctreer   rl   s       r!   r1   z!Epub3Builder.build_navigation_doc   s   B233444;$	11h66$d$E 7 ; ;G (("55Hx(((( }H$$X..	$"3]CCT[44W==	? 	? 	? dj((Jk***** )(r    )r+   N)r   r   r   __doc__namer   epilogsupported_remote_imagesr   r   r
   r   DOCTYPEdoctypeHTML_TAGrS   rT   r6   r   r   r   rE   r   rV   r   r   rk   rs   r1   __classcell__)rO   s   @r!   r'   r'   4   sR         DR122F#49[+w??LGH   $sCx.       8C 8T 8 8 8 8 8 8($d4S>&: ($tH~ ($ ($ ($ ($TtH~ $sCx.    + + + + + + + +r    r'   appr+   c                 h   | j         j        dk    rd S | j        j        s't                              t          d                     t                                          | j        j	                  s't                              t          d                     | j        j
        s't                              t          d                     | j        j        s't                              t          d                     | j        j        s't                              t          d                     | j        j        s't                              t          d                     | j        j        s't                              t          d                     | j        j        s't                              t          d	                     | j        j        s't                              t          d
                     | j        j        s)t                              t          d                     d S d S )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   rB   rq   rx   warningr   r   matchepub_uid
epub_titleepub_authorrI   rH   epub_publisherepub_copyrightepub_identifierr@   r   s    r!   validate_config_valuesr      s    
{6!! :# <r : ; ; 	< 	< 	< ""3:#677 QrNOOPPP:  <r : ; ; 	< 	< 	< :! UrRSSTTT:& ZrWXXYYY:& ZrWXXYYY:$ XrUVVWWW:$ <r : ; ; 	< 	< 	< :% YrVWWXXX: QrNOOPPPPPQ Qr    rB   c                 0   g }|j         D ]}t          |t                    r|                    |i f           /	 |\  }}|                    ||f           M# t          $ r+ t
                              t          d          |           Y w xY w||_         dS )z?This converts string styled epub_css_files to tuple styled one.zinvalid css_file: %r, ignoredN)epub_css_files
isinstancer   r`   	Exceptionrx   r   r   )r   rB   r   entryfilenameattrss         r!   convert_epub_css_filesr      s    79N& 	 	eS!! 	!!5"+...."'%%%x&78888   r"ABBEJJJ +Fs   A2BBc           	         |                      t                     |                     dd d           |                     ddd           |                     ddd           |                     di d           |                     d	d
 d           |                     dd d           |                     dd d           |                     dd d           |                     dd d           |                     ddd           |                     ddd           |                     ddd           |                     ddd           |                     ddd           |                     dg d           |                     dg d           |                     dd d           |                     dg d           |                     d d!d           |                     d"d#d           |                     d$d%d           |                     d&dd           |                     d'd(d           |                     d)d*d           |                     d+d, d           |                     d-dd           |                     d.dd           |                     d/d0dt          d0d1                     |                     d2t
          d34           |                     d5t                     d6d#d#d7S )8Nepub_basenamec                 *    t          | j                  S N)r   projectr4   s    r!   <lambda>zsetup.<locals>.<lambda>   s    }T\7R7R r    FrA   g      @r(   
epub_themeepub_theme_optionsr   c                     | j         S r   )r   r4   s    r!   r   zsetup.<locals>.<lambda>   s    DL r    r   c                     | j         S r   authorr4   s    r!   r   zsetup.<locals>.<lambda>   s    T[ r    rq   c                     | j         pdS )Nr<   r=   r4   s    r!   r   zsetup.<locals>.<lambda>   s    t}7L r    r   c                     | j         S r   r   r4   s    r!   r   zsetup.<locals>.<lambda>   s     r    r   c                     | j         S r   )	copyrightr4   s    r!   r   zsetup.<locals>.<lambda>   s     r    r   unknownepub_schemer   r{   
epub_coverr   
epub_guideepub_pre_filesepub_post_filesr   c                     | j         S r   )html_css_files)rB   s    r!   r   zsetup.<locals>.<lambda>   s	    &:O r    epub_exclude_filesrc      epub_tocdupTrz   ru   epub_fix_imagesepub_max_image_widthr   epub_show_urlsinlineepub_use_indexc                     | j         S r   )html_use_indexr4   s    r!   r   zsetup.<locals>.<lambda>  s	    8K r    rH   rI   rC   r$   r%   zconfig-initedi   )priorityzbuilder-initedbuiltin)r@   parallel_read_safeparallel_write_safe)add_builderr'   add_config_valuer   connectr   r   r   s    r!   setupr      sE   OOL!!! *R*RTYZZZf555vv666-r6:::'@'@&III(@(@&III*L*LfUUU)+C+CVLLL)+F+FOOO*Iv>>>	6:::Y666r5111r5111)2u555*B666)+O+OQWXXX-r5999!U333e444)U;;;*E5999/E:::)8V<<<)+K+KVTTT+Y???+Y???,lFlJ779 9 9 KK!7#KFFFKK "8999 "#  r    ).r   rF   osr   typingr   r   r   r   r   r	   sphinxr
   sphinx.applicationr   sphinx.buildersr   sphinx.configr   r   sphinx.localer   sphinx.utilr   r   sphinx.util.fileutilr   sphinx.util.i18nr   sphinx.util.osutilr   	getLoggerr   rx   r   rJ   rL   rW   r   r   EpubBuilderr'   r   r   r   r   r   r    r!   <module>r      sR   
        : : : : : : : : : : : : : : : :       % % % % % % & & & & & & & & & & & & & &       0 0 0 0 0 0 0 0 0 0 0 0 0 0 ( ( ( ( ( ( , , , , , ,		8	$	$    z      
   
 !  
  1 	|+ |+ |+ |+ |+:) |+ |+ |+~$Q $Q4 $Q $Q $Q $QN+ + +4 + + + +"*v *$sCx. * * * * * *r    