Commit 891681e3 authored by Nick Wellnhofer's avatar Nick Wellnhofer

Allow {URI}NCName syntax for user parameters

Thanks to Richard Smith <richard@ex-parrot.com> for the patch. Applied
with minor changes.

Fixes bug #764195.

https://bugzilla.gnome.org/show_bug.cgi?id=764195
parent 8137d94d
......@@ -1445,21 +1445,35 @@ xsltProcessUserParamInternal(xsltTransformContextPtr ctxt,
/*
* Name lookup
*/
name = xsltSplitQName(ctxt->dict, name, &prefix);
href = NULL;
if (prefix != NULL) {
xmlNsPtr ns;
ns = xmlSearchNs(style->doc, xmlDocGetRootElement(style->doc),
prefix);
if (ns == NULL) {
xsltTransformError(ctxt, style, NULL,
"user param : no namespace bound to prefix %s\n", prefix);
href = NULL;
} else {
href = ns->href;
}
if (name[0] == '{') {
int len = 0;
while ((name[len] != 0) && (name[len] != '}')) len++;
if (name[len] == 0) {
xsltTransformError(ctxt, style, NULL,
"user param : malformed parameter name : %s\n", name);
} else {
href = xmlDictLookup(ctxt->dict, &name[1], len-1);
name = xmlDictLookup(ctxt->dict, &name[len + 1], -1);
}
}
else {
name = xsltSplitQName(ctxt->dict, name, &prefix);
if (prefix != NULL) {
xmlNsPtr ns;
ns = xmlSearchNs(style->doc, xmlDocGetRootElement(style->doc),
prefix);
if (ns == NULL) {
xsltTransformError(ctxt, style, NULL,
"user param : no namespace bound to prefix %s\n", prefix);
href = NULL;
} else {
href = ns->href;
}
}
}
if (name == NULL)
......
......@@ -523,6 +523,7 @@ static void usage(const char *name) {
#endif
printf("\t--encoding: the input document character encoding\n");
printf("\t--param name value : pass a (parameter,value) pair\n");
printf("\t name is a QName or a string of the form {URI}NCName.\n");
printf("\t value is an UTF8 XPath expression.\n");
printf("\t string values must be quoted like \"'string'\"\n or");
printf("\t use stringparam to avoid it\n");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment