
    3yi P                     F   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mZ dd	lmZmZ 	 d dlZ G d
 dee         Z G d d      Z G d d      Z G d d      Z G d de	      Z ej4                  d      Z eg d      Zy# e$ r dZY ]w xY w)    N)bre)escape)
HTMLParser)utils)	SubConfig)
BasePlugin   )SearchConfigSearchFieldConfigc                   B     e Zd Z fdZd Zd Zd Zd Zd Zd Z	 xZ
S )SearchPluginc                 N    t        |   |i | d| _        d| _        d | _        y )NF)super__init__is_dirtyis_dirtyreloadsearch_index_prevselfargskwargs	__class__s      `/var/www/html/content_weaver/venv/lib/python3.12/site-packages/material/plugins/search/plugin.pyr   zSearchPlugin.__init__0   s0    $)&) # "&    c                    || _         y N)r   )r   commanddirtys      r   
on_startupzSearchPlugin.on_startup;   s	    r   c                    | j                   j                  sy | j                   j                  s"| j                  |d      g| j                   _        | j                   j                  s!| j                  |d      | j                   _        | j                   j
                  Lt        t        t        t        j                  d| j                  |d                        | j                   _        t        t              }| j                   j                  j                         D ]  }|j                  |        d| j                   j                  vrddi| j                   j                  d<   d| j                   j                  vrdd	i| j                   j                  d<   d
| j                   j                  vrddi| j                   j                  d
<   t!        di | j                   | _        | j                   j$                  rt&        j(                  j+                  | j                   j$                        }t&        j(                  j-                  |      r.t/        j0                  |       t2        j5                  d|        n-t2        j7                  d| j                   j$                   d       | j                   j8                  rt&        j(                  j+                  | j                   j8                        }t&        j(                  j-                  |      r.t/        j:                  |       t2        j5                  d|        y t2        j7                  d| j                   j8                   d       y y )Nzsearch.config.langzsearch.config.separatorz\s*,\s*zsearch.config.pipelinetitleboostg     @@textg      ?tagsg    .Az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splitr   r   fieldsvaluesrun_validationSearchIndexsearch_index
jieba_dictospathnormpathisfilejiebaset_dictionarylogdebugwarningjieba_dict_userload_userdict)r   r&   	validatorr8   s       r   	on_configzSearchPlugin.on_config?   s   {{"" {{ $,!  DKK
 {{$$$(OO1%DKK!
 ;;'#'sBHHDOOF4LM5 ) $DKK 
 /0	kk((//1 	-F$$V,	- $++,,,,3S*:DKKw'++++2C)9DKKv&++++2C)9DKKv& (6$++6 ;;!!77##DKK$:$:;Dww~~d#$$T*		6tf=>..//@B ;;&&77##DKK$?$?@Dww~~d###D)		;D6BC3344EG 'r   c                    | j                   j                  sy | j                  j                  |       t	        j
                  dd|j                        |_        y )Nz\s?data-search-\w+=\"[^\"]+\" )r&   r'   r5   add_entry_from_contextr/   subcontent)r   contextpager&   navs        r   on_page_contextzSearchPlugin.on_page_context~   sE    {{"" 	006vv,LL
r   c                   | j                   j                  sy t        j                  j	                  |j
                  d      }t        j                  j	                  |d      }| j                  j                  | j                        }t        j                  |j                  d      |       | j                  r| j                  | _        y y )Nsearchzsearch_index.jsonutf-8)r&   r'   r7   r8   joinsite_dirr5   generate_search_indexr   r   
write_fileencoder   )r   r&   baser8   datas        r   on_post_buildzSearchPlugin.on_post_build   s    {{"" ww||FOOX6ww||D"56   66t7M7MNW-t4 ==%)%6%6D" r   c                &    | j                   | _        y r   )r   r   )r   serverr&   builders       r   on_servezSearchPlugin.on_serve   s    "mmr   c                     |j                   j                         }d}|j                  |d d|i      }|j                  j	                  |      S )Nzpartials/language.htmlr&   )themeget_envget_templatemodulet)r   r&   valueenvlanguagetemplates         r   r)   zSearchPlugin._translate   sI    ll""$ ,##Hdh4HI  ''r   )__name__
__module____qualname__r   r   rC   rL   rW   r[   r)   __classcell__r   s   @r   r   r   -   s'    &<~

7",(r   r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)r4   c                      || _         g | _        y r   )r&   entries)r   r&   s     r   r   zSearchIndex.__init__   s    r   c                 d   |j                   j                  d      xs i }|j                  d      ry t               }|j                  |j                         |j                          |j                  D ];  }|j                         r| j                  ||j                  |j                  |       = y )NrN   exclude)metagetParserfeedrH   closerV   is_excludedcreate_entry_for_sectiontocurl)r   rJ   rN   parsersections        r   rF   z"SearchIndex.add_entry_from_context   s    x(.B::i  DLL! {{ 	QG&&(--gtxx4P	Qr   c                    | j                  ||j                        }|r||j                  z   }n|j                  r|dz   |j                  z   }|j                  s5t	        |j
                  j                  d|j                              g|_        dj                  |j                        j                         }dj                  |j                        j                         }t        r"| j                  |      }| j                  |      }|||d}|j
                  j                  d      }	t        |	t              rMg |d<   |	D ]C  }
|
st        |
t        t        t        t         f      s'|d   j#                  t	        |
             E |j
                  j                  d      xs i }d|v r|d   |d<   | j$                  j#                  |       y )N#r!   rE   )locationr!   r#   r$   rN   r"   )_find_toc_by_ididrx   r!   strrp   rq   rP   stripr#   r;   _segment_chinese
isinstancer,   intfloatboolappendrm   )r   rz   rw   rx   rJ   itemr!   r#   entryr$   namerN   s               r   rv   z$SearchIndex.create_entry_for_section   s~   ##C4.CZZ)gjj(C }} w

!CDEGM &,,.%++- ))%0E))$/D 
 yy}}V$dD!E&M 4Jtc3t-DE&M((T34
 x(.Bf#G_E'N 	E"r   c                    dD ci c]  }|| j                   |    }}|r_| j                  rS| j                  d   d   }|j                  D cg c]  }|d   j                  |      s| }}|| j                  z   | _        |r| j                  s|j                  | _        || j                  d}t        j                  |dt
              S c c}w c c}w )N)r(   r*   r+   r1   r   r}   )r&   docs),:)
separatorsdefault)r&   rm   
startswithjsondumpsr   )r   prevkeyr&   r8   r   rm   rV   s           r   rR   z!SearchIndex.generate_search_index   s     G
 S!!
 
 DLL<<?:.D $(<< ,77= G  #T\\1DL <<DL "4<<9zz#
 	
E
(s   C	Cc                 |    |D ]7  }|j                   |k(  r|c S | j                  |j                  |      }|5|c S  y r   )r   r~   children)r   rw   r   toc_items       r   r~   zSearchIndex._find_toc_by_id   sL     	 H{{b  ++H,=,=rBH#	  r   c                     t        j                  dt         j                        }d }|j                  ||      j	                  d      S )Nz(\p{script: Han}+)c           
          | j                  d      }dj                  ddj                  t        j                  |j	                  d                  dg      S )Nr   rE      ​rO   )grouprP   r;   cutrT   )matchrb   s     r   replacez-SearchIndex._segment_chinese.<locals>.replace2  sK    KKNE 77eiiW(=>?  r   r   )r   compileUNICODErG   r   )r   rV   exprr   s       r   r   zSearchIndex._segment_chinese.  s:    {{0#++>		 xx&,,X66r   N)	rf   rg   rh   r   rF   rv   rR   r~   r   r%   r   r   r4   r4      s#    
Q ,#^'
X7r   r4   c                   0    e Zd ZdZddZd Zd Zd Zd Zy)	Elementz
    An element with attributes, essentially a small wrapper object for the
    parser to access attributes in other callbacks than handle_starttag.
    Nc                 (    || _         |xs i | _        y r   )tagattrs)r   r   r   s      r   r   zElement.__init__J  s    [b
r   c                     | j                   S r   )r   r   s    r   __repr__zElement.__repr__O  s    xxr   c                 b    |t         u r| j                  |j                  k(  S | j                  |k(  S r   )r   r   )r   others     r   __eq__zElement.__eq__S  s,    G88uyy((88u$$r   c                 ,    t        | j                        S r   )hashr   r   s    r   __hash__zElement.__hash__Z  s    DHH~r   c                     d| j                   v S )Ndata-search-exclude)r   r   s    r   ru   zElement.is_excluded^  s    $

22r   r   )	rf   rg   rh   __doc__r   r   r   r   ru   r%   r   r   r   r   C  s     !
%3r   r   c                   $    e Zd ZdZddZd Zd Zy)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.
    c                 J    || _         || _        g | _        g | _        d | _        y r   )eldepthr#   r!   r   )r   r   r   s      r   r   zSection.__init__k  s'    
 	
r   c                     | j                   r1dj                  | j                  j                  | j                   g      S | j                  j                  S )Nr|   )r   rP   r   r   r   s    r   r   zSection.__repr__u  s7    7788TWW[[$''23377;;r   c                 6    | j                   j                         S r   )r   ru   r   s    r   ru   zSection.is_excluded|  s    ww""$$r   N)r   )rf   rg   rh   r   r   r   ru   r%   r   r   r   r   d  s    %r   r   c                   4     e Zd ZdZ fdZd Zd Zd Z xZS )rr   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        |   |i | t        g d      | _        t        g d      | _        g | _        d | _        g | _        y )N)objectscriptstyle)pcodepreliolulrG   sup)r   r   setskipkeeprI   rz   rV   r   s      r   r   zParser.__init__  sT    $)&)  
 	  
 	  	r   c                    t        |      }t        ||      }|t        vr| j                  j	                  |       ny |t        dd      D cg c]  }d| 	 c}v rt        | j                        }d|v r|dk7  rK| j                  s?t        t        d      |      | _	        | j                  j	                  | j                         t        ||      | _	        | j                  r|d   | j                  _
        | j                  j	                  | j                         | j                  s>t        t        d            | _	        | j                  j	                  | j                         |j                         D ]O  \  }}|dk(  r| j                  j                  |        y |dk(  s.|d	k(  s4| j                  j                  |        y  | j                  j                  | j                        ss|| j                  v rd| j                  j                   }| j                  j"                  | j                  v r| j                  j$                  }|j	                  d
| d       y y y c c}w )Nr	      hr   h1hxr   class	linenodiv<>)dictr   voidrI   r   ranger.   rV   r   rz   r   itemsr   addintersectionr   r#   r   r!   )	r   r   r   r   xr   r   rb   rV   s	            r   handle_starttagzParser.handle_starttag  s   U S% d{LL# U1a[1asG12%Eu} $;tyy#*74=%#@DLII$$T\\2  'r5199&+DkDLLO 		  . ||"74=1DLIIT\\*  ++- 
	JC ++		b! g~%;"6		b!
	 yy%%dll3tyy8H <<$$D||$,,.||)) KK!C5
# 9I3I 2s   I c                 L   | j                   r| j                   d   |k7  ry | j                  j                  t        | j                         kD  r_t	        | j
                        D ]G  }|j                  t        | j                         k  s&t        d      | j                  _        || _         n | j                   j                         }|| j                  v r*|j                  dvr| j                  j                  |       y | j                  j                  | j                         s|| j                  v r| j                  j                  }| j                  j                  | j                   v r| j                  j                  }|j!                  d| d      }t#        |dz   t        |            D ]"  }||   j%                         rt        |      } n t        |      |kD  r/t        |      |kD  r |j                          t        |      |kD  ry y |j'                  d| d       y y y )Ninf)r   r   r   r   r   r	   z</)rI   rz   r   r.   reversedrV   r   popr   r   remover   r   r#   r   r!   indexr   isspacer   )r   r   rz   r   rV   r   is          r   handle_endtagzParser.handle_endtag  s   ||t||B/36 <<DLL 11#DII. ==C$55 */uDLL&#*DL \\?vv::		  $ yy%%dll3tyy8H <<$$D||$,,.||)) JJ3%qz*E519c$i0 Aw(IE 4y5 $i%'HHJ $i%'
 bQK(+ 9I3r   c                 .   | j                   j                  | j                        ry d| j                  vr%|j                         s|j	                  dd      }nd}| j
                  s>t        t        d            | _        | j                  j                  | j
                         | j
                  j                  | j                  v rxd}| j                  D ]3  }|j                  dk(  s|j                  j                  d      dk(  s2d	}5 |s1| j
                  j                  j                  t        |d
             y y |j                         r| j
                  j                   r'| j
                  j                   d   j                         s&| j
                  j                   j                  |       y d| j                  v r&| j
                  j                   j                  |       y y | j
                  j                   j                  t        |d
             y )Nr   
 r   Far   
headerlinkT)quoter   )r   r   rI   r   r   rz   r   r   rV   r   r   r   r   rq   r!   r   r#   )r   rV   	permalinkr   s       r   handle_datazParser.handle_data  s   99!!$,,/ $<<>||D#. ||"74=1DLIIT\\* <<??dll*Ill %66S=RXX\\'%:l%J $I%
 ""))4/  \\^<<$$DLL,=,=b,A,I,I,K!!((.$,,&!!((. '
 LL$$tU+r   )	rf   rg   rh   r   r   r   r   r   ri   rj   s   @r   rr   rr     s    47$t/)d(r   rr   zmkdocs.material.search)arearU   brcolembedhrimginputlinkrp   paramsourcetrackwbr)r   loggingr7   r/   backrefsr   htmlr   html.parserr   mkdocsr   mkdocs.config.config_optionsr   mkdocs.pluginsr   r&   r
   r   r;   ImportErrorr   r4   r   r   rr   	getLoggerr=   r   r   r%   r   r   <module>r     s   *   	 	   "  2 % 3{(:l+ {(@Q7 Q7l3 3B% %<wZ w| g01   }  Es   B B B 