o
    Ni                     @  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 er8d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)TYPE_CHECKING)
ThemeError)__)logging)Sphinx)Configc                   @  s4   e Zd ZdZddgZddgZddd	ZdddZdS )ThemezA set of LaTeX configurations.	papersize	pointsizenamestrreturnNonec                 C  s(   || _ || _|| _d| _d| _d| _d S )Nletterpaper10ptchapter)r   docclasswrapperclassr   r   toplevel_sectioning)selfr    r   Q/home/ubuntu/.local/lib/python3.10/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 r,|j| }t| || qdS )z0Override theme settings by user's configuration.N)LATEX_ELEMENTS_KEYSlatex_elementsgetsetattrUPDATABLE_KEYSlatex_theme_options)r   r   keyvaluer   r   r   update"   s   




zTheme.updateN)r   r   r   r   r   r	   r   r   )__name__
__module____qualname____doc__r   r    r   r$   r   r   r   r   r
      s    
r
   c                      s"   e Zd ZdZd
 fdd	Z  ZS )BuiltInThemezA built-in LaTeX theme.r   r   r   r	   r   r   c                   sx   t  | |dkr|jdd| _n|jdd| _|dv r%d| | _n|| _|dkr7| jds7d| _d S d	| _d S )
Nhowtoarticlemanualreport)r-   r+   sphinxjsectionr   )superr   latex_docclassr   r   r   
startswithr   )r   r   r   	__class__r   r   r   2   s   

zBuiltInTheme.__init__)r   r   r   r	   r   r   )r&   r'   r(   r)   r   __classcell__r   r   r5   r   r*   /   s    r*   c                      s2   e Zd ZdZddgZg dZd fd
dZ  ZS )	UserThemezA user defined LaTeX theme.r   r   )r   r   r   r   r   filenamer   r   c                   s   t  | t | _| jjt|dd | jD ]E}z| j	d|}t
| || W q tjyB } ztd| }t||d }~w tjy^ } ztd||jd f }t||d }~ww | jD ]}z| j	d|}t
| || W qb tjy}   Y qbw d S )Nzutf-8)encodingthemez%r doesn't have "theme" settingz%r doesn't have "%s" settingr   )r2   r   configparserRawConfigParserr   readr   joinREQUIRED_CONFIG_KEYSr   r   NoSectionErrorr   r   NoOptionErrorargsOPTIONAL_CONFIG_KEYS)r   r   r9   r"   r#   excmsgr5   r   r   r   M   s0   




zUserTheme.__init__)r   r   r9   r   r   r   )r&   r'   r(   r)   r@   rD   r   r7   r   r   r5   r   r8   G   s
    r8   c                   @  s8   e Zd ZdZdddZdd
dZdddZdddZdS )ThemeFactoryz!A factory class for LaTeX Themes.appr   r   r   c                   s6   i | _  fdd jjD | _ j| _|  j d S )Nc                   s   g | ]	}t  j|qS r   )r   r?   srcdir).0prH   r   r   
<listcomp>j   s    z)ThemeFactory.__init__.<locals>.<listcomp>)themesr   latex_theme_paththeme_pathsload_builtin_themes)r   rH   r   rL   r   r   h   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*   rN   )r   r   r   r   r   rQ   p   s   z ThemeFactory.load_builtin_themesr   r   r
   c                 C  s8   || j v r| j | }n	| |pt|}|| j |S )zGet a theme for given *name*.)rN   find_user_themer
   r$   r   )r   r   r;   r   r   r   r   u   s
   
zThemeFactory.getTheme | Nonec                 C  sh   | j D ].}t||d}t|r1zt||W   S  ty0 } zt| W Y d}~qd}~ww qdS )z3Find a theme named as *name* from latex_theme_path.z
theme.confN)rP   r   r?   isfiler8   r   loggerwarning)r   r   
theme_pathconfig_pathrE   r   r   r   rR      s   

zThemeFactory.find_user_themeN)rH   r   r   r   r%   )r   r   r   r
   )r   r   r   rS   )r&   r'   r(   r)   r   rQ   r   rR   r   r   r   r   rG   e   s    



rG   )r)   
__future__r   r<   osr   typingr   sphinx.errorsr   sphinx.localer   sphinx.utilr   sphinx.applicationr   sphinx.configr	   	getLoggerr&   rU   r
   r*   r8   rG   r   r   r   r   <module>   s     
