cvs: php4 /ext/xslt php_xslt.h xslt.c

From: Date: Thu, 26 Apr 2001 02:01:09 +0000
Subject: cvs: php4 /ext/xslt php_xslt.h xslt.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-5281@lists.php.net to get a copy of this message
sterling Wed Apr 25 19:01:09 2001 EDT Modified files: /php4/ext/xslt php_xslt.h xslt.c Log: Add the parse_xslt_arguments api function which parses sablotron type arguments into an easy to use structure. Index: php4/ext/xslt/php_xslt.h diff -u php4/ext/xslt/php_xslt.h:1.1 php4/ext/xslt/php_xslt.h:1.2 --- php4/ext/xslt/php_xslt.h:1.1 Wed Apr 25 17:13:25 2001 +++ php4/ext/xslt/php_xslt.h Wed Apr 25 19:01:08 2001 @@ -26,11 +26,26 @@ #define XSLT_OBJ(__func) (&(__func)->obj) #define XSLT_FUNC(__func) ((__func)->func) +#define XSLT_IS_FILE 0 +#define XSLT_IS_DATA 1 + struct xslt_function { zval *obj; zval *func; }; +struct _xslt_argument { + char *ptr; + int type; +}; + +typedef struct { + struct _xslt_argument xml; + struct _xslt_argument xsl; + struct _xslt_argument result; +} xslt_args; + +extern xslt_args *parse_xslt_arguments(char *, char *, char *, char **); extern void assign_xslt_handler(struct xslt_function **, zval **); extern void free_xslt_handler(struct xslt_function *); Index: php4/ext/xslt/xslt.c diff -u php4/ext/xslt/xslt.c:1.1 php4/ext/xslt/xslt.c:1.2 --- php4/ext/xslt/xslt.c:1.1 Wed Apr 25 17:13:25 2001 +++ php4/ext/xslt/xslt.c Wed Apr 25 19:01:08 2001 @@ -45,6 +45,80 @@ } /* }}} */ +static char *find_xslt_argument(const char **argv, const char *key) +{ + char **ptr; + char *return_value; + + ptr = (char **) argv; + while (ptr && *ptr) { + if (! strcmp(*ptr, key)) { + return_value = estrdup(*ptr); + return return_value; + } + + ptr++; + } + + if (! return_value) { + return NULL; + } +} + +/* {{{ parse_xslt_arguments() + Parse an XSLT argument buffer */ +extern xslt_args *parse_xslt_arguments(char *xml, + char *xsl, + char *result, + char **argv) +{ + xslt_args *return_value; + + return_value = emalloc(sizeof(xslt_args)); + + /* The xml argument */ + if (! strncasecmp(xml, "arg:", 4)) { + char *key = xml + 5; + + return_value->xml.type = XSLT_IS_DATA; + return_value->xml.ptr = find_xslt_argument((const char **) argv, + (const char *) key); + } + else { + return_value->xml.type = XSLT_IS_FILE; + return_value->xml.ptr = estrdup(xml); + } + + /* The xslt arguments */ + if (! strncasecmp(xsl, "arg:", 4)) { + char *key = xsl + 5; + + return_value->xsl.type = XSLT_IS_DATA; + return_value->xsl.ptr = find_xslt_argument((const char **) argv, + (const char *) key); + } + else { + return_value->xsl.type = XSLT_IS_FILE; + return_value->xsl.ptr = estrdup(xsl); + } + + /* The result argument */ + if (! strncasecmp(result, "arg:", 4)) { + char *key = result + 5; + + return_value->result.type = XSLT_IS_DATA; + return_value->result.ptr = find_xslt_argument((const char **) argv, + (const char *) key); + } + else { + return_value->result.type = XSLT_IS_FILE; + return_value->result.ptr = estrdup(result); + } + + return return_value; +} +/* }}} */ + /* {{{ call_xslt_function() Call an XSLT handler */ extern void call_xslt_function(char *name,

« previous php.cvs (#5281) next »