
    zi,                       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 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 e	r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j(        de& de' d          Z) G d d ej*                  Z+d+d%Z,d,d(Z-d-d*Z.dS ).z5Build epub3 files.

Originally derived from epub.py.
    )annotationsN)path)TYPE_CHECKINGAny
NamedTuple)package_dir)
_epub_base)ENUMConfig)__)logging)copy_asset_file)make_filename)Sphinxc                  .    e Zd ZU ded<   ded<   ded<   dS )NavPointstrtextrefurilist[NavPoint]childrenN)__name__
__module____qualname____annotations__     `/var/www/tmov.alphamb/tmov_inventario/venv/lib/python3.11/site-packages/sphinx/builders/epub3.pyr   r      s0         IIIKKK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]|[À-Ö]|[Ø-ö]|[ø-˿]|[Ͱ-ͽ]|[Ϳ-῿]|[‌-‍]|[⁰-↏]|[Ⰰ-⿯]|[、-퟿]|[豈-﷏]|[ﷰ-�]|[𐀀-󯿿]u    \-|\.|[0-9]|·|[̀-ͯ]|[‿-⁀](z)(z)*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 fdZd fdZddZd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returnNonec                   |                                   |                                  |                                  |                                  |                                  |                                  |                                  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_finishX   s}    !!###r   dict[str, Any]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                              |          |d<   t                              |          |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_EPOCHN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?   )r4   writing_modesource_date_epoch
time_tuplemetadata	__class__s        r   rH   zEpub3Builder.content_metadatab   s    {4!#+>!?!??LS):%;%;<<JJJ77++--"&+dk.J"K"K"&+dk.J"K"K1L1P1PQ]1^1^-.(9(=(=l(K(K$%;t}5I:'V'VWW"k$+*=>>#';#; r   docnamesset[str]c                    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)	rG   prepare_writingr@   rA   THEME_WRITING_MODESrN   globalcontextrZ   r[   )r4   rV   rQ   rU   s      r   r]   zEpub3Builder.prepare_writingw   su    ))){43F3J3J<3X3X/0)-:&151F-.37/000r   navnodeslist[dict[str, Any]]r   c                   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                             |           |                     |           d	}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.)
appendr   splitignored_filesr@   epub_tocdepthpopr   lenRuntimeError)r4   r`   navstackre   nodefilenavpointunreachables           r   build_navlistzEpub3Builder.build_navlist   s    $&R,,--- 	0 	0D< >'',,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))))K";///{##r   navlistc                    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_localeru   )rI   rJ   r@   epub_languageguide_titles)r4   ru   s     r   navigation_doc_metadataz$Epub3Builder.navigation_doc_metadata   s=    
 K 9::+d&7&>??
 
 	
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   r@   epub_tocscopeenvget_and_resolve_doctreeroot_docget_refnodestoc_add_filesrefnodesrt   r   r   jointemplate_diroutdirr|   filesrh   )r4   doctreer   ru   s       r   r0   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)   r*   )r)   r6   )rV   rW   r)   r*   )r`   ra   r)   r   )ru   r   r)   r6   )r   r   r   __doc__namer   epilogsupported_remote_imagesr   r   r   r   DOCTYPEdoctypeHTML_TAGrZ   r[   r5   rH   r]   rt   r|   r0   __classcell__)rU   s   @r   r%   r%   F   s          DR122F#49[+w??LGH        *8 8 8 8 8 8)$ )$ )$ )$V
 
 
 
+ + + + + + + +r   r%   appr   r)   r*   c                Z   | 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   r@   rz   r   warningr   _XML_NAME_PATTERNmatchepub_uid
epub_titleepub_authorrL   rK   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   r@   r   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   rh   	Exceptionr   r   r   )r   r@   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r6   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   projectr3   s    r   <lambda>zsetup.<locals>.<lambda>  s    }T\7R7R r   Fr?   g      @r&   
epub_themeepub_theme_optionsr   c                    | j         S r   )r   r3   s    r   r   zsetup.<locals>.<lambda>  s    DL r   r   c                    | j         S r   authorr3   s    r   r   zsetup.<locals>.<lambda>  s    T[ r   rz   c                    | j         pdS )Nen)languager3   s    r   r   zsetup.<locals>.<lambda>  s    t}7L r   r   c                    | j         S r   r   r3   s    r   r   zsetup.<locals>.<lambda>  s     r   r   c                    | j         S r   )	copyrightr3   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)r@   s    r   r   zsetup.<locals>.<lambda>  s	    &:O r   epub_exclude_filesrk      epub_tocdupTr   r~   epub_fix_imagesepub_max_image_widthr   epub_show_urlsinlineepub_use_indexc                    | j         S r   )html_use_indexr3   s    r   r   zsetup.<locals>.<lambda>  s	    8K r   rK   rL   rA   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   r   r)   r*   )r   r   r@   r   r)   r*   )r   r   r)   r6   )/r   
__future__r   rI   rB   rerD   r   typingr   r   r   sphinxr   sphinx.buildersr	   sphinx.configr
   r   sphinx.localer   sphinx.utilr   sphinx.util.fileutilr   sphinx.util.osutilr   sphinx.applicationr   	getLoggerr   r   r   rM   rO   r^   r   r   _xml_name_start_char_xml_name_charcompiler   EpubBuilderr%   r   r   r   r   r   r   <module>r      se   
 # " " " " "  				 				        1 1 1 1 1 1 1 1 1 1       & & & & & & & & & & & & & &             0 0 0 0 0 0 , , , , , , *))))))		8	$	$    z      
   
 !  
  1 	/  SS  BJM#7MM>MMMNN B+ B+ B+ B+ B+:) B+ B+ B+J$Q $Q $Q $QN+ + + +"* * * * * *r   