From 92bc8136311ed86d85f764cbfc82da77d90c0e29 Mon Sep 17 00:00:00 2001 From: Mike Hommey Date: Wed, 12 Sep 2012 11:07:56 +0800 Subject: Add the saxon:systemId extension For https://bugzilla.gnome.org/show_bug.cgi?id=519926 Both Xalan and Saxon have a systemId function (in their respective namespaces) to provide the URI of the file that is being transformed. It would be nice to have that function in libxslt1.1 as well, because then DocBook could use it[0]. [0] See line 250 et seq in /usr/share/xml/docbook/stylesheet/nwalsh/common/stripns.xsl --- libexslt/saxon.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/libexslt/saxon.c b/libexslt/saxon.c index fcb1547a..60880c80 100644 --- a/libexslt/saxon.c +++ b/libexslt/saxon.c @@ -179,6 +179,32 @@ exsltSaxonEvaluateFunction (xmlXPathParserContextPtr ctxt, int nargs) { exsltSaxonEvalFunction(ctxt, 1); } +/** + * exsltSaxonSystemIdFunction: + * @ctxt: an XPath parser context + * @nargs: number of arguments + * + * Implements the SAXON systemId() function + * string saxon:systemId () + * This function returns the system ID of the document being styled. + */ +static void +exsltSaxonSystemIdFunction(xmlXPathParserContextPtr ctxt, int nargs) +{ + if (ctxt == NULL) + return; + if (nargs != 0) { + xmlXPathSetArityError(ctxt); + return; + } + + if ((ctxt->context) && (ctxt->context->doc) && + (ctxt->context->doc->URL)) + valuePush(ctxt, xmlXPathNewString(ctxt->context->doc->URL)); + else + valuePush(ctxt, xmlXPathNewString(BAD_CAST "")); +} + /** * exsltSaxonLineNumberFunction: * @ctxt: an XPath parser context @@ -264,4 +290,7 @@ exsltSaxonRegister (void) { xsltRegisterExtModuleFunction ((const xmlChar *) "line-number", SAXON_NAMESPACE, exsltSaxonLineNumberFunction); + xsltRegisterExtModuleFunction ((const xmlChar *) "systemId", + SAXON_NAMESPACE, + exsltSaxonSystemIdFunction); } -- cgit v1.2.3