U
    kufà  ã                   @  s¨   d Z ddlmZ ddl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
é    )ÚannotationsNé   )Ú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   ú4/tmp/pip-unpacked-wheel-zj9qk9v2/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|Ž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 |¡r2q| d¡rd|  ||¡}|dk	rZ| |¡ d}g }q| d¡r–|  ||¡}|dk	rŒ| |¡ d}g }q| d¡rÈ|  ||¡}|dk	r¾| |¡ d}g }q| |¡ q|rþ|dkrþ|  ||¡}|dk	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   Z
cell_linesÚstateÚlineÚcellÚwsr   r   r   r   +   s@    







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 )
zCreate a new cell.r   Ú
)Úinputr   Úhtml)Úsourcer   ÚmarkdownN)ÚjoinÚstripr   Ú_remove_commentsr   )r   r'   r&   Úinput_Útextr   r   r   r$   O   s    



zPyReader.new_cellc                 C  sN   g }|D ],}|  d¡r*| |dd … ¡ q| |¡ qd |¡}| d¡}|S )Nú#é   r+   )r!   r%   r0   r1   )r   r&   Ú	new_linesr(   r4   r   r   r   r2   _   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  qXd ||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>s   s     z4PyReader.split_lines_into_blocks.<locals>.<listcomp>éÿÿÿÿ)ÚlenÚStopIterationÚastr0   ÚparseÚbodyÚranger1   )r   r&   r?   r.   ÚcodeZstartsÚir   r   r   Úsplit_lines_into_blocksj   s    


(z PyReader.split_lines_into_blocksN)	r   r   r   r   r   r   r$   r2   rE   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 ]î}|jD ]â}|jdkrl| d¡}|dk	rj|  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$q| d¡ td |¡ƒS )z&Convert a notebook object to a string.z# -*- coding: utf-8 -*-z# <nbformat>2</nbformat>Ú rC   r,   Nr   r-   r.   r   c                 S  s   g | ]}d | ‘qS ©z# r   ©r9   r(   r   r   r   r;   Œ   s     z#PyWriter.writes.<locals>.<listcomp>r/   r   c                 S  s   g | ]}d | ‘qS rH   r   rI   r   r   r   r;   ’   s     r+   )	Úextendr   r   Z	cell_typeÚgetr    r%   Ústrr0   )r   Únbr   r&   r*   r)   r3   r   r   r   Úwrites|   s0    








zPyWriter.writesN)r   r   r   r   rN   r   r   r   r   rF   y   s   rF   )r   Ú
__future__r   ÚreZnbbaser   r   r   r   Zrwbaser   r	   Úcompiler"   Ú	Exceptionr
   r   rF   Z_readerZ_writerr   Úreadr   ÚwriterN   r   r   r   r   Ú<module>   s   
U