o
    Rŀg                     @   s$   d Z ddlmZ G dd deZdS )z%Turn an mmCIF file into a dictionary.    )	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   sl  ddg| _ ddg| _t|}d}d}| |}zt|}W n ty.   Y W d   dS w |dd | |dd < |dd d	sHtd
d}d}|D ]U}| dkr_d}g }	d}d}qN|r|dr|dksp|| dkr|dkrwd}ng | |< |		| |d7 }qN| |	||   	| |d7 }qN|du r|}qN|g| |< d}qNW d   dS 1 sw   Y  dS )zParse a mmCIF file and return a dictionary.

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

        '" 	FN   r   data_z9The input mmCIF file must begin with a 'data_' directive.loop_T_   )
quote_charswhitespace_charsr   	_tokenizenextStopIteration
startswith
ValueErrorlowerappend)
selffilenamehandle	loop_flagkeytokenstokeninkeys r    F/var/www/html/myenv/lib/python3.10/site-packages/Bio/PDB/MMCIF2Dict.py__init__   sV   





"zMMCIF2Dict.__init__c                 c   s    d}d }d}t |D ]Y\}}|| jv r"|r!|s!d}||| V  q|| jv rU|s4|s4|}d}|d }q||krT|d t|ksI||d  | jv rTd }d}||| V  q|dkr^|s^ d S |sdd}|}q|rn||d  V  |rvtd| d S )NFr   Tr   #zLine ended with quote open: )	enumerater   r   lenr   )r   linein_tokenquote_open_charstart_ir   cr    r    r!   
_splitlineH   s@   


"zMMCIF2Dict._splitlinec                 c   s    d}|D ]T}d}| drq| drO|dd   g}|D ]+}| }| drEd|V  |dd  }|rC|d | jvrCtd n
|| qtd	| | E d H  q|r`td
d S )NTFr#   ;r   
r   zMissing whitespacezMissing closing semicolonzEmpty file.)r   rstripjoinr   r   r   r+   strip)r   r   emptyr&   token_bufferr    r    r!   r   k   s,   


zMMCIF2Dict._tokenizeN)__name__
__module____qualname____doc__r"   r+   r   r    r    r    r!   r      s
    8#r   N)r6   Bio.Filer   dictr   r    r    r    r!   <module>   s   