o
    ¹iÑ  ã                   @   s¨   d Z ddlZddlmZ ddlmZmZmZmZ ddl	m
Z
mZ e d¡ZG dd	„ d	eƒZG d
d„ de
ƒZG dd„ deƒZeƒ Zeƒ ZejZejZejZejZejZdS )zJRead and write notebooks as regular .py files.

Authors:

* Brian Granger
é    N)ÚListé   )Únew_code_cellÚnew_notebookÚnew_text_cellÚnew_worksheet)ÚNotebookReaderÚNotebookWriterz^#.*coding[:=]\s*([-\w.]+)c                   @   s   e Zd ZdZdS )ÚPyReaderErrorz An error raised by the PyReader.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   úK/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/nbformat/v2/nbpy.pyr
       s    r
   c                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚPyReaderzA Python notebook reader.c                 K   s   | j |fi |¤ŽS )úConvert a string to a notebook.)Úto_notebook)ÚselfÚsÚkwargsr   r   r   Úreads)   s   zPyReader.readsc                 K   s  |  ¡ }g }g }d}|D ]]}| d¡st |¡rq| d¡r2|  ||¡}|dur-| |¡ d}g }q| d¡rK|  ||¡}|durF| |¡ d}g }q| d¡rd|  ||¡}|dur_| |¡ d}g }q| |¡ q|r|dkr|  ||¡}|dur| |¡ t|d	}	t|	gd
}
|
S )r   Úcodecellz# <nbformat>ú# <codecell>Nú# <htmlcell>Úhtmlcellú# <markdowncell>Úmarkdowncell)Úcells)Ú
worksheets)Ú
splitlinesÚ
startswithÚ_encoding_declaration_reÚmatchÚnew_cellÚappendr   r   )r   r   r   Úlinesr   Ú
cell_linesÚstateÚlineÚcellÚwsÚnbr   r   r   r   -   sB   







zPyReader.to_notebookc                 C   s~   |dkrd  |¡}| d¡}|rt|dS d	S |dkr*|  |¡}|r(td|dS d	S |dkr;|  |¡}|r=td|dS d	S d	S )
zCreate a new cell.r   Ú
)Úinputr   Úhtml)Úsourcer   ÚmarkdownN)ÚjoinÚstripr   Ú_remove_commentsr   )r   r(   r&   r.   Útextr   r   r   r$   R   s"   


ÿ
ÿ
ýzPyReader.new_cellc                 C   sN   g }|D ]}|  d¡r| |dd … ¡ q| |¡ qd |¡}| d¡}|S )Nú#é   r-   )r!   r%   r2   r3   )r   r&   Ú	new_linesr)   r5   r   r   r   r4   b   s   


zPyReader._remove_commentsc                 c   s¨    t |ƒdkr|d V  tƒ ‚ddl}d |¡}| |¡}dd„ |jD ƒ}tt |ƒd ƒD ]}d ||| ||d  … ¡ d¡V  q-d ||d d… ¡ d¡V  dS )zSplit lines into code blocks.r   r   Nr-   c                 S   s   g | ]}|j d  ‘qS )r   )Úlineno)Ú.0Úxr   r   r   Ú
<listcomp>v   s    z4PyReader.split_lines_into_blocks.<locals>.<listcomp>éÿÿÿÿ)ÚlenÚStopIterationÚastr2   ÚparseÚbodyÚranger3   )r   r&   r@   r0   ÚcodeÚstartsÚir   r   r   Úsplit_lines_into_blocksm   s   €


("z PyReader.split_lines_into_blocksN)	r   r   r   r   r   r   r$   r4   rG   r   r   r   r   r   &   s    %r   c                   @   s   e Zd ZdZdd„ ZdS )ÚPyWriterzA Python notebook writer.c                 K   s"  dg}|  ddg¡ |jD ]w}|jD ]q}|jdkr6| d¡}|dur5|  ddg¡ |  | ¡ ¡ | d¡ q|jdkr]| d	¡}|dur\|  d
dg¡ |  dd„ | ¡ D ƒ¡ | d¡ q|jdkrƒ| d	¡}|durƒ|  ddg¡ |  dd„ | ¡ D ƒ¡ | d¡ qq| d¡ td |¡ƒS )z&Convert a notebook object to a string.z# -*- coding: utf-8 -*-z# <nbformat>2</nbformat>Ú rD   r.   Nr   r/   r0   r   c                 S   ó   g | ]}d | ‘qS ©z# r   ©r:   r)   r   r   r   r<      ó    z#PyWriter.writes.<locals>.<listcomp>r1   r   c                 S   rJ   rK   r   rL   r   r   r   r<   •   rM   r-   )	Úextendr   r   Ú	cell_typeÚgetr    r%   Ústrr2   )r   r,   r   r&   r+   r*   r.   r   r   r   Úwrites   s8   




€


€


€î
zPyWriter.writesN)r   r   r   r   rR   r   r   r   r   rH   |   s    rH   )r   ÚreÚtypingr   Únbbaser   r   r   r   Úrwbaser   r	   Úcompiler"   Ú	Exceptionr
   r   rH   Ú_readerÚ_writerr   Úreadr   ÚwriterR   r   r   r   r   Ú<module>   s     
V
