mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
- run ext sources through conv_proto
- add necessary phpext_*_ptr
This commit is contained in:
parent
4fe8fe715e
commit
b57dc27595
66 changed files with 1615 additions and 1317 deletions
398
ext/xml/xml.c
398
ext/xml/xml.c
|
@ -2,7 +2,7 @@
|
|||
+----------------------------------------------------------------------+
|
||||
| PHP HTML Embedded Scripting Language Version 3.0 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997,1998 PHP Development Team (See Credits file) |
|
||||
| Copyright (c) 1997-1999 PHP Development Team (See Credits file) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This program is free software; you can redistribute it and/or modify |
|
||||
| it under the terms of one of the following licenses: |
|
||||
|
@ -23,7 +23,7 @@
|
|||
| If you did not, or have any questions about PHP licensing, please |
|
||||
| contact core@php.net. |
|
||||
+----------------------------------------------------------------------+
|
||||
| Authors: Stig Sæther Bakken <ssb@guardian.no> |
|
||||
| Authors: Stig Sæther Bakken <ssb@fast.no> |
|
||||
+----------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
|
@ -109,13 +109,15 @@ static void xml_destroy_parser(xml_parser *);
|
|||
static void xml_set_handler(char **, pval *);
|
||||
inline static unsigned short xml_encode_iso_8859_1(unsigned char);
|
||||
inline static char xml_decode_iso_8859_1(unsigned short);
|
||||
inline static unsigned short xml_encode_us_ascii(char);
|
||||
inline static unsigned short xml_encode_us_ascii(unsigned char);
|
||||
inline static char xml_decode_us_ascii(unsigned short);
|
||||
static XML_Char *xml_utf8_encode(const char *, int, int *, const XML_Char *);
|
||||
static char *xml_utf8_decode(const XML_Char *, int, int *, const XML_Char *);
|
||||
static pval *xml_call_handler(xml_parser *, char *, int, pval **);
|
||||
static pval *php3i_xmlcharpval(const XML_Char *, int, const XML_Char *);
|
||||
static int php3i_xmlcharlen(const XML_Char *);
|
||||
static void php3i_add_to_info(xml_parser *parser,char *name);
|
||||
|
||||
|
||||
void php3i_xml_startElementHandler(void *, const char *, const char **);
|
||||
void php3i_xml_endElementHandler(void *, const char *);
|
||||
|
@ -139,6 +141,7 @@ function_entry xml_functions[] = {
|
|||
PHP_FE(xml_set_notation_decl_handler, NULL)
|
||||
PHP_FE(xml_set_external_entity_ref_handler, NULL)
|
||||
PHP_FE(xml_parse, NULL)
|
||||
PHP_FE(xml_parse_into_struct, NULL)
|
||||
PHP_FE(xml_get_error_code, NULL)
|
||||
PHP_FE(xml_error_string, NULL)
|
||||
PHP_FE(xml_get_current_line_number, NULL)
|
||||
|
@ -229,6 +232,9 @@ int php3_minit_xml(INIT_FUNC_ARGS)
|
|||
|
||||
REGISTER_LONG_CONSTANT("XML_OPTION_CASE_FOLDING", PHP3_XML_OPTION_CASE_FOLDING, CONST_CS|CONST_PERSISTENT);
|
||||
REGISTER_LONG_CONSTANT("XML_OPTION_TARGET_ENCODING", PHP3_XML_OPTION_TARGET_ENCODING, CONST_CS|CONST_PERSISTENT);
|
||||
REGISTER_LONG_CONSTANT("XML_OPTION_SKIP_TAGSTART", PHP3_XML_OPTION_SKIP_TAGSTART, CONST_CS|CONST_PERSISTENT);
|
||||
REGISTER_LONG_CONSTANT("XML_OPTION_SKIP_WHITE", PHP3_XML_OPTION_SKIP_WHITE, CONST_CS|CONST_PERSISTENT);
|
||||
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
@ -311,6 +317,9 @@ xml_destroy_parser(xml_parser *parser)
|
|||
if (parser->parser) {
|
||||
XML_ParserFree(parser->parser);
|
||||
}
|
||||
if (parser->ltags) {
|
||||
efree(parser->ltags);
|
||||
}
|
||||
if (parser->startElementHandler) {
|
||||
efree(parser->startElementHandler);
|
||||
}
|
||||
|
@ -403,7 +412,6 @@ xml_call_handler(xml_parser *parser, char *funcName, int argc, pval **argv)
|
|||
inline static unsigned short
|
||||
xml_encode_iso_8859_1(unsigned char c)
|
||||
{
|
||||
php3_printf("c=%d ", c);
|
||||
return (unsigned short)c;
|
||||
}
|
||||
|
||||
|
@ -420,7 +428,7 @@ xml_decode_iso_8859_1(unsigned short c)
|
|||
/* {{{ xml_encode_us_ascii() */
|
||||
|
||||
inline static unsigned short
|
||||
xml_encode_us_ascii(char c)
|
||||
xml_encode_us_ascii(unsigned char c)
|
||||
{
|
||||
return (unsigned short)c;
|
||||
}
|
||||
|
@ -459,7 +467,7 @@ xml_utf8_encode(const char *s, int len, int *newlen, const XML_Char *encoding)
|
|||
int pos = len;
|
||||
char *newbuf;
|
||||
unsigned short c;
|
||||
unsigned short (*encoder)(char) = NULL;
|
||||
unsigned short (*encoder)(unsigned char) = NULL;
|
||||
xml_encoding *enc = xml_get_encoding(encoding);
|
||||
|
||||
*newlen = 0;
|
||||
|
@ -511,7 +519,7 @@ static char *
|
|||
xml_utf8_decode(const XML_Char *s, int len, int *newlen, const XML_Char *encoding)
|
||||
{
|
||||
int pos = len;
|
||||
char *newbuf = emalloc(len);
|
||||
char *newbuf = emalloc(len + 1);
|
||||
unsigned short c;
|
||||
char (*decoder)(unsigned short) = NULL;
|
||||
xml_encoding *enc = xml_get_encoding(encoding);
|
||||
|
@ -526,6 +534,7 @@ xml_utf8_decode(const XML_Char *s, int len, int *newlen, const XML_Char *encodin
|
|||
*/
|
||||
memcpy(newbuf, s, len);
|
||||
*newlen = len;
|
||||
newbuf[*newlen] = '\0';
|
||||
return newbuf;
|
||||
}
|
||||
while (pos > 0) {
|
||||
|
@ -550,8 +559,9 @@ xml_utf8_decode(const XML_Char *s, int len, int *newlen, const XML_Char *encodin
|
|||
++*newlen;
|
||||
}
|
||||
if (*newlen < len) {
|
||||
newbuf = erealloc(newbuf, *newlen);
|
||||
newbuf = erealloc(newbuf, *newlen + 1);
|
||||
}
|
||||
newbuf[*newlen] = '\0';
|
||||
return newbuf;
|
||||
}
|
||||
/* }}} */
|
||||
|
@ -588,40 +598,125 @@ static int php3i_xmlcharlen(const XML_Char *s)
|
|||
}
|
||||
|
||||
/* }}} */
|
||||
/* {{{ php3i_xml_startElementHandler() */
|
||||
/* {{{ php3i_add_to_info */
|
||||
static void php3i_add_to_info(xml_parser *parser,char *name)
|
||||
{
|
||||
pval *element, values;
|
||||
|
||||
if (! parser->info) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (_php3_hash_find(parser->info->value.ht,name,strlen(name) + 1,(void **) &element) == FAILURE) {
|
||||
if (array_init(&values) == FAILURE) {
|
||||
php3_error(E_ERROR, "Unable to initialize array");
|
||||
return;
|
||||
}
|
||||
|
||||
_php3_hash_update(parser->info->value.ht, name, strlen(name)+1, (void *) &values, sizeof(pval), (void **) &element);
|
||||
}
|
||||
|
||||
add_next_index_long(element,parser->curtag);
|
||||
|
||||
|
||||
parser->curtag++;
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
/* {{{ php3i_xml_startElementHandler() */
|
||||
|
||||
void php3i_xml_startElementHandler(void *userData, const char *name,
|
||||
const char **attributes)
|
||||
{
|
||||
xml_parser *parser = (xml_parser *)userData;
|
||||
const char **attrs = attributes;
|
||||
XML_TLS_VARS;
|
||||
|
||||
if (parser && parser->startElementHandler) {
|
||||
if (parser) {
|
||||
pval *retval, *args[3];
|
||||
|
||||
parser->level++;
|
||||
|
||||
if (parser->case_folding) {
|
||||
name = _php3_strtoupper(estrdup(name));
|
||||
}
|
||||
args[0] = php3i_long_pval(parser->index);
|
||||
args[1] = php3i_string_pval(name);
|
||||
args[2] = emalloc(sizeof(pval));
|
||||
array_init(args[2]);
|
||||
while (attributes && *attributes) {
|
||||
char *key = (char *)attributes[0];
|
||||
char *value = (char *)attributes[1];
|
||||
if (parser->case_folding) {
|
||||
key = _php3_strtoupper(estrdup(key));
|
||||
|
||||
if (parser->startElementHandler) {
|
||||
args[0] = php3i_long_pval(parser->index);
|
||||
args[1] = php3i_string_pval(name);
|
||||
args[2] = emalloc(sizeof(pval));
|
||||
array_init(args[2]);
|
||||
while (attributes && *attributes) {
|
||||
char *key = (char *)attributes[0];
|
||||
char *value = (char *)attributes[1];
|
||||
char *decoded_value;
|
||||
int decoded_len;
|
||||
if (parser->case_folding) {
|
||||
key = _php3_strtoupper(estrdup(key));
|
||||
}
|
||||
decoded_value = xml_utf8_decode(value, strlen(value),
|
||||
&decoded_len,
|
||||
parser->target_encoding);
|
||||
|
||||
add_assoc_string(args[2], key, decoded_value, 0);
|
||||
if (parser->case_folding) {
|
||||
efree(key);
|
||||
}
|
||||
attributes += 2;
|
||||
}
|
||||
add_assoc_string(args[2], key, value, 1);
|
||||
if (parser->case_folding) {
|
||||
efree(key);
|
||||
|
||||
if ((retval = xml_call_handler(parser, parser->startElementHandler, 3, args))) {
|
||||
php3tls_pval_destructor(retval);
|
||||
efree(retval);
|
||||
}
|
||||
attributes += 2;
|
||||
}
|
||||
if ((retval = xml_call_handler(parser, parser->startElementHandler, 3, args))) {
|
||||
php3tls_pval_destructor(retval);
|
||||
efree(retval);
|
||||
}
|
||||
|
||||
if (parser->data) {
|
||||
pval tag, atr;
|
||||
int atcnt = 0;
|
||||
|
||||
array_init(&tag);
|
||||
array_init(&atr);
|
||||
|
||||
php3i_add_to_info(parser,((char *) name) + parser->toffset);
|
||||
|
||||
add_assoc_string(&tag,"tag",((char *) name) + parser->toffset,1); /* cast to avoid gcc-warning */
|
||||
add_assoc_string(&tag,"type","open",1);
|
||||
add_assoc_long(&tag,"level",parser->level);
|
||||
|
||||
parser->ltags[parser->level-1] = estrdup(name);
|
||||
parser->lastwasopen = 1;
|
||||
|
||||
attributes = attrs;
|
||||
while (attributes && *attributes) {
|
||||
char *key = (char *)attributes[0];
|
||||
char *value = (char *)attributes[1];
|
||||
char *decoded_value;
|
||||
int decoded_len;
|
||||
if (parser->case_folding) {
|
||||
key = _php3_strtoupper(estrdup(key));
|
||||
}
|
||||
decoded_value = xml_utf8_decode(value, strlen(value),
|
||||
&decoded_len,
|
||||
parser->target_encoding);
|
||||
|
||||
add_assoc_stringl(&atr,key,decoded_value,decoded_len,0);
|
||||
atcnt++;
|
||||
if (parser->case_folding) {
|
||||
efree(key);
|
||||
}
|
||||
attributes += 2;
|
||||
}
|
||||
|
||||
if (atcnt) {
|
||||
_php3_hash_add(tag.value.ht,"attributes",sizeof("attributes"),&atr,sizeof(pval),NULL);
|
||||
} else {
|
||||
php3tls_pval_destructor(&atr);
|
||||
}
|
||||
|
||||
_php3_hash_next_index_insert(parser->data->value.ht,&tag,sizeof(pval),(void *) &parser->ctag);
|
||||
}
|
||||
|
||||
if (parser->case_folding) {
|
||||
efree((char *)name);
|
||||
}
|
||||
|
@ -636,21 +731,50 @@ void php3i_xml_endElementHandler(void *userData, const char *name)
|
|||
xml_parser *parser = (xml_parser *)userData;
|
||||
XML_TLS_VARS;
|
||||
|
||||
if (parser && parser->endElementHandler) {
|
||||
if (parser) {
|
||||
pval *retval, *args[2];
|
||||
|
||||
if (parser->case_folding) {
|
||||
name = _php3_strtoupper(estrdup(name));
|
||||
}
|
||||
args[0] = php3i_long_pval(parser->index);
|
||||
args[1] = php3i_string_pval(name);
|
||||
if ((retval = xml_call_handler(parser, parser->endElementHandler, 2, args))) {
|
||||
php3tls_pval_destructor(retval);
|
||||
efree(retval);
|
||||
|
||||
if (parser->endElementHandler) {
|
||||
args[0] = php3i_long_pval(parser->index);
|
||||
args[1] = php3i_string_pval(name);
|
||||
|
||||
if ((retval = xml_call_handler(parser, parser->endElementHandler, 2, args))) {
|
||||
php3tls_pval_destructor(retval);
|
||||
efree(retval);
|
||||
}
|
||||
}
|
||||
|
||||
if (parser->data) {
|
||||
pval tag;
|
||||
|
||||
if (parser->lastwasopen) {
|
||||
add_assoc_string(parser->ctag,"type","complete",1);
|
||||
} else {
|
||||
array_init(&tag);
|
||||
|
||||
php3i_add_to_info(parser,((char *) name) + parser->toffset);
|
||||
|
||||
add_assoc_string(&tag,"tag",((char *) name) + parser->toffset,1); /* cast to avoid gcc-warning */
|
||||
add_assoc_string(&tag,"type","close",1);
|
||||
add_assoc_long(&tag,"level",parser->level);
|
||||
|
||||
_php3_hash_next_index_insert(parser->data->value.ht,&tag,sizeof(pval),NULL);
|
||||
}
|
||||
|
||||
parser->lastwasopen = 0;
|
||||
}
|
||||
|
||||
if (parser->case_folding) {
|
||||
efree((char *)name);
|
||||
}
|
||||
if (parser->ltags) {
|
||||
efree(parser->ltags[parser->level-1]);
|
||||
}
|
||||
parser->level--;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -662,14 +786,60 @@ void php3i_xml_characterDataHandler(void *userData, const XML_Char *s, int len)
|
|||
xml_parser *parser = (xml_parser *)userData;
|
||||
XML_TLS_VARS;
|
||||
|
||||
if (parser && parser->characterDataHandler) {
|
||||
if (parser) {
|
||||
pval *retval, *args[2];
|
||||
|
||||
args[0] = php3i_long_pval(parser->index);
|
||||
args[1] = php3i_xmlcharpval(s, len, parser->target_encoding);
|
||||
if ((retval = xml_call_handler(parser, parser->characterDataHandler, 2, args))) {
|
||||
php3tls_pval_destructor(retval);
|
||||
efree(retval);
|
||||
if (parser->characterDataHandler) {
|
||||
args[0] = php3i_long_pval(parser->index);
|
||||
args[1] = php3i_xmlcharpval(s, len, parser->target_encoding);
|
||||
if ((retval = xml_call_handler(parser, parser->characterDataHandler, 2, args))) {
|
||||
php3tls_pval_destructor(retval);
|
||||
efree(retval);
|
||||
}
|
||||
}
|
||||
|
||||
if (parser->data) {
|
||||
int i;
|
||||
int doprint = 0;
|
||||
|
||||
char *decoded_value;
|
||||
int decoded_len;
|
||||
|
||||
decoded_value = xml_utf8_decode(s,len,&decoded_len,parser->target_encoding);
|
||||
for (i = 0; i < decoded_len; i++) {
|
||||
switch (decoded_value[i]) {
|
||||
case ' ':
|
||||
case '\t':
|
||||
case '\n':
|
||||
continue;
|
||||
default:
|
||||
doprint = 1;
|
||||
break;
|
||||
}
|
||||
if (doprint) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (doprint || (! parser->skipwhite)) {
|
||||
if (parser->lastwasopen) {
|
||||
add_assoc_string(parser->ctag,"value",decoded_value,0);
|
||||
} else {
|
||||
pval tag;
|
||||
|
||||
array_init(&tag);
|
||||
|
||||
php3i_add_to_info(parser,parser->ltags[parser->level-1] + parser->toffset);
|
||||
|
||||
add_assoc_string(&tag,"tag",parser->ltags[parser->level-1] + parser->toffset,1);
|
||||
add_assoc_string(&tag,"value",decoded_value,0);
|
||||
add_assoc_string(&tag,"type","cdata",1);
|
||||
add_assoc_long(&tag,"level",parser->level);
|
||||
|
||||
_php3_hash_next_index_insert(parser->data->value.ht,&tag,sizeof(pval),NULL);
|
||||
}
|
||||
} else {
|
||||
efree(decoded_value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -813,8 +983,8 @@ php3i_xml_externalEntityRefHandler(XML_Parser parserPtr,
|
|||
|
||||
/************************* EXTENSION FUNCTIONS *************************/
|
||||
|
||||
/* {{{ int xml_parser_create() */
|
||||
|
||||
/* {{{ proto int xml_parser_create()
|
||||
Create an XML parser */
|
||||
PHP_FUNCTION(xml_parser_create)
|
||||
{
|
||||
xml_parser *parser;
|
||||
|
@ -857,13 +1027,6 @@ PHP_FUNCTION(xml_parser_create)
|
|||
parser->parser = XML_ParserCreate(encoding);
|
||||
parser->target_encoding = encoding;
|
||||
XML_SetUserData(parser->parser, parser);
|
||||
XML_SetElementHandler(parser->parser, php3i_xml_startElementHandler, php3i_xml_endElementHandler);
|
||||
XML_SetCharacterDataHandler(parser->parser, php3i_xml_characterDataHandler);
|
||||
XML_SetProcessingInstructionHandler(parser->parser, php3i_xml_processingInstructionHandler);
|
||||
XML_SetDefaultHandler(parser->parser, php3i_xml_defaultHandler);
|
||||
XML_SetUnparsedEntityDeclHandler(parser->parser, php3i_xml_unparsedEntityDeclHandler);
|
||||
XML_SetNotationDeclHandler(parser->parser, php3i_xml_notationDeclHandler);
|
||||
XML_SetExternalEntityRefHandler(parser->parser, php3i_xml_externalEntityRefHandler);
|
||||
id = php3_list_insert(parser, XML_GLOBAL(php3_xml_module).le_xml_parser);
|
||||
parser = xml_get_parser(id, thisfunc, list);
|
||||
parser->index = id;
|
||||
|
@ -871,10 +1034,10 @@ PHP_FUNCTION(xml_parser_create)
|
|||
|
||||
RETVAL_LONG(id);
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
/* {{{ int xml_set_element_handler(int pind, string shdl, string ehdl) */
|
||||
|
||||
/* {{{ proto int xml_set_element_handler(int pind, string shdl, string ehdl)
|
||||
Set up start and end element handlers */
|
||||
PHP_FUNCTION(xml_set_element_handler)
|
||||
{
|
||||
xml_parser *parser;
|
||||
|
@ -894,12 +1057,13 @@ PHP_FUNCTION(xml_set_element_handler)
|
|||
}
|
||||
xml_set_handler(&parser->startElementHandler, shdl);
|
||||
xml_set_handler(&parser->endElementHandler, ehdl);
|
||||
XML_SetElementHandler(parser->parser, php3i_xml_startElementHandler, php3i_xml_endElementHandler);
|
||||
RETVAL_TRUE;
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
/* {{{ int xml_set_character_data_handler(int pind, string hdl) */
|
||||
|
||||
/* {{{ proto int xml_set_character_data_handler(int pind, string hdl)
|
||||
Set up character data handler */
|
||||
PHP_FUNCTION(xml_set_character_data_handler)
|
||||
{
|
||||
xml_parser *parser;
|
||||
|
@ -916,12 +1080,13 @@ PHP_FUNCTION(xml_set_character_data_handler)
|
|||
RETURN_FALSE;
|
||||
}
|
||||
xml_set_handler(&parser->characterDataHandler, hdl);
|
||||
XML_SetCharacterDataHandler(parser->parser, php3i_xml_characterDataHandler);
|
||||
RETVAL_TRUE;
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
/* {{{ int xml_set_processing_instruction_handler(int pind, string hdl) */
|
||||
|
||||
/* {{{ proto int xml_set_processing_instruction_handler(int pind, string hdl)
|
||||
Set up processing instruction (PI) handler */
|
||||
PHP_FUNCTION(xml_set_processing_instruction_handler)
|
||||
{
|
||||
xml_parser *parser;
|
||||
|
@ -938,12 +1103,13 @@ PHP_FUNCTION(xml_set_processing_instruction_handler)
|
|||
RETURN_FALSE;
|
||||
}
|
||||
xml_set_handler(&parser->processingInstructionHandler, hdl);
|
||||
XML_SetProcessingInstructionHandler(parser->parser, php3i_xml_processingInstructionHandler);
|
||||
RETVAL_TRUE;
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
/* {{{ int xml_set_default_handler(int pind, string hdl) */
|
||||
|
||||
/* {{{ proto int xml_set_default_handler(int pind, string hdl)
|
||||
Set up default handler */
|
||||
PHP_FUNCTION(xml_set_default_handler)
|
||||
{
|
||||
xml_parser *parser;
|
||||
|
@ -960,12 +1126,13 @@ PHP_FUNCTION(xml_set_default_handler)
|
|||
RETURN_FALSE;
|
||||
}
|
||||
xml_set_handler(&parser->defaultHandler, hdl);
|
||||
XML_SetDefaultHandler(parser->parser, php3i_xml_defaultHandler);
|
||||
RETVAL_TRUE;
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
/* {{{ int xml_set_unparsed_entity_decl_handler(int pind, string hdl) */
|
||||
|
||||
/* {{{ proto int xml_set_unparsed_entity_decl_handler(int pind, string hdl)
|
||||
Set up unparsed entity declaration handler */
|
||||
PHP_FUNCTION(xml_set_unparsed_entity_decl_handler)
|
||||
{
|
||||
xml_parser *parser;
|
||||
|
@ -982,12 +1149,13 @@ PHP_FUNCTION(xml_set_unparsed_entity_decl_handler)
|
|||
RETURN_FALSE;
|
||||
}
|
||||
xml_set_handler(&parser->unparsedEntityDeclHandler, hdl);
|
||||
XML_SetUnparsedEntityDeclHandler(parser->parser, php3i_xml_unparsedEntityDeclHandler);
|
||||
RETVAL_TRUE;
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
/* {{{ int xml_set_notation_decl_handler(int pind, string hdl) */
|
||||
|
||||
/* {{{ proto int xml_set_notation_decl_handler(int pind, string hdl)
|
||||
Set up notation declaration handler */
|
||||
PHP_FUNCTION(xml_set_notation_decl_handler)
|
||||
{
|
||||
xml_parser *parser;
|
||||
|
@ -1004,12 +1172,13 @@ PHP_FUNCTION(xml_set_notation_decl_handler)
|
|||
RETURN_FALSE;
|
||||
}
|
||||
xml_set_handler(&parser->notationDeclHandler, hdl);
|
||||
XML_SetNotationDeclHandler(parser->parser, php3i_xml_notationDeclHandler);
|
||||
RETVAL_TRUE;
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
/* {{{ int xml_set_external_entity_ref_handler(int pind, string hdl) */
|
||||
|
||||
/* {{{ proto int xml_set_external_entity_ref_handler(int pind, string hdl)
|
||||
Set up external entity reference handler */
|
||||
PHP_FUNCTION(xml_set_external_entity_ref_handler)
|
||||
{
|
||||
xml_parser *parser;
|
||||
|
@ -1026,12 +1195,13 @@ PHP_FUNCTION(xml_set_external_entity_ref_handler)
|
|||
RETURN_FALSE;
|
||||
}
|
||||
xml_set_handler(&parser->externalEntityRefHandler, hdl);
|
||||
XML_SetExternalEntityRefHandler(parser->parser, php3i_xml_externalEntityRefHandler);
|
||||
RETVAL_TRUE;
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
/* {{{ int xml_parse(int pind, string data[, int isFinal]) */
|
||||
|
||||
/* {{{ proto int xml_parse(int pind, string data[, int isFinal])
|
||||
Start parsing an XML document */
|
||||
PHP_FUNCTION(xml_parse)
|
||||
{
|
||||
xml_parser *parser;
|
||||
|
@ -1055,14 +1225,64 @@ PHP_FUNCTION(xml_parse)
|
|||
if (parser == NULL) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
fflush(stdout);
|
||||
/* fflush(stdout); uups, that can't be serious?!?!?*/
|
||||
ret = XML_Parse(parser->parser, data->value.str.val, data->value.str.len, isFinal);
|
||||
RETVAL_LONG(ret);
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
/* {{{ int xml_get_error_code(int pind) */
|
||||
/* {{{ proto int xml_parse_into_struct(int pind, string data,array &struct,array &index)
|
||||
Parsing a XML document */
|
||||
|
||||
PHP_FUNCTION(xml_parse_into_struct)
|
||||
{
|
||||
xml_parser *parser;
|
||||
pval *pind, *data, *xdata,*info = 0;
|
||||
int argc, ret;
|
||||
XML_TLS_VARS;
|
||||
|
||||
argc = ARG_COUNT(ht);
|
||||
if (getParameters(ht, 4, &pind, &data, &xdata,&info) == SUCCESS) {
|
||||
if (!ParameterPassedByReference(ht, 4)) {
|
||||
php3_error(E_WARNING, "Array to be filled with values must be passed by reference.");
|
||||
RETURN_FALSE;
|
||||
}
|
||||
array_init(info);
|
||||
} else if (getParameters(ht, 3, &pind, &data, &xdata) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
|
||||
if (!ParameterPassedByReference(ht, 3)) {
|
||||
php3_error(E_WARNING, "Array to be filled with values must be passed by reference.");
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
convert_to_long(pind);
|
||||
convert_to_string(data);
|
||||
array_init(xdata);
|
||||
|
||||
parser = xml_get_parser(pind->value.lval, "XML_Parse_Into_Struct", list);
|
||||
if (parser == NULL) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
parser->data = xdata;
|
||||
parser->info = info;
|
||||
parser->level = 0;
|
||||
parser->ltags = emalloc(XML_MAXLEVEL * sizeof(char *));
|
||||
|
||||
XML_SetDefaultHandler(parser->parser, php3i_xml_defaultHandler);
|
||||
XML_SetElementHandler(parser->parser, php3i_xml_startElementHandler, php3i_xml_endElementHandler);
|
||||
XML_SetCharacterDataHandler(parser->parser, php3i_xml_characterDataHandler);
|
||||
|
||||
ret = XML_Parse(parser->parser, data->value.str.val, data->value.str.len, 1);
|
||||
|
||||
RETVAL_LONG(ret);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto int xml_get_error_code(int pind)
|
||||
Get XML parser error code */
|
||||
PHP_FUNCTION(xml_get_error_code)
|
||||
{
|
||||
xml_parser *parser;
|
||||
|
@ -1079,10 +1299,10 @@ PHP_FUNCTION(xml_get_error_code)
|
|||
}
|
||||
RETVAL_LONG((long)XML_GetErrorCode(parser->parser));
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
/* {{{ string xml_error_string(int code) */
|
||||
|
||||
/* {{{ proto string xml_error_string(int code)
|
||||
Get XML parser error string */
|
||||
PHP_FUNCTION(xml_error_string)
|
||||
{
|
||||
pval *code;
|
||||
|
@ -1098,10 +1318,10 @@ PHP_FUNCTION(xml_error_string)
|
|||
RETVAL_STRING(str, 1);
|
||||
}
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
/* {{{ int xml_get_current_line_number(int pind) */
|
||||
|
||||
/* {{{ proto int xml_get_current_line_number(int pind)
|
||||
Get current line number for an XML parser */
|
||||
PHP_FUNCTION(xml_get_current_line_number)
|
||||
{
|
||||
xml_parser *parser;
|
||||
|
@ -1118,10 +1338,11 @@ PHP_FUNCTION(xml_get_current_line_number)
|
|||
}
|
||||
RETVAL_LONG(XML_GetCurrentLineNumber(parser->parser));
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
/* {{{ int xml_get_current_column_number(int pind) */
|
||||
|
||||
/* {{{ proto int xml_get_current_column_number(int pind)
|
||||
Get current column number for an XML parser
|
||||
*/
|
||||
PHP_FUNCTION(xml_get_current_column_number)
|
||||
{
|
||||
xml_parser *parser;
|
||||
|
@ -1138,10 +1359,10 @@ PHP_FUNCTION(xml_get_current_column_number)
|
|||
}
|
||||
RETVAL_LONG(XML_GetCurrentColumnNumber(parser->parser));
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
/* {{{ int xml_get_current_byte_index(int pind) */
|
||||
|
||||
/* {{{ proto int xml_get_current_byte_index(int pind)
|
||||
Get current byte index for an XML parser */
|
||||
PHP_FUNCTION(xml_get_current_byte_index)
|
||||
{
|
||||
xml_parser *parser;
|
||||
|
@ -1158,10 +1379,10 @@ PHP_FUNCTION(xml_get_current_byte_index)
|
|||
}
|
||||
RETVAL_LONG(XML_GetCurrentByteIndex(parser->parser));
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
/* {{{ int xml_parser_free(int pind) */
|
||||
|
||||
/* {{{ proto int xml_parser_free(int pind)
|
||||
Free an XML parser */
|
||||
PHP_FUNCTION(xml_parser_free)
|
||||
{
|
||||
pval *pind;
|
||||
|
@ -1176,10 +1397,10 @@ PHP_FUNCTION(xml_parser_free)
|
|||
}
|
||||
RETVAL_TRUE;
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
/* {{{ int xml_parser_set_option(int pind, int option, mixed value) */
|
||||
|
||||
/* {{{ proto int xml_parser_set_option(int pind, int option, mixed value)
|
||||
Set options in an XML parser */
|
||||
PHP_FUNCTION(xml_parser_set_option)
|
||||
{
|
||||
xml_parser *parser;
|
||||
|
@ -1201,6 +1422,14 @@ PHP_FUNCTION(xml_parser_set_option)
|
|||
convert_to_long(val);
|
||||
parser->case_folding = val->value.lval;
|
||||
break;
|
||||
case PHP3_XML_OPTION_SKIP_TAGSTART:
|
||||
convert_to_long(val);
|
||||
parser->toffset = val->value.lval;
|
||||
break;
|
||||
case PHP3_XML_OPTION_SKIP_WHITE:
|
||||
convert_to_long(val);
|
||||
parser->skipwhite = val->value.lval;
|
||||
break;
|
||||
case PHP3_XML_OPTION_TARGET_ENCODING: {
|
||||
xml_encoding *enc = xml_get_encoding(val->value.str.val);
|
||||
if (enc == NULL) {
|
||||
|
@ -1218,10 +1447,10 @@ PHP_FUNCTION(xml_parser_set_option)
|
|||
}
|
||||
RETVAL_TRUE;
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
/* {{{ int xml_parser_get_option(int pind, int option) */
|
||||
|
||||
/* {{{ proto int xml_parser_get_option(int pind, int option)
|
||||
Get options from an XML parser */
|
||||
PHP_FUNCTION(xml_parser_get_option)
|
||||
{
|
||||
xml_parser *parser;
|
||||
|
@ -1252,10 +1481,10 @@ PHP_FUNCTION(xml_parser_get_option)
|
|||
}
|
||||
RETVAL_FALSE;
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
/* {{{ string utf8_encode(string data) */
|
||||
|
||||
/* {{{ proto string utf8_encode(string data)
|
||||
Encodes an ISO-8859-1 string to UTF-8 */
|
||||
PHP_FUNCTION(utf8_encode)
|
||||
{
|
||||
pval *arg;
|
||||
|
@ -1273,10 +1502,10 @@ PHP_FUNCTION(utf8_encode)
|
|||
}
|
||||
RETVAL_STRINGL(encoded, len, 0);
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
/* {{{ string utf8_decode(string data) */
|
||||
|
||||
/* {{{ proto string utf8_decode(string data)
|
||||
Converts a UTF-8 encoded string to ISO-8859-1 */
|
||||
PHP_FUNCTION(utf8_decode)
|
||||
{
|
||||
pval *arg;
|
||||
|
@ -1294,7 +1523,6 @@ PHP_FUNCTION(utf8_decode)
|
|||
}
|
||||
RETVAL_STRINGL(decoded, len, 0);
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue