IRI¶
IRIs, including ones that are set with FuncIRI syntax, are passed to the user code the same way as other strings in SVG++.
The only setting in IRI Policy configures whether to distinguish
local references to document fragment (IRIs prefixed with "#") from non-local IRI references.
If policy::iri::distinguish_local used (as by default), then local reference to document fragment
is passed as pair of parameters: {tag::iri_fragment(), <fragment string>}.
If policy::iri::raw is set, then any IRI is passed as single string.
Named class template parameter for IRI Policy is iri_policy.
Example of using default IRI Policy (src/samples/sample_iri.cpp):
#include<svgpp/svgpp.hpp> usingnamespacesvgpp; structContext { template<classString> voidset(tag::attribute::xlink::href,Stringconst&iri) { std::cout<<"IRI: "<<std::string(boost::begin(iri),boost::end(iri))<<"\n"; } template<classString> voidset(tag::attribute::xlink::href,tag::iri_fragment,Stringconst&iri) { std::cout<<"Fragment: "<<std::string(boost::begin(iri),boost::end(iri))<<"\n"; } }; intmain() { Contextcontext; value_parser<tag::type::iri>::parse(tag::attribute::xlink::href(),context, std::string("http://foo.com/bar#123"),tag::source::attribute()); value_parser<tag::type::iri>::parse(tag::attribute::xlink::href(),context, std::string("#rect1"),tag::source::attribute()); // Output: // "IRI: http://foo.com/bar#123" // "Fragment: rect1" return0; }