U
    \Sh	                     @  sx   d Z ddlm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 G d	d
 d
eZdddddZdS )zTransforms for HTML builder.    )annotationsN)Any)nodes)Sphinx)SphinxPostTransform)NodeMatcherc                   @  sF   e Zd ZdZdZdZedZdZ	dddd	d
Z
dddddZdS )KeyboardTransforma$  Transform :kbd: role to more detailed form.

    Before::

        <literal class="kbd">
            Control-x

    After::

        <literal class="kbd compound">
            <literal class="kbd">
                Control
            -
            <literal class="kbd">
                x
    i  )htmlz(?<=.)(-|\+|\^|\s+)(?=.)))Zcapslock)pageZdown)r   up)scrollr
   )numr
   )sysZrq)backspacer   None)kwargsreturnc              	   K  s   t tjdgd}t| j|D ]}| j|d  }t	|dks | 
|rPq |d d |  |r | 
|rd|d d }g |d d< n
|d	}|tjd|dgd7 }z|d	}|t|7 }W qf tk
r   Y qfX qfq d S )
NZkbd)classes   r   Zcompound    r   )r   r   literallistZdocumentfindallpatternsplitZastextlenis_multiwords_keyappendpopjoinText
IndexError)selfr   Zmatchernodepartskeysep r+   R/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/builders/html/transforms.pyrun+   s$    


zKeyboardTransform.runz	list[str]bool)r(   r   c                 C  sF   t |dkr>|d  dkr>|d  |d  f}|| jkS dS d S )Nr   r   r   r      F)r   striplowermultiwords_keys)r&   r(   namer+   r+   r,   r    E   s    
z#KeyboardTransform.is_multiwords_keyN)__name__
__module____qualname____doc__Zdefault_priorityformatsrecompiler   r2   r-   r    r+   r+   r+   r,   r      s   
r   r   zdict[str, Any])appr   c                 C  s   |  t ddddS )NbuiltinT)versionZparallel_read_safeZparallel_write_safe)Zadd_post_transformr   )r;   r+   r+   r,   setupM   s
    
r>   )r7   
__future__r   r9   typingr   Zdocutilsr   Zsphinx.applicationr   Z!sphinx.transforms.post_transformsr   Zsphinx.util.nodesr   r   r>   r+   r+   r+   r,   <module>   s   >