summaryrefslogtreecommitdiff
path: root/ext/xml/xml.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/xml/xml.c')
-rw-r--r--ext/xml/xml.c398
1 files changed, 313 insertions, 85 deletions
diff --git a/ext/xml/xml.c b/ext/xml/xml.c
index 299be2cfc3..f8127e8bd8 100644
--- a/ext/xml/xml.c
+++ b/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