mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 20:23:01 +00:00
[LIBXSLT] Update to version 1.1.32. CORE-14291
This commit is contained in:
parent
5c72e50fd0
commit
5c0faa58cf
24 changed files with 945 additions and 911 deletions
123
dll/3rdparty/libxslt/numbers.c
vendored
123
dll/3rdparty/libxslt/numbers.c
vendored
|
@ -48,39 +48,11 @@ static xsltFormatToken default_token;
|
|||
/*
|
||||
* **** Start temp insert ****
|
||||
*
|
||||
* The following two routines (xsltUTF8Size and xsltUTF8Charcmp)
|
||||
* will be replaced with calls to the corresponding libxml routines
|
||||
* at a later date (when other inter-library dependencies require it)
|
||||
* The following routine xsltUTF8Charcmp will be replaced with calls to
|
||||
* the corresponding libxml routine at a later date (when other
|
||||
* inter-library dependencies require it).
|
||||
*/
|
||||
|
||||
/**
|
||||
* xsltUTF8Size:
|
||||
* @utf: pointer to the UTF8 character
|
||||
*
|
||||
* returns the numbers of bytes in the character, -1 on format error
|
||||
*/
|
||||
static int
|
||||
xsltUTF8Size(xmlChar *utf) {
|
||||
xmlChar mask;
|
||||
int len;
|
||||
|
||||
if (utf == NULL)
|
||||
return -1;
|
||||
if (*utf < 0x80)
|
||||
return 1;
|
||||
/* check valid UTF8 character */
|
||||
if (!(*utf & 0x40))
|
||||
return -1;
|
||||
/* determine number of bytes in char */
|
||||
len = 2;
|
||||
for (mask=0x20; mask != 0; mask>>=1) {
|
||||
if (!(*utf & mask))
|
||||
return len;
|
||||
len++;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* xsltUTF8Charcmp
|
||||
* @utf1: pointer to first UTF8 char
|
||||
|
@ -91,13 +63,16 @@ xsltUTF8Size(xmlChar *utf) {
|
|||
*/
|
||||
static int
|
||||
xsltUTF8Charcmp(xmlChar *utf1, xmlChar *utf2) {
|
||||
int len = xmlUTF8Strsize(utf1, 1);
|
||||
|
||||
if (len < 1)
|
||||
return -1;
|
||||
if (utf1 == NULL ) {
|
||||
if (utf2 == NULL)
|
||||
return 0;
|
||||
return -1;
|
||||
}
|
||||
return xmlStrncmp(utf1, utf2, xsltUTF8Size(utf1));
|
||||
return xmlStrncmp(utf1, utf2, len);
|
||||
}
|
||||
|
||||
/***** Stop temp insert *****/
|
||||
|
@ -205,7 +180,7 @@ xsltNumberFormatDecimal(xmlBufferPtr buffer,
|
|||
}
|
||||
if (i < 0)
|
||||
xsltGenericError(xsltGenericErrorContext,
|
||||
"xsltNumberFormatDecimal: Internal buffer size exceeded");
|
||||
"xsltNumberFormatDecimal: Internal buffer size exceeded\n");
|
||||
xmlBufferCat(buffer, pointer);
|
||||
}
|
||||
|
||||
|
@ -599,25 +574,7 @@ xsltNumberFormatGetAnyLevel(xsltTransformContextPtr context,
|
|||
{
|
||||
int amount = 0;
|
||||
int cnt = 0;
|
||||
xmlNodePtr cur;
|
||||
|
||||
/* select the starting node */
|
||||
switch (node->type) {
|
||||
case XML_ELEMENT_NODE:
|
||||
cur = node;
|
||||
break;
|
||||
case XML_ATTRIBUTE_NODE:
|
||||
cur = ((xmlAttrPtr) node)->parent;
|
||||
break;
|
||||
case XML_TEXT_NODE:
|
||||
case XML_PI_NODE:
|
||||
case XML_COMMENT_NODE:
|
||||
cur = node->parent;
|
||||
break;
|
||||
default:
|
||||
cur = NULL;
|
||||
break;
|
||||
}
|
||||
xmlNodePtr cur = node;
|
||||
|
||||
while (cur != NULL) {
|
||||
/* process current node */
|
||||
|
@ -636,16 +593,25 @@ xsltNumberFormatGetAnyLevel(xsltTransformContextPtr context,
|
|||
(cur->type == XML_HTML_DOCUMENT_NODE))
|
||||
break; /* while */
|
||||
|
||||
while ((cur->prev != NULL) && ((cur->prev->type == XML_DTD_NODE) ||
|
||||
(cur->prev->type == XML_XINCLUDE_START) ||
|
||||
(cur->prev->type == XML_XINCLUDE_END)))
|
||||
cur = cur->prev;
|
||||
if (cur->prev != NULL) {
|
||||
for (cur = cur->prev; cur->last != NULL; cur = cur->last);
|
||||
} else {
|
||||
cur = cur->parent;
|
||||
}
|
||||
|
||||
if (cur->type == XML_NAMESPACE_DECL) {
|
||||
/*
|
||||
* The XPath module stores the parent of a namespace node in
|
||||
* the ns->next field.
|
||||
*/
|
||||
cur = (xmlNodePtr) ((xmlNsPtr) cur)->next;
|
||||
} else if (cur->type == XML_ATTRIBUTE_NODE) {
|
||||
cur = cur->parent;
|
||||
} else {
|
||||
while ((cur->prev != NULL) && ((cur->prev->type == XML_DTD_NODE) ||
|
||||
(cur->prev->type == XML_XINCLUDE_START) ||
|
||||
(cur->prev->type == XML_XINCLUDE_END)))
|
||||
cur = cur->prev;
|
||||
if (cur->prev != NULL) {
|
||||
for (cur = cur->prev; cur->last != NULL; cur = cur->last);
|
||||
} else {
|
||||
cur = cur->parent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
array[amount++] = (double) cnt;
|
||||
|
@ -891,7 +857,7 @@ xsltFormatNumberPreSuffix(xsltDecimalFormatPtr self, xmlChar **format, xsltForma
|
|||
}
|
||||
}
|
||||
|
||||
if ((len=xsltUTF8Size(*format)) < 1)
|
||||
if ((len=xmlUTF8Strsize(*format, 1)) < 1)
|
||||
return -1;
|
||||
count += len;
|
||||
*format += len;
|
||||
|
@ -1073,7 +1039,7 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self,
|
|||
} else
|
||||
break; /* while */
|
||||
|
||||
if ((len=xsltUTF8Size(the_format)) < 1) {
|
||||
if ((len=xmlUTF8Strsize(the_format, 1)) < 1) {
|
||||
found_error = 1;
|
||||
goto OUTPUT_NUMBER;
|
||||
}
|
||||
|
@ -1082,9 +1048,14 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self,
|
|||
}
|
||||
|
||||
/* We have finished the integer part, now work on fraction */
|
||||
if (xsltUTF8Charcmp(the_format, self->decimalPoint) == 0) {
|
||||
if ( (*the_format != 0) &&
|
||||
(xsltUTF8Charcmp(the_format, self->decimalPoint) == 0) ) {
|
||||
format_info.add_decimal = TRUE;
|
||||
the_format += xsltUTF8Size(the_format); /* Skip over the decimal */
|
||||
if ((len = xmlUTF8Strsize(the_format, 1)) < 1) {
|
||||
found_error = 1;
|
||||
goto OUTPUT_NUMBER;
|
||||
}
|
||||
the_format += len; /* Skip over the decimal */
|
||||
}
|
||||
|
||||
while (*the_format != 0) {
|
||||
|
@ -1103,7 +1074,7 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self,
|
|||
goto OUTPUT_NUMBER;
|
||||
}
|
||||
delayed_multiplier = 100;
|
||||
if ((len = xsltUTF8Size(the_format)) < 1) {
|
||||
if ((len = xmlUTF8Strsize(the_format, 1)) < 1) {
|
||||
found_error = 1;
|
||||
goto OUTPUT_NUMBER;
|
||||
}
|
||||
|
@ -1115,7 +1086,7 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self,
|
|||
goto OUTPUT_NUMBER;
|
||||
}
|
||||
delayed_multiplier = 1000;
|
||||
if ((len = xsltUTF8Size(the_format)) < 1) {
|
||||
if ((len = xmlUTF8Strsize(the_format, 1)) < 1) {
|
||||
found_error = 1;
|
||||
goto OUTPUT_NUMBER;
|
||||
}
|
||||
|
@ -1124,7 +1095,7 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self,
|
|||
} else if (xsltUTF8Charcmp(the_format, self->grouping) != 0) {
|
||||
break; /* while */
|
||||
}
|
||||
if ((len = xsltUTF8Size(the_format)) < 1) {
|
||||
if ((len = xmlUTF8Strsize(the_format, 1)) < 1) {
|
||||
found_error = 1;
|
||||
goto OUTPUT_NUMBER;
|
||||
}
|
||||
|
@ -1201,7 +1172,7 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self,
|
|||
delayed_multiplier = 0;
|
||||
else
|
||||
break; /* while */
|
||||
if ((len = xsltUTF8Size(the_format)) < 1) {
|
||||
if ((len = xmlUTF8Strsize(the_format, 1)) < 1) {
|
||||
found_error = 1;
|
||||
goto OUTPUT_NUMBER;
|
||||
}
|
||||
|
@ -1267,12 +1238,12 @@ OUTPUT_NUMBER:
|
|||
|
||||
/* Ready to output our number. First see if "default sign" is required */
|
||||
if (default_sign != 0)
|
||||
xmlBufferAdd(buffer, self->minusSign, xsltUTF8Size(self->minusSign));
|
||||
xmlBufferAdd(buffer, self->minusSign, xmlUTF8Strsize(self->minusSign, 1));
|
||||
|
||||
/* Put the prefix into the buffer */
|
||||
for (j = 0; j < prefix_length; j++) {
|
||||
if ((pchar = *prefix++) == SYMBOL_QUOTE) {
|
||||
len = xsltUTF8Size(prefix);
|
||||
len = xmlUTF8Strsize(prefix, 1);
|
||||
xmlBufferAdd(buffer, prefix, len);
|
||||
prefix += len;
|
||||
j += len - 1; /* length of symbol less length of quote */
|
||||
|
@ -1309,20 +1280,20 @@ OUTPUT_NUMBER:
|
|||
/* Add leading zero, if required */
|
||||
if ((floor(number) == 0) &&
|
||||
(format_info.integer_digits + format_info.frac_digits == 0)) {
|
||||
xmlBufferAdd(buffer, self->zeroDigit, xsltUTF8Size(self->zeroDigit));
|
||||
xmlBufferAdd(buffer, self->zeroDigit, xmlUTF8Strsize(self->zeroDigit, 1));
|
||||
}
|
||||
|
||||
/* Next the fractional part, if required */
|
||||
if (format_info.frac_digits + format_info.frac_hash == 0) {
|
||||
if (format_info.add_decimal)
|
||||
xmlBufferAdd(buffer, self->decimalPoint,
|
||||
xsltUTF8Size(self->decimalPoint));
|
||||
xmlUTF8Strsize(self->decimalPoint, 1));
|
||||
}
|
||||
else {
|
||||
number -= floor(number);
|
||||
if ((number != 0) || (format_info.frac_digits != 0)) {
|
||||
xmlBufferAdd(buffer, self->decimalPoint,
|
||||
xsltUTF8Size(self->decimalPoint));
|
||||
xmlUTF8Strsize(self->decimalPoint, 1));
|
||||
number = floor(scale * number + 0.5);
|
||||
for (j = format_info.frac_hash; j > 0; j--) {
|
||||
if (fmod(number, 10.0) >= 1.0)
|
||||
|
@ -1337,7 +1308,7 @@ OUTPUT_NUMBER:
|
|||
/* Put the suffix into the buffer */
|
||||
for (j = 0; j < suffix_length; j++) {
|
||||
if ((pchar = *suffix++) == SYMBOL_QUOTE) {
|
||||
len = xsltUTF8Size(suffix);
|
||||
len = xmlUTF8Strsize(suffix, 1);
|
||||
xmlBufferAdd(buffer, suffix, len);
|
||||
suffix += len;
|
||||
j += len - 1; /* length of symbol less length of escape */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue