a
    0øa$  ã                   @   sª   d Z ddl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 e¡ZG d
d„ dƒZG dd„ deƒZG dd„ deƒZG dd„ dƒZdS )zß
    sphinx.builders.latex.theming
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Theming support for LaTeX builder.

    :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
é    N)Úpath)ÚDict)ÚSphinx)ÚConfig)Ú
ThemeError)Ú__)Úloggingc                   @   s@   e Zd ZdZddgZddgZeddœdd„Zeddœd	d
„Z	dS )ÚThemezA set of LaTeX configurations.Ú	papersizeÚ	pointsizeN©ÚnameÚreturnc                 C   s(   || _ || _|| _d| _d| _d| _d S )NZletterpaperZ10ptÚchapter)r   ÚdocclassÚwrapperclassr
   r   Útoplevel_sectioning)Úselfr   © r   ú<lib/python3.9/site-packages/sphinx/builders/latex/theming.pyÚ__init__   s    zTheme.__init__©Úconfigr   c                 C   s^   | j D ]&}|j |¡r|j| }t| ||ƒ q| jD ]$}||jv r4|j| }t| ||ƒ q4dS )z0Override theme settings by user's configuration.N)ÚLATEX_ELEMENTS_KEYSZlatex_elementsÚgetÚsetattrÚUPDATABLE_KEYSZlatex_theme_options)r   r   ÚkeyÚvaluer   r   r   Úupdate&   s    




zTheme.update)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ústrr   r   r   r   r   r   r   r	      s
   r	   c                       s*   e Zd ZdZeeddœ‡ fdd„Z‡  ZS )ÚBuiltInThemezA built-in LaTeX theme.N)r   r   r   c                    sv   t ƒ  |¡ |dkr&|j dd¡| _n|j dd¡| _|dv rJd| | _n|| _|dkrl| j d¡sld| _nd	| _d S )
NÚhowtoZarticleÚmanualÚreport)r'   r&   ZsphinxÚjÚsectionr   )Úsuperr   Zlatex_docclassr   r   r   Ú
startswithr   )r   r   r   ©Ú	__class__r   r   r   6   s    zBuiltInTheme.__init__)r    r!   r"   r#   r$   r   r   Ú__classcell__r   r   r-   r   r%   3   s   r%   c                       s:   e Zd ZdZddgZg d¢Zeeddœ‡ fdd„Z‡  ZS )	Ú	UserThemezA user defined LaTeX theme.r   r   )r
   r   r   N)r   Úfilenamer   c                    s  t ƒ  |¡ t ¡ | _| j t |¡¡ | jD ]œ}z| j 	d|¡}t
| ||ƒ W q. tjyˆ } zttdƒ| ƒ|‚W Y d }~q.d }~0  tjyÈ } z(ttdƒ||jd f ƒ|‚W Y d }~q.d }~0 0 q.| jD ]:}z| j 	d|¡}t
| ||ƒ W qÒ tjy
   Y qÒ0 qÒd S )NÚthemez%r doesn't have "theme" settingz%r doesn't have "%s" settingr   )r+   r   ÚconfigparserZRawConfigParserr   Úreadr   ÚjoinÚREQUIRED_CONFIG_KEYSr   r   ZNoSectionErrorr   r   ZNoOptionErrorÚargsÚOPTIONAL_CONFIG_KEYS)r   r   r1   r   r   Úexcr-   r   r   r   Q   s2    

ÿÿÿÿ
zUserTheme.__init__)	r    r!   r"   r#   r6   r8   r$   r   r/   r   r   r-   r   r0   K   s   r0   c                   @   sP   e Zd ZdZeddœdd„Zeddœdd„Zee	d	œd
d„Z
ee	d	œdd„ZdS )ÚThemeFactoryz!A factory class for LaTeX Themes.N)Úappr   c                    s6   i | _ ‡ fdd„ˆ jjD ƒ| _ˆ j| _|  ˆ j¡ d S )Nc                    s   g | ]}t  ˆ j|¡‘qS r   )r   r5   Zsrcdir)Ú.0Úp©r;   r   r   Ú
<listcomp>n   ó    z)ThemeFactory.__init__.<locals>.<listcomp>)Úthemesr   Zlatex_theme_pathÚtheme_pathsÚload_builtin_themes)r   r;   r   r>   r   r   l   s    zThemeFactory.__init__r   c                 C   s$   t d|ƒ| jd< t d|ƒ| jd< dS )zLoad built-in themes.r'   r&   N)r%   rA   )r   r   r   r   r   rC   r   s    z ThemeFactory.load_builtin_themesr   c                 C   s<   || j v r| j | }n|  |¡}|s,t|ƒ}| | j¡ |S )zGet a theme for given *name*.)rA   Úfind_user_themer	   r   r   )r   r   r2   r   r   r   r   w   s    

zThemeFactory.getc                 C   sh   | j D ]\}t ||d¡}t |¡rzt||ƒW   S  ty` } zt |¡ W Y d}~qd}~0 0 qdS )z3Find a theme named as *name* from latex_theme_path.z
theme.confN)rB   r   r5   Úisfiler0   r   ÚloggerZwarning)r   r   Z
theme_pathZconfig_pathr9   r   r   r   rD   ƒ   s    

"zThemeFactory.find_user_theme)r    r!   r"   r#   r   r   r   rC   r$   r	   r   rD   r   r   r   r   r:   i   s
   r:   )r#   r3   Úosr   Útypingr   Zsphinx.applicationr   Zsphinx.configr   Zsphinx.errorsr   Zsphinx.localer   Zsphinx.utilr   Z	getLoggerr    rF   r	   r%   r0   r:   r   r   r   r   Ú<module>   s   

