o
    i}                     @   s8   d Z ddlZddlmZ ddlmZ G dd deZdS )zThis preprocessor detect cells using a different language through
magic extensions such as `%%R` or `%%octave`. Cell's metadata is marked
so that the appropriate highlighter can be used in the `highlight`
filter.
    N)Dict   )Preprocessorc                       sd   e Zd ZdZedddddddd	d
dddZeddjddZd fdd	Zdd Z	dd Z
  ZS )HighlightMagicsPreprocessorzQ
    Detects and tags code cells that use a different languages than Python.
    rbashcython
javascriptjulialatexoctaveperlrubyshsql)z%%Rz%%bashz%%cythonz%%javascriptz%%juliaz%%latexz%%octavez%%perlz%%rubyz%%shz%%sqlzSyntax highlighting for magic's extension languages. Each item associates a language magic extension such as %%R, with a pygments lexer such as r.)helpT)configNc                    sL   t  jdd|i| | j| j d| j }td| d| _	dS )zPublic constructorr   |z^\s*(z)\s+N )
super__init__default_languagesupdate	languagesjoinkeysrecompilere_magic_language)selfr   kwany_language	__class__r   b/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/nbconvert/preprocessors/highlightmagics.pyr   0   s   z$HighlightMagicsPreprocessor.__init__c                 C   s$   | j |}|r| j|d S dS )a(  
        When a cell uses another language through a magic extension,
        the other language is returned.
        If no language magic is detected, this function returns None.

        Parameters
        ----------
        source: str
            Source code of the cell to highlight
        r   N)r   matchr   group)r   sourcemr   r   r$   which_magic_language=   s   z0HighlightMagicsPreprocessor.which_magic_languagec                 C   s.   |j dkr| |j}|r||d d< ||fS )a  
        Tags cells using a magic extension language

        Parameters
        ----------
        cell : NotebookNode cell
            Notebook cell being processed
        resources : dictionary
            Additional resources used in the conversion process.  Allows
            preprocessors to pass variables into the Jinja engine.
        cell_index : int
            Index of the cell being processed (see base.py)
        codemetadatamagics_language)	cell_typer)   r'   )r   cell	resources
cell_indexmagic_languager   r   r$   preprocess_cellQ   s
   
z+HighlightMagicsPreprocessor.preprocess_cell)N)__name__
__module____qualname____doc__r   r   tagr   r   r)   r2   __classcell__r   r   r"   r$   r      s0    r   )r6   r   	traitletsr   baser   r   r   r   r   r$   <module>   s
    	