From 6f9e1680085e7bb4d258f6f8116369d122e196e1 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 16 Jan 2023 03:03:27 +0000 Subject: CTAN sync 202301160303 --- .../tikz/libraries/tikzlibraryrdf.code.tex | 291 +++++++++++++++++++++ 1 file changed, 291 insertions(+) create mode 100644 graphics/pgf/base/tex/generic/frontendlayer/tikz/libraries/tikzlibraryrdf.code.tex (limited to 'graphics/pgf/base/tex/generic/frontendlayer/tikz/libraries/tikzlibraryrdf.code.tex') diff --git a/graphics/pgf/base/tex/generic/frontendlayer/tikz/libraries/tikzlibraryrdf.code.tex b/graphics/pgf/base/tex/generic/frontendlayer/tikz/libraries/tikzlibraryrdf.code.tex new file mode 100644 index 0000000000..74e77ac3e2 --- /dev/null +++ b/graphics/pgf/base/tex/generic/frontendlayer/tikz/libraries/tikzlibraryrdf.code.tex @@ -0,0 +1,291 @@ +% Copyright 2018 by Till Tantau +% +% This file may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU Public License. +% +% See the file doc/generic/pgf/licenses/LICENSE for more details. + +\ProvidesFileRCS{tikzlibraryrdf.code.tex} + + + +\def\tikz@add@rdf@pre@option#1{\expandafter\def\expandafter\tikz@rdf@pre@options\expandafter{\tikz@rdf@pre@options#1}}% +\def\tikz@add@rdf@post@option#1{\expandafter\def\expandafter\tikz@rdf@post@options\expandafter{\tikz@rdf@post@options#1}}% + +\let\tikz@rdf@pre@options\pgfutil@empty +\let\tikz@rdf@post@options\pgfutil@empty + +\tikzset{ + % + % Switching on the engine + % + rdf engine on/.code={% + \def\tikz@clear@rdf@options{\let\tikz@rdf@pre@options\pgfutil@empty\let\tikz@rdf@post@options\pgfutil@empty}% + \def\tikz@do@rdf@pre@options{\tikz@rdf@pre@options\let\tikz@rdf@pre@options\pgfutil@empty}% + \def\tikz@do@rdf@post@options{\tikz@rdf@post@options\let\tikz@rdf@post@options\pgfutil@empty}% + \pgfkeys{/tikz/rdf engine/.code=\tikz@add@rdf@pre@option{\pgfqkeys{/tikz/rdf engine}{##1}}}% + }, + rdf engine/.cd, + % + every statement/.style=, + % + % Namespaces + % + prefix/.code=\pgfrdfprefix{#1}, + % + % Core commands + % + statement/.code={% + {% + \pgfkeys{/tikz/rdf engine/every statement}% + \pgfqkeys{/tikz/rdf engine/statements}{#1}% + \iftikz@rdf@is@a@container\tikz@rdf@init@container\fi% + \iftikz@rdf@is@a@member\tikz@rdf@make@member\fi% + \tikz@rdf@make@triple% + \expandafter}\tikz@rdf@action% + }, + get scope curie/.code={% + \ifx\tikz@id@name\pgfutil@empty% + \def\tikz@id@name{@rdf}% + \fi% + \pgfidrefnextuse\tikz@temp{\tikz@id@name}% + \edef#1{\tikzrdfhashmark\tikz@temp}% + }, + get new resource curie/.code={% + \pgfsys@new@id\tikz@temp% + \edef#1{\tikzrdfhashmark\tikz@temp}% + }, + scope is new context/.style={get scope curie=\tikzrdfcontext} +}% + +\def\tikzrdfcontext{\tikzrdfhashmark}%empty by default + +\tikzset{ + rdf engine/statements/.cd, + % + % Core properties of statements + % + subject/.code={% + \def\tikz@rdf@target{\tikz@rdf@subject}% + \tikz@rdf@parse{#1}% + }, + predicate/.code={% + \def\tikz@rdf@target{\tikz@rdf@predicate}% + \tikz@rdf@parse{#1}% + }, + object/.code={% + \let\tikz@rdf@object@literal\relax% + \let\tikz@rdf@object\relax% + \def\tikz@temp{#1}% + \ifx\tikz@temp\tikz@rdf@current@scope@text% + \tikz@rdf@object@scope@contenttrue% + \else% + \tikz@rdf@object@scope@contentfalse% + \def\tikz@rdf@target{\tikz@rdf@object}% + \tikz@rdf@parse{#1}% + \fi% + }, + % + % Shorthands + % + has type/.style={predicate=rdf:type,object={#1}}, + % + % Containers + % + is a bag/.style={has type=rdf:Bag, is a container}, + is a sequence/.style={has type=rdf:Seq, is a container}, + is an alternative/.style={has type=rdf:Alt, is a container}, + % + is a container/.code={\tikz@rdf@is@a@containertrue}, + % + has as member/.code={\tikz@rdf@is@a@membertrue},% +}% + +\def\tikz@rdf@current@scope@text{scope content}% + +\let\tikz@rdf@subject\relax +\let\tikz@rdf@predicate\pgfutil@empty +\let\tikz@rdf@object\relax +\let\tikz@rdf@object@literal\relax +\let\tikz@rdf@container\relax + +\newif\iftikz@rdf@object@scope@content +\newif\iftikz@rdf@is@a@container +\newif\iftikz@rdf@is@a@member + + +\def\tikz@rdf@parse#1{% + \edef\tikz@temp{#1}% + \expandafter\tikz@rdf@parse@#1\relax% +}% + +\def\tikz@rdf@parse@{% + \pgfutil@ifnextchar({\tikz@rdf@parse@name}{%) + \pgfutil@ifnextchar"{\tikz@rdf@parse@literals}{% + \tikz@rdf@parse@curie% + }% + }% +}% + +\def\tikz@rdf@parse@name(#1)\relax{% + \pgfidrefprevuse\tikz@rdf@the@id{#1}\expandafter\edef\tikz@rdf@target{\tikzrdfhashmark\tikz@rdf@the@id}% +}% +\def\tikz@rdf@parse@literals"#1"{% + \ifx\tikz@rdf@target\tikz@rdf@object@name% + \def\tikz@rdf@object@literal{#1}% + \else% + \tikzerror{Only RDF objects can be literals}% + \fi% + \pgfutil@ifnextchar\relax\pgfutil@gobble\tikz@rdf@parse@literals@rest% +}% +\def\tikz@rdf@parse@literals@rest and scope content\relax{% + \tikz@rdf@object@scope@contenttrue% +}% + +\def\tikz@rdf@object@name{\tikz@rdf@object}% +\def\tikz@rdf@parse@curie#1\relax{% + \expandafter\def\tikz@rdf@target{#1}% +}% + +{% + \catcode`\#=11 + \gdef\tikzrdfhashmark{#}% +}% + + +\def\tikz@rdf@make@triple{% + % First, ensure that subject, predicate and object are set: + \ifx\tikz@rdf@subject\relax% + \tikzerror{RDF statement misses subject}% + \else% + \ifx\tikz@rdf@predicate\relax% + \tikzerror{RDF statement misses predicate}% + \else% + \iftikz@rdf@object@scope@content% + \edef\tikz@marshal{\noexpand\tikz@rdf@make@content@triple{\tikz@rdf@subject}{\tikz@rdf@predicate}{\tikz@rdf@object@literal}}% + \tikz@marshal% + \else% + \ifx\tikz@rdf@object\relax% + \ifx\tikz@rdf@object@literal\relax% + \tikzerror{RDF statement misses object}% + \else% + \edef\tikz@marshal{\noexpand\tikz@rdf@make@literal@triple{\tikz@rdf@subject}{\tikz@rdf@predicate}{\tikz@rdf@object@literal}}% + \tikz@marshal% + \fi% + \else% + \edef\tikz@marshal{\noexpand\tikz@rdf@make@normal@triple{\tikz@rdf@subject}{\tikz@rdf@predicate}{\tikz@rdf@object}}% + \tikz@marshal% + \fi% + \fi% + \fi% + \fi% +}% + +\def\tikz@rdf@make@content@triple#1#2#3{% + \def\tikz@rdf@action{% + \def\tikz@rdf@invoke@code{% + \def\tikz@temp{#3}% + \ifx\tikz@temp\tikz@rdf@object@literal@text\else% + \pgfrdfcontent{#3}% + \fi% + \pgfrdfabout{#1}% + \pgfrdfdatatype{rdf:XMLLiteral}% + \foreach \tikz@rdf@pred in {#2}{% + \ifx\tikz@rdf@pred\pgfutil@empty\else% + \expandafter\pgfrdfproperty\expandafter{\tikz@rdf@pred}% + \fi% + }% + }% + }% +}% + +\def\tikz@rdf@make@literal@triple#1#2#3{% + \def\tikz@rdf@action{% + \tikz@add@rdf@post@option{% + {% + \pgfrdfabout{#1}% + \foreach \tikz@rdf@pred in {#2}{% + \ifx\tikz@rdf@pred\pgfutil@empty\else% + \expandafter\pgfrdfproperty\expandafter{\tikz@rdf@pred}% + \fi% + }% + \pgfrdfcontent{#3}% + \pgfidscope% + \endpgfidscope% + }% + }% + }% +}% + +\def\tikz@rdf@make@normal@triple#1#2#3{% + \def\tikz@rdf@action{% + \tikz@add@rdf@post@option{% + {% + \pgfrdfabout{#1}% + \foreach \tikz@rdf@pred in {#2}{% + \ifx\tikz@rdf@pred\pgfutil@empty\else% + \expandafter\pgfrdfproperty\expandafter{\tikz@rdf@pred}% + \fi% + }% + \pgfrdfresource{#3}% + \pgfidscope% + \endpgfidscope% + }% + }% + }% +}% + +\def\tikz@rdf@object@literal@text{\tikz@rdf@object@literal}% + + + + +% Containers + +\def\tikz@rdf@init@container{% + \ifx\tikz@rdf@subject\relax% + \tikzerror{RDF statement misses subject}% + \else% + \expandafter\gdef\csname tikz@rdf@c@\tikz@rdf@subject\endcsname{0}% + \fi% +}% + + +\def\tikz@rdf@make@member{% + \ifx\tikz@rdf@subject\relax% + \tikzerror{RDF statement misses subject}% + \else% + % Get number: + \expandafter\let\expandafter\tikz@temp\csname tikz@rdf@c@\tikz@rdf@subject\endcsname% + \ifx\tikz@temp\relax% + \tikzerror{RDF subject is not a container}% + \else% + \c@pgf@counta\tikz@temp% + \advance\c@pgf@counta by1\relax% + \expandafter\xdef\csname tikz@rdf@c@\tikz@rdf@subject\endcsname{\the\c@pgf@counta}% + \edef\tikz@rdf@predicate{rdf:_\the\c@pgf@counta}% + \fi% + \fi% +}% + + + + + +% Hooks: + +\let\tikz@rdf@invoke@code\relax + +\def\tikz@rdf@id@hook{% + \tikz@rdf@invoke@code% + \let\tikz@rdf@invoke@code\relax% +}% + +% Add hook: +\expandafter\def\expandafter\tikz@id@hook\expandafter{\tikz@id@hook\tikz@rdf@id@hook}% + + + +\endinput -- cgit v1.2.3