o
    i
                     @  sx   d dl mZ d dlmZmZ d dlmZmZ d dlm	Z	m
Z
 ddlmZmZ dd ZG d	d
 d
eZG dd de
ZdS )    )annotations)AnyMutableSequence)ConjunctiveGraphGraph)InputSourceParser   )RDFSink
SinkParserc                  O     d S N )argskwargsr   r   V/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/rdflib/plugins/parsers/trig.pybecauseSubGraph      r   c                   @  s*   e Zd ZdddZdddZdddZdS )TrigSinkParserargstrstrhintreturnc                 C  s   |  ||}|dk r|S | ||}|dkr|S | ||}|dkr$|S | ||}|dkr4| ||S | ||}|dkrD| ||S |S )Nr   )	skipSpacegraphsparqlDirective	directivecheckDot	statement)selfr   r   ijr   r   r   directiveOrStatement   s    z#TrigSinkParser.directiveOrStatementr!   resMutableSequence[Any]c                 C  s   |  ||}|dk r|S |}| |||}|dkr|S || dkrE|  ||d }|dk r4| ||d || dkrE||   |d S dS )Nr   [r	   zExpected ] got EOF])r   uri_ref2	BadSyntaxappend	blankNode)r    r   r!   r$   r"   r   r   r   labelOrSubject)   s   zTrigSinkParser.labelOrSubjectc           	      C  s  d}|  d||}|dkr|}d}g }| |||}|dkr%|d }|}n|r/| ||d n| jjj}| ||}|dk rE| ||d |||d  dkrc| ||d }|dk rb| ||d	 n|}|||d  d
krqdS |d }| jdur| ||d | j}| j| _| j	}t
| _	| j|| _	 | ||}|dk r| ||d |||d  dkr|d }n| ||}|dk r| ||d q| j| _|| _	|| _|S )z
        Parse trig graph, i.e.

           <urn:graphname> = { .. triples .. }

        return -1 if it doesn't look like a graph-decl
        raise Exception if it looks like a graph, but isn't.
        FGRAPHr   Tz,GRAPH keyword must be followed by graph namezEOF found when expected graphr	   =zEOF found when expecting '{'{r(   NzNested graphs are not allowedzneeded '}', found end.}zexpected statement or '}')	sparqlTokr-   r*   _storer   
identifierr   _context_parentContext_reason2r   newGraphr#   )	r    r   r!   need_graphidr"   rr   oldParentContextreason2r   r   r   r   >   s^   


zTrigSinkParser.graphN)r   r   r   r   r   r   )r   r   r!   r   r$   r%   r   r   )r   r   r!   r   r   r   )__name__
__module____qualname__r#   r-   r   r   r   r   r   r      s    

r   c                   @  s$   e Zd ZdZdd ZddddZdS )
TrigParserz$
    An RDFLib parser for TriG

    c                 C  r   r   r   )r    r   r   r   __init__   r   zTrigParser.__init__utf-8sourcer   r   r   encodingr   r   Nonec                 C  s   |dvr
t d| |jjsJ dt|j|jd}||_|j|_t|}||	 p0|
 p0d}t||dd}| }|sC| }|| |j D ]
\}	}
||	|
 qMd S )N)NrB   )z%TriG files are always utf-8 encoded, zI was passed: %sz(TriG Parser needs a context-aware store!)storer4    T)baseURIturtle)	ExceptionrF   context_awarer   r4   default_contextnamespace_managerr
   
absolutizegetPublicIdgetSystemIdr   getCharacterStreamgetByteStream
loadStream	_bindingsitemsbind)r    rC   r   rD   
conj_graphsinkrH   pstreamprefix	namespacer   r   r   parse   s,   
zTrigParser.parseN)rB   )rC   r   r   r   rD   r   r   rE   )r=   r>   r?   __doc__rA   r]   r   r   r   r   r@      s    r@   N)
__future__r   typingr   r   rdflib.graphr   r   rdflib.parserr   r   	notation3r
   r   r   r   r@   r   r   r   r   <module>   s    x