12 #include <libxml/xpath.h>
13 #include <libxml/HTMLparser.h>
19 "title" :
"VuoTextHtml",
33 char *message = strdup(error->message);
34 size_t len = strlen(message);
35 if (message[len-1] ==
'\n')
38 VUserLog(
"Error: %s (line %i)", message, error->line);
46 static void __attribute__((constructor)) init()
63 size_t length = strlen(text);
65 for (
unsigned int i = 0; i < length; ++i)
66 if (text[i] ==
'<' || text[i] ==
'&')
74 int options = HTML_PARSE_RECOVER | HTML_PARSE_NOERROR | HTML_PARSE_NOWARNING;
75 xmlDocPtr doc = htmlReadDoc((
const xmlChar *)text,
"",
"UTF-8", options);
79 doc = htmlReadDoc((
const xmlChar *)text,
"",
"UTF-8", options);
88 xmlXPathContextPtr xpathContext = xmlXPathNewContext(doc);
91 VuoDefer(^{ xmlXPathFreeContext(xpathContext); });
93 xmlXPathObjectPtr xpathObject = xmlXPathEvalExpression((
const unsigned char *)
"//style|//script", xpathContext);
96 VuoDefer(^{ xmlXPathFreeObject(xpathObject); });
98 if (!xmlXPathNodeSetIsEmpty(xpathObject->nodesetval))
100 for (
int i = 0; i < xpathObject->nodesetval->nodeNr; ++i)
102 xmlUnlinkNode(xpathObject->nodesetval->nodeTab[i]);
103 xmlFree(xpathObject->nodesetval->nodeTab[i]);
104 xpathObject->nodesetval->nodeTab[i] = NULL;
110 xmlNodePtr root = xmlDocGetRootElement(doc);
111 xmlChar *content = xmlNodeGetContent(root);