
    $gM                     T   d dl Z d dlZ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 ddlmZ 	 d dlZn# e$ r dZY nw xY w G d d	ee                   Z G d
 d          Z G d d          Z G d d          Z G d de          Z ej        d          Z eg d          ZdS )    N)escape)
HTMLParser)utils)
BasePlugin   )SearchConfigc                   B     e Zd Z fdZd Zd Zd Zd Zd Zd Z	 xZ
S )SearchPluginc                 d     t                      j        |i | d| _        d| _        d | _        d S )NF)super__init__is_dirtyis_dirtyreloadsearch_index_prevselfargskwargs	__class__s      ^/var/www/html/netbox-4.1.3/venv/lib/python3.11/site-packages/material/plugins/search/plugin.pyr   zSearchPlugin.__init__.   s@    $)&))) # "&    c                    || _         d S N)r   )r   commanddirtys      r   
on_startupzSearchPlugin.on_startup9   s    r   c                 |   | j         j        sd S | j         j        s!|                     |d          g| j         _        | j         j        s |                     |d          | j         _        | j         j        St          t          t          t          j
        d|                     |d                                        | j         _        t          d
i | j         | _        | j         j        rt          j                            | j         j                  }t          j                            |          r2t%          j        |           t(                              d|            n(t(                              d| j         j         d           | j         j        rt          j                            | j         j                  }t          j                            |          r3t%          j        |           t(                              d|            d S t(                              d	| j         j         d           d S d S )Nzsearch.config.langzsearch.config.separatorz\s*,\s*zsearch.config.pipelinezLoading jieba dictionary: z.Configuration error for 'search.jieba_dict': 'z' does not exist.zLoading jieba user dictionary: z3Configuration error for 'search.jieba_dict_user': ' )configenabledlang
_translate	separatorpipelinelistfilterlenresplitSearchIndexsearch_index
jieba_dictospathnormpathisfilejiebaset_dictionarylogdebugwarningjieba_dict_userload_userdict)r   r   r.   s      r   	on_configzSearchPlugin.on_config=   s=   {" 	F { 	 $,! !  DK
 {$ 	$(OO1% %DK!
 ;'#'sBHDOOF4LMM5 5 ) ) $ $DK 
 (66$+66 ;! 		7##DK$:;;Dw~~d## $T***		=t==>>>>B.B B B   ;& 		7##DK$?@@Dw~~d## #D)))		BDBBCCCCCG3G G G    		 		r   c                    | j         j        sd S | j                            |           t	          j        dd|j                  |_        d S )Nz\s?data-search-\w+=\"[^\"]+\" )r   r    r+   add_entry_from_contextr(   subcontent)r   contextpager   navs        r   on_page_contextzSearchPlugin.on_page_contexto   sO    {" 	F 	00666v,L
 
r   c                d   | j         j        sd S t          j                            |j        d          }t          j                            |d          }| j                            | j                  }t          j
        |                    d          |           | j        r| j        | _        d S d S )Nsearchzsearch_index.jsonutf-8)r   r    r-   r.   joinsite_dirr+   generate_search_indexr   r   
write_fileencoder   )r   r   baser.   datas        r   on_post_buildzSearchPlugin.on_post_build|   s    {" 	F w||FOX66w||D"566  66t7MNNW--t444 = 	7%)%6D"""	7 	7r   c                    | j         | _        d S r   )r   r   )r   serverr   builders       r   on_servezSearchPlugin.on_serve   s    "mr   c                     |j                                         }d}|                    |d d|i          }|j                            |          S )Nzpartials/language.htmlr   )themeget_envget_templatemodulet)r   r   valueenvlanguagetemplates         r   r"   zSearchPlugin._translate   sN    l""$$ ,##Hdh4HII  '''r   )__name__
__module____qualname__r   r   r8   rA   rL   rP   r"   __classcell__r   s   @r   r
   r
   +   s        & & & & &  / / /d

 

 

7 7 7", , ,( ( ( ( ( ( (r   r
   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )r*   c                 "    || _         g | _        d S r   )r   entries)r   r   s     r   r   zSearchIndex.__init__   s    r   c                 d   |j                             d          pi }|                    d          rd S t                      }|                    |j                   |                                 |j        D ]8}|                                s"|                     ||j	        |j
        |           9d S )NrC   exclude)metagetParserfeedr=   closerK   is_excludedcreate_entry_for_sectiontocurl)r   r?   rC   parsersections        r   r;   z"SearchIndex.add_entry_from_context   s    x((.B::i   	F DL!!! { 	Q 	QG&&(( Q--gtx4PPP	Q 	Qr   c                    |                      ||j                  }|r||j        z   }n|j        r|dz   |j        z   }|j        s3t	          |j                            d|j                            g|_        d                    |j                                                  }d                    |j	                                                  }t          r*|                     |          }|                     |          }|||d}|j                            d          }	t          |	t                    rOg |d<   |	D ]G}
|
rCt          |
t          t          t          t           f          r|d                             |
           H|j                            d          pi }d|v r|d         |d<   | j                            |           d S )N#titler:   )locationrr   texttagsrC   boost)_find_toc_by_ididrm   rr   strre   rf   rE   striprt   r1   _segment_chinese
isinstancer%   intfloatboolappendrb   )r   ro   rl   rm   r?   itemrr   rt   entryru   namerC   s               r   rk   z$SearchIndex.create_entry_for_section   s   ##C44 	).CCZ 	))gj(C } 	F w
!C!CDDEGM &&,,..%%++--  	0))%00E))$//D 
 
 y}}V$$dD!! 	/E&M / / /Jtc3t-DEE /&M((... x((.Bf#G_E'N 	E"""""r   c                      fddD             }|r< j         r5 j         d         d         fd|j         D             }| j         z    _         |r j         s|j          _         | j         d}t          j        |dt                    S )	Nc                 ,    i | ]}|j         |         S r   )r   ).0keyr   s     r   
