Re: [xslt] XSLT and Safari



On Tue, Aug 10, 2004 at 03:57:21PM -0700, David Hyatt wrote:
> I can figure out all the imports/includes, use our own security 
> routines and recursion defenses when loading, and ultimately end up 
> with a bunch of xmlDocPtrs.  What I'd then like to do is be able to 
> tell libxslt to parse a top-level stylesheet, but then register 
> callbacks, so that for a given import/include URI in a specified parent 
> stylesheet, I could then hand back the xmlDocPtr without libxslt having 
> to do any I/O.  I'm not trying to reuse these xmlDocPtrs, so libxslt 
> would be free to modify them if it needed to.

  Okay, I just commited the following API to CVS in libxslt/documents.h:

----------------------------------
/*
 * Hooks for document loading
 */
                                                                                
/**
 * xsltLoadType:
 *
 * Enum defining the kind of loader requirement.
 */
typedef enum {
    XSLT_LOAD_START = 0,        /* loading for a top stylesheet */
    XSLT_LOAD_STYLESHEET = 1,   /* loading for a stylesheet include/import */
    XSLT_LOAD_DOCUMENT = 2      /* loading document at transformation time */
} xsltLoadType;
                                                                                
/**
 * xsltDocLoaderFunc:
 * @URI: the URI of the document to load
 * @dict: the dictionnary to use when parsing that document
 * @options: parsing options, a set of xmlParserOption
 * @ctxt: the context, either a stylesheet or a transformation context
 * @type: the xsltLoadType indicating the kind of loading required
 *
 * An xsltDocLoaderFunc is a signature for a function which can be
 * registered to load document not provided by the compilation or
 * transformation API themselve, for example when an xsl:import,
 * xsl:include is found at compilation time or when a document()
 * call is made at runtime.
 *
 * Returns the pointer to the document (which will be modified and
 * freed by the engine later), or NULL in case of error.
 */
typedef xmlDocPtr (*xsltDocLoaderFunc)          (const xmlChar *URI,
                                                 xmlDictPtr dict,
                                                 int options,
                                                 void *ctxt,
                                                 xsltLoadType type);
                                                                                
XSLTPUBFUN void XSLTCALL
                xsltSetLoaderFunc               (xsltDocLoaderFunc f);
                                                                                
/* the loader may be needed by extension libraries so it is exported */
XSLTPUBVAR xsltDocLoaderFunc xsltDocDefaultLoader;

----------------------------------

  This seems to work as I converted libxslt to use those functions
internally, regression tests passes, and the only part not used is
the 4 lines xsltSetLoaderFunc() function.

 Please try it soon and give feedback, I would like to make a new release 
within a weeks and if there is a problem let's fix it before,

Daniel

-- 
Daniel Veillard      | Red Hat Desktop team http://redhat.com/
veillard redhat com  | libxml GNOME XML XSLT toolkit  http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine http://rpmfind.net/


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]