@@ -2684,24 +2684,89 @@ void XML_XPathDataFromQuery(char *args[], int nargs, char **retstring, Bool *pas
26842684 *retstring = istrdup (xmlerrors[XMLERR_BADDOCID ]);
26852685}
26862686
2687+ // MDW-2013-08-09: [[ RevXmlXslt ]]
2688+ /* *
2689+ * XML_xsltLoadStylesheet
2690+ * @pStylesheet : stylesheet contents
2691+ *
2692+ * returns an xsltStylesheetPtr which can be used in xsltApplyStyleSheet
2693+ *
2694+ * put xsltLoadStylesheet(tStylesheet)
2695+ */
26872696void XML_xsltLoadStylesheet (char *args[], int nargs, char **retstring, Bool *pass, Bool *error)
26882697{
26892698 *pass = False;
26902699 *error = False;
26912700 xsltStylesheetPtr cur = NULL ;
26922701 char *result;
26932702
2694- cur = xsltParseStylesheetFile ((const xmlChar *)args[0 ]);
2695- result = (char *)malloc (INTSTRSIZE );
2696- sprintf (result," %d" ,cur);
2697- *retstring = istrdup (result);
2698- free (result);
2703+ if (1 == nargs)
2704+ {
2705+ cur = xsltParseStylesheetFile ((const xmlChar *)args[0 ]);
2706+ result = (char *)malloc (INTSTRSIZE );
2707+ sprintf (result," %d" ,cur);
2708+ *retstring = istrdup (result);
2709+ free (result);
2710+ }
2711+ else
2712+ *retstring = istrdup (xmlerrors[XMLERR_BADARGUMENTS ]);
2713+ }
2714+
2715+ /* *
2716+ * XML_xsltLoadStylesheetFromFile
2717+ * @pStylesheetPath : path to stylesheet file
2718+ *
2719+ * returns an xsltStylesheetPtr which can be used in xsltApplyStyleSheet
2720+ *
2721+ * put xsltLoadStylesheetFromFile(tPathToStylesheet)
2722+ */
2723+ void XML_xsltLoadStylesheetFromFile (char *args[], int nargs, char **retstring, Bool *pass, Bool *error)
2724+ {
2725+ *pass = False;
2726+ *error = False;
2727+ xsltStylesheetPtr cur = NULL ;
2728+ char *result;
2729+
2730+ if (1 == nargs)
2731+ {
2732+ cur = xsltParseStylesheetFile ((const xmlChar *)args[0 ]);
2733+ result = (char *)malloc (INTSTRSIZE );
2734+ sprintf (result," %d" ,cur);
2735+ *retstring = istrdup (result);
2736+ free (result);
2737+ }
2738+ else
2739+ *retstring = istrdup (xmlerrors[XMLERR_BADARGUMENTS ]);
2740+ }
2741+
2742+ /* *
2743+ * XML_xsltFreeStylesheet
2744+ * @pStylesheet : id of a stylesheet cursor
2745+ *
2746+ * frees a xsltStylesheetPtr created by xsltLoadStylesheet
2747+ *
2748+ * put xsltFreeStylesheet(tStylesheetID)
2749+ */
2750+ void XML_xsltFreeStylesheet (char *args[], int nargs, char **retstring, Bool *pass, Bool *error)
2751+ {
2752+ *pass = False;
2753+ *error = False;
2754+ xsltStylesheetPtr cur = NULL ;
2755+
2756+ if (1 == nargs)
2757+ {
2758+ cur = (xsltStylesheetPtr)atoi (args[0 ]);
2759+ xsltFreeStylesheet (cur);
2760+ *retstring = (char *)calloc (1 ,1 );
2761+ }
2762+ else
2763+ *retstring = istrdup (xmlerrors[XMLERR_BADARGUMENTS ]);
26992764}
27002765
27012766/* *
27022767 * XML_xsltApplyStylesheet
27032768 * @pDocID : xml tree id (already parsed)
2704- * @pStylesheet : stylesheet to apply against the xml document
2769+ * @pStylesheet : xsltStylesheetPtr from xsltLoadStylesheet
27052770 * @pParamList : ]optional] delimiter between data elements (default="\n")
27062771 *
27072772 *
@@ -2720,38 +2785,43 @@ void XML_xsltApplyStylesheet(char *args[], int nargs, char **retstring, Bool *pa
27202785 xmlChar *doc_txt_ptr;
27212786 int doc_txt_len;
27222787
2723- // XML_NewDocumentFromFile(args, nargs, retstring, pass, error);
2724- int docID = atoi (args[0 ]);
2725- CXMLDocument *xmlDocument = doclist.find (docID);
2726- if (NULL != xmlDocument)
2788+ if (2 <= nargs)
27272789 {
2728- xmlDocPtr xmlDoc = xmlDocument->GetDocPtr ();
2729- if (NULL != xmlDoc)
2790+ // XML_NewDocumentFromFile(args, nargs, retstring, pass, error);
2791+ int docID = atoi (args[0 ]);
2792+ CXMLDocument *xmlDocument = doclist.find (docID);
2793+ if (NULL != xmlDocument)
27302794 {
2731- // cur = xsltParseStylesheetFile((const xmlChar *)args[1]);
2732- cur = (xsltStylesheetPtr)atoi (args[1 ]);
2733- if (NULL != cur)
2795+ xmlDocPtr xmlDoc = xmlDocument->GetDocPtr ();
2796+ if (NULL != xmlDoc)
27342797 {
2735- params[nbparams] = NULL ;
2736- res = xsltApplyStylesheet (cur, xmlDoc, params);
2798+ cur = (xsltStylesheetPtr)atoi (args[1 ]);
2799+ if (NULL != cur)
2800+ {
2801+ params[nbparams] = NULL ;
2802+ res = xsltApplyStylesheet (cur, xmlDoc, params);
27372803
2738- // xsltSaveResultToFile(stdout, res, cur);
2739- xsltSaveResultToString (&doc_txt_ptr, &doc_txt_len, res, cur);
2804+ xsltSaveResultToString (&doc_txt_ptr, &doc_txt_len, res, cur);
27402805
2741- *retstring = istrdup ((char *)doc_txt_ptr);
2806+ *retstring = istrdup ((char *)doc_txt_ptr);
27422807
2743- xsltFreeStylesheet (cur);
2744- xmlFreeDoc (res);
2808+ xsltFreeStylesheet (cur);
2809+ xmlFreeDoc (res);
27452810
2746- xsltCleanupGlobals ();
2747- xmlCleanupParser ();
2811+ xsltCleanupGlobals ();
2812+ xmlCleanupParser ();
2813+ }
2814+ else
2815+ *retstring = istrdup (xmlerrors[XPATHERR_BADDOCPOINTER ]);
27482816 }
27492817 else
2750- *retstring = istrdup (xmlerrors[XMLERR_BADDOCID ]);
2818+ *retstring = istrdup (xmlerrors[XPATHERR_BADDOCPOINTER ]);
27512819 }
2820+ else
2821+ *retstring = istrdup (xmlerrors[XMLERR_BADDOCID ]);
27522822 }
27532823 else
2754- *retstring = istrdup (xmlerrors[XMLERR_BADDOCID ]);
2824+ *retstring = istrdup (xmlerrors[XMLERR_BADARGUMENTS ]);
27552825}
27562826
27572827/* *
@@ -2807,8 +2877,10 @@ void XML_xsltApplyStylesheetFile(char *args[], int nargs, char **retstring, Bool
28072877 xmlCleanupParser ();
28082878 }
28092879 else
2810- *retstring = istrdup (xmlerrors[XMLERR_BADDOCID ]);
2880+ *retstring = istrdup (xmlerrors[XPATHERR_BADDOCPOINTER ]);
28112881 }
2882+ else
2883+ *retstring = istrdup (xmlerrors[XPATHERR_BADDOCPOINTER ]);
28122884 }
28132885 else
28142886 *retstring = istrdup (xmlerrors[XMLERR_BADDOCID ]);
@@ -2881,10 +2953,12 @@ EXTERNAL_BEGIN_DECLARATIONS("revXML")
28812953 EXTERNAL_DECLARE_FUNCTION(" revXMLEvaluateXPath" , XML_EvalXPath)
28822954 EXTERNAL_DECLARE_FUNCTION(" revXMLDataFromXPathQuery" , XML_XPathDataFromQuery)
28832955
2884- // MDW-2013-06-22 : [[ RevXmlXslt ]]
2956+ // MDW-2013-08-09 : [[ RevXmlXslt ]]
28852957 EXTERNAL_DECLARE_FUNCTION(" xsltApplyStylesheet" , XML_xsltApplyStylesheet)
28862958 EXTERNAL_DECLARE_FUNCTION(" xsltApplyStylesheetFile" , XML_xsltApplyStylesheetFile)
28872959 EXTERNAL_DECLARE_FUNCTION(" xsltLoadStylesheet" , XML_xsltLoadStylesheet)
2960+ EXTERNAL_DECLARE_FUNCTION(" xsltLoadStylesheetFromFile" , XML_xsltLoadStylesheetFromFile)
2961+ EXTERNAL_DECLARE_COMMAND(" xsltFreeStylesheet" , XML_xsltFreeStylesheet)
28882962EXTERNAL_END_DECLARATIONS
28892963
28902964
0 commit comments