B
    KZ                 @   sH   d Z ddlmZm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.
    )print_functionabsolute_importN   )Preprocessor)Dictc                   sb   e Zd ZdZe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.
    rZbashZcythonZ
javascriptZjuliaZlatexZoctaveZperlZrubyZsh)
z%%Rz%%bashz%%cythonz%%javascriptz%%juliaz%%latexz%%octavez%%perlz%%rubyz%%shzSyntax 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                sN   t t| jf d|i| | j| j d| j }t	d
|| _dS )zPublic constructorr
   |z^\s*({0})\s+N)superr   __init__default_languagesupdate	languagesjoinkeysrecompileformatre_magic_language)selfr
   kwZany_language)	__class__ Flib/python3.7/site-packages/nbconvert/preprocessors/highlightmagics.pyr   ,   s
    z$HighlightMagicsPreprocessor.__init__c             C   s(   | j |}|r | j|d S 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)
        codeZmetadataZmagics_language)Z	cell_typer    r   )r   ZcellZ	resourcesZ
cell_indexZmagic_languager   r   r   preprocess_cellO   s
    
z+HighlightMagicsPreprocessor.preprocess_cell)N)__name__
__module____qualname____doc__r   r   tagr   r   r    r"   __classcell__r   r   )r   r   r      s$   
r   )
r&   Z
__future__r   r   r   baser   Z	traitletsr   r   r   r   r   r   <module>   s
   