B
    £'=[§  ã               @   s¨   d Z ddlZddlmZ ddlmZmZ ddl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)Úunicode_typeé   )ÚNotebookReaderÚNotebookWriter)Únew_code_cellÚnew_text_cellÚnew_worksheetÚnew_notebookz^#.*coding[:=]\s*([-\w.]+)c               @   s   e Zd ZdS )ÚPyReaderErrorN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú/lib/python3.7/site-packages/nbformat/v2/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 }d}xÂ|D ]º}| d¡sÔt |¡r4q| d¡rf|  ||¡}|d k	r\| |¡ d}g }q| d¡r˜|  ||¡}|d k	rŽ| |¡ d}g }q| d¡rÊ|  ||¡}|d k	rÀ| |¡ d}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>Úmarkdowncell)Úcells)Ú
worksheets)Ú
splitlinesÚ
startswithÚ_encoding_declaration_reÚmatchÚnew_cellÚappendr   r	   )r   r   r   Úlinesr   Z
cell_linesÚstateÚlineÚcellÚwsÚnbr   r   r   r   '   sB    









zPyReader.to_notebookc             C   sv   |dkr,d  |¡}| d¡}|rrt|dS nF|dkrP|  |¡}|rrtd|dS n"|dkrr|  |¡}|rrtd|dS d S )	Nr   Ú
)Úinputr   Úhtml)Úsourcer   Úmarkdown)ÚjoinÚstripr   Ú_remove_commentsr   )r   r"   r!   r(   Útextr   r   r   r   K   s    



zPyReader.new_cellc             C   sR   g }x4|D ],}|  d¡r,| |dd … ¡ q
| |¡ q
W d |¡}| d¡}|S )Nú#é   r'   )r   r    r,   r-   )r   r!   Z	new_linesr#   r/   r   r   r   r.   Z   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   r'   c             S   s   g | ]}|j d  ‘qS )r   )Úlineno)Ú.0Úxr   r   r   ú
<listcomp>l   s    z4PyReader.split_lines_into_blocks.<locals>.<listcomp>éÿÿÿÿ)ÚlenÚStopIterationÚastr,   ÚparseZbodyÚranger-   )r   r!   r9   r*   ÚcodeZstartsÚir   r   r   Úsplit_lines_into_blockse   s    


*z PyReader.split_lines_into_blocksN)r   r   r   r   r   r   r.   r>   r   r   r   r   r   "   s
   $r   c               @   s   e Zd Zdd„ ZdS )ÚPyWriterc             K   s,  dg}|  ddg¡  xü|jD ]ò}xì|jD ]â}|jdkrr| d¡}|d k	rp|  ddg¡ |  | ¡ ¡ | d¡ q*|jdkrÀ| d¡}|d k	r¾|  d	dg¡ |  d
d„ | ¡ D ƒ¡ | d¡ q*|jdkr*| d¡}|d k	r*|  ddg¡ |  dd„ | ¡ D ƒ¡ | d¡ q*W qW | d¡ td |¡ƒS )Nz# -*- coding: utf-8 -*-z# <nbformat>2</nbformat>Ú r<   r(   z# <codecell>r)   r*   z# <htmlcell>c             S   s   g | ]}d | ‘qS )z# r   )r3   r#   r   r   r   r5   ƒ   s    z#PyWriter.writes.<locals>.<listcomp>r+   z# <markdowncell>c             S   s   g | ]}d | ‘qS )z# r   )r3   r#   r   r   r   r5   ‰   s    r'   )	Úextendr   r   Z	cell_typeÚgetr   r    r   r,   )r   r&   r   r!   r%   r$   r(   r   r   r   Úwritest   s0    






zPyWriter.writesN)r   r   r   rC   r   r   r   r   r?   r   s   r?   )Ú__doc__ÚreZipython_genutils.py3compatr   Zrwbaser   r   Znbbaser   r   r   r	   Úcompiler   Ú	Exceptionr
   r   r?   Z_readerZ_writerr   Úreadr   ÚwriterC   r   r   r   r   Ú<module>   s   
P