
    i1                       d Z ddlmZ ddlZddlZddlmZmZmZ ddl	m
Z
mZmZmZmZmZmZmZmZ ddlmZmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZm Z  ddlm Z! erddl"Z#ddl$m%Z%m&Z&m'Z'm(Z( g dZ)dZ*dZ+de*z   dz   Z, ejZ                  d      Z. ejZ                  d      Z/ ejZ                  d      Z0 ejZ                  d      Z1 ejZ                  e*      Z2 ejZ                  d      Z3 ejZ                  e+e,z         Z4dZ5dZ6 G d d      Z7 ejZ                  d      Z8 ejZ                  d      Z9 ejZ                  d      Z:d'dZ; ejZ                  d      Z<d(d Z=ee>ef   Z? G d! d"      Z@ G d# d$      ZA G d% d&e      ZBy))zWN-Triples Parser
License: GPL 2, W3C, BSD, or MIT
Author: Sean B. Palmer, inamidst.com
    )annotationsN)BytesIOStringIO
TextIOBase)	IOTYPE_CHECKINGAnyMatchMutableMappingOptionalPatternTextIOUnion)_string_escape_mapdecodeUnicodeEscape)ParserError)InputSourceParser)BNode)LiteralURIRef)r   )Graph_ObjectType_PredicateType_SubjectType)unquoteuriquoteW3CNTriplesParserNTGraphSinkNTParser	DummySinkz<([^:]+:[^\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                      e Zd Zd Zd Zy)r!   c                    d| _         y )Nr   )length)selfs    NC:\Projects\mas-dev\.venv\Lib\site-packages\rdflib/plugins/parsers/ntriples.py__init__zDummySink.__init__>   s	        c                H    | xj                   dz  c_         t        |||       y )N   )r$   printr%   spos       r&   triplezDummySink.tripleA   s    qaAr(   N)__name__
__module____qualname__r'   r0    r(   r&   r!   r!   =   s    r(   r!   z([\x20\x21\x23-\x5B\x5D-\x7E]+)z\\([tbnrf"'\\])z'\\u([0-9A-Fa-f]{4})|\\U([0-9A-Fa-f]{8})c                   t         s0t        | t              rt        |       } | S | j	                  d      } | S g }| rAt
        j                  |       }|r4| |j                         d } |j                  |j                  d             Nt        j                  |       }|r-| dd } |j                  t        |j                  d                t        j                  |       }|rd| |j                         d } |j                         \  }}t        |xs |d      }|dkD  rt        d|z        |j                  t!        |             n3| j#                  d      rt        d	| dd
 z        t        d| d   z        | rAdj%                  |      S )zUnquote an N-Triples string.zunicode-escapeNr*         i zDisallowed codepoint: %08X\zIllegal escape at: %s...
   zIllegal literal character: %rr    )validate
isinstancestrr   decoder_safematchendappendgroupr_quotr   	r_uniquotgroupsint
ParseErrorchr
startswithjoin)r-   resultmuU	codepoints         r&   r   r   K   sd   a#A&A  )*AQAaeegiLaggaj)QAabE0<="AaeegiLxxz1QO	x'$%AI%MNNc)n-d# !;af!DEE !@1Q4!GHH1 2 wwvr(   z([\x80-\xFF])c                @    t         s| S t        j                  d |       S )Nc                <    dt        | j                  d            z  S )Nz%%%02Xr*   )ordrC   )rM   s    r&   <lambda>zuriquote.<locals>.<lambda>y   s    hQWWQZ&@r(   )r;   r_hibytesub)uris    r&   r   r   u   s    
||@#FFr(   c                      e Zd ZdZdZ	 	 d	 	 	 ddZ	 	 d	 	 	 	 	 	 	 ddZddZddZdddZ	dd	Z
dd
ZdddZddZ	 d	 	 	 ddZddZ	 d	 	 	 ddZddZy) r   a  An N-Triples Parser.
    This is a legacy-style Triples parser for NTriples provided by W3C
    Usage::

          p = W3CNTriplesParser(sink=MySink())
          sink = p.parse(f) # file; use parsestring for a string

    To define a context in which blank node identifiers refer to the same blank node
    across instances of NTriplesParser, pass the same dict as ``bnode_context`` to each
    instance. By default, a new blank node context is created for each instance of
    `W3CNTriplesParser`.
    )
