X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2FDEVEL%2Fgdome_xslt%2FC%2Fgdome_xslt%2Fgdome_xslt.c;fp=helm%2FDEVEL%2Fgdome_xslt%2FC%2Fgdome_xslt%2Fgdome_xslt.c;h=0000000000000000000000000000000000000000;hb=c7514aaa249a96c5fdd39b1123fbdb38d92f20b6;hp=2c34f9cb5512c36fae056f7ccf800e14822320d1;hpb=1c7fb836e2af4f2f3d18afd0396701f2094265ff;p=helm.git diff --git a/helm/DEVEL/gdome_xslt/C/gdome_xslt/gdome_xslt.c b/helm/DEVEL/gdome_xslt/C/gdome_xslt/gdome_xslt.c deleted file mode 100644 index 2c34f9cb5..000000000 --- a/helm/DEVEL/gdome_xslt/C/gdome_xslt/gdome_xslt.c +++ /dev/null @@ -1,239 +0,0 @@ -/* This file implements a XSLT engine working on Gdome documents. In fact, - * it just maps Gdome documents to libxml documents back and forth, and - * applyes the transformation on libxml documents using libxlt. - * - * The code is largely based on the code of T.J. Mather's XML::GDOME::XSLT - * Perl module (http://kobesearch.cpan.org/search?dist=XML-GDOME-XSLT) - * - * Copyright (C) 2002: - * Claudio Sacerdoti Coen - * Stefano Zacchiroli - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please send an email to {sacerdot,zack}@cs.unibo.it - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "gdome_xslt.h" - -// Begin of Gdome internals exposed -typedef struct _Gdome_xml_Document Gdome_xml_Document; -struct _Gdome_xml_Document { - GdomeDocument super; - const GdomeDocumentVtab* vtab; - int refcnt; - xmlDocPtr n; - GdomeAccessType accessType; -}; - -GdomeNode* gdome_xml_n_mkref(xmlNode* n); -// End of Gdome internals exposed - -// Begin of the abstraction of Gdome internals. Uses the Gdome internals exposed -xmlDocPtr libxml_of_gdome(GdomeDocument* doc) -{ - return ((Gdome_xml_Document*)doc)->n; -} - -GdomeDocument* gdome_of_libxml(xmlDocPtr n) -{ - return (GdomeDocument*)gdome_xml_n_mkref((xmlNode*)n); -} -// End of the abstraction of Gdome internals. Uses the Gdome internals exposed. - - - -// From now on no Gdome internal should be used directly. - - /******************************/ - /* XSLT stylesheet Processing */ - /******************************/ - -xsltStylesheetPtr processStylesheet(GdomeDocument* style) -{ - xmlDocPtr style_copy; - xmlDocPtr style_libxml; - - if (style == NULL) { - return NULL; - } - style_libxml = libxml_of_gdome(style); - style_copy = xmlCopyDoc(style_libxml, 1); - style_copy->URL = xmlStrdup(style_libxml->URL); - - xsltSetGenericDebugFunc(NULL, NULL); - - return xsltParseStylesheetDoc(style_copy); -} - - /*******************************/ - /* XSLT stylesheet Application */ - /*******************************/ - -GdomeDocument* applyStylesheet(GdomeDocument* source, xsltStylesheetPtr - style_libxslt, const char** params) -{ - xmlDocPtr source_libxml; - xmlDocPtr output_libxml; - - if (source == NULL) return NULL; - source_libxml = libxml_of_gdome(source); - - xsltSetGenericDebugFunc(NULL, NULL); - - output_libxml = xsltApplyStylesheet(style_libxslt, source_libxml, - params); - - if (output_libxml == NULL) return NULL; - - return gdome_of_libxml(output_libxml); -} - - /******************/ - /* Results Output */ - /******************/ - -int saveResultToFilename (const char* name, GdomeDocument* result, - xsltStylesheetPtr style_libxslt, int compression) -{ - xmlDocPtr result_libxml; - - if (result == NULL) return -1; - result_libxml = libxml_of_gdome(result); - - xsltSetGenericDebugFunc(NULL, NULL); - - return xsltSaveResultToFilename(name, result_libxml, - style_libxslt, compression); -} - -int saveResultToFile (FILE* file, GdomeDocument* result, - xsltStylesheetPtr style_libxslt) -{ - xmlDocPtr result_libxml; - - if (result == NULL) return -1; - result_libxml = libxml_of_gdome(result); - - xsltSetGenericDebugFunc(NULL, NULL); - - return xsltSaveResultToFile(file, result_libxml, style_libxslt); -} - -int saveResultToFd (int fd, GdomeDocument* result, xsltStylesheetPtr - style_libxslt) -{ - xmlDocPtr result_libxml; - - if (result == NULL) return -1; - result_libxml = libxml_of_gdome(result); - - xsltSetGenericDebugFunc(NULL, NULL); - - return xsltSaveResultToFd(fd, result_libxml, style_libxslt); -} - - /**********************************************/ - /* Error and Debugging Callbacks Registration */ - /**********************************************/ - - /* max size of a single message passed to callbacks */ -#define MAX_MSG_SIZE 1024 -#define TRUNCATED_MSG "... TRUNCATED ..." -#define TRUNCATED_MSG_LEN strlen(TRUNCATED_MSG) - - /* ERROR callbacks */ - - /* user provided error callback, needs a string input */ -static gdomeXsltMsgCallback errorUserCallback = NULL; - - /* libxslt like error callback, ignore context, builds a string - * input for user provided error callback and invoke it */ -void gdomeXsltErrorCallback (void *ctx, const char *msg, ...) { - va_list args; - char buf[MAX_MSG_SIZE]; - - if (errorUserCallback == NULL) - return; - - va_start(args, msg); - if (vsnprintf(buf, MAX_MSG_SIZE, msg, args) > MAX_MSG_SIZE - 1) - { /* message truncated; write TRUNCATED_MSG on it */ - strncpy(buf+(strlen(buf) - TRUNCATED_MSG_LEN), - TRUNCATED_MSG, TRUNCATED_MSG_LEN); - } - va_end(args); - - (*errorUserCallback) (buf); - - return; -} - - /* set user provided error callback */ -void setErrorCallback (gdomeXsltMsgCallback callback) -{ - errorUserCallback = callback; - xsltSetGenericErrorFunc(NULL, - (callback == NULL ? NULL : gdomeXsltErrorCallback)); - - return; -} - - /* DEBUG callbacks */ - - /* user provided debug callback, needs a string input */ -static gdomeXsltMsgCallback debugUserCallback = NULL; - - /* libxslt like debug callback, ignore context, builds a string - * input for user provided debug callback and invoke it */ -void gdomeXsltDebugCallback (void *ctx, const char *msg, ...) { - va_list args; - char buf[MAX_MSG_SIZE]; - - if (debugUserCallback == NULL) - return; - - va_start(args, msg); - if (vsnprintf(buf, MAX_MSG_SIZE, msg, args) > MAX_MSG_SIZE - 1) - { /* message truncated; write TRUNCATED_MSG on it */ - strncpy(buf+(strlen(buf) - TRUNCATED_MSG_LEN), - TRUNCATED_MSG, TRUNCATED_MSG_LEN); - } - va_end(args); - - (*debugUserCallback) (buf); - - return; -} - - /* set user provided debug callback */ -void setDebugCallback (gdomeXsltMsgCallback callback) -{ - debugUserCallback = callback; - xsltSetGenericDebugFunc(NULL, - (callback == NULL ? NULL : gdomeXsltDebugCallback)); - - return; -} -