3
Kd/                  @   s  d dl mZ d dl mZ d dl mZ dZd dlZd dlZd dlmZ	 d dlm
Z d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ ddddgZdZdZde d ZejdZejdZejdZejdZejeZejdZ ejee Z!dZ"dZ#G dd  d eZ$G d!d" d"e%Z&G d#d de'Z(d$d%d&d'd(d)Z)ejd*Z*ejd+Z+ejd,Z,d-d Z-ejd.Z.d/d Z/G d0d de'Z0dS )1    )absolute_import)division)print_functionzX
N-Triples Parser
License: GPL 2, W3C, BSD, or MIT
Author: Sean B. Palmer, inamidst.com
N)URIRef)BNode)Literal)
cast_bytes)decodeUnicodeEscape)ascii)BytesIO)string_types)	text_type)unichrunquoteuriquoteSinkNTriplesParserz<([^:]+:[^\s"<>]*)>z"([^"\\]*(?:\\.[^"\\]*)*)"z&(?:@([a-zA-Z]+(?:-[a-zA-Z0-9]+)*)|\^\^z)?z([^\r\n]*)(?:\r\n|\r|\n)z[ \t]*z[ \t]+z[ \t]*\.[ \t]*(#.*)?z3_:([A-Za-z0-9_:]([-A-Za-z0-9_:\.]*[-A-Za-z0-9_:])?)i   Fc               @   s   e Zd ZdS )NodeN)__name__
__module____qualname__ r   r   Q/var/www/html/virt/lib/python3.6/site-packages/rdflib/plugins/parsers/ntriples.pyr   /   s   r   c               @   s   e Zd ZdS )
ParseErrorN)r   r   r   r   r   r   r   r   3   s   r   c               @   s   e Zd Zdd Zdd ZdS )r   c             C   s
   d| _ d S )Nr   )length)selfr   r   r   __init__8   s    zSink.__init__c             C   s   |  j d7  _ t||| d S )N   )r   print)r   spor   r   r   triple;   s    zSink.tripleN)r   r   r   r   r"   r   r   r   r   r   7   s   	
"\)tnrr&   r'   z([\x20\x21\x23-\x5B\x5D-\x7E]+)z\\(t|n|r|"|\\)z!\\u([0-9A-F]{4})|\\U([0-9A-F]{8})c             C   s2  t s&t| trt| } n
| jd} | S g }x| r"tj| }|rb| |j d } |j|j	d q,t
j| }|r| dd } |jt|j	d  q,tj| }|r| |j d } |j \}}t|p|d}|dkrtd| |jt| q,| jdrtd	| dd
  q,td| d  q,W dj|S dS )zUnquote an N-Triples string.zunicode-escapeNr         i zDisallowed codepoint: %08Xr'   zIllegal escape at: %s...
   zIllegal literal character: %rr    )validate
isinstancer   r	   decoder_safematchendappendgroupr_quotquot	r_uniquotgroupsintr   r   
startswithjoin)r   resultmuU	codepointr   r   r   r   G   s:    





z([\x80-\xFF])c             C   s   t s| S tjdd | S d S )Nc             S   s   dt | jd S )Nz%%%02Xr   )ordr6   )r?   r   r   r   <lambda>w   s    zuriquote.<locals>.<lambda>)r/   r_hibytesub)urir   r   r   r   r   s    c               @   s~   e Zd ZdZi ZdddZdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )r   zAn N-Triples Parser.

    Usage::

          p = NTriplesParser(sink=MySink())
          sink = p.parse(f) # file; use parsestring for a string
    Nc             C   s   |d k	r|| _ nt | _ d S )N)sinkr   )r   rH   r   r   r   r      s    zNTriplesParser.__init__c             C   s~   t |dstdtjd|}|| _d| _xJ| j | _| jdkrDP y| j  W q. tk
rr   td| j Y q.X q.W | j	S )zParse f as an N-Triples file.readz)Item to parse must be a file-like object.zutf-8r.   NzInvalid line: %r)
hasattrr   codecs	getreaderfilebufferreadlineline	parselinerH   )r   fr   r   r   parse   s    


zNTriplesParser.parsec             C   s>   t |tstdt }|jt| |jd | j| dS )zParse s as an N-Triples string.z(Item to parse must be a string instance.r   N)r0   r   r   r   writer   seekrS   )r   r   rR   r   r   r   parsestring   s    

zNTriplesParser.parsestringc             C   s   | j s | jjt}|sdS || _ xptj| j }|rP| j |j d | _ |jdS | jjt}| rx| j j  rx|d7 }n|sdS |  j |7  _ q"W dS )z+Read an N-Triples line from buffered input.Nr   r$   )	rN   rM   rI   bufsizr_liner3   r4   r6   isspace)r   rN   r?   r   r   r   rO      s     

zNTriplesParser.readlinec             C   sz   | j t | j s| jjdr"d S | j }| j t | j }| j t | j }| j t | jrft	d| j
j||| d S )N#zTrailing garbage)eatr_wspacerP   r<   subject	r_wspaces	predicateobjectr_tailr   rH   r"   )r   r]   r_   r`   r   r   r   rQ      s    



zNTriplesParser.parselinec             C   s   | j j|S )N)rP   r<   )r   tokenr   r   r   peek   s    zNTriplesParser.peekc             C   s<   |j | j}|s$td|j| jf | j|j d  | _|S )NzFailed to eat %s at %s)r3   rP   r   patternr4   )r   rd   r?   r   r   r   r[      s
    zNTriplesParser.eatc             C   s    | j  p| j }|std|S )Nz Subject must be uriref or nodeID)urirefnodeidr   )r   Zsubjr   r   r   r]      s    zNTriplesParser.subjectc             C   s   | j  }|std|S )NzPredicate must be uriref)re   r   )r   predr   r   r   r_      s    zNTriplesParser.predicatec             C   s,   | j  p| j p| j }|dkr(td|S )NFzUnrecognised object type)re   rf   literalr   )r   Zobjtr   r   r   r`      s    zNTriplesParser.objectc             C   s6   | j dr2| jtjd}t|}t|}t|S dS )N<r   F)rc   r[   r_urirefr6   r   r   URI)r   rG   r   r   r   re      s    
zNTriplesParser.urirefc             C   sP   | j drL| jtjd}| jj|d }|d k	r8t|S t }|| j|< |S dS )N_r   F)rc   r[   r_nodeidr6   
_bnode_idsgetbNode)r   Zbnode_idZnew_idZbnoder   r   r   rf      s    

zNTriplesParser.nodeidc             C   sv   | j drr| jtj \}}}|r(|}nd }|rJt|}t|}t|}nd }|r^|r^tdt|}t|||S dS )Nr&   z)Can't have both a language and a datatypeF)	rc   r[   	r_literalr:   r   r   rk   r   r   )r   ZlitlangZdtyper   r   r   rh   	  s    

zNTriplesParser.literal)N)r   r   r   __doc__rn   r   rS   rV   rO   rQ   rc   r[   r]   r_   r`   re   rf   rh   r   r   r   r   r   z   s   
		)1
__future__r   r   r   rs   rerK   Zrdflib.termr   rk   r   rp   r   Zrdflib.compatr   r	   r
   sixr   r   r   r   __all__re   rh   ZlitinfocompilerX   r\   r^   ra   rj   rm   rq   rW   r/   r   	Exceptionr   r`   r   r8   r2   r7   r9   r   rE   r   r   r   r   r   r   <module>   sP   





	


(