_bnode_idssinkbufferfileline	skolemizeNc                    d| _         ||| _        ni | _        |  ||| _        nt               | _        d | _        d | _        d| _        y )NFr:   )r^   rY   rZ   r!   r[   r\   r]   )r%   rZ   bnode_contexts      r&   r'   zW3CNTriplesParser.__init__   sM    
 $+DO DODI!DI%)BF	#%	r(   c                   t        |d      st        d      t        |d      s't        |d      s t        j                  d      |      }|| _        || _        d| _        	 | j                         | _        | j                  	 | j                  S 	 | j                  |       B# t        $ r% t        dj                  | j                              w xY w)	a  
        Parse f as an N-Triples file.

        :type f: :term:`file object`
        :param f: the N-Triples source
        :type bnode_context: `dict`, optional
        :param bnode_context: a dict mapping blank node identifiers (e.g., ``a`` in ``_:a``)
                              to `~rdflib.term.BNode` instances. An empty dict can be
                              passed in to define a distinct context for a given call to
                              `parse`.
        readz)Item to parse must be a file-like object.encoding
charbufferutf-8r:   )r`   zInvalid line: {})hasattrrH   codecs	getreaderr^   r\   r[   readliner]   	parselineformatrZ   )r%   fr`   r^   s       r&   parsezW3CNTriplesParser.parse   s    $ q&!HIIq*%ga.F)  )!,A"	DIyy 
 yy	G];   G !3!:!:499!EFFGs   B# #.Cc                   t        |t        t        t        f      st	        d      t        |t        t        f      r% t        j                  d      t        |            }nt        |      } | j                  |fi | y)zParse s as an N-Triples string.z(Item to parse must be a string instance.re   N)
r<   r=   bytes	bytearrayrH   rg   rh   r   r   rm   )r%   r-   kwargsrl   s       r&   parsestringzW3CNTriplesParser.parsestring   se    !c5)45GHHa%+,)  )'!*5AA

1r(   c                   | j                   s)| j                  j                  t              }|sy|| _         	 t        j                  | j                         }|r3| j                   |j                         d | _         |j                  d      S | j                  j                  t              }|s | j                   j                         s|dz  }n|sy| xj                   |z  c_         )z+Read an N-Triples line from buffered input.Nr*   
)	r[   r\   rb   bufsizr_liner@   rA   rC   isspace)r%   r[   rM   s      r&   ri   zW3CNTriplesParser.readline   s     {{YY^^F+F DKT[[)A"kk!%%')4wwqz! /dkk&9&9&;dNFv% r(   c                   | j                  t               | j                  r| j                  j                  d      ry | j	                  |      }| j                  t
               | j                         }| j                  t
               | j                  |      }| j                  t               | j                  r$t        dj                  | j                              | j                  j                  |||       y )N#zTrailing garbage: {})eatr_wspacer]   rJ   subject	r_wspaces	predicateobjectr_tailrH   rk   rZ   r0   )r%   r`   r|   r~   object_s        r&   rj   zW3CNTriplesParser.parseline   s    		dii2237,,}-NN$	++m,993::499EFF		)W5r(   c                8    | j                   j                  |      S N)r]   rJ   )r%   tokens     r&   peekzW3CNTriplesParser.peek  s    yy##E**r(   c                    |j                  | j                        }|s%t        d|j                  d| j                        | j                  |j	                         d  | _        |S )NzFailed to eat z at )r@   r]   rH   patternrA   )r%   r   rM   s      r&   rz   zW3CNTriplesParser.eat  sN    MM$))$ $))TUUIIaeegi(	r(   c                f    | j                         xs | j                  |      }|st        d      |S )Nz Subject must be uriref or nodeID)urirefnodeidrH   )r%   r`   subjs      r&   r|   zW3CNTriplesParser.subject  s/    {{}:M :?@@r(   c                @    | j                         }|st        d      |S )NzPredicate must be uriref)r   rH   )r%   preds     r&   r~   zW3CNTriplesParser.predicate  s!    {{}788r(   c                    | j                         xs# | j                  |      xs | j                         }|du rt        d      |S )NFzUnrecognised object type)r   r   literalrH   )r%   r`   objts      r&   r   zW3CNTriplesParser.object  s@     {{}LM :Ldlln5=788r(   c                    | j                  d      rE| j                  t              j                  d      }t	        |      }t        |      }t        |      S y)N<r*   F)r   rz   r_urirefrC   r   r   URI)r%   rW   s     r&   r   zW3CNTriplesParser.uriref#  sD    99S>((8$**1-C#,C3-Cs8Or(   c                |   | j                  d      r| j                  r=| j                  t              j	                  d      }t        |      j                         S || j                  }| j                  t              j	                  d      }|j                  |d       }|t        |      S t               }|||<   |S y)N_r*   F)r   r^   rz   r_nodeidrC   bNoderY   get)r%   r`   bnode_idnew_idbnodes        r&   r   zW3CNTriplesParser.nodeid+  s     99S>~~88H-33A6X0022 !($(OOM88H-33A6&**8T:% =( "GE.3M(+ Lr(   c                   | j                  d      r{| j                  t              j                         \  }}}|r|}nd }|r"t	        |      }t        |      }t        |      }nd }|r|rt        d      t	        |      }t        |||      S y)N"z)Can't have both a language and a datatypeF)	r   rz   	r_literalrF   r   r   r   rH   r   )r%   litlangdtypes       r&   r   zW3CNTriplesParser.literalD  s    99S>#xx	299;Cu E
 !LMM#,C3e,,r(   )NN)rZ   z'Optional[Union[DummySink, NTGraphSink]]r`   Optional[_BNodeContextType])NF)rl   z-Union[TextIO, IO[bytes], codecs.StreamReader]r`   r   r^   boolreturnzUnion[DummySink, NTGraphSink])r-   zUnion[bytes, bytearray, str]r   None)r   zOptional[str]r   )r`   r   r   r   )r   r=   r   r   )r   zPattern[str]r   z
Match[str])r   zUnion[bNode, URIRef])r`   r   r   zUnion[URI, bNode, Literal])r   zUnion[te.Literal[False], URI])r`   r   r   z$Union[te.Literal[False], bNode, URI])r   z!Union[te.Literal[False], Literal])r1   r2   r3   __doc__	__slots__r'   rm   rr   ri   rj   r   rz   r|   r~   r   r   r   r   r4   r(   r&   r   r      s     NI 9=59&5& 3&2 6:	$8$ 3$ 	$
 
