| Index: third_party/libxslt/libxslt/imports.c
|
| diff --git a/third_party/libxslt/libxslt/imports.c b/third_party/libxslt/libxslt/imports.c
|
| deleted file mode 100644
|
| index 7262aab9541113e6fd854f396d8406a26550794e..0000000000000000000000000000000000000000
|
| --- a/third_party/libxslt/libxslt/imports.c
|
| +++ /dev/null
|
| @@ -1,414 +0,0 @@
|
| -/*
|
| - * imports.c: Implementation of the XSLT imports
|
| - *
|
| - * Reference:
|
| - * http://www.w3.org/TR/1999/REC-xslt-19991116
|
| - *
|
| - * See Copyright for the status of this software.
|
| - *
|
| - * daniel@veillard.com
|
| - */
|
| -
|
| -#define IN_LIBXSLT
|
| -#include "libxslt.h"
|
| -
|
| -#include <string.h>
|
| -
|
| -#ifdef HAVE_SYS_TYPES_H
|
| -#include <sys/types.h>
|
| -#endif
|
| -#ifdef HAVE_MATH_H
|
| -#include <math.h>
|
| -#endif
|
| -#ifdef HAVE_FLOAT_H
|
| -#include <float.h>
|
| -#endif
|
| -#ifdef HAVE_IEEEFP_H
|
| -#include <ieeefp.h>
|
| -#endif
|
| -#ifdef HAVE_NAN_H
|
| -#include <nan.h>
|
| -#endif
|
| -#ifdef HAVE_CTYPE_H
|
| -#include <ctype.h>
|
| -#endif
|
| -
|
| -#include <libxml/xmlmemory.h>
|
| -#include <libxml/tree.h>
|
| -#include <libxml/hash.h>
|
| -#include <libxml/xmlerror.h>
|
| -#include <libxml/uri.h>
|
| -#include "xslt.h"
|
| -#include "xsltInternals.h"
|
| -#include "xsltutils.h"
|
| -#include "preproc.h"
|
| -#include "imports.h"
|
| -#include "documents.h"
|
| -#include "security.h"
|
| -#include "pattern.h"
|
| -
|
| -
|
| -/************************************************************************
|
| - * *
|
| - * Module interfaces *
|
| - * *
|
| - ************************************************************************/
|
| -/**
|
| - * xsltFixImportedCompSteps:
|
| - * @master: the "master" stylesheet
|
| - * @style: the stylesheet being imported by the master
|
| - *
|
| - * normalize the comp steps for the stylesheet being imported
|
| - * by the master, together with any imports within that.
|
| - *
|
| - */
|
| -static void xsltFixImportedCompSteps(xsltStylesheetPtr master,
|
| - xsltStylesheetPtr style) {
|
| - xsltStylesheetPtr res;
|
| - xmlHashScan(style->templatesHash,
|
| - (xmlHashScanner) xsltNormalizeCompSteps, master);
|
| - master->extrasNr += style->extrasNr;
|
| - for (res = style->imports; res != NULL; res = res->next) {
|
| - xsltFixImportedCompSteps(master, res);
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * xsltParseStylesheetImport:
|
| - * @style: the XSLT stylesheet
|
| - * @cur: the import element
|
| - *
|
| - * parse an XSLT stylesheet import element
|
| - *
|
| - * Returns 0 in case of success -1 in case of failure.
|
| - */
|
| -
|
| -int
|
| -xsltParseStylesheetImport(xsltStylesheetPtr style, xmlNodePtr cur) {
|
| - int ret = -1;
|
| - xmlDocPtr import = NULL;
|
| - xmlChar *base = NULL;
|
| - xmlChar *uriRef = NULL;
|
| - xmlChar *URI = NULL;
|
| - xsltStylesheetPtr res;
|
| - xsltSecurityPrefsPtr sec;
|
| -
|
| - if ((cur == NULL) || (style == NULL))
|
| - return (ret);
|
| -
|
| - uriRef = xmlGetNsProp(cur, (const xmlChar *)"href", NULL);
|
| - if (uriRef == NULL) {
|
| - xsltTransformError(NULL, style, cur,
|
| - "xsl:import : missing href attribute\n");
|
| - goto error;
|
| - }
|
| -
|
| - base = xmlNodeGetBase(style->doc, cur);
|
| - URI = xmlBuildURI(uriRef, base);
|
| - if (URI == NULL) {
|
| - xsltTransformError(NULL, style, cur,
|
| - "xsl:import : invalid URI reference %s\n", uriRef);
|
| - goto error;
|
| - }
|
| -
|
| - res = style;
|
| - while (res != NULL) {
|
| - if (res->doc == NULL)
|
| - break;
|
| - if (xmlStrEqual(res->doc->URL, URI)) {
|
| - xsltTransformError(NULL, style, cur,
|
| - "xsl:import : recursion detected on imported URL %s\n", URI);
|
| - goto error;
|
| - }
|
| - res = res->parent;
|
| - }
|
| -
|
| - /*
|
| - * Security framework check
|
| - */
|
| - sec = xsltGetDefaultSecurityPrefs();
|
| - if (sec != NULL) {
|
| - int secres;
|
| -
|
| - secres = xsltCheckRead(sec, NULL, URI);
|
| - if (secres == 0) {
|
| - xsltTransformError(NULL, NULL, NULL,
|
| - "xsl:import: read rights for %s denied\n",
|
| - URI);
|
| - goto error;
|
| - }
|
| - }
|
| -
|
| - import = xsltDocDefaultLoader(URI, style->dict, XSLT_PARSE_OPTIONS,
|
| - (void *) style, XSLT_LOAD_STYLESHEET);
|
| - if (import == NULL) {
|
| - xsltTransformError(NULL, style, cur,
|
| - "xsl:import : unable to load %s\n", URI);
|
| - goto error;
|
| - }
|
| -
|
| - res = xsltParseStylesheetImportedDoc(import, style);
|
| - if (res != NULL) {
|
| - res->next = style->imports;
|
| - style->imports = res;
|
| - if (style->parent == NULL) {
|
| - xsltFixImportedCompSteps(style, res);
|
| - }
|
| - ret = 0;
|
| - } else {
|
| - xmlFreeDoc(import);
|
| - }
|
| -
|
| -error:
|
| - if (uriRef != NULL)
|
| - xmlFree(uriRef);
|
| - if (base != NULL)
|
| - xmlFree(base);
|
| - if (URI != NULL)
|
| - xmlFree(URI);
|
| -
|
| - return (ret);
|
| -}
|
| -
|
| -/**
|
| - * xsltParseStylesheetInclude:
|
| - * @style: the XSLT stylesheet
|
| - * @cur: the include node
|
| - *
|
| - * parse an XSLT stylesheet include element
|
| - *
|
| - * Returns 0 in case of success -1 in case of failure
|
| - */
|
| -
|
| -int
|
| -xsltParseStylesheetInclude(xsltStylesheetPtr style, xmlNodePtr cur) {
|
| - int ret = -1;
|
| - xmlDocPtr oldDoc;
|
| - xmlChar *base = NULL;
|
| - xmlChar *uriRef = NULL;
|
| - xmlChar *URI = NULL;
|
| - xsltStylesheetPtr result;
|
| - xsltDocumentPtr include;
|
| - xsltDocumentPtr docptr;
|
| - int oldNopreproc;
|
| -
|
| - if ((cur == NULL) || (style == NULL))
|
| - return (ret);
|
| -
|
| - uriRef = xmlGetNsProp(cur, (const xmlChar *)"href", NULL);
|
| - if (uriRef == NULL) {
|
| - xsltTransformError(NULL, style, cur,
|
| - "xsl:include : missing href attribute\n");
|
| - goto error;
|
| - }
|
| -
|
| - base = xmlNodeGetBase(style->doc, cur);
|
| - URI = xmlBuildURI(uriRef, base);
|
| - if (URI == NULL) {
|
| - xsltTransformError(NULL, style, cur,
|
| - "xsl:include : invalid URI reference %s\n", uriRef);
|
| - goto error;
|
| - }
|
| -
|
| - /*
|
| - * in order to detect recursion, we check all previously included
|
| - * stylesheets.
|
| - */
|
| - docptr = style->includes;
|
| - while (docptr != NULL) {
|
| - if (xmlStrEqual(docptr->doc->URL, URI)) {
|
| - xsltTransformError(NULL, style, cur,
|
| - "xsl:include : recursion detected on included URL %s\n", URI);
|
| - goto error;
|
| - }
|
| - docptr = docptr->includes;
|
| - }
|
| -
|
| - include = xsltLoadStyleDocument(style, URI);
|
| - if (include == NULL) {
|
| - xsltTransformError(NULL, style, cur,
|
| - "xsl:include : unable to load %s\n", URI);
|
| - goto error;
|
| - }
|
| -#ifdef XSLT_REFACTORED
|
| - if (IS_XSLT_ELEM_FAST(cur) && (cur->psvi != NULL)) {
|
| - ((xsltStyleItemIncludePtr) cur->psvi)->include = include;
|
| - } else {
|
| - xsltTransformError(NULL, style, cur,
|
| - "Internal error: (xsltParseStylesheetInclude) "
|
| - "The xsl:include element was not compiled.\n", URI);
|
| - style->errors++;
|
| - }
|
| -#endif
|
| - oldDoc = style->doc;
|
| - style->doc = include->doc;
|
| - /* chain to stylesheet for recursion checking */
|
| - include->includes = style->includes;
|
| - style->includes = include;
|
| - oldNopreproc = style->nopreproc;
|
| - style->nopreproc = include->preproc;
|
| - /*
|
| - * TODO: This will change some values of the
|
| - * including stylesheet with every included module
|
| - * (e.g. excluded-result-prefixes)
|
| - * We need to strictly seperate such stylesheet-owned values.
|
| - */
|
| - result = xsltParseStylesheetProcess(style, include->doc);
|
| - style->nopreproc = oldNopreproc;
|
| - include->preproc = 1;
|
| - style->includes = include->includes;
|
| - style->doc = oldDoc;
|
| - if (result == NULL) {
|
| - ret = -1;
|
| - goto error;
|
| - }
|
| - ret = 0;
|
| -
|
| -error:
|
| - if (uriRef != NULL)
|
| - xmlFree(uriRef);
|
| - if (base != NULL)
|
| - xmlFree(base);
|
| - if (URI != NULL)
|
| - xmlFree(URI);
|
| -
|
| - return (ret);
|
| -}
|
| -
|
| -/**
|
| - * xsltNextImport:
|
| - * @cur: the current XSLT stylesheet
|
| - *
|
| - * Find the next stylesheet in import precedence.
|
| - *
|
| - * Returns the next stylesheet or NULL if it was the last one
|
| - */
|
| -
|
| -xsltStylesheetPtr
|
| -xsltNextImport(xsltStylesheetPtr cur) {
|
| - if (cur == NULL)
|
| - return(NULL);
|
| - if (cur->imports != NULL)
|
| - return(cur->imports);
|
| - if (cur->next != NULL)
|
| - return(cur->next) ;
|
| - do {
|
| - cur = cur->parent;
|
| - if (cur == NULL) break;
|
| - if (cur->next != NULL) return(cur->next);
|
| - } while (cur != NULL);
|
| - return(cur);
|
| -}
|
| -
|
| -/**
|
| - * xsltNeedElemSpaceHandling:
|
| - * @ctxt: an XSLT transformation context
|
| - *
|
| - * Checks whether that stylesheet requires white-space stripping
|
| - *
|
| - * Returns 1 if space should be stripped, 0 if not
|
| - */
|
| -
|
| -int
|
| -xsltNeedElemSpaceHandling(xsltTransformContextPtr ctxt) {
|
| - xsltStylesheetPtr style;
|
| -
|
| - if (ctxt == NULL)
|
| - return(0);
|
| - style = ctxt->style;
|
| - while (style != NULL) {
|
| - if (style->stripSpaces != NULL)
|
| - return(1);
|
| - style = xsltNextImport(style);
|
| - }
|
| - return(0);
|
| -}
|
| -
|
| -/**
|
| - * xsltFindElemSpaceHandling:
|
| - * @ctxt: an XSLT transformation context
|
| - * @node: an XML node
|
| - *
|
| - * Find strip-space or preserve-space informations for an element
|
| - * respect the import precedence or the wildcards
|
| - *
|
| - * Returns 1 if space should be stripped, 0 if not, and 2 if everything
|
| - * should be CDTATA wrapped.
|
| - */
|
| -
|
| -int
|
| -xsltFindElemSpaceHandling(xsltTransformContextPtr ctxt, xmlNodePtr node) {
|
| - xsltStylesheetPtr style;
|
| - const xmlChar *val;
|
| -
|
| - if ((ctxt == NULL) || (node == NULL))
|
| - return(0);
|
| - style = ctxt->style;
|
| - while (style != NULL) {
|
| - if (node->ns != NULL) {
|
| - val = (const xmlChar *)
|
| - xmlHashLookup2(style->stripSpaces, node->name, node->ns->href);
|
| - if (val == NULL) {
|
| - val = (const xmlChar *)
|
| - xmlHashLookup2(style->stripSpaces, BAD_CAST "*",
|
| - node->ns->href);
|
| - }
|
| - } else {
|
| - val = (const xmlChar *)
|
| - xmlHashLookup2(style->stripSpaces, node->name, NULL);
|
| - }
|
| - if (val != NULL) {
|
| - if (xmlStrEqual(val, (xmlChar *) "strip"))
|
| - return(1);
|
| - if (xmlStrEqual(val, (xmlChar *) "preserve"))
|
| - return(0);
|
| - }
|
| - if (style->stripAll == 1)
|
| - return(1);
|
| - if (style->stripAll == -1)
|
| - return(0);
|
| -
|
| - style = xsltNextImport(style);
|
| - }
|
| - return(0);
|
| -}
|
| -
|
| -/**
|
| - * xsltFindTemplate:
|
| - * @ctxt: an XSLT transformation context
|
| - * @name: the template name
|
| - * @nameURI: the template name URI
|
| - *
|
| - * Finds the named template, apply import precedence rule.
|
| - * REVISIT TODO: We'll change the nameURI fields of
|
| - * templates to be in the string dict, so if the
|
| - * specified @nameURI is in the same dict, then use pointer
|
| - * comparison. Check if this can be done in a sane way.
|
| - * Maybe this function is not needed internally at
|
| - * transformation-time if we hard-wire the called templates
|
| - * to the caller.
|
| - *
|
| - * Returns the xsltTemplatePtr or NULL if not found
|
| - */
|
| -xsltTemplatePtr
|
| -xsltFindTemplate(xsltTransformContextPtr ctxt, const xmlChar *name,
|
| - const xmlChar *nameURI) {
|
| - xsltTemplatePtr cur;
|
| - xsltStylesheetPtr style;
|
| -
|
| - if ((ctxt == NULL) || (name == NULL))
|
| - return(NULL);
|
| - style = ctxt->style;
|
| - while (style != NULL) {
|
| - if (style->namedTemplates != NULL) {
|
| - cur = (xsltTemplatePtr)
|
| - xmlHashLookup2(style->namedTemplates, name, nameURI);
|
| - if (cur != NULL)
|
| - return(cur);
|
| - }
|
| -
|
| - style = xsltNextImport(style);
|
| - }
|
| - return(NULL);
|
| -}
|
| -
|
|
|