o
    Ë ¡j×<  ã                	   @   sX  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ dZ	ee
ƒ ¡ jd Zdefdd„Zdefd	d
„Zdd„ ZedkrFeƒ  dd„ Zdedefdd„ZdededededB fdd„Zdededeeef fdd„Zdedeeef fdd„Zdededefd d!„Zd,defd$d%„Zd-d&d'„Zdefd(d)„Zd*d+„ Zedkrªeƒ  dS dS ).é    N)ÚPathuþ  
site_name: FreeODwikiâ€”â€”å�¯è‡ªç”±ç¼–è¾‘çš„å¼€æº�Overdoseç™¾ç§‘ 
site_url: https://freeodwiki.org
site_author: FreeODwikiè´¡çŒ®è€…ä»¬
site_description: FreeODwikiæ˜¯ä¸€ä¸ªå¼€æº�é¡¹ç›®ï¼Œæ—¨åœ¨è®©æ¯�ä¸€ä½�ODeréƒ½èƒ½æœ‰æ•ˆåœ°èŽ·å�–å’Œåˆ†äº«æœ‰å…³Overdoseå’Œç²¾ç¥žæ´»æ€§ç‰©è´¨çš„ä¿¡æ�¯ï¼Œå¹¶åœ¨å‡�å°‘ä¸Šè¿°äº‹ç‰©å¯¹ODeré€ æˆ�çš„ä¼¤å®³çš„å�Œæ—¶ï¼Œä¸ºä¸Šè¿°äº‹ç‰©æ��ä¾›ä¸€ä¸ªç‹¬ç‰¹çš„è§†è§’ã€‚  # ç«™ç‚¹æ��è¿°
docs_dir: .\src  # ä½ çš„ Markdown æ–‡ä»¶å¤¹è·¯å¾„ï¼ˆç›¸å¯¹è·¯å¾„æˆ–ç»�å¯¹è·¯å¾„ï¼‰
site_dir: .\site

use_directory_urls: false

repo_name: SalviaSWC/FreeODwiki
repo_url: https://github.com/SalviaSWC/FreeODwiki

extra_css:
  - css/extra.css
  - css/external_link_icon.css
  - https://unpkg.com/katex@0/dist/katex.min.css

extra_javascript:
  - katex.js
  - https://unpkg.com/katex@0/dist/katex.min.js
  - https://unpkg.com/katex@0/dist/contrib/auto-render.min.js

plugins:
 - search
 - awesome-nav
 - glightbox
 #  - optimize