'$L	 &46$+ <@8	# <@8	-2r(   r   c                       e Zd ZdZddZddZy)r   gc                    || _         y r   r   )r%   graphs     r&   r'   zNTGraphSink.__init__[  s	    r(   c                @    | j                   j                  |||f       y r   )r   addr,   s       r&   r0   zNTGraphSink.triple^  s    

Aq!9r(   N)r   r   )r-   r   r.   r   r/   r   r   r   )r1   r2   r3   r   r'   r0   r4   r(   r&   r   r   X  s    Ir(   r   c                  &    e Zd ZdZdZedd       Zy)r    zyparser for the ntriples format, often stored with the .nt extension

    See http://www.w3.org/TR/rdf-testcases/#ntriplesr4   c                   |j                         }|s>|j                         }t        |t              r|}n t	        j
                  d      |      }t        t        |            } |j                  |fi | |j                          y)a<  
        Parse the NT format

        :type source: `rdflib.parser.InputSource`
        :param source: the source of NT-formatted data
        :type sink: `rdflib.graph.Graph`
        :param sink: where to send parsed triples
        :param kwargs: Additional arguments to pass to `.W3CNTriplesParser.parse`
        re   N)
getCharacterStreamgetByteStreamr<   r   rg   rh   r   r   rm   close)clssourcerZ   rq   rl   bparsers          r&   rm   zNTParser.parsei  sv     %%'$$&A!Z( .F$$W-a0";t#45Q!&!		r(   N)r   r   rZ   r   rq   r	   r   r   )r1   r2   r3   r   r   classmethodrm   r4   r(   r&   r    r    b  s     8 I r(   r    )r-   r=   r   r=   )rW   r=   r   r=   )Cr   
__future__r   rg   reior   r   r   typingr   r   r	   r
   r   r   r   r   r   rdflib.compatr   r   rdflib.exceptionsr   rH   rdflib.parserr   r   rdflib.termr   r   r   r   r   typing_extensionsterdflib.graphr   r   r   r   __all__r   r   litinfocompilerv   r{   r}   r   r   r   r   ru   r;   r!   r?   rD   rE   r   rU   r   r=   _BNodeContextTyper   r   r    r4   r(   r&   <module>r      s   #  	 , ,
 
 
 B 7 - & ' %"MM 
 
'
3f
<u
D	/	02::i BJJy!		+	,2::f2::LMBJJw()		  
6	7	*	+BJJAB	$N 2::&'G #3:. V Vr v r(   