
    -PhE                     v    d Z 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dlmZ ddlmZ  G d	 d
e
          ZdS )z=A custom Transform object to shorten github and gitlab links.    )ClassVar)ParseResulturlparse
urlunparse)nodes)SphinxPostTransform)NodeMatcher   )traverse_or_findallc                   f    e Zd ZU dZdZdZdddZeee	e	f                  e
d<   dZd	 Zd
ede	fdZdS )ShortenLinkTransforma`  
    Shorten link when they are coming from github or gitlab and add an extra class to
    the tag for further styling.

    Before:
        .. code-block:: html

            <a class="reference external"
                href="https://github.com/2i2c-org/infrastructure/issues/1329">
                https://github.com/2i2c-org/infrastructure/issues/1329
            </a>

    After:
        .. code-block:: html

            <a class="reference external github"
                href="https://github.com/2i2c-org/infrastructure/issues/1329">
                2i2c-org/infrastructure#1329
            </a>
    i  )htmlgithubgitlab)z
github.comz
gitlab.comsupported_platformNc                    t          t          j                  }t          | j        |          D ]}|j                            d          }t          t          |j	                  d          }||||k    rt          |          }| j                            |j                  | _        | j        T|j        d                             | j                   t          j        |                     |                    |j	        d<   dS )zRun the Transform object.refuriNclassesr   )r	   r   	referencer   document
attributesgetnextiterchildrenr   r   netlocplatformappendText	parse_url)selfkwargsmatchernodeuritexts         ^/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pydata_sphinx_theme/short_link.pyrunzShortenLinkTransform.run+   s    eo..'w?? 	G 	GD/%%h//CT]++T22D 4#3smm $ 7 ; ;CJ G G=,OI.55dmDDD',z$..2E2E'F'FDM!$	G 	G    r%   returnc                 f   |j         }|dk    r| j        S |                    d          }| j        dk    r|                    d          }|d         dk    rd|v r|d          d|d	          }nBt	          |          dk    r|d         }t	          |          dk    r|d|d          z  }t	          |          d
k    r|d
         dv r|d|d          z  }n| j        dk    rd|v rt          t          |j         j        ddg                    rt|                    d          ^}}}|                    d          }d|vr| d| }ni|                    d          }|^}}}|s|}nJ|dk    r| d| }n<|dk    r| d| }n.|	                    dd          }t          |          dd         }|S )zParse the content of the url with respect to the selected platform.

        Args:
            uri: the link to the platform content

        Returns:
            the reformated url title
         /r   r   orgsz	/projectsr
   z
/projects#      )issuespulldiscussions#r   z/-/r1   merge_requests!)r   schemeN)pathr   lstripsplitlenanymap__contains__rstrip_replacer   )	r!   r%   r9   partsr&   group_and_subgroups_url_typeelement_numbers	            r'   r    zShortenLinkTransform.parse_url<   s    x2::=  {{3
 =H$$JJsOOEQx6!!kT&9&9  (88eAh88 u::>> 8Du::>>NaNN*Du::>>Qx#DDDE"I/]h&&}}CH)H6F+GHH" "} 26E1B1B.#UQS))e##1;;E;;DD!KK,,E380Hnq) I2!X--"5HHHH!%555"5HHHH ||2b|99!$''+r)   )__name__
__module____qualname____doc__default_priorityformatsr   r   dictstr__annotations__r   r(   r   r     r)   r'   r   r      s          * G4 4c3h0    HG G G"?[ ?S ? ? ? ? ? ?r)   r   N)rJ   typingr   urllib.parser   r   r   docutilsr   !sphinx.transforms.post_transformsr   sphinx.util.nodesr	   utilsr   r   rP   r)   r'   <module>rW      s    C C       : : : : : : : : : :       A A A A A A ) ) ) ) ) ) & & & & & &n n n n n. n n n n nr)   