o
    “^©i  ã                   @   sì   d dl Z d dlmZmZ er*ddlmZ ddlmZmZm	Z	 ddl
mZ ddlmZ dgZe  d	e j¡Ze  d
¡ZdZdddee dddefdd„Zdddee dddefdd„Zdddedefdd„Zdddedefdd„Zd#d"d„ZdS )$é    N)ÚTYPE_CHECKINGÚMatché   )ÚBlockParser)ÚBaseRendererÚ
BlockStateÚInlineState)ÚInlineParser)ÚMarkdownÚspoilerz
^ {0,3}! ?z^( {0,3}![^\n]*\n)+$z>!\s*(?P<spoiler_text>.+?)\s*!<Úblockr   ÚmÚstater   Úreturnc           
      C   sÀ   |   ||¡\}}| d¡s|d7 }| ¡ }|s%t |¡r%t d|¡}d}nd}| |¡}| ¡ | jd kr@t	| j
ƒ}| d¡ n| j
}|  ||¡ ||jdœ}	|rX| |	¡ |S | |	¡ |jS )NÚ
Ú Úblock_spoilerÚblock_quoteé   ©ÚtypeÚchildren)Úextract_block_quoteÚendswithÚdepthÚ_BLOCK_SPOILER_MATCHÚmatchÚ_BLOCK_SPOILER_STARTÚsubÚchild_stateÚmax_nested_levelÚlistÚblock_quote_rulesÚremoveÚparseÚtokensÚprepend_tokenÚappend_tokenÚcursor)
r   r   r   ÚtextÚend_posr   Útok_typeÚchildÚrulesÚtoken© r/   úR/home/ubuntu/hpml_nyu/venv/lib/python3.10/site-packages/mistune/plugins/spoiler.pyÚparse_block_spoiler   s(   




r1   Úinliner	   r   c                 C   s:   |  d¡}| ¡ }||_|  |¡}| d|dœ¡ | ¡ S )NÚspoiler_textÚinline_spoilerr   )ÚgroupÚcopyÚsrcÚrenderr'   Úend)r2   r   r   r)   Ú	new_stater   r/   r/   r0   Úparse_inline_spoiler1   s   

r;   Úrendererr   r)   c                 C   ó   d| d S )Nz<div class="spoiler">
z</div>
r/   ©r<   r)   r/   r/   r0   Úrender_block_spoiler:   ó   r?   c                 C   r=   )Nz<span class="spoiler">z</span>r/   r>   r/   r/   r0   Úrender_inline_spoiler>   r@   rA   Úmdr
   c                 C   sZ   | j  ddt¡ | j dtt¡ | jr)| jjdkr+| j dt¡ | j dt	¡ dS dS dS )aƒ  A mistune plugin to support block and inline spoiler. The
    syntax is inspired by stackexchange:

    .. code-block:: text

        Block level spoiler looks like block quote, but with `>!`:

        >! this is spoiler
        >!
        >! the content will be hidden

        Inline spoiler is surrounded by `>!` and `!<`, such as >! hide me !<.

    :param md: Markdown instance
    r   Nr4   Úhtmlr   )
r   Úregisterr1   r2   ÚINLINE_SPOILER_PATTERNr;   r<   ÚNAMEr?   rA   )rB   r/   r/   r0   r   B   s   þ)rB   r
   r   N)ÚreÚtypingr   r   Úblock_parserr   Úcorer   r   r   Úinline_parserr	   Úmarkdownr
   Ú__all__ÚcompileÚMr   r   rE   ÚstrÚintr1   r;   r?   rA   r   r/   r/   r/   r0   Ú<module>   s     
	