Can someone commit this patch to the cvs tree? I don't have patch (shame,
shame) on my computer at home (home sick for the week). thanks!
-sterling
carmelo wrote:
>
> hello,
> here is a modification I made to the sablotron module in php enabling
> the use of scheme handlers with an additional function called
> xslt_add_schme_handler.
> I am using it and found it usefull for multi document handling in xslt.
> bye,
> carmelo
>
> --------------------------------------------------------------------------------
> Index: ./ext/sablot/php_sablot.h
> ===================================================================
> RCS file: /repository/php4/ext/sablot/php_sablot.h,v
> retrieving revision 1.11
> diff -r1.11 php_sablot.h
> 54a55
> > PHP_FUNCTION(xslt_set_scheme_handler);
> 86c87
> <
> ---
> >
> 98c99,102
> <
> ---
> >
> > /* Scheme Handling */
> > zval *getAllHandler;
> >
> 145a150
> >
> Index: ./ext/sablot/sablot.c
> ===================================================================
> RCS file: /repository/php4/ext/sablot/sablot.c,v
> retrieving revision 1.28
> diff -r1.28 sablot.c
> 56a57,64
> > /* Scheme Handling Functions */
> > static int _php_sablot_sh_getAll(void *userData, SablotHandle p, const char
>*scheme, const char *rest, char **buffer, int *byteCount);
> > static int _php_sablot_sh_freeMemory(void *userData, SablotHandle p, char
>*buffer);
> > static int _php_sablot_sh_open(void *userData, SablotHandle p, const char
>*scheme, const char *rest, int *handle);
> > static int _php_sablot_sh_get(void *userData, SablotHandle p, int handle, char
>*buffer, int *byteCount);
> > static int _php_sablot_sh_put(void *userData, SablotHandle p, int handle, const
>char *buffer, int *byteCount);
> > static int _php_sablot_sh_close(void *userData, SablotHandle p, int handle);
> >
> 66c74
> < #define FUNCH_FREE(__var) if (__var) zval_del_ref(&(__var));
> ---
> > #define FUNCH_FREE(__var) if (__var) zval_del_ref(&(__var));
> 104c112
> < * called when Sablotron's internal expat parser reaches the
> ---
> > * called when Sablotron's internal expat parser reaches the
> 130a139,151
> > /**
> > * Scheme Handler structure for use when Sablotron
> > * call rhe document Xpath function.
> > */
> > static SchemeHandler sh = {
> > _php_sablot_sh_getAll,
> > _php_sablot_sh_freeMemory,
> > _php_sablot_sh_open,
> > _php_sablot_sh_get,
> > _php_sablot_sh_put,
> > _php_sablot_sh_close
> > };
> >
> 151a173
> > PHP_FE(xslt_set_scheme_handler, NULL)
> 233c255
> <
> ---
> >
> 236c258
> <
> ---
> >
> 242c264
> <
> ---
> >
> 245c267
> <
> ---
> >
> 263c285
> <
> ---
> >
> 268c290
> < /**
> ---
> > /**
> 282c304
> <
> ---
> >
> 284,285c306,307
> <
> < ret = SablotRunProcessor(SABLOT_BASIC_HANDLE,
>SABLOTG(output_transform_file),
> ---
> >
> > ret = SablotRunProcessor(SABLOT_BASIC_HANDLE,
>SABLOTG(output_transform_file),
> 287c309
> <
> ---
> >
> 293c315
> <
> ---
> >
> 295c317
> <
> ---
> >
> 307c329
> < */
> ---
> > */
> 313c335
> <
> ---
> >
> 316c338
> < * current output buffer (so we don't send data twice)
> ---
> > * current output buffer (so we don't send data twice)
> 320c342
> <
> ---
> >
> 322c344
> <
> ---
> >
> 342,343c364,365
> < zval **xslt_uri,
> < **transform_uri,
> ---
> > zval **xslt_uri,
> > **transform_uri,
> 345,346c367,368
> < **xslt_params,
> < **xslt_args,
> ---
> > **xslt_params,
> > **xslt_args,
> 353c375
> < int argc = ZEND_NUM_ARGS(),
> ---
> > int argc = ZEND_NUM_ARGS(),
> 357c379
> <
> ---
> >
> 363c385
> <
> ---
> >
> 365c387
> < * if there are more than 3 function arguments, inspect the value of
> ---
> > * if there are more than 3 function arguments, inspect the value of
> 372c394
> < int numelems,
> ---
> > int numelems,
> 383c405
> <
> ---
> >
> 386c408
> <
> ---
> >
> 388c410
> < * Translate a PHP array (HashTable *) into a
> ---
> > * Translate a PHP array (HashTable *) into a
> 394c416
> <
> ---
> >
> 403c425
> < int numelems,
> ---
> > int numelems,
> 408c430
> <
> ---
> >
> 411c433
> <
> ---
> >
> 415c437
> <
> ---
> >
> 417,418c439,440
> < ret = SablotRunProcessor(SABLOT_BASIC_HANDLE, Z_STRVAL_PP(xslt_uri),
> < Z_STRVAL_PP(transform_uri), Z_STRVAL_PP(result_uri),
> ---
> > ret = SablotRunProcessor(SABLOT_BASIC_HANDLE, Z_STRVAL_PP(xslt_uri),
> > Z_STRVAL_PP(transform_uri), Z_STRVAL_PP(result_uri),
> 423c445
> <
> ---
> >
> 426c448
> <
> ---
> >
> 429c451
> <
> ---
> >
> 431c453
> <
> ---
> >
> 434c456
> <
> ---
> >
> 437c459
> <
> ---
> >
> 440c462
> <
> ---
> >
> 448c470
> <
> ---
> >
> 451c473
> <
> ---
> >
> 461,463c483,485
> < zval **xslt,
> < **input,
> < **result,
> ---
> > zval **xslt,
> > **input,
> > **result,
> 466c488
> < int ret = 0,
> ---
> > int ret = 0,
> 469c491
> <
> ---
> >
> 475c497
> <
> ---
> >
> 477c499
> <
> ---
> >
> 484c506
> <
> ---
> >
> 487c509
> <
> ---
> >
> 497,499c519,521
> <
> < ret = SablotRunProcessor(SABLOT_BASIC_HANDLE, "arg:/_stylesheet",
> < "arg:/_xmlinput", "arg:/_output",
> ---
> >
> > ret = SablotRunProcessor(SABLOT_BASIC_HANDLE, "arg:/_stylesheet",
> > "arg:/_xmlinput", "arg:/_output",
> 502c524
> <
> ---
> >
> 507c529
> <
> ---
> >
> 512c534
> <
> ---
> >
> 516c538
> <
> ---
> >
> 534c556
> <
> ---
> >
> 536c558
> <
> ---
> >
> 541c563
> <
> ---
> >
> 548c570
> <
> ---
> >
> 551c573
> <
> ---
> >
> 558c580
> <
> ---
> >
> 563c585,592
> <
> ---
> >
> > ret = SablotRegHandler(handle->p, HLR_SCHEME, (void *)&sh, (void *)handle);
> >
> > if (ret) {
> > SABLOTG(last_errno) = ret;
> > RETURN_FALSE;
> > }
> >
> 573,577c602,606
> < zval **xh,
> < **xslt_file,
> < **data_file,
> < **xslt_result,
> < **xslt_params,
> ---
> > zval **xh,
> > **xslt_file,
> > **data_file,
> > **xslt_result,
> > **xslt_params,
> 586c615
> <
> ---
> >
> 593c622
> <
> ---
> >
> 597c626
> <
> ---
> >
> 602,603c631,632
> <
> < if (argc > 4) {
> ---
> >
> > if (argc > 4) {
> 608c637
> <
> ---
> >
> 611c640
> <
> ---
> >
> 614c643
> <
> ---
> >
> 618c647
> <
> ---
> >
> 624c653
> <
> ---
> >
> 627c656
> <
> ---
> >
> 630c659
> <
> ---
> >
> 634c663
> <
> ---
> >
> 636c665
> <
> ---
> >
> 645c674
> <
> ---
> >
> 649c678
> <
> ---
> >
> 658,659c687,688
> < zval **xh,
> < **logfile,
> ---
> > zval **xh,
> > **logfile,
> 662,663c691,692
> < int ret = 0,
> < loglevel = 0,
> ---
> > int ret = 0,
> > loglevel = 0,
> 666c695
> <
> ---
> >
> 673c702
> <
> ---
> >
> 678c707
> <
> ---
> >
> 680c709
> <
> ---
> >
> 699c728
> <
> ---
> >
> 705c734
> <
> ---
> >
> 707c736
> <
> ---
> >
> 711c740
> < RETURN_TRUE;
> ---
> > RETURN_TRUE;
> 719c748
> < zval **xh,
> ---
> > zval **xh,
> 722c751
> < char *value = NULL,
> ---
> > char *value = NULL,
> 724c753
> < int argc = ZEND_NUM_ARGS(),
> ---
> > int argc = ZEND_NUM_ARGS(),
> 733c762
> <
> ---
> >
> 740c769
> <
> ---
> >
> 742c771
> <
> ---
> >
> 744c773
> <
> ---
> >
> 753c782
> <
> ---
> >
> 768c797
> <
> ---
> >
> 773c802
> <
> ---
> >
> 783,784c812,813
> < zval **xh,
> < **handlers,
> ---
> > zval **xh,
> > **handlers,
> 791c820
> <
> ---
> >
> 796a826,830
> >
> > if ((*handlers)->type != IS_ARRAY) {
> > php_error(E_ERROR, "The second parameter must be an array");
> > }
> >
> 798c832
> <
> ---
> >
> 800c834
> <
> ---
> >
> 804c838
> <
> ---
> >
> 806c840
> <
> ---
> >
> 811c845
> <
> ---
> >
> 813c847
> < _php_sablot_handler_pair(handle,
> ---
> > _php_sablot_handler_pair(handle,
> 817,818c851,852
> < _php_sablot_handler_pair(handle,
> < &handle->startElementHandler,
>&handle->endElementHandler,
> ---
> > _php_sablot_handler_pair(handle,
> > &handle->startElementHandler,
>&handle->endElementHandler,
> 822c856
> < &handle->startNamespaceHandler,
>&handle->endNamespaceHandler,
> ---
> > &handle->startNamespaceHandler,
>&handle->endNamespaceHandler,
> 833c867
> < } else {
> ---
> > } else {
> 840a875,922
> > /* {{{ proto void xslt_set_scheme_handler(resource xh, array handlers)
> > Set SAX Handlers on the resource handle given by xh. */
> > PHP_FUNCTION(xslt_set_scheme_handler)
> > {
> > zval **xh,
> > **handlers,
> > **indiv_handlers;
> > php_sablot *handle;
> > HashTable *handlers_list;
> > char *string_key = NULL;
> > ulong num_key;
> > SABLOTLS_FETCH();
> >
> > if (ZEND_NUM_ARGS() != 2 ||
> > zend_get_parameters_ex(2, &xh, &handlers) == FAILURE) {
> > WRONG_PARAM_COUNT;
> > }
> >
> > if ((*handlers)->type != IS_ARRAY) {
> > php_error(E_ERROR, "The second parameter must be an array");
> > }
> >
> > ZEND_FETCH_RESOURCE(handle, php_sablot *, xh, -1, "PHP-Sablotron Handle",
>le_sablot);
> >
> > handlers_list = HASH_OF(*handlers);
> >
> > for (zend_hash_internal_pointer_reset(handlers_list);
> > zend_hash_get_current_data(handlers_list, (void **)&indiv_handlers) ==
>SUCCESS;
> > zend_hash_move_forward(handlers_list)) {
> >
> > SEPARATE_ZVAL(indiv_handlers);
> >
> > if (zend_hash_get_current_key(handlers_list, &string_key, &num_key, 0) ==
>HASH_KEY_IS_LONG) {
> > php_error(E_WARNING, "The Keys of the first dimension of your array
>must be strings");
> > RETURN_FALSE;
> > }
> >
> > if (!strcasecmp("getall", string_key)) {
> > zval_add_ref(indiv_handlers);
> > handle->getAllHandler = *indiv_handlers;
> > } else {
> > php_error(E_WARNING, "Invalid option: %s", string_key);
> > }
> >
> > }
> > }
> > /* }}} */
> >
> 849,850c931,932
> < int ret = 0,
> < loglevel = 0,
> ---
> > int ret = 0,
> > loglevel = 0,
> 853c935
> <
> ---
> >
> 860c942
> <
> ---
> >
> 882c964
> <
> ---
> >
> 887c969
> <
> ---
> >
> 896c978
> <
> ---
> >
> 906c988
> <
> ---
> >
> 923c1005
> <
> ---
> >
> 930c1012
> <
> ---
> >
> 949c1031
> <
> ---
> >
> 954c1036
> <
> ---
> >
> 958c1040
> <
> ---
> >
> 961c1043
> <
> ---
> >
> 966c1048
> <
> ---
> >
> 969c1051
> <
> ---
> >
> 988c1070
> <
> ---
> >
> 991c1073
> <
> ---
> >
> 1019c1101
> <
> ---
> >
> 1023c1105
> <
> ---
> >
> 1026c1108
> <
> ---
> >
> 1033c1115
> < /* {{{ _php_sablot_startDoc()
> ---
> > /* {{{ _php_sablot_startDoc()
> 1048c1130
> < /* {{{ _php_sablot_sax_startElement()
> ---
> > /* {{{ _php_sablot_sax_startElement()
> 1053c1135
> <
> ---
> >
> 1056c1138
> <
> ---
> >
> 1069c1151
> <
> ---
> >
> 1073c1155
> <
> ---
> >
> 1079c1161
> < /* {{{ _php_sablot_sax_endElement()
> ---
> > /* {{{ _php_sablot_sax_endElement()
> 1087c1169
> <
> ---
> >
> 1090c1172
> <
> ---
> >
> 1096c1178
> < /* {{{ _php_sablot_sax_startNamespace()
> ---
> > /* {{{ _php_sablot_sax_startNamespace()
> 1101c1183
> <
> ---
> >
> 1104c1186
> <
> ---
> >
> 1108c1190
> <
> ---
> >
> 1114c1196
> < /* {{{ _php_sablot_sax_endNamespace()
> ---
> > /* {{{ _php_sablot_sax_endNamespace()
> 1119c1201
> <
> ---
> >
> 1122c1204
> <
> ---
> >
> 1125c1207
> <
> ---
> >
> 1131c1213
> < /* {{{ _php_sablot_sax_comment()
> ---
> > /* {{{ _php_sablot_sax_comment()
> 1136c1218
> <
> ---
> >
> 1139c1221
> <
> ---
> >
> 1142c1224
> <
> ---
> >
> 1148c1230
> < /* {{{ _php_sablot_sax_PI()
> ---
> > /* {{{ _php_sablot_sax_PI()
> 1153c1235
> <
> ---
> >
> 1156c1238
> <
> ---
> >
> 1160c1242
> <
> ---
> >
> 1166c1248
> < /* {{{ _php_sablot_sax_characters()
> ---
> > /* {{{ _php_sablot_sax_characters()
> 1171c1253
> <
> ---
> >
> 1174c1256
> <
> ---
> >
> 1177c1259
> <
> ---
> >
> 1183c1265
> < /* {{{ _php_sablot_sax_endDoc()
> ---
> > /* {{{ _php_sablot_sax_endDoc()
> 1188c1270
> <
> ---
> >
> 1191c1273
> <
> ---
> >
> 1193c1275
> <
> ---
> >
> 1204c1286
> < /* {{{ _php_sablot_make_code()
> ---
> > /* {{{ _php_sablot_make_code()
> 1218c1300
> <
> ---
> >
> 1221c1303
> <
> ---
> >
> 1223c1305
> <
> ---
> >
> 1231c1313
> <
> ---
> >
> 1234c1316
> <
> ---
> >
> 1237c1319
> <
> ---
> >
> 1242c1324
> <
> ---
> >
> 1244c1326
> <
> ---
> >
> 1247c1329
> <
> ---
> >
> 1250c1332
> <
> ---
> >
> 1258c1340
> <
> ---
> >
> 1260c1342
> <
> ---
> >
> 1263c1345
> <
> ---
> >
> 1266c1348
> <
> ---
> >
> 1271c1353
> <
> ---
> >
> 1275c1357
> <
> ---
> >
> 1280c1362
> <
> ---
> >
> 1284c1366
> <
> ---
> >
> 1286c1368
> <
> ---
> >
> 1289c1371
> <
> ---
> >
> 1293c1375
> <
> ---
> >
> 1300c1382
> <
> ---
> >
> 1310c1392
> <
> ---
> >
> 1347c1429
> <
> ---
> >
> 1351,1352c1433,1434
> <
> < /**
> ---
> >
> > /**
> 1360c1442
> <
> ---
> >
> 1362c1444
> <
> ---
> >
> 1366c1448
> <
> ---
> >
> 1369c1451
> < case MH_LEVEL_ERROR:
> ---
> > case MH_LEVEL_ERROR:
> 1379a1462,1536
> > /* {{{ Sablotron Scheme Handler functions */
> >
> > static int _php_sablot_sh_getAll(void *userData, SablotHandle p, const char
>*scheme, const char *rest, char **buffer, int *byteCount) {
> > php_sablot *handle = (php_sablot *)userData;
> >
> > if (handle->getAllHandler) {
> > zval *retval;
> > zval *args[4];
> > char *mybuff;
> > int i;
> > int argc;
> >
> > argc=4;
> > args[0] = _php_sablot_resource_zval(handle->index);
> > args[1] = _php_sablot_string_zval(scheme);
> > args[2] = _php_sablot_string_zval(rest);
> > args[3] = _php_sablot_string_zval("");
> >
> > MAKE_STD_ZVAL(retval);
> >
> > if (call_user_function(EG(function_table), NULL, handle->getAllHandler,
>retval, argc, args) == FAILURE) {
> > php_error(E_WARNING, "Sorry, couldn't call %s handler", "scheme
>getAll");
> > }
> >
> > zval_dtor(retval);
> > efree(retval);
> >
> > /**
> > * do not destroy xml data.
> > */
> > *buffer=Z_STRVAL_P(args[3]);
> > *byteCount=Z_STRLEN_P(args[3]);
> > /**
> > * destroy zvals
> > */
> > for (i=0; i<3; i++) {
> > zval_del_ref(&(args[i]));
> > }
> > }
> > };
> >
> > static int _php_sablot_sh_freeMemory(void *userData, SablotHandle p, char *buffer)
>{
> > /**
> > * here we should destroy the buffer containing the xml data
> > * buffer to zval and zval-del_ref
> > * we should destroy the zval not the pointer.
> > */
> > };
> >
> > static int _php_sablot_sh_open(void *userData, SablotHandle p, const char *scheme,
>const char *rest, int *handle) {
> > /**
> > * Not implemented
> > */
> > };
> >
> > static int _php_sablot_sh_get(void *userData, SablotHandle p, int handle, char
>*buffer, int *byteCount) {
> > /**
> > * Not implemented
> > */
> > };
> >
> > static int _php_sablot_sh_put(void *userData, SablotHandle p, int handle, const
>char *buffer, int *byteCount) {
> > /**
> > * Not implemented
> > */
> > };
> >
> > static int _php_sablot_sh_close(void *userData, SablotHandle p, int handle) {
> > /**
> > * Not implemented
> > */
> > };
> >
> > /* }}} */
> >
> 1389a1547
> > SablotUnregHandler(handle->p, HLR_SCHEME, NULL, NULL);
> 1392c1550
> <
> ---
> >
> 1401a1560
> > FUNCH_FREE(handle->getAllHandler);
> 1420c1579
> <
> ---
> >
> 1426c1585
> <
> ---
> >
> 1448c1607
> <
> ---
> >
> 1463c1622
> <
> ---
> >
> 1466c1625
> <
> ---
> >
> 1484a1644
> >
>
> --------------------------------------------------------------------------------
> --
> PHP Development Mailing List <http://www.php.net/>
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> To contact the list administrators, e-mail: [EMAIL PROTECTED]
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]