B
    £'=[‰  ã               @   s¨   d Z ddlZddlmZmZ ddlmZmZmZm	Z	m
Z
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é   )ÚNotebookReaderÚNotebookWriter)Únew_code_cellÚnew_text_cellÚnew_worksheetÚnew_notebookÚnew_heading_cellÚnbformatÚnbformat_minorz^#.*coding[:=]\s*([-\w.]+)c               @   s   e Zd ZdS )ÚPyReaderErrorN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú/lib/python3.7/site-packages/nbformat/v3/nbpy.pyr       s   r   c               @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚPyReaderc             K   s   | j |f|ŽS )N)Úto_notebook)ÚselfÚsÚkwargsr   r   r   Úreads&   s    zPyReader.readsc             K   s   |  ¡ }g }g }i }d}xš|D ]}| d¡s:t |¡r<q | d¡rv| j||f|Ž}|d k	rh| |¡ d}g }i }q | d¡r°| j||f|Ž}|d k	r¢| |¡ d}g }i }q | d¡rê| j||f|Ž}|d k	rÜ| |¡ d}g }i }q | d¡s| d	¡r4| j||f|Ž}|d k	r&| |¡ d
}g }i }q | d¡r¨| j||f|Ž}|d k	rh| |¡ g }t d|¡}	|	d k	ršd}i }t|	 d¡ƒ|d< nd}i }g }q | |¡ q W |ræ|dkræ|  ||¡}|d k	ræ| |¡ t	|d}
t
|
gd}|S )NÚcodecellz# <nbformat>z# <codecell>z# <htmlcell>Úhtmlcellz# <markdowncell>Úmarkdowncellz# <rawcell>z# <plaintextcell>Úrawcellz# <headingcellz## <headingcell level=(?P<level>\d)>ÚheadingcellÚlevel)Úcells)Ú
worksheets)Ú
splitlinesÚ
startswithÚ_encoding_declaration_reÚmatchÚnew_cellÚappendÚreÚintÚgroupr   r   )r   r   r   Úlinesr   Z
cell_linesÚstateÚlineÚcellÚmÚwsÚnbr   r   r   r   )   sr    













zPyReader.to_notebookc             K   sÊ   |dkr,d  |¡}| d¡}|rÆt|dS nš|dkrP|  |¡}|rÆtd|dS nv|dkrt|  |¡}|rÆtd|dS nR|d	kr˜|  |¡}|rÆtd
|dS n.|dkrÆ|  |¡}| dd¡}|rÆt||dS d S )Nr   Ú
)Úinputr   Úhtml)Úsourcer   Úmarkdownr   Úrawr   r   r   )r3   r   )ÚjoinÚstripr   Ú_remove_commentsr   Úgetr	   )r   r*   r)   r   r1   Útextr   r   r   r   r$   g   s,    





zPyReader.new_cellc             C   sR   g }x4|D ],}|  d¡r,| |dd … ¡ q
| |¡ q
W d |¡}| d¡}|S )Nú#é   r0   )r!   r%   r6   r7   )r   r)   Z	new_linesr+   r:   r   r   r   r8      s    



zPyReader._remove_commentsc             c   sª   t |ƒdkr|d V  tƒ ‚dd l}d |¡}| |¡}dd„ |jD ƒ}x>tt |ƒd ƒD ]*}d ||| ||d  … ¡ d¡V  qZW d ||d d … ¡ d¡V  d S )Nr   r   r0   c             S   s   g | ]}|j d  ‘qS )r   )Úlineno)Ú.0Úxr   r   r   ú
<listcomp>‘   s    z4PyReader.split_lines_into_blocks.<locals>.<listcomp>éÿÿÿÿ)ÚlenÚStopIterationÚastr6   ÚparseZbodyÚranger7   )r   r)   rD   r3   ÚcodeZstartsÚir   r   r   Úsplit_lines_into_blocksŠ   s    


*z PyReader.split_lines_into_blocksN)r   r   r   r   r   r$   r8   rI   r   r   r   r   r   $   s
   >r   c               @   s   e Zd Zdd„ ZdS )ÚPyWriterc             K   sê  dg}|  dttf dg¡ x¶|jD ]ª}x¢|jD ]–}|jdkr€| d¡}|d k	r~|  ddg¡ |  | ¡ ¡ | d¡ q6|jdkrÎ| d¡}|d k	rÌ|  d	dg¡ |  d
d„ | ¡ D ƒ¡ | d¡ q6|jdkr | d¡}|d k	rÎ|  ddg¡ |  dd„ | ¡ D ƒ¡ | d¡ q6|jdkrr| d¡}|d k	rÎ|  ddg¡ |  dd„ | ¡ D ƒ¡ | d¡ q6|jdkr6| d¡}| dd¡}|d k	r6|  d| dg¡ |  dd„ | ¡ D ƒ¡ | d¡ q6W q&W | d¡ d 	|¡S )Nz# -*- coding: utf-8 -*-z# <nbformat>%i.%i</nbformat>Ú rG   r1   z# <codecell>r2   r3   z# <htmlcell>c             S   s   g | ]}d | ‘qS )z# r   )r>   r+   r   r   r   r@   «   s    z#PyWriter.writes.<locals>.<listcomp>r4   z# <markdowncell>c             S   s   g | ]}d | ‘qS )z# r   )r>   r+   r   r   r   r@   ±   s    r5   z# <rawcell>c             S   s   g | ]}d | ‘qS )z# r   )r>   r+   r   r   r   r@   ·   s    Zheadingr   r   z# <headingcell level=%s>c             S   s   g | ]}d | ‘qS )z# r   )r>   r+   r   r   r   r@   ¾   s    r0   )
Úextendr
   r   r   r   Z	cell_typer9   r    r%   r6   )r   r/   r   r)   r.   r,   r1   r   r   r   r   Úwrites™   sN    











zPyWriter.writesN)r   r   r   rM   r   r   r   r   rJ   —   s   rJ   )Ú__doc__r&   Zrwbaser   r   Znbbaser   r   r   r   r	   r
   r   Úcompiler"   Ú	Exceptionr   r   rJ   Z_readerZ_writerr   Úreadr   ÚwriterM   r   r   r   r   Ú<module>   s   $	
s-