U
    \Sh]                     @  s   d Z ddlm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 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"Theming support for LaTeX builder.    )annotationsN)path)Sphinx)Config)
ThemeError)__)loggingc                   @  s@   e Zd ZdZddgZddgZdddddZd	dd
ddZdS )ThemezA set of LaTeX configurations.	papersize	pointsizestrNonenamereturnc                 C  s(   || _ || _|| _d| _d| _d| _d S )NZletterpaperZ10ptchapter)r   docclasswrapperclassr
   r   toplevel_sectioning)selfr    r   P/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/builders/latex/theming.py__init__   s    zTheme.__init__r   configr   c                 C  s^   | j D ]&}|j|r|j| }t| || q| jD ]$}||jk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.updateN)__name__
__module____qualname____doc__r   r   r   r!   r   r   r   r   r	      s
   r	   c                      s*   e Zd ZdZdddd fddZ  ZS )BuiltInThemezA built-in LaTeX theme.r   r   r   )r   r   r   c                   sv   t  | |dkr&|jdd| _n|jdd| _|dk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   /   s    zBuiltInTheme.__init__)r"   r#   r$   r%   r   __classcell__r   r   r.   r   r&   ,   s   r&   c                      s<   e Zd ZdZddgZdddgZdddd	 fd
dZ  ZS )	UserThemezA user defined LaTeX theme.r   r   r
   r   r   r   r   )r   filenamer   c                   s  t  | t | _| jjt|dd | jD ]}z| j	d|}t
| || W q2 tjk
r } zttd| |W 5 d }~X Y q2 tjk
r } z ttd||jd f |W 5 d }~X Y q2X q2| jD ]<}z| j	d|}t
| || W q tjk
r   Y qX qd S )Nzutf-8)encodingthemez%r doesn't have "theme" settingz%r doesn't have "%s" settingr   )r,   r   configparserRawConfigParserr   readr   joinREQUIRED_CONFIG_KEYSr   r   NoSectionErrorr   r   NoOptionErrorargsOPTIONAL_CONFIG_KEYS)r   r   r2   r   r    excr.   r   r   r   J   s2    


zUserTheme.__init__)r"   r#   r$   r%   r9   r=   r   r0   r   r   r.   r   r1   D   s   
r1   c                   @  sP   e Zd ZdZdddddZdddd	d
ZdddddZdddddZdS )ThemeFactoryz!A factory class for LaTeX Themes.r   r   )appr   c                   s6   i | _  fdd jjD | _ j| _|  j d S )Nc                   s   g | ]}t  j|qS r   )r   r8   srcdir).0pr@   r   r   
<listcomp>g   s     z)ThemeFactory.__init__.<locals>.<listcomp>)themesr   Zlatex_theme_paththeme_pathsload_builtin_themes)r   r@   r   rD   r   r   e   s    zThemeFactory.__init__r   r   c                 C  s$   t d|| jd< t d|| jd< dS )zLoad built-in themes.r(   r'   N)r&   rF   )r   r   r   r   r   rH   k   s    z ThemeFactory.load_builtin_themesr   r	   r   c                 C  s8   || j kr| j | }n| |p&t|}|| j |S )zGet a theme for given *name*.)rF   find_user_themer	   r!   r   )r   r   r4   r   r   r   r   p   s
    
zThemeFactory.getzTheme | Nonec                 C  sf   | j D ]Z}t||d}t|rzt||W   S  tk
r^ } zt| W 5 d}~X Y qX qdS )z3Find a theme named as *name* from latex_theme_path.z
theme.confN)rG   r   r8   isfiler1   r   loggerwarning)r   r   Z
theme_pathZconfig_pathr>   r   r   r   rI   z   s    

zThemeFactory.find_user_themeN)r"   r#   r$   r%   r   rH   r   rI   r   r   r   r   r?   b   s
   
r?   )r%   
__future__r   r5   osr   Zsphinx.applicationr   Zsphinx.configr   Zsphinx.errorsr   Zsphinx.localer   Zsphinx.utilr   	getLoggerr"   rK   r	   r&   r1   r?   r   r   r   r   <module>   s   
