Re: [xml] registering a extension module in libxslt



hi again,

more information comming. I just found
  http://mail.gnome.org/archives/xslt/2002-December/msg00040.html
but that does not help.

Another suggestion for the help-page. It does not mention
  xsltUnregisterExtModule()
as the counterpart of xsltRegisterExtModule().


More reading in the source makes me think that probably
xsltGetExtData() is not called or not called with all extension URIs etc.
It is not so easy to find as WITH_XSLT_DEBUG_EXTENSIONS is not active and there
seems to .c/onfigure option that turns it one (will probably manually do that).

Stefan

Stefan Kost wrote:
hi all,

below is a code snippet, when executing it and loading the stylesheet the
extension module initialisation gets not triggered and later I get:

libxslt-error: xsltValueOf: text copy failed
[gitk-core:gitkerrors.c:95] : libxml-error: xmlXPathCompOpEval: function gettext
not found
[gitk-core:gitkerrors.c:95] : libxml-error: Unregistered function

The URI does definitely match (it uses the same constant definition).
I had a look at the libxslt source, but e.g. things like
xsltRegisterExtFunction() are not called verbatim anymore (params come from hashes).

@daniel could you please extend the example at
http://xmlsoft.org/XSLT/extensions.html
with example calls to xsltRegisterExtModule() and xsltRegisterExtFunction() and
a xslt snipped that is using the extension?

Many thanks
  Stefan

--------------

...
if(xsltRegisterExtModule(I18N_NS_URL,xsltExtInit_i18n,xsltExtShutdown_i18n)) {
  gitk_err("failed to register extension modules (i18n)");
  result=FALSE;
}
...
if(!(xsl_i18n=xsltParseStylesheetFile(XSL_PATH"i18n.xsl"))) {
  gitk_err("failed to load stylesheet (i18n.xsl)");
  result=FALSE;
}
...

void *xsltExtInit_i18n(xsltTransformContextPtr ctxt, const xmlChar *URI) {
  gitk_log_intro();
  gitk_log1(">>>>>>>>>> URI=\"%s\"",URI);
  if(xsltRegisterExtFunction(
    ctxt,"gettext",URI,xmlXPathEvalFunc_i18n_gettext)
  ) {
    gitk_err("failed to register extension function (i18n)");
  }
  gitk_log_outro();
  return(NULL);
}

void xsltExtShutdown_i18n(xsltTransformContextPtr ctxt,const xmlChar *URI,void
*data) {
}

void xmlXPathEvalFunc_i18n_gettext(xmlXPathParserContextPtr ctxt, int nargs) {
  gitk_log_intro();
  gitk_log1(">>>>>>>>>> nargs=%d",nargs);
  gitk_log_outro();
}

-----------------

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
  xmlns:giml="http://gitk.sourceforge.net/";
  xmlns:i18n="<I18N_NS_URL>"
  xmlns="http://gitk.sourceforge.net/";
  exclude-result-prefixes="giml">

<xsl:output method="xml" doctype-system="http://gitk.sourceforge.net/giml.dtd"/>

<xsl:template match="i18n:text">
  <xsl:value-of select="i18n:gettext(.)"/>
</xsl:template>
...


-- 
      \|/            Stefan Kost
     <@ @>           private            business
+-oOO-(_)-OOo------------------------------------------------------ - - -  -   -
|       __  Address  Simildenstr. 5     HTWK Leipzig, Fb IMN, Postfach 301166
|      ///           04277 Leipzig      04251 Leipzig
| __  ///            Germany            Germany
| \\\///    Phone    +49341 2253538     +49341 30766101
|  \__/     EMail    st_kost_at_gmx.net kost_at_imn.htwk-leipzig.de
|           WWW      www.sonicpulse.de  www.imn.htwk-leipzig.de/~kost/about.html
===-=-=--=---=---------------------------------- - - -  -    -

Attachment: kost.vcf
Description: Vcard



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]