Ë
    #täi¶#  ã                  óü   — d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	m
Z
mZmZ ddlZddlmZ e	rdd	lmZ  G d
„ d«      Z G d„ ded¬«      Z ed«      Z	  ed¬«       G d„ de
e   «      «       Z G d„ de
e   «      Zy)aü  
class Ruler

Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and
[[MarkdownIt#inline]] to manage sequences of functions (rules):

- keep rules in defined order
- assign the name to each rule
- enable/disable rules
- add/replace rules
- allow assign rules to additional named chains (in the same)
- caching lists of active rules

You will not need use this class directly until write plugins. For simple
rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and
[[MarkdownIt.use]].
é    )Úannotations)ÚIterable)Ú	dataclassÚfield)ÚTYPE_CHECKINGÚGenericÚ	TypedDictÚTypeVarNé   )ÚEnvType)Ú
MarkdownItc                  ó^   — e Zd Zdd„Zedd„«       Zej                  dd„«       Zed	d„«       Zy)
Ú	StateBasec                ó.   — || _         || _        || _        y ©N)ÚsrcÚenvÚmd)Úselfr   r   r   s       ú`/Volumes/fast/ai/experiments/MLX_z-image/.venv/lib/python3.12/site-packages/markdown_it/ruler.pyÚ__init__zStateBase.__init__!   s   € ØˆŒØˆŒØˆ�ó    c                ó   — | j                   S r   )Ú_src©r   s    r   r   zStateBase.src&   s   € à�y‰yÐr   c                ó    — || _         d | _        y r   )r   Ú_srcCharCode)r   Úvalues     r   r   zStateBase.src*   s   € àˆŒ	Ø48ˆÕr   c                ó¬   — t        j                  dt        d¬«       | j                  €!t	        d„ | j
                  D «       «      | _        | j                  S )Nz?StateBase.srcCharCode is deprecated. Use StateBase.src instead.é   )Ú
stacklevelc              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr   )Úord)Ú.0Úcs     r   Ú	<genexpr>z(StateBase.srcCharCode.<locals>.<genexpr>7   s   è ø€ Ð%@±i°¤c¨!§f±iùs   ‚)ÚwarningsÚwarnÚDeprecationWarningr   Útupler   r   s    r   ÚsrcCharCodezStateBase.srcCharCode/   sH   € ä�‰ØMÜØõ	
ð
 ×ÑÐ$Ü %Ñ%@°d·i²iÓ%@Ó @ˆDÔØ× Ñ Ð r   N)r   Ústrr   r   r   r   )Úreturnr,   )r   r,   r-   ÚNone)r-   ztuple[int, ...])Ú__name__Ú
__module__Ú__qualname__r   Úpropertyr   Úsetterr+   © r   r   r   r       sG   „ óð
 òó ðð 	‡Z�Zò9ó ð9ð ò!ó ñ!r   r   c                  ó   — e Zd ZU ded<   y)ÚRuleOptionsTypeú	list[str]ÚaltN)r/   r0   r1   Ú__annotations__r4   r   r   r6   r6   ;   s   … Ø	„Nr   r6   F)ÚtotalÚ
RuleFuncTvT)Úslotsc                  óH   — e Zd ZU ded<   ded<    ed¬«      Zded<   d	ed
<   y)ÚRuler,   ÚnameÚboolÚenabledF)Úreprr;   Úfnr7   r8   N)r/   r0   r1   r9   r   rC   r4   r   r   r>   r>   C   s    … à
ƒIØƒMÙ Ô&€Bˆ
Ó&Ø	„Nr   r>   c                  óð   — e Zd Zdd„Zdd„Zdd„Z	 d	 	 	 	 	 	 	 dd„Z	 d	 	 	 	 	 	 	 	 	 dd„Z	 d	 	 	 	 	 	 	 	 	 dd„Z	 d	 	 	 	 	 	 	 dd„Z		 d	 	 	 	 	 dd	„Z
	 d	 	 	 	 	 dd
„Z	 d	 	 	 	 	 dd„Zddd„Zdd„Zdd„Zy)ÚRulerc                ó    — g | _         d | _        y r   )Ú	__rules__Ú	__cache__r   s    r   r   zRuler.__init__L   s   € à13ˆŒð >Bˆ�r   c                ód   — t        | j                  «      D ]  \  }}|j                  |k(  sŒ|c S  y)zFind rule index by nameéÿÿÿÿ)Ú	enumeraterG   r?   )r   r?   ÚiÚrules       r   Ú__find__zRuler.__find__T   s/   € ä  §¡Ö0‰GˆAˆtØ�y‰y˜DÓ Ø’ð 1ð r   c                ór  — dh}| j                   D ]1  }|j                  sŒ|j                  D ]  }|j                  |«       Œ Œ3 i | _        |D ]h  }g | j                  |<   | j                   D ]H  }|j                  sŒ|r||j                  vrŒ!| j                  |   j                  |j                  «       ŒJ Œj y)zBuild rules lookup cacheÚ N)rG   rA   r8   ÚaddrH   ÚappendrC   )r   ÚchainsrM   r?   Úchains        r   Ú__compile__zRuler.__compile__[   s    € à�ˆà—N”NˆDØ—<’<ØØŸœ�Ø—
‘
˜4Õ ñ !ð #ð
 ˆŒÛˆEØ$&ˆD�N‰N˜5Ñ!ØŸœ�Ø—|’|ØÙ˜e¨4¯8©8Ñ3ØØ—‘˜uÑ%×,Ñ,¨T¯W©WÕ5ñ 'ñ r   Nc                óÖ   — | j                  |«      }|xs i }|dk(  rt        d|› �«      ‚|| j                  |   _        |j	                  dg «      | j                  |   _        d| _        y)zöReplace rule by name with new function & options.

        :param ruleName: rule name to replace.
        :param fn: new rule function.
        :param options: new rule options (not mandatory).
        :raises: KeyError if name not found
        rJ   úParser rule not found: r8   N)rN   ÚKeyErrorrG   rC   Úgetr8   rH   )r   ÚruleNamerC   ÚoptionsÚindexs        r   ÚatzRuler.atn   si   € ð —‘˜hÓ'ˆØ’-˜RˆØ�BŠ;ÜÐ4°X°JÐ?Ó@Ð@Ø#%ˆ�‰�uÑÔ Ø$+§K¡K°°rÓ$:ˆ�‰�uÑÔ!Øˆ�r   c                óä   — | j                  |«      }|xs i }|dk(  rt        d|› �«      ‚| j                  j                  |t	        t
           |d||j                  dg «      «      «       d| _        y)aK  Add new rule to chain before one with given name.

        :param beforeName: new rule will be added before this one.
        :param ruleName: new rule will be added before this one.
        :param fn: new rule function.
        :param options: new rule options (not mandatory).
        :raises: KeyError if name not found
        rJ   rW   Tr8   N©rN   rX   rG   Úinsertr>   r;   rY   rH   )r   Ú
beforeNamerZ   rC   r[   r\   s         r   ÚbeforezRuler.before€   sp   € ð —‘˜jÓ)ˆØ’-˜RˆØ�BŠ;ÜÐ4°Z°LÐAÓBÐBØ�‰×ÑØ”4œ
Ñ# H¨d°B¸¿¹ÀEÈ2Ó8NÓOô	
ð ˆ�r   c                óê   — | j                  |«      }|xs i }|dk(  rt        d|› �«      ‚| j                  j                  |dz   t	        t
           |d||j                  dg «      «      «       d| _        y)aG  Add new rule to chain after one with given name.

        :param afterName: new rule will be added after this one.
        :param ruleName: new rule will be added after this one.
        :param fn: new rule function.
        :param options: new rule options (not mandatory).
        :raises: KeyError if name not found
        rJ   rW   r   Tr8   Nr_   )r   Ú	afterNamerZ   rC   r[   r\   s         r   ÚafterzRuler.after˜   st   € ð —‘˜iÓ(ˆØ’-˜RˆØ�BŠ;ÜÐ4°Y°KÐ@ÓAÐAØ�‰×ÑØ�A‰I”tœJÑ'¨°$¸¸G¿K¹KÈÈrÓ<RÓSô	
ð ˆ�r   c                ó–   — | j                   j                  t        t           |d||xs i j	                  dg «      «      «       d| _        y)zÒPush new rule to the end of chain.

        :param ruleName: new rule will be added to the end of chain.
        :param fn: new rule function.
        :param options: new rule options (not mandatory).

        Tr8   N)rG   rR   r>   r;   rY   rH   )r   rZ   rC   r[   s       r   Úpushz
Ruler.push°   sC   € ð 	�‰×ÑÜ”Ñ˜X t¨R°'²-¸R×1DÑ1DÀUÈBÓ1OÓPô	
ð ˆ�r   c                óò   — t        |t        «      r|g}g }|D ]U  }| j                  |«      }|dk  r|rŒ|dk  r|st        d|› �«      ‚d| j                  |   _        |j                  |«       ŒW d| _        |S )a  Enable rules with given names.

        :param names: name or list of rule names to enable.
        :param ignoreInvalid: ignore errors when rule not found
        :raises: KeyError if name not found and not ignoreInvalid
        :return: list of found rule names
        r   ú!Rules manager: invalid rule name TN©Ú
isinstancer,   rN   rX   rG   rA   rR   rH   ©r   ÚnamesÚignoreInvalidÚresultr?   Úidxs         r   ÚenablezRuler.enable¿   s…   € ô �eœSÔ!Ø�GˆEØˆÛˆDØ—-‘- Ó%ˆCØ�a’™]ØØ�a’¡ÜÐ!BÀ4À&ÐIÓJÐJØ*.ˆD�N‰N˜3ÑÔ'Ø�M‰M˜$Õð ð ˆŒØˆr   c                ó|   — t        |t        «      r|g}| j                  D ]	  }d|_        Œ | j	                  ||«      S )a-  Enable rules with given names, and disable everything else.

        :param names: name or list of rule names to enable.
        :param ignoreInvalid: ignore errors when rule not found
        :raises: KeyError if name not found and not ignoreInvalid
        :return: list of found rule names
        F)rk   r,   rG   rA   rq   )r   rm   rn   rM   s       r   Ú
enableOnlyzRuler.enableOnly×   s;   € ô �eœSÔ!Ø�GˆEØ—N”NˆDØ ˆD�Lð #à�{‰{˜5 -Ó0Ð0r   c                óò   — t        |t        «      r|g}g }|D ]U  }| j                  |«      }|dk  r|rŒ|dk  r|st        d|› �«      ‚d| j                  |   _        |j                  |«       ŒW d| _        |S )a  Disable rules with given names.

        :param names: name or list of rule names to enable.
        :param ignoreInvalid: ignore errors when rule not found
        :raises: KeyError if name not found and not ignoreInvalid
        :return: list of found rule names
        r   ri   FNrj   rl   s         r   ÚdisablezRuler.disableç   s…   € ô �eœSÔ!Ø�GˆEØˆÛˆDØ—-‘- Ó%ˆCØ�a’™]ØØ�a’¡ÜÐ!BÀ4À&ÐIÓJÐJØ*/ˆD�N‰N˜3ÑÔ'Ø�M‰M˜$Õð ð ˆŒØˆr   c                ó–   — | j                   €| j                  «        | j                   €J ‚| j                   j                  |g «      xs g S )a=  Return array of active functions (rules) for given chain name.
        It analyzes rules configuration, compiles caches if not exists and returns result.

        Default chain name is `''` (empty string). It can't be skipped.
        That's done intentionally, to keep signature monomorphic for high speed.

        )rH   rU   rY   )r   Ú	chainNames     r   ÚgetRuleszRuler.getRulesÿ   sF   € ð �>‰>Ð!Ø×ÑÔØ—>‘>Ð-Ð-Ð-à�~‰~×!Ñ! )¨RÓ0Ò6°BÐ6r   c                óT   — | j                   D �cg c]  }|j                  ‘Œ c}S c c}w )z Return all available rule names.)rG   r?   ©r   Úrs     r   Úget_all_ruleszRuler.get_all_rules  s"   € à $§¢Ó/¡˜1�—“ Ñ/Ð/ùÒ/s   �%c                ón   — | j                   D �cg c]  }|j                  sŒ|j                  ‘Œ c}S c c}w )zReturn the active rule names.)rG   rA   r?   rz   s     r   Úget_active_ruleszRuler.get_active_rules  s(   € à $§¢Ó<¡˜1°!·)³)�—“ Ñ<Ð<ùÒ<s   �2¡2)r-   r.   )r?   r,   r-   Úintr   )rZ   r,   rC   r;   r[   úRuleOptionsType | Noner-   r.   )
ra   r,   rZ   r,   rC   r;   r[   r€   r-   r.   )
rd   r,   rZ   r,   rC   r;   r[   r€   r-   r.   )F)rm   zstr | Iterable[str]rn   r@   r-   r7   )rP   )rw   r,   r-   zlist[RuleFuncTv])r-   r7   )r/   r0   r1   r   rN   rU   r]   rb   re   rg   rq   rs   ru   rx   r|   r~   r4   r   r   rE   rE   K   sY  „ óBóó6ð( PTðØðØ!+ðØ6Lðà	óð. +/ðàðð ðð ð	ð
 (ðð 
óð: +/ðàðð ðð ð	ð
 (ðð 
óð2 PTðØðØ!+ðØ6Lðà	óð  AFðØ(ðØ9=ðà	óð2 AFð1Ø(ð1Ø9=ð1à	ó1ð" AFðØ(ðØ9=ðà	óô07ó0ô=r   rE   )Ú__doc__Ú
__future__r   Úcollections.abcr   Údataclassesr   r   Útypingr   r   r	   r
   r'   Úutilsr   Úmarkdown_itr   r   r6   r;   r>   rE   r4   r   r   Ú<module>rˆ      s†   ðñõ$ #å $ß (ß =Ó =Û å áÝ&÷!ñ !ô6�i uõ ñ �\Ó"€
Ø Fñ �Ôôˆ7�:Ñó ó ðôH=ˆG�JÑõ H=r   