2002-08-09 04:16:51 -04:00
|
|
|
#include <string.h>
|
|
|
|
#include <libxml/xmlmemory.h>
|
|
|
|
#include <libxml/debugXML.h>
|
|
|
|
#include <libxml/HTMLtree.h>
|
|
|
|
#include <libxml/xmlIO.h>
|
|
|
|
#include <libxml/DOCBparser.h>
|
|
|
|
#include <libxml/xinclude.h>
|
|
|
|
#include <libxml/catalog.h>
|
|
|
|
#include <libxslt/xslt.h>
|
|
|
|
#include <libxslt/xsltInternals.h>
|
|
|
|
#include <libxslt/transform.h>
|
|
|
|
#include <libxslt/xsltutils.h>
|
|
|
|
|
|
|
|
|
|
|
|
#include <thread/thread.h>
|
|
|
|
#include <avl/avl.h>
|
|
|
|
#include <httpp/httpp.h>
|
|
|
|
#include <net/sock.h>
|
|
|
|
|
|
|
|
|
|
|
|
#include "connection.h"
|
|
|
|
|
|
|
|
#include "global.h"
|
|
|
|
#include "refbuf.h"
|
|
|
|
#include "client.h"
|
|
|
|
#include "stats.h"
|
|
|
|
|
|
|
|
|
2002-08-09 10:38:42 -04:00
|
|
|
void xslt_transform(xmlDocPtr doc, char *xslfilename, client_t *client)
|
2002-08-09 04:16:51 -04:00
|
|
|
{
|
|
|
|
xmlOutputBufferPtr outputBuffer;
|
|
|
|
xmlDocPtr res;
|
|
|
|
xsltStylesheetPtr cur;
|
|
|
|
const char *params[16 + 1];
|
2002-08-09 10:15:08 -04:00
|
|
|
size_t count,bytes;
|
2002-08-09 04:16:51 -04:00
|
|
|
|
|
|
|
params[0] = NULL;
|
|
|
|
|
|
|
|
xmlSubstituteEntitiesDefault(1);
|
|
|
|
xmlLoadExtDtdDefaultValue = 1;
|
|
|
|
|
|
|
|
cur = xsltParseStylesheetFile(xslfilename);
|
|
|
|
if (cur == NULL) {
|
2002-08-09 10:15:08 -04:00
|
|
|
bytes = sock_write_string(client->con->sock,
|
|
|
|
(char *)"Could not parse XSLT file");
|
|
|
|
if(bytes > 0) client->con->sent_bytes += bytes;
|
|
|
|
|
2002-08-09 04:16:51 -04:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
res = xsltApplyStylesheet(cur, doc, params);
|
|
|
|
|
|
|
|
outputBuffer = xmlAllocOutputBuffer(NULL);
|
|
|
|
|
|
|
|
count = xsltSaveResultTo(outputBuffer, res, cur);
|
|
|
|
|
|
|
|
/* Add null byte to end. */
|
2002-08-09 10:15:08 -04:00
|
|
|
bytes = xmlOutputBufferWrite(outputBuffer, 1, "");
|
2002-08-09 04:16:51 -04:00
|
|
|
|
2002-08-09 10:15:08 -04:00
|
|
|
if(sock_write_string(client->con->sock,
|
|
|
|
(char *)outputBuffer->buffer->content))
|
|
|
|
client->con->sent_bytes += bytes;
|
|
|
|
|
2002-08-09 04:16:51 -04:00
|
|
|
|
|
|
|
xmlFree(outputBuffer);
|
|
|
|
xsltFreeStylesheet(cur);
|
|
|
|
xmlFreeDoc(res);
|
|
|
|
|
|
|
|
xsltCleanupGlobals(); /* Neccesary? */
|
|
|
|
}
|
|
|
|
|