<dictcomp>z5SearchIndex.generate_search_index.<locals>.<dictcomp>   s2     
 
 
 S!
 
 
r   )r!   r#   r$   r   rs   c                 J    g | ]}|d                                         | S )rs   )
startswith)r   r   r.   s     r   
<listcomp>z5SearchIndex.generate_search_index.<locals>.<listcomp>   sB        ,77==  r   )r   docs),:)
separatorsdefault)rb   jsondumpsry   )r   prevr   rb   rK   r.   s   `    @r   rG   z!SearchIndex.generate_search_index   s    
 
 
 
<
 
 
  	2DL 	2<?:.D   #'<  G #T\1DL  	( 	(<DL "4<99z#
 
 
 	
r   c                 p    |D ]2}|j         |k    r|c S |                     |j        |          }||c S 3d S r   )rx   rw   children)r   rl   rx   toc_items       r   rw   zSearchIndex._find_toc_by_id  s\     	  	 H{b   ++H,=rBBH# $ tr   c                     t          j        dt           j                  }d }|                    ||                              d          S )Nz(\p{IsHan}+)c           
          |                      d          }d                    dd                    t          j        |                    d                              dg          S )Nr   r:      ​rD   )grouprE   r1   cutrI   )matchrW   s     r   replacez-SearchIndex._segment_chinese.<locals>.replace#  sY    KKNNE 77eiW(=(=>>??   r   r   )r(   compileUNICODEr<   rz   )r   rK   exprr   s       r   r{   zSearchIndex._segment_chinese  sH    z/2:66		 		 		 xx&&,,X666r   N)	r[   r\   r]   r   r;   rk   rG   rw   r{   r   r   r   r*   r*      ss          
Q Q Q ,# ,# ,#^'
 '
 '
X  7 7 7 7 7r   r*   c                   2    e Zd ZdZddZd Zd Zd Zd ZdS )	Elementz
    An element with attributes, essentially a small wrapper object for the
    parser to access attributes in other callbacks than handle_starttag.
    Nc                 &    || _         |pi | _        d S r   )tagattrs)r   r   r   s      r   r   zElement.__init__;  s    [b


r   c                     | j         S r   )r   r   s    r   __repr__zElement.__repr__@  s	    xr   c                 J    |t           u r| j        |j        k    S | j        |k    S r   )r   r   )r   others     r   __eq__zElement.__eq__D  s)    G8uy((8u$$r   c                 *    t          | j                  S r   )hashr   r   s    r   __hash__zElement.__hash__K  s    DH~~r   c                     d| j         v S )Ndata-search-exclude)r   r   s    r   rj   zElement.is_excludedO  s    $
22r   r   )	r[   r\   r]   __doc__r   r   r   r   rj   r   r   r   r   r   4  sn         ! ! ! !
  % % %  3 3 3 3 3r   r   c                   &    e Zd ZdZddZd Zd ZdS )Sectionz
    A block of text with markup, preceded by a title (with markup), i.e., a
    headline with a certain level (h1-h6). Internally used by the parser.
    r   c                 L    || _         || _        g | _        g | _        d | _        d S r   )eldepthrt   rr   rx   )r   r   r   s      r   r   zSection.__init__\  s+    
 	
r   c                 t    | j         r&d                    | j        j        | j         g          S | j        j        S )Nrq   )rx   rE   r   r   r   s    r   r   zSection.__repr__f  s3    7 	88TW[$'23337;r   c                 4    | j                                         S r   )r   rj   r   s    r   rj   zSection.is_excludedm  s    w""$$$r   N)r   )r[   r\   r]   r   r   r   rj   r   r   r   r   r   U  sP              % % % % %r   r   c                   4     e Zd ZdZ fdZd Zd Zd Z xZS )rg   a  
    This parser divides the given string of HTML into a list of sections, each
    of which are preceded by a h1-h6 level heading. A white- and blacklist of
    tags dictates which tags should be preserved as part of the index, and
    which should be ignored in their entirety.
    c                      t                      j        |i | t          g d          | _        t          g d          | _        g | _        d | _        g | _        d S )N)objectscriptstyle)pcodepreliolulr<   sup)r   r   setskipkeepr>   ro   rK   r   s      r   r   zParser.__init__|  s    $)&)))  
 
 
  	  
 
 
  	  			r   c                 h   t          |          }t          ||          }|t          vr| j                            |           nd S |d t          dd          D             v rt          | j                  }d|v r|dk    rH| j        sAt          t          d          |          | _	        | j                            | j	                   t          ||          | _	        | j        r|d         | j	        _
        | j                            | j	                   | j	        s@t          t          d                    | _	        | j                            | j	                   |                                D ]Q\  }}|dk    r| j                            |            d S |dk    r#|d	k    r| j                            |            d S R| j                            | j                  sO|| j        v rH| j	        j        }| j	        j        | j        v r| j	        j        }|                    d
| d           d S d S d S )Nc                     g | ]}d | S )hr   )r   xs     r   r   z*Parser.handle_starttag.<locals>.<listcomp>  s    111GGG111r   r      rx   h1hxr   class	linenodiv<>)dictr   voidr>   r   ranger'   rK   r   ro   rx   itemsr   addintersectionr   rt   r   rr   )r   r   r   r   r   r   rW   rK   s           r   handle_starttagzParser.handle_starttag  s6   U S%  d{{L####F 11U1a[[11122%%Eu}} $;;ty;#*74==%#@#@DLI$$T\222  'r5119 2&+DkDLO 	  ... | 	+"74==11DLIT\***  ++-- 
	 
	JC +++	b!!! g~~%;"6"6	b!!! y%%dl33 	$ty8H8H <$D|$,..|) KK
C


#####	$ 	$8H8Hr   c                    | j         r| j         d         |k    rd S | j        j        t          | j                   k    rVt	          | j                  D ]A}|j        t          | j                   k    r"t          d          | j        _        || _         nB| j                                         }|| j        v r%|j	        dvr| j        
                    |           d S | j                            | j                   s|| j        v r | j        j        }| j        j        | j         v r| j        j        }|                    d| d          }t#          |dz   t          |                    D ]-}||                                         st          |          } n.t          |          |k    r>t          |          |k    r)|                                 t          |          |k    'd S d S |                    d| d           d S d S d S )Ninf)r   r   r   r   r   r   z</)r>   ro   r   r'   reversedrK   r~   popr   r   remover   r   rt   r   rr   indexr   isspacer   )r   r   ro   r   rK   r   is          r   handle_endtagzParser.handle_endtag  s   | 	t|B/366F <DL 1 111#DI..  =C$5$555 */uDL&#*DLE 6 \??v:::	  $$$F y%%dl33 	)ty8H8H <$D|$,..|) JJz3zzz**E519c$ii00  Aw(( IIEE
 4yy5  $ii%''HHJJJ $ii%''''''
 KKKK(((((+	) 	)8H8Hr   c                    | j                             | j                  rd S d| j        vr-|                                s|                    dd          }nd}| j        s@t          t          d                    | _        | j        	                    | j                   | j        j
        | j        v rkd}| j        D ]-}|j        dk    r |j                            d          dk    rd	}.|s0| j        j        	                    t          |d
                     d S d S |                                r}| j        j        r$| j        j        d                                         s!| j        j        	                    |           d S d| j        v r!| j        j        	                    |           d S d S | j        j        	                    t          |d
                     d S )Nr   
 r   Far   
headerlinkT)quoter   )r   r   r>   r   r   ro   r   r   rK   r   r   r   r   rf   rr   r   rt   )r   rK   	permalinkr   s       r   handle_datazParser.handle_data  s   9!!$,// 	F $$<<>> ||D#.. | 	+"74==11DLIT\*** <?dl**Il % %6S==RX\\'%:%:l%J%J $I  "))4///      \\^^ 
	<$ /DL,=b,A,I,I,K,K /!((.....$,&&!((..... '&
 L$$tU+++    r   )	r[   r\   r]   r   r   r   r   r   r^   r_   s   @r   rg   rg   s  sq             47$ 7$ 7$t/) /) /)d( ( ( ( ( ( (r   rg   zmkdocs.material.search)arearJ   brcolembedhrimginputlinkre   paramsourcetrackwbr)r   loggingr-   regexr(   htmlr   html.parserr   mkdocsr   mkdocs.pluginsr   r   r   r1   ImportErrorr
   r*   r   r   rg   	getLoggerr3   r   r   r   r   r   <module>r      s  *   				           " " " " " "       % % % % % %            LLLL   EEEn( n( n( n( n(:l+ n( n( n(fQ7 Q7 Q7 Q7 Q7 Q7 Q7 Q7l3 3 3 3 3 3 3 3B% % % % % % % %<w w w w wZ w w w| g011 s     s   5 ??