
    ͆hM                     8   S SK r S SKrS SKrS SKrS SKJr  S SKJr  S SKJ	r	  S SK
Jr  S SKJr  SSKJr   S SKr " S	 S
\\   5      r " S S5      r " S S5      r " S S5      r " S S\	5      r\R.                  " S5      r\" / SQ5      rg! \ a    Sr N^f = f)    N)bre)escape)
HTMLParser)utils)
BasePlugin   )SearchConfigc                   L   ^  \ rS rSrU 4S jrS rS rS rS rS r	S r
S	rU =r$ )
SearchPlugin,   c                 P   > [         TU ]  " U0 UD6  SU l        SU l        S U l        g )NF)super__init__is_dirtyis_dirtyreloadsearch_index_prevselfargskwargs	__class__s      V/opt/services/DDDS/venv/lib/python3.13/site-packages/material/plugins/search/plugin.pyr   SearchPlugin.__init__/   s0    $)&) # "&    c                    X l         g N)r   )r   commanddirtys      r   
on_startupSearchPlugin.on_startup:   s    r   c                 d   U R                   R                  (       d  g U R                   R                  (       d"  U R                  US5      /U R                   l        U R                   R                  (       d!  U R                  US5      U R                   l        U R                   R
                  cM  [        [        [        [        R                  " SU R                  US5      5      5      5      U R                   l        [        S
0 U R                   D6U l        U R                   R                  (       a  [        R                  R!                  U R                   R                  5      n[        R                  R#                  U5      (       a/  [$        R&                  " U5        [(        R+                  SU 35        O-[(        R-                  SU R                   R                   S35        U R                   R.                  (       a  [        R                  R!                  U R                   R.                  5      n[        R                  R#                  U5      (       a/  [$        R0                  " U5        [(        R+                  SU 35        g [(        R-                  S	U R                   R.                   S35        g g )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#   r2   s      r   	on_configSearchPlugin.on_config>   s   {{"" {{ $,!  DKK
 {{$$$(OO1%DKK!
 ;;'#'sBHHDOOF4LM5 ) $DKK 
 (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                    U R                   R                  (       d  g U R                  R                  U5        [        R
                  " SSUR                  5      Ul        g )Nz\s?data-search-\w+=\"[^\"]+\" )r#   r$   r/   add_entry_from_contextr,   subcontent)r   contextpager#   navs        r   on_page_contextSearchPlugin.on_page_contextp   sE    {{"" 	006vv,LL
r   c                   U R                   R                  (       d  g [        R                  R	                  UR
                  S5      n[        R                  R	                  US5      nU R                  R                  U R                  5      n[        R                  " UR                  S5      U5        U R                  (       a  U R                  U l        g g )Nsearchzsearch_index.jsonutf-8)r#   r$   r1   r2   joinsite_dirr/   generate_search_indexr   r   
write_fileencoder   )r   r#   baser2   datas        r   on_post_buildSearchPlugin.on_post_build}   s    {{"" ww||FOOX6ww||D"56   66t7M7MNW-t4 ==%)%6%6D" r   c                &    U R                   U l        g r   )r   r   )r   serverr#   builders       r   on_serveSearchPlugin.on_serve   s    "mmr   c                     UR                   R                  5       nSnUR                  US SU05      nUR                  R	                  U5      $ )Nzpartials/language.htmlr#   )themeget_envget_templatemodulet)r   r#   valueenvlanguagetemplates         r   r&   SearchPlugin._translate   sI    ll""$ ,##Hdh4HI  ''r   )r   r   r/   r   )__name__
__module____qualname____firstlineno__r   r   r<   rF   rR   rW   r&   __static_attributes____classcell__r   s   @r   r   r   ,   s,    &/d

7",( (r   r   c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
r.      c                     Xl         / U l        g r   r#   entries)r   r#   s     r   r   SearchIndex.__init__   s    r   c                    UR                   R                  S5      =(       d    0 nUR                  S5      (       a  g [        5       nUR                  UR                  5        UR                  5         UR                   HA  nUR                  5       (       a  M  U R                  XAR                  UR                  U5        MC     g )NrI   exclude)metagetParserfeedrB   closerQ   is_excludedcreate_entry_for_sectiontocurl)r   rD   rI   parsersections        r   r@   "SearchIndex.add_entry_from_context   s    x(.B::i   DLL! {{G&&((--gxx4P #r   c                    U R                  X!R                  5      nU(       a  X5R                  -   nO#UR                  (       a  US-   UR                  -   nUR                  (       d5  [	        UR
                  R                  SUR                  5      5      /Ul        SR                  UR                  5      R                  5       nSR                  UR                  5      R                  5       n[        (       a"  U R                  U5      nU R                  U5      nUUUS.nUR
                  R                  S5      n	[        U	[        5      (       a[  / US'   U	 HP  n
U
(       d  M  [        U
[        [        [        [         45      (       d  M3  US   R#                  [	        U
5      5        MR     UR
                  R                  S5      =(       d    0 nSU;   a  US   US'   U R$                  R#                  U5        g )N#titler?   )locationr   texttagsrI   boost)_find_toc_by_ididr{   r   strrs   rt   rK   stripr   r5   _segment_chinese
isinstancer)   intfloatboolappendro   )r   r}   rz   r{   rD   itemr   r   entryr   namerI   s               r   ry   $SearchIndex.create_entry_for_section   s   ##C4.CZZ)gjj(C }} w

!CDEGM &,,.%++- 5))%0E))$/D 
 yy}}V$dD!!E&M4Jtc3t-DEE&M((T3 
 x(.Bf#G_E'N 	E"r   c                    S Vs0 s H  nX R                   U   _M     nnU(       am  U R                  (       a\  U R                  S   S   nUR                   Vs/ s H   nUS   R                  U5      (       a  M  UPM"     nnX`R                  -   U l        U(       a"  U R                  (       d  UR                  U l        X0R                  S.n[        R                  " US[
        S9$ s  snf s  snf )N)r%   r'   r(   r   r   )r#   docs),:)
separatorsdefault)r#   ro   
startswithjsondumpsr   )r   prevkeyr#   r2   r   ro   rQ   s           r   rM   !SearchIndex.generate_search_index   s     =
<C S!!< 	 
 DLL<<?:.D $(<<#/% ,77= <   #\\1DL <<DL "<<9zz#
 	
E
(s   C%C*9C*c                     U H:  nUR                   U:X  a  Us  $ U R                  UR                  U5      nUc  M8  Us  $    g r   )r   r   children)r   rz   r   toc_items       r   r   SearchIndex._find_toc_by_id  sG    H{{b  ++H,=,=rBH#  r   c                     [         R                  " S[         R                  5      nS nUR                  X15      R	                  S5      $ )Nz(\p{script: Han}+)c           
          U R                  S5      nSR                  SSR                  [        R                  " UR	                  S5      5      5      S/5      $ )Nr   r?      ​rJ   )grouprK   r5   cutrO   )matchr_   s     r   replace-SearchIndex._segment_chinese.<locals>.replace$  sK    KKNE 77eiiW(=>?  r   r   )r   compileUNICODErA   r   )r   rQ   exprr   s       r   r   SearchIndex._segment_chinese   s8    {{0#++>		 xx&,,X66r   rn   N)rd   re   rf   rg   r   r@   ry   rM   r   r   rh   r"   r   r   r.   r.      s#    
Q ,#^'
X7r   r.   c                   :    \ rS rSrSrS
S jrS rS rS rS r	S	r
g)Elementi5  z
An element with attributes, essentially a small wrapper object for the
parser to access attributes in other callbacks than handle_starttag.
Nc                 0    Xl         U=(       d    0 U l        g r   )tagattrs)r   r   r   s      r   r   Element.__init__<  s    [b
r   c                     U R                   $ r   )r   r   s    r   __repr__Element.__repr__A  s    xxr   c                 d    U[         L a  U R                  UR                  :H  $ U R                  U:H  $ r   )r   r   )r   others     r   __eq__Element.__eq__E  s,    G88uyy((88u$$r   c                 ,    [        U R                  5      $ r   )hashr   r   s    r   __hash__Element.__hash__L  s    DHH~r   c                      SU R                   ;   $ )Ndata-search-exclude)r   r   s    r   rx   Element.is_excludedP  s    $

22r   )r   r   r   )rd   re   rf   rg   __doc__r   r   r   r   rx   rh   r"   r   r   r   r   5  s     !
%3r   r   c                   .    \ rS rSrSrSS jrS rS rSrg)	SectioniV  z
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                 F    Xl         X l        / U l        / U l        S U l        g r   )eldepthr   r   r   )r   r   r   s      r   r   Section.__init__]  s#    
 	
r   c                     U R                   (       a1  SR                  U R                  R                  U R                   /5      $ U R                  R                  $ )Nr   )r   rK   r   r   r   s    r   r   Section.__repr__g  s7    7788TWW[[$''23377;;r   c                 6    U R                   R                  5       $ r   )r   rx   r   s    r   rx   Section.is_excludedn  s    ww""$$r   )r   r   r   r   r   N)r   )	rd   re   rf   rg   r   r   r   rx   rh   r"   r   r   r   r   V  s    %r   r   c                   >   ^  \ rS rSrSrU 4S jrS rS rS rSr	U =r
$ )ru   it  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U ]  " U0 UD6  [        / SQ5      U l        [        / SQ5      U l        / U l        S U l        / U l        g )N)objectscriptstyle)pcodepreliolulrA   sup)r   r   setskipkeeprC   r}   rQ   r   s      r   r   Parser.__init__}  sT    $)&)  
 	  
 	  	r   c                    [        U5      n[        X5      nU[        ;  a  U R                  R	                  U5        Og U[        SS5       Vs/ s H  nSU 3PM
     sn;   a  [        U R                  5      nSU;   a  US:w  aP  U R                  (       d?  [        [        S5      U5      U l	        U R                  R	                  U R                  5        [        X55      U l	        U R                  (       a  US   U R                  l
        U R                  R	                  U R                  5        U R                  (       d>  [        [        S5      5      U l	        U R                  R	                  U R                  5        UR                  5        HS  u  pgUS:X  a  U R                  R                  U5          g US:X  d  M0  US	:X  d  M8  U R                  R                  U5          g    U R                  R                  U R                  5      (       dv  XR                  ;   af  U R                  R                   nU R                  R"                  U R                  ;   a  U R                  R$                  nUR	                  S
U S35        g g g s  snf )Nr      hr   h1hxr   class	linenodiv<>)dictr   voidrC   r   ranger+   rQ   r   r}   r   itemsr   addintersectionr   r   r   r   )	r   r   r   r   xr   r   r_   rQ   s	            r   handle_starttagParser.handle_starttag  s   U S d{LL# U1a[1[asG[12%Eu} $;tyy#*74=%#@DLII$$T\\2  'r199&+DkDLLO 		  . ||"74=1DLIIT\\*  ++-JC ++		b! g~%;"6		b! ( yy%%dll33yy8H <<$$D||$,,.||)) KK!C5
# 9I3I 2s   Jc                    U R                   (       a  U R                   S   U:w  a  g U R                  R                  [        U R                   5      :  aa  [	        U R
                  5       HH  nUR                  [        U R                   5      ::  d  M(  [        S5      U R                  l        X l          O   U R                   R                  5       nX0R                  ;   a,  UR                  S;  a  U R                  R                  U5        g U R                  R                  U R                   5      (       Gd  XR                  ;   a  U R                  R                  nU R                  R                  U R                   ;   a  U R                  R                  nUR!                  SU S35      n[#        US-   [        U5      5       H'  nXF   R%                  5       (       a  M  [        U5      n  O   [        U5      U:  a2  [        U5      U:  a"  UR                  5         [        U5      U:  a  M!  g g UR'                  SU S35        g g g )Ninf)r   r   r   r   r   r   z</)rC   r}   r   r+   reversedrQ   r   popr   r   remover   r   r   r   r   indexr   isspacer   )r   r   r}   r   rQ   r   is          r   handle_endtagParser.handle_endtag  s   ||t||B/36 <<DLL 11#DII.==C$55 */uDLL&#*L / \\?vv::		  $ yy%%dll33yy8H <<$$D||$,,.||)) JJ3%qz*E519c$i0w((IE 1 4y5 $i%'HHJ $i%'
 bQK(+ 9I3r   c                    U R                   R                  U R                  5      (       a  g SU R                  ;  a*  UR                  5       (       d  UR	                  SS5      nOSnU R
                  (       d>  [        [        S5      5      U l        U R                  R                  U R
                  5        U R
                  R                  U R                  ;   a  SnU R                   H8  nUR                  S:X  d  M  UR                  R                  S5      S:X  d  M6  S	nM:     U(       d.  U R
                  R                  R                  [        USS
95        g g UR                  5       (       a  U R
                  R                   (       a,  U R
                  R                   S   R                  5       (       d&  U R
                  R                   R                  U5        g SU R                  ;   a&  U R
                  R                   R                  U5        g g U R
                  R                   R                  [        USS
95        g )Nr   
 r   Far   
headerlinkT)quoter   )r   r   rC   r   r   r}   r   r   rQ   r   r   r   r   rt   r   r   r   )r   rQ   	permalinkr   s       r   handle_data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,K!!((.$,,&!!((. '
 LL$$tU+r   )rC   rQ   r   r}   r   )rd   re   rf   rg   r   r   r   r   r  rh   ri   rj   s   @r   ru   ru   t  s#    47$t/)d( (r   ru   zmkdocs.material.search)arearP   brcolembedhrimginputlinkrs   paramsourcetrackwbr)r   loggingr1   r,   backrefsr   htmlr   html.parserr   mkdocsr   mkdocs.pluginsr   r#   r	   r5   ImportErrorr   r.   r   r   ru   	getLoggerr7   r   r   r"   r   r   <module>r     s   *   	 	   "  %  n(:l+ n(fQ7 Q7l3 3B% %<wZ w| 01   c  Es   B BB