Skip to content

Commit ee82dec

Browse files
committed
xsltFreeStyleSheet, xsltLoadStyleSheetFromFile
1 parent 8375adf commit ee82dec

1 file changed

Lines changed: 102 additions & 28 deletions

File tree

revxml/src/revxml.cpp

Lines changed: 102 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
*/
26872696
void 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)
28882962
EXTERNAL_END_DECLARATIONS
28892963

28902964

0 commit comments

Comments
 (0)