o
    Æiéa  ã                   @   s„   d dl 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	 e 
e¡Ze j e j e¡¡ZG dd„ dejƒZG dd	„ d	eƒZdS )
é    N)Úutils)Ú
BasePlugin)Úconfig_options)ÚSearchIndexc                   @   s    e Zd ZdZdd„ Zdd„ ZdS )Ú
LangOptionz> Validate Language(s) provided in config are known languages. c                 C   s"   t j tdd |¡¡}t j |¡S )Núlunr-languageú
lunr.{}.js)ÚosÚpathÚjoinÚ	base_pathÚformatÚisfile)ÚselfÚlangr
   © r   ú@/usr/lib/python3/dist-packages/mkdocs/contrib/search/__init__.pyÚlang_file_exists   s   zLangOption.lang_file_existsc                 C   sZ   t |tƒr	|g}nt |ttfƒst d¡‚|D ]}|dkr*|  |¡s*t d |¡¡‚q|S )Nz"Expected a list of language codes.Úenz&"{}" is not a supported language code.)Ú
isinstanceÚstrÚlistÚtupler   ÚValidationErrorr   r   )r   Úvaluer   r   r   r   Úrun_validation   s   

ÿ€zLangOption.run_validationN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r      s    r   c                   @   sr   e Zd ZdZdedgd�fdejedd�fdejedd�fd	ej	d
dd�ffZ
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚSearchPluginz! Add a search feature to MkDocs. r   r   )ÚdefaultÚ	separatorz[\s\-]+Úmin_search_lengthé   Úprebuild_index)FTÚnodeFc                 K   s|   d|d v r|d d r|d j  d¡ d|d v r |d d s<tj td¡}|d j |¡ d|d vr<|d  d¡ |S )z+Add plugin templates and scripts to config.Úinclude_search_pageÚthemezsearch.htmlÚsearch_index_onlyÚ	templateszsearch/main.jsÚextra_javascript)Ústatic_templatesÚaddr	   r
   r   r   ÚdirsÚappend)r   ÚconfigÚkwargsr
   r   r   r   Ú	on_config+   s   zSearchPlugin.on_configc                 K   s   t di | j¤Ž| _dS )z+Create search index instance for later use.Nr   )r   r0   Úsearch_index)r   r0   r1   r   r   r   Úon_pre_build6   s   zSearchPlugin.on_pre_buildc                 K   s   | j  |d ¡ dS )zAdd page to search index.ÚpageN)r3   Úadd_entry_from_context)r   Úcontextr1   r   r   r   Úon_page_context:   s   zSearchPlugin.on_page_contextc                 K   s  t j |d d¡}| j ¡ }t j |d¡}t | d¡|¡ d|d v r*|d d s}g }t| j	d ƒdks<d	| j	d vrA| 
d
¡ t| j	d ƒdkrO| 
d¡ | j	d D ]}|d	krb| 
d |¡¡ qT|D ]}t j td|¡}	t j ||¡}
t |	|
¡ qedS dS )zBuild search index.Úsite_dirÚsearchzsearch_index.jsonzutf-8r)   r(   r   é   r   zlunr.stemmer.support.jszlunr.multi.jsr   r   N)r	   r
   r   r3   Úgenerate_search_indexr   Ú
write_fileÚencodeÚlenr0   r/   r   r   Ú	copy_file)r   r0   r1   Úoutput_base_pathr3   Újson_output_pathÚfilesr   ÚfilenameÚ	from_pathÚto_pathr   r   r   Úon_post_build>   s(   
 

€ñzSearchPlugin.on_post_buildN)r   r   r   r   r   r   ÚTyper   ÚintÚChoiceÚconfig_schemer2   r4   r8   rG   r   r   r   r   r    !   s    ür    )r	   ÚloggingÚmkdocsr   Úmkdocs.pluginsr   Úmkdocs.configr   Ú"mkdocs.contrib.search.search_indexr   Ú	getLoggerr   Úlogr
   ÚdirnameÚabspathÚ__file__r   ÚOptionallyRequiredr   r    r   r   r   r   Ú<module>   s    
