
:>"^                 @   s@   d  Z  d d l m Z d d l m Z Gd d   d e  Z d S)z%Turn an mmCIF file into a dictionary.    )print_function)	as_handlec               @   s:   e  Z d  Z d Z d d   Z d d   Z d d   Z d S)	
MMCIF2Dictz+Parse a mmCIF file and return a dictionary.c       
      C   s  d d g |  _  d d g |  _ t |  q} d } d } |  j |  } y t |  } Wn t k
 rp d SYn X| d d  |  | d d  <d } d } x | D] } | j   d	 k r d
 } g  }	 d } d } q n | rk| j d  rE| d k s	| | d k rE| d k rd } qkg  |  | <|	 j |  | d 7} q n& |  |	 | | j |  | d 7} q | d k r| } q | g |  | <d } q WWd QRXd S)zParse a mmCIF file and return a dictionary.

        Arguments:
         - file - name of the PDB file OR an open filehandle

        '" 	FN   r   Zloop_T_   )	quote_charswhitespace_charsr   	_tokenizenextStopIterationlower
startswithappend)
selffilenamehandleZ	loop_flagkeytokenstokeninkeys r   7/tmp/pip-build-ww9dw3qa/biopython/Bio/PDB/MMCIF2Dict.py__init__   sF    	+	


	zMMCIF2Dict.__init__c             c   sV  d } d  } d } xt  |  D]\ } } | |  j k r_ | r#| r#d } | | |  Vq | |  j k r | s | r t d |   | } d } | d } q#| | k r#| d t |  k s | | d |  j k r#d  } d } | | |  Vq | d k r| rd  S| s d } | } q W| r<| | d   V| rRt d |   d  S)NFr   z!Opening quote in middle of word: Tr   #zLine ended with quote open: )	enumerater   r   
ValueErrorlen)r   lineZin_tokenZquote_open_charZstart_ir   cr   r   r   
_splitlineF   s:    -
zMMCIF2Dict._splitlinec             c   s   d } x | D] } d } | j  d  r. q q | j  d  r | d d   j   g } x4 | D], } | j   } | d k r| P| j |  q] Wd j |  Vq x" |  j | j    D] } | Vq Wq W| r t d   d  S)NTFr    ;r   
zEmpty file.)r   rstripr   joinr&   stripr"   )r   r   emptyr$   Ztoken_bufferr   r   r   r   r   k   s"    zMMCIF2Dict._tokenizeN)__name__
__module____qualname____doc__r   r&   r   r   r   r   r   r      s   4%r   N)r0   
__future__r   ZBio.Filer   dictr   r   r   r   r   <module>   s   