markdown_extensions:
  - abbr
  - admonition
  - attr_list
  - def_list
  - footnotes
  - md_in_html
  - material.extensions.preview:
      configurations:
        - targets:
            include:
              - è�¯ç‰©/*
              - è�¯æ•ˆ/*
              - æ–‡æ¡£/*
  - pymdownx.arithmatex:
      generic: true
  - pymdownx.betterem:
      smart_enable: all
  - pymdownx.snippets
  - pymdownx.blocks.caption
  - pymdownx.critic
  - pymdownx.caret
  - pymdownx.details
#  - pymdownx.emoji:
#      emoji_generator: !!python/name:material.extensions.emoji.to_svg
#      emoji_index: !!python/name:material.extensions.emoji.twemoji
  - pymdownx.highlight:
      anchor_linenums: true
      line_spans: __span
      pygments_lang_class: true
  - pymdownx.inlinehilite
  - pymdownx.keys
  - pymdownx.magiclink:
      normalize_issue_symbols: true
      repo_url_shorthand: true
      user: SalviaSWC
      repo: FreeODwiki
  - pymdownx.mark
  - pymdownx.smartsymbols
  - pymdownx.superfences:
      custom_fences:
        - name: mermaid
          class: mermaid
          format: !!python/name:pymdownx.superfences.fence_code_format
  - pymdownx.tabbed:
      alternate_style: true
      slugify: !!python/object/apply:pymdownx.slugs.slugify {}
  - pymdownx.tasklist:
      custom_checkbox: true
  - pymdownx.tilde
#   - pymdownx.slugs:
#       slugify: !!python/object/apply:pymdownx.slugs.slugify {}
  - toc:
      slugify: !!python/object/apply:pymdownx.slugs.slugify {} # Unicode æ”¯æŒ�
      permalink: true # å�„çº§æ ‡é¢˜é”šç‚¹
  
theme:
  language: zh
  name: material  
  favicon: æ–‡ä»¶/FreeODwiki2.png
  logo: æ–‡ä»¶/FreeODwiki2.png

  features:
    - navigation.top
    - navigation.path # æ˜¾ç¤ºè·¯å¾„ï¼ˆäºŒçº§ç›®å½•ä¹‹å�Žæ˜¾ç¤ºï¼‰
    - navigation.tabs # å¯¼èˆªé¡¶æ �ï¼ˆä¸€çº§ç›®å½•ï¼‰
    - navigation.tabs.sticky # å›ºå®šå¯¼èˆªé¡¶æ �ï¼Œä¸‹æ»‘ä¸�æ¶ˆå¤±
    - navigation.indexes # ç›®å½•ç´¢å¼•é¡µï¼Œå¼€å�¯å�Žè‡ªåŠ¨ç»‘å®š index.md
    - content.tooltips
    - content.footnote.tooltips
    - content.code.copy
    - search.share
    - search.suggest
    - search.highlight
  
  palette:

    # Palette toggle for automatic mode
    - media: "(prefers-color-scheme)"
      toggle:
        icon: material/brightness-auto
        name: Switch to light mode

    # Palette toggle for light mode
    - media: "(prefers-color-scheme: light)"
      scheme: default 
      toggle:
        icon: material/brightness-7
        name: Switch to dark mode

    # Palette toggle for dark mode
    - media: "(prefers-color-scheme: dark)"
      scheme: slate
      toggle:
        icon: material/brightness-4
        name: Switch to system preference
é   Úbc                 C   s   t  | ¡}| d¡pd ¡ S )NÚencodingÚ )ÚchardetZdetectÚgetÚupper)r   Úr© r   õ/   d:\FreeODwiki\å…³äºŽæœ¬ç«™\è„šæœ¬\run_server.pyÚdetect_encoding‘   s   
r   Úpc                 C   s‚   |   ¡ }z| d¡ W dS  ty   Y nw t|ƒpd}z	|j|dd�}W n ty5   |j|dd�}Y nw | j|dd� d|fS )	Núutf-8)Fr   ZGBKÚreplace)ÚerrorsÚignore©r   T)Z
read_bytesÚdecodeÚ	Exceptionr   Ú
write_text)r   r   ÚencÚtextr   r   r   Úconvert_file•   s   
ÿÿr   c                  C   sR   t t d¡ƒ} g }| D ]}t|ƒ\}}|r| t|ƒ|f¡ q|r#d S tdƒ d S )Nú*.mdzNo non-UTF-8 .md files found.)ÚlistÚROOTÚrglobr   ÚappendÚstrÚprint)Úmd_filesZ	convertedr   Zchangedr   r   r   r   Úconvert_non_utf8_files©   s   €r"   Ú__main__c                 C   sJ   t |tƒr#|jdkr#zt |tj¡ | |ƒ W dS  ty"   Y |‚w |‚)u6   å½“é�‡åˆ°æ�ƒé™�é—®é¢˜æ—¶ï¼ŒåŽ»æŽ‰å�ªè¯»å±žæ€§å†�é‡�è¯•é   N)Ú
isinstanceÚPermissionErrorÚwinerrorÚosÚchmodÚstatÚS_IWRITEr   )ÚfuncÚpathÚexc_infor   r   r   Úremove_readonly½   s   ýr/   ÚlinkÚreturnc                 C   s   |   ¡ } |  d¡S )u;   åˆ¤æ–­æ˜¯å�¦ä¸ºå¤–éƒ¨é“¾æŽ¥ï¼ˆhttp/https/mailto/data ç­‰ï¼‰)zhttp://zhttps://zmailto:zdata:z//)ÚstripÚ
startswith)r0   r   r   r   Úis_externalÍ   s   
r4   Úcurrent_fileÚ	link_pathÚ	docs_rootc                 C   sn   |  d¡d   d¡d  ¡ }t|ƒrdS | dd¡}| d¡r,|| d¡ jd	d
�}|S | j| jd	d
�}|S )uW   è§£æž�é“¾æŽ¥ç›®æ ‡çš„çœŸå®žæº�æ–‡ä»¶è·¯å¾„ï¼ˆè¿”å›ž None è¡¨ç¤ºå¤–éƒ¨é“¾æŽ¥æˆ–æ— æ•ˆï¼‰ú#r   ú?Nz\/ú/)r:   ú\z/\F)Ústrict)Úsplitr2   r4   r   r3   ÚlstripÚresolveÚparent)r5   r6   r7   Z
clean_pathÚtargetr   r   r   Úresolve_target_pathÓ   s   
þrB   Úfilepathc              
      sä   zˆj dd�}W n ty! } zdd|› �fW  Y d}~S d}~ww |}dtjf‡ ‡fdd„}t d	||¡}dtjf‡ ‡fd
d„}t d||¡}||krNdS z
ˆj|dd� W dS  tyq } zdd|› �fW  Y d}~S d}~ww )u?   ç§»é™¤æ­»é“¾æŽ¥ï¼šå›¾ç‰‡æ•´æ®µåˆ é™¤ï¼Œæ–‡æœ¬é“¾æŽ¥ä¿�ç•™æ–‡å­—r   r   Fõ   è¯»å�–å¤±è´¥: NÚmatchc                    s>   |   d¡}tˆ|ˆ ƒ}|d u r|   d¡S | ¡ r|   d¡S dS )Nr   r   r   )ÚgrouprB   Úexists)rE   r0   rA   ©r7   rC   r   r   Úreplace_imageõ   s   


z0remove_dead_links_in_file.<locals>.replace_imagez!\[([^\]]*)\]\(([^)]+)\)c                    s\   |   d¡}|   d¡}tˆ|ˆ ƒ}|d u r|   d¡S |jdkr#|   d¡S | ¡ r,|   d¡S |S )Né   r   r   z.pdf)rF   rB   ÚsuffixrG   )rE   r   r0   rA   rH   r   r   Úreplace_text  s   





z/remove_dead_links_in_file.<locals>.replace_textz(?<!\!)\[([^\]]+)\]\(([^)]+)\))Tu   æ— æ­»é“¾æŽ¥å�˜æ›´)Tu   æ­»é“¾æŽ¥å·²å¤„ç�†õ   å†™å…¥å¤±è´¥: )Ú	read_textr   ÚreÚMatchÚsubr   )rC   r7   ÚcontentÚeZoriginalrI   rL   r   rH   r   Úremove_dead_links_in_fileé   s,   €ÿÿ€ÿrT   c              
   C   sª   z| j dd�}W n ty! } zdd|› �fW  Y d}~S d}~ww t ddd„ |¡}||kr1d	S z
| j|dd� W d
S  tyT } zdd|› �fW  Y d}~S d}~ww )u5   å�ªæ›¿æ�¢å‰©ä½™ï¼ˆæœ‰æ•ˆï¼‰é“¾æŽ¥ä¸­çš„ .md â†’ .htmlr   r   FrD   Nz\]\(([^)#\s]*?\.md)(#[^)]*)?\)c                 S   s*   d|   d¡d d… › d|   d¡pd› d�S )Nz](rJ   éýÿÿÿz.htmlr   r   ú))rF   )Úmr   r   r   Ú<lambda>*  s   * z,replace_md_to_html_in_file.<locals>.<lambda>)Tu   æ—  .md é“¾æŽ¥å�˜æ›´)Tu   å·²æ›¿æ�¢ .md â†’ .htmlrM   )rN   r   rO   rQ   r   )rC   rR   rS   Znew_contentr   r   r   Úreplace_md_to_html_in_file   s(   €ÿý€ÿrY   Úsrc_pathÚ
target_dirc                 C   sŠ   |   ¡ s
tdƒ dS t|  d¡ƒ}|stdƒ dS tdt|ƒ› d�ƒ d}|D ]}t|| ƒ\}}t|ƒ\}}|d	7 }q'td
|› d�ƒ dS )Nu   é”™è¯¯ï¼šsrc/ ç›®å½•ä¸�å­˜åœ¨Fr   u   src/ ä¸­æœªæ‰¾åˆ° .md æ–‡ä»¶Tu   æ‰¾åˆ° u!    ä¸ª .md æ–‡ä»¶ï¼Œå¼€å§‹å¤„ç�†...r   rJ   u   å…¨éƒ¨å¤„ç�†å®Œæˆ�ï¼ˆu    ä¸ªæ–‡ä»¶ï¼‰)rG   r    r   r   ÚlenrT   rY   )rZ   r[   r!   Z	processedZmd_fileÚokÚmsgr   r   r   Úprocess_src_folder9  s   
r_   FTc                 C   sz   t jdddg}|r| d¡ tdd |¡› d�ƒ tj||d| d	�}|jd
kr7td|j› d�ƒ t|jƒ dS tdƒ dS )Nú-mZmkdocsÚbuildz--dirtyu   å¼€å§‹è¿�è¡Œ ú z...T)Úcapture_outputr   Úcwdr   u   mkdocs build å¤±è´¥(u   )ï¼šFu   mkdocs build æˆ�åŠŸ)	ÚsysÚ
executabler   r    ÚjoinÚ
subprocessÚrunÚ
returncodeÚstderr)r[   Zdirtyrc   ÚargsÚresultr   r   r   Úbuild_mkdocsV  s    
ü

rn   c              	   C   s~   | rt dƒ dS td }| ¡ st d|› �ƒ dS t d|› �ƒ t tjddd	d
t|ƒg¡}|jdkr9t dƒ dS t dƒ dS )Nu   ...ä¾�èµ–å®‰è£…å·²è¢«è·³è¿‡Tzrequirements.txtu!   é”™è¯¯ï¼šæ‰¾ä¸�åˆ°ä¾�èµ–æ–‡ä»¶ï¼šFu   æ£€æŸ¥å¹¶å®‰è£…ä¾�èµ–ï¼šr`   ZpipÚinstallz-rr   u>   ä¾�èµ–å®‰è£…å¤±è´¥ï¼Œè¯·æ£€æŸ¥ç½‘ç»œè¿žæŽ¥å’Œ Python çŽ¯å¢ƒã€‚u   ä¾�èµ–å·²å‡†å¤‡å®Œæˆ�)	r    r   rG   rh   ri   re   rf   r   rj   )ÚskipZrequirements_pathrm   r   r   r   Úinstall_dependenciesl  s    ÿ
rq   c                 C   sZ   t | ƒd }| ¡ stdƒ d S tdƒ tdƒ t |¡ tjtjdddg| d d	� d S )
NZsiteu6   é”™è¯¯ï¼šsite/ ç›®å½•ä¸�å­˜åœ¨ï¼ˆbuild å�¯èƒ½å¤±è´¥ï¼‰u.   
å�¯åŠ¨æœ¬åœ°æœ�åŠ¡å™¨ï¼šhttp://localhost:8000u   æŒ‰ Ctrl+C å�œæ­¢æœ�åŠ¡å™¨r`   zhttp.serverZ8000z\site)rd   )	r   rG   r    r(   Úchdirrh   ri   re   rf   )r[   Z	site_pathr   r   r   Ústart_server‚  s   

ÿrs   c            
      C   s   dd l } G dd„ d| jƒ}|  ¡ }|jdttƒddd� |jdd	dd
d� |jddddd� |jdddddd� |jdddd� |j|d�}t|jƒsPt	 
d¡ |j}|j}t|ƒ}|d }|jddd� t|d ddd ��}| t¡ W d   ƒ n1 s~w   Y  | ¡ r’tj|td!� td"ƒ |jdd#� tj||dt d$¡d%� td&ƒ td'|› �ƒ td(|› �ƒ tƒ  t |¡ td)ƒ |jrÊtd*ƒ nt|ƒ}	t|	|ƒsátd+ƒ ¡  d,¡rát	 
d-¡ tƒ  t ||j|j!ƒsútd.ƒ ¡  d,¡rút	 
d/¡ t"|ƒ d S )0Nr   c                   @   s.   e Zd ZU eed< eed< eed< eed< dS )zmain.<locals>.ArgsÚ
source_dirr[   Údebugrc   N)Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__Úboolr   r   r   r   ÚArgs“  s
   
 r{   rt   r9   u0   æº�ç›®å½•ï¼Œé»˜è®¤ä½¿ç”¨å½“å‰�ä»“åº“æ ¹ç›®å½•ã€‚)ÚdefaultÚnargsÚhelpr[   zD:\servers\freeodwikiuB   ç›®æ ‡ç›®å½•ï¼Œé»˜è®¤å€¼æ˜¯ä¸ºäº†ä¿�æŒ�å�‘å�Žå…¼å®¹è€Œè®¾ç½®çš„ã€‚z-dz--debugÚ
store_trueuŒ   å¼€å�¯å�Žä¼šè·³è¿‡é¢„å¤„ç�†æ­¥éª¤ï¼Œå¹¶å°† dirty å�‚æ•°ä¼ å…¥ mkdocsï¼Œè¿™å°†å¯¹æž„å»ºæµ�ç¨‹è¿›è¡Œæž�å¤§çš„åŠ é€Ÿã€‚ä»…ä½œä¸ºè°ƒè¯•ç”¨é€”ã€‚)Úactionr~   z-sz--show_outputrc   Ústore_falseuP   å�¯ç”¨æ—¶ä¸�ä¼šæ�•èŽ· mkdocs build çš„è¾“å‡ºï¼Œè¿™å�¯ä»¥é˜²æ­¢ä½ è¿‡äºŽæ— è�Šã€‚)Údestr€   r~   z--skip-installu   è·³è¿‡ä¾�èµ–æ£€æŸ¥å’Œå®‰è£…ã€‚)Ú	namespaceé   ÚsrcT)ÚparentsÚexist_okz
mkdocs.ymlÚwr   )Úmoder   )Úonerroru   å·²æ¸…ç©ºç›®æ ‡ç›®å½•)r†   z.git)Údirs_exist_okr   u   å¤�åˆ¶å®Œæˆ�ï¼�u   æº�ï¼šu	   ç›®æ ‡ï¼šu<   === MkDocs æ­»é“¾æŽ¥è‡ªåŠ¨æ¸…ç�† + æž„å»º + é¢„è§ˆå·¥å…· ===u   ...é¢„å¤„ç�†å·²è¢«è·³è¿‡u5   
é¢„å¤„ç�†å‡ºçŽ°é—®é¢˜ï¼Œæ˜¯å�¦ç»§ç»­ buildï¼Ÿ(y/n): ÚnrJ   u<   
mkdocs build å¤±è´¥ï¼Œæ˜¯å�¦ä»�è¦�å�¯åŠ¨æœ�åŠ¡å™¨ï¼Ÿ(y/n): r   )#ÚargparseÚ	NamespaceÚArgumentParserÚadd_argumentr   r   Ú
parse_argsrq   Zskip_installre   Úexitrt   r[   r   ÚmkdirÚopenÚwriteÚ
MKDOCS_YMLrG   ÚshutilÚrmtreer/   r    ÚcopytreeÚignore_patternsr(   rr   ru   r_   ÚinputÚlowerr3   rn   rc   rs   )
r�   r{   Úparserrl   rt   r[   Ztarget_pathZtarget_src_dirÚfrZ   r   r   r   Úmain�  sš   üüüûý

ÿü


ý
ý
rŸ   )FT)F) r(   rO   r—   r*   rh   re   r   Zpathlibr   r–   Ú__file__r?   r†   r   Úbytesr   r   r"   rv   r/   r   rz   r4   rB   ÚtuplerT   rY   r_   rn   rq   rs   rŸ   r   r   r   r   Ú<module>   sV     ÿÿÿ
þÿÿ

þ7
d
ÿ