o
    mi4                     @  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   U/home/kim/smarthome/.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graphZsparqlDirective	directiveZcheckDotZ	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   Zuri_ref2	BadSyntaxappendZ	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.
        FZ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 '}')Z	sparqlTokr(   r&   _storer   
identifierr   _contextZ_parentContextZ_reason2r   ZnewGraphr    )	r   r   r   Zneed_graphidr   rr   ZoldParentContextZ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)Nr5   )z%TriG files are always utf-8 encoded, zI was passed: %sz(TriG Parser needs a context-aware store!)storer-    T)baseURIturtle)	Exceptionr9   Zcontext_awarer   r-   Zdefault_contextZnamespace_managerr
   Z
absolutizeZgetPublicIdZgetSystemIdr   ZgetCharacterStreamZgetByteStreamZ
loadStreamZ	_bindingsitemsbind)r   r6   r   r7   Z
conj_graphZsinkr;   pstreamprefix	namespacer   r   r   parse   s,   
zTrigParser.parseN)r5   )r6   r   r   r   r7   r   r   r8   )r0   r1   r2   __doc__r4   rD   r   r   r   r   r3      s    r3   N)
__future__r   typingr   r   Zrdflib.graphr   r   Zrdflib.parserr   r   Z	notation3r
   r   r   r   r3   r   r   r   r   <module>   s    x