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;
}