diff options
Diffstat (limited to 'ext/intl/intl_error.c')
| -rwxr-xr-x | ext/intl/intl_error.c | 78 | 
1 files changed, 77 insertions, 1 deletions
diff --git a/ext/intl/intl_error.c b/ext/intl/intl_error.c index 2c7066b081..99b1c6001c 100755 --- a/ext/intl/intl_error.c +++ b/ext/intl/intl_error.c @@ -25,6 +25,7 @@  #include "php_intl.h"  #include "intl_error.h" +#include "intl_convert.h"  ZEND_EXTERN_MODULE_GLOBALS( intl ) @@ -242,7 +243,82 @@ void intl_register_IntlException_class( TSRMLS_D )  		default_exception_ce, NULL TSRMLS_CC );  	IntlException_ce_ptr->create_object = default_exception_ce->create_object;  } -/* }}} */ + +smart_str intl_parse_error_to_string( UParseError* pe ) +{ +	smart_str  ret = {0}; +	char       *buf; +	int        u8len; +	UErrorCode status; +	int        any = 0; + +	assert( pe != NULL ); + +	smart_str_appends( &ret, "parse error " ); +	if( pe->line > 0 ) +	{ +		smart_str_appends( &ret, "on line " ); +		smart_str_append_long( &ret, (long ) pe->line ); +		any = 1; +	} +	if( pe->offset >= 0 ) { +		if( any ) +			smart_str_appends( &ret, ", " ); +		else +			smart_str_appends( &ret, "at " ); + +		smart_str_appends( &ret, "offset " ); +		smart_str_append_long( &ret, (long ) pe->offset );  +		any = 1; +	} + +	if (pe->preContext[0] != 0 ) { +		if( any ) +			smart_str_appends( &ret, ", " ); + +		smart_str_appends( &ret, "after \"" ); +		intl_convert_utf16_to_utf8( &buf, &u8len, pe->preContext, -1, &status ); +		if( U_FAILURE( status ) ) +		{ +			smart_str_appends( &ret, "(could not convert parser error pre-context to UTF-8)" ); +		} +		else { +			smart_str_appendl( &ret, buf, u8len ); +			efree( buf ); +		} +		smart_str_appends( &ret, "\"" ); +		any = 1; +	} + +	if( pe->postContext[0] != 0 ) +	{ +		if( any ) +			smart_str_appends( &ret, ", " ); + +		smart_str_appends( &ret, "before or at \"" ); +		intl_convert_utf16_to_utf8( &buf, &u8len, pe->postContext, -1, &status ); +		if( U_FAILURE( status ) ) +		{ +			smart_str_appends( &ret, "(could not convert parser error post-context to UTF-8)" ); +		} +		else +		{ +			smart_str_appendl( &ret, buf, u8len ); +			efree( buf ); +		} +		smart_str_appends( &ret, "\"" ); +		any = 1; +	} + +	if( !any ) +	{ +		smart_str_free( &ret ); +		smart_str_appends( &ret, "no parse error" ); +	} +	 +	smart_str_0( &ret ); +	return ret; +}  /*   * Local variables:  | 
