
    Fe                        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rdd	lmZ dd
lmZ  ej$                  e      Z G d d      Z G d de      Z G d de      Z G d d      Zy)z"Theming support for LaTeX builder.    )annotationsN)path)TYPE_CHECKING)
ThemeError)__)logging)Sphinx)Configc                  0    e Zd ZdZddgZddgZddZddZy)	ThemezA set of LaTeX configurations.	papersize	pointsizec                X    || _         || _        || _        d| _        d| _        d| _        y )Nletterpaper10ptchapter)namedocclasswrapperclassr   r   toplevel_sectioning)selfr   s     ?/usr/lib/python3/dist-packages/sphinx/builders/latex/theming.py__init__zTheme.__init__   s.    	 &#,     c                   | j                   D ]:  }|j                  j                  |      s|j                  |   }t        | ||       < | j                  D ]-  }||j
                  v s|j
                  |   }t        | ||       / y)z0Override theme settings by user's configuration.N)LATEX_ELEMENTS_KEYSlatex_elementsgetsetattrUPDATABLE_KEYSlatex_theme_options)r   configkeyvalues       r   updatezTheme.update"   s    ++ 	*C$$((---c2c5)	*
 && 	*Cf0002237c5)	*r   N)r   strreturnNoner"   r
   r'   r(   )__name__
__module____qualname____doc__r   r    r   r%    r   r   r   r      s$    (&4!;/N-
*r   r   c                  $     e Zd ZdZd fdZ xZS )BuiltInThemezA built-in LaTeX theme.c                >   t         |   |       |dk(  r"|j                  j                  dd      | _        n!|j                  j                  dd      | _        |dv rd|z   | _        n|| _        |dk(  r#| j                  j                  d      sd| _        y d	| _        y )
Nhowtoarticlemanualreport)r4   r2   sphinxjsectionr   )superr   latex_docclassr   r   r   
startswithr   )r   r   r"   	__class__s      r   r   zBuiltInTheme.__init__2   s    7?"1155gyIDM"1155hIDM&& (4D $D 7?4==#;#;C#@'0D$'0D$r   )r   r&   r"   r
   r'   r(   )r*   r+   r,   r-   r   __classcell__r<   s   @r   r0   r0   /   s    !1 1r   r0   c                  4     e Zd ZdZddgZg dZd fdZ xZS )	UserThemezA user defined LaTeX theme.r   r   )r   r   r   c                   t         |   |       t        j                         | _        | j                  j                  t        j                  |      d       | j                  D ],  }	 | j                  j                  d|      }t        | ||       . | j                   D ],  }	 | j                  j                  d|      }t        | ||       . y # t        j                  $ r}t        t        d      |z        |d }~wt        j                  $ r,}t        t        d      ||j                  d   fz        |d }~ww xY w# t        j                  $ r Y w xY w)Nzutf-8)encodingthemez%r doesn't have "theme" settingz%r doesn't have "%s" settingr   )r9   r   configparserRawConfigParserr"   readr   joinREQUIRED_CONFIG_KEYSr   r   NoSectionErrorr   r   NoOptionErrorargsOPTIONAL_CONFIG_KEYS)r   r   filenamer#   r$   excr<   s         r   r   zUserTheme.__init__M   sI   "2248,w?,, 		CCC5c5)		C ,, 	C5c5)	  .. 4 $F!G!)"* +034-- C $C!D"*CHHQK!8"9 :?BCC  -- s6   *)C%)ED>$C<<D>'D99D>EE)r   r&   rM   r&   r'   r(   )r*   r+   r,   r-   rH   rL   r   r=   r>   s   @r   r@   r@   G   s!    %&7L r   r@   c                  0    e Zd ZdZddZddZd	dZd
dZy)ThemeFactoryz!A factory class for LaTeX Themes.c                   i | _         |j                  j                  D cg c]"  }t        j                  |j
                  |      $ c}| _        |j                  | _        | j                  |j                         y c c}w )N)themesr"   latex_theme_pathr   rG   srcdirtheme_pathsload_builtin_themes)r   appps      r   r   zThemeFactory.__init__h   sX    (*>Ajj>Y>YZDIIcjj!4Zjj  , [s   'A<c                h    t        d|      | j                  d<   t        d|      | j                  d<   y)zLoad built-in themes.r4   r2   N)r0   rR   )r   r"   s     r   rV   z ThemeFactory.load_builtin_themesn   s,     ,Xv >H+GV<Gr   c                    || j                   v r| j                   |   }n| j                  |      xs t        |      }|j                  | j                         |S )zGet a theme for given *name*.)rR   find_user_themer   r%   r"   )r   r   rC   s      r   r   zThemeFactory.gets   sJ    4;;KK%E((.=%+ET[[!r   c                    | j                   D ]=  }t        j                  ||d      }t        j                  |      s0	 t	        ||      c S  y# t
        $ r}t        j                  |       Y d}~dd}~ww xY w)z3Find a theme named as *name* from latex_theme_path.z
theme.confN)rU   r   rG   isfiler@   r   loggerwarning)r   r   
theme_pathconfig_pathrN   s        r   r[   zThemeFactory.find_user_theme}   sm    ** 	(J))JlCK{{;'($T;77		(  " (NN3''(s   A	A6A11A6N)rW   r	   r'   r(   r)   )r   r&   r'   r   )r   r&   r'   zTheme | None)r*   r+   r,   r-   r   rV   r   r[   r.   r   r   rP   rP   e   s    +-=

r   rP   )r-   
__future__r   rD   osr   typingr   sphinx.errorsr   sphinx.localer   sphinx.utilr   sphinx.applicationr	   sphinx.configr
   	getLoggerr*   r^   r   r0   r@   rP   r.   r   r   <module>rk      sd    ( "     $  )$			8	$* *615 10 <" "r   