Index: third_party/libxslt/libxslt/numbers.c |
diff --git a/third_party/libxslt/libxslt/numbers.c b/third_party/libxslt/libxslt/numbers.c |
index 8683ca8b2d7f7b0467d470408ce4edd71a03546b..9cd1cf30591fe7ccec0e6f28c39487a06fdad1d8 100644 |
--- a/third_party/libxslt/libxslt/numbers.c |
+++ b/third_party/libxslt/libxslt/numbers.c |
@@ -193,7 +193,7 @@ xsltNumberFormatDecimal(xmlBufferPtr buffer, |
pointer -= groupingCharacterLen; |
xmlCopyCharMultiByte(pointer, groupingCharacter); |
} |
- |
+ |
val = digit_zero + (int)fmod(number, 10.0); |
if (val < 0x80) { /* shortcut if ASCII */ |
if (pointer <= temp_string) { /* Check enough room */ |
@@ -203,7 +203,7 @@ xsltNumberFormatDecimal(xmlBufferPtr buffer, |
*(--pointer) = val; |
} |
else { |
- /* |
+ /* |
* Here we have a multibyte character. It's a little messy, |
* because until we generate the char we don't know how long |
* it is. So, we generate it into the buffer temp_char, then |
@@ -241,7 +241,7 @@ xsltNumberFormatAlpha(xmlBufferPtr buffer, |
pointer = &temp_string[sizeof(temp_string)]; |
*(--pointer) = 0; |
alpha_list = (is_upper) ? alpha_upper_list : alpha_lower_list; |
- |
+ |
for (i = 1; i < (int)sizeof(temp_string); i++) { |
number--; |
*(--pointer) = alpha_list[((int)fmod(number, alpha_size))]; |
@@ -337,7 +337,7 @@ xsltNumberFormatTokenize(const xmlChar *format, |
* There is always such a token in the list, even if NULL |
*/ |
while (! (IS_LETTER(val=xmlStringCurrentChar(NULL, format+ix, &len)) || |
- IS_DIGIT(val)) ) { |
+ IS_DIGIT(val)) ) { |
if (format[ix] == 0) /* if end of format string */ |
break; /* while */ |
ix += len; |
@@ -534,8 +534,8 @@ xsltNumberFormatInsertNumbers(xsltNumberDataPtr data, |
static int |
xsltNumberFormatGetAnyLevel(xsltTransformContextPtr context, |
xmlNodePtr node, |
- const xmlChar *count, |
- const xmlChar *from, |
+ xsltCompMatchPtr countPat, |
+ xsltCompMatchPtr fromPat, |
double *array, |
xmlDocPtr doc, |
xmlNodePtr elem) |
@@ -543,14 +543,7 @@ xsltNumberFormatGetAnyLevel(xsltTransformContextPtr context, |
int amount = 0; |
int cnt = 0; |
xmlNodePtr cur; |
- xsltCompMatchPtr countPat = NULL; |
- xsltCompMatchPtr fromPat = NULL; |
- |
- if (count != NULL) |
- countPat = xsltCompilePattern(count, doc, elem, NULL, context); |
- if (from != NULL) |
- fromPat = xsltCompilePattern(from, doc, elem, NULL, context); |
- |
+ |
/* select the starting node */ |
switch (node->type) { |
case XML_ELEMENT_NODE: |
@@ -571,7 +564,7 @@ xsltNumberFormatGetAnyLevel(xsltTransformContextPtr context, |
while (cur != NULL) { |
/* process current node */ |
- if (count == NULL) { |
+ if (countPat == NULL) { |
if ((node->type == cur->type) && |
/* FIXME: must use expanded-name instead of local name */ |
xmlStrEqual(node->name, cur->name)) { |
@@ -586,7 +579,7 @@ xsltNumberFormatGetAnyLevel(xsltTransformContextPtr context, |
if (xsltTestCompMatchList(context, cur, countPat)) |
cnt++; |
} |
- if ((from != NULL) && |
+ if ((fromPat != NULL) && |
xsltTestCompMatchList(context, cur, fromPat)) { |
break; /* while */ |
} |
@@ -613,18 +606,14 @@ xsltNumberFormatGetAnyLevel(xsltTransformContextPtr context, |
array[amount++] = (double) cnt; |
- if (countPat != NULL) |
- xsltFreeCompMatchList(countPat); |
- if (fromPat != NULL) |
- xsltFreeCompMatchList(fromPat); |
return(amount); |
} |
static int |
xsltNumberFormatGetMultipleLevel(xsltTransformContextPtr context, |
xmlNodePtr node, |
- const xmlChar *count, |
- const xmlChar *from, |
+ xsltCompMatchPtr countPat, |
+ xsltCompMatchPtr fromPat, |
double *array, |
int max, |
xmlDocPtr doc, |
@@ -635,17 +624,7 @@ xsltNumberFormatGetMultipleLevel(xsltTransformContextPtr context, |
xmlNodePtr ancestor; |
xmlNodePtr preceding; |
xmlXPathParserContextPtr parser; |
- xsltCompMatchPtr countPat; |
- xsltCompMatchPtr fromPat; |
- |
- if (count != NULL) |
- countPat = xsltCompilePattern(count, doc, elem, NULL, context); |
- else |
- countPat = NULL; |
- if (from != NULL) |
- fromPat = xsltCompilePattern(from, doc, elem, NULL, context); |
- else |
- fromPat = NULL; |
+ |
context->xpathCtxt->node = node; |
parser = xmlXPathNewParserContext(NULL, context->xpathCtxt); |
if (parser) { |
@@ -653,21 +632,21 @@ xsltNumberFormatGetMultipleLevel(xsltTransformContextPtr context, |
for (ancestor = node; |
(ancestor != NULL) && (ancestor->type != XML_DOCUMENT_NODE); |
ancestor = xmlXPathNextAncestor(parser, ancestor)) { |
- |
- if ((from != NULL) && |
+ |
+ if ((fromPat != NULL) && |
xsltTestCompMatchList(context, ancestor, fromPat)) |
break; /* for */ |
- |
- if ((count == NULL && node->type == ancestor->type && |
+ |
+ if ((countPat == NULL && node->type == ancestor->type && |
xmlStrEqual(node->name, ancestor->name)) || |
xsltTestCompMatchList(context, ancestor, countPat)) { |
/* count(preceding-sibling::*) */ |
cnt = 0; |
for (preceding = ancestor; |
preceding != NULL; |
- preceding = |
+ preceding = |
xmlXPathNextPrecedingSibling(parser, preceding)) { |
- if (count == NULL) { |
+ if (countPat == NULL) { |
if ((preceding->type == ancestor->type) && |
xmlStrEqual(preceding->name, ancestor->name)){ |
if ((preceding->ns == ancestor->ns) || |
@@ -690,8 +669,6 @@ xsltNumberFormatGetMultipleLevel(xsltTransformContextPtr context, |
} |
xmlXPathFreeParserContext(parser); |
} |
- xsltFreeCompMatchList(countPat); |
- xsltFreeCompMatchList(fromPat); |
return amount; |
} |
@@ -704,7 +681,7 @@ xsltNumberFormatGetValue(xmlXPathContextPtr context, |
int amount = 0; |
xmlBufferPtr pattern; |
xmlXPathObjectPtr obj; |
- |
+ |
pattern = xmlBufferCreate(); |
if (pattern != NULL) { |
xmlBufferCCat(pattern, "number("); |
@@ -773,14 +750,14 @@ xsltNumberFormat(xsltTransformContextPtr ctxt, |
&tokens, |
output); |
} |
- |
+ |
} else if (data->level) { |
- |
+ |
if (xmlStrEqual(data->level, (const xmlChar *) "single")) { |
amount = xsltNumberFormatGetMultipleLevel(ctxt, |
node, |
- data->count, |
- data->from, |
+ data->countPat, |
+ data->fromPat, |
&number, |
1, |
data->doc, |
@@ -797,8 +774,8 @@ xsltNumberFormat(xsltTransformContextPtr ctxt, |
int max = sizeof(numarray)/sizeof(numarray[0]); |
amount = xsltNumberFormatGetMultipleLevel(ctxt, |
node, |
- data->count, |
- data->from, |
+ data->countPat, |
+ data->fromPat, |
numarray, |
max, |
data->doc, |
@@ -813,9 +790,9 @@ xsltNumberFormat(xsltTransformContextPtr ctxt, |
} else if (xmlStrEqual(data->level, (const xmlChar *) "any")) { |
amount = xsltNumberFormatGetAnyLevel(ctxt, |
node, |
- data->count, |
- data->from, |
- &number, |
+ data->countPat, |
+ data->fromPat, |
+ &number, |
data->doc, |
data->node); |
if (amount > 0) { |
@@ -838,7 +815,7 @@ xsltNumberFormat(xsltTransformContextPtr ctxt, |
if (tokens.tokens[i].separator != NULL) |
xmlFree(tokens.tokens[i].separator); |
} |
- |
+ |
XSLT_NUMBER_FORMAT_END: |
if (tempformat == 1) { |
/* The format need to be recomputed each time */ |
@@ -855,9 +832,9 @@ xsltFormatNumberPreSuffix(xsltDecimalFormatPtr self, xmlChar **format, xsltForma |
int len; |
while (1) { |
- /* |
- * prefix / suffix ends at end of string or at |
- * first 'special' character |
+ /* |
+ * prefix / suffix ends at end of string or at |
+ * first 'special' character |
*/ |
if (**format == 0) |
return count; |
@@ -870,12 +847,12 @@ xsltFormatNumberPreSuffix(xsltDecimalFormatPtr self, xmlChar **format, xsltForma |
return count; |
/* |
* else treat percent/per-mille as special cases, |
- * depending on whether +ve or -ve |
+ * depending on whether +ve or -ve |
*/ |
else { |
/* |
- * for +ve prefix/suffix, allow only a |
- * single occurence of either |
+ * for +ve prefix/suffix, allow only a |
+ * single occurence of either |
*/ |
if (xsltUTF8Charcmp(*format, self->percent) == 0) { |
if (info->is_multiplier_set) |
@@ -889,14 +866,14 @@ xsltFormatNumberPreSuffix(xsltDecimalFormatPtr self, xmlChar **format, xsltForma |
info->is_multiplier_set = TRUE; |
} |
} |
- |
+ |
if ((len=xsltUTF8Size(*format)) < 1) |
return -1; |
count += len; |
*format += len; |
} |
} |
- |
+ |
/** |
* xsltFormatNumberConversion: |
* @self: the decimal format |
@@ -955,9 +932,9 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self, |
int j, len; |
int self_grouping_len; |
xsltFormatNumberInfo format_info; |
- /* |
+ /* |
* delayed_multiplier allows a 'trailing' percent or |
- * permille to be treated as suffix |
+ * permille to be treated as suffix |
*/ |
int delayed_multiplier = 0; |
/* flag to show no -ve format present for -ve number */ |
@@ -1013,7 +990,7 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self, |
/* |
* First we process the +ve pattern to get percent / permille, |
- * as well as main format |
+ * as well as main format |
*/ |
prefix = the_format; |
prefix_length = xsltFormatNumberPreSuffix(self, &the_format, &format_info); |
@@ -1022,18 +999,18 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self, |
goto OUTPUT_NUMBER; |
} |
- /* |
- * Here we process the "number" part of the format. It gets |
+ /* |
+ * Here we process the "number" part of the format. It gets |
* a little messy because of the percent/per-mille - if that |
- * appears at the end, it may be part of the suffix instead |
- * of part of the number, so the variable delayed_multiplier |
- * is used to handle it |
+ * appears at the end, it may be part of the suffix instead |
+ * of part of the number, so the variable delayed_multiplier |
+ * is used to handle it |
*/ |
self_grouping_len = xmlStrlen(self->grouping); |
while ((*the_format != 0) && |
(xsltUTF8Charcmp(the_format, self->decimalPoint) != 0) && |
(xsltUTF8Charcmp(the_format, self->patternSeparator) != 0)) { |
- |
+ |
if (delayed_multiplier != 0) { |
format_info.multiplier = delayed_multiplier; |
format_info.is_multiplier_set = TRUE; |
@@ -1071,7 +1048,7 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self, |
delayed_multiplier = 1000; |
} else |
break; /* while */ |
- |
+ |
if ((len=xsltUTF8Size(the_format)) < 1) { |
found_error = 1; |
goto OUTPUT_NUMBER; |
@@ -1085,9 +1062,9 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self, |
format_info.add_decimal = TRUE; |
the_format += xsltUTF8Size(the_format); /* Skip over the decimal */ |
} |
- |
+ |
while (*the_format != 0) { |
- |
+ |
if (xsltUTF8Charcmp(the_format, self->zeroDigit) == 0) { |
if (format_info.frac_hash != 0) { |
found_error = 1; |
@@ -1135,9 +1112,9 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self, |
} |
} |
- /* |
- * If delayed_multiplier is set after processing the |
- * "number" part, should be in suffix |
+ /* |
+ * If delayed_multiplier is set after processing the |
+ * "number" part, should be in suffix |
*/ |
if (delayed_multiplier != 0) { |
the_format -= len; |
@@ -1147,7 +1124,7 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self, |
suffix = the_format; |
suffix_length = xsltFormatNumberPreSuffix(self, &the_format, &format_info); |
if ( (suffix_length < 0) || |
- ((*the_format != 0) && |
+ ((*the_format != 0) && |
(xsltUTF8Charcmp(the_format, self->patternSeparator) != 0)) ) { |
found_error = 1; |
goto OUTPUT_NUMBER; |
@@ -1170,17 +1147,17 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self, |
else { |
/* Skip over pattern separator (accounting for UTF8) */ |
the_format = (xmlChar *)xmlUTF8Strpos(format, j + 1); |
- /* |
- * Flag changes interpretation of percent/permille |
- * in -ve pattern |
+ /* |
+ * Flag changes interpretation of percent/permille |
+ * in -ve pattern |
*/ |
format_info.is_negative_pattern = TRUE; |
format_info.is_multiplier_set = FALSE; |
/* First do the -ve prefix */ |
nprefix = the_format; |
- nprefix_length = xsltFormatNumberPreSuffix(self, |
- &the_format, &format_info); |
+ nprefix_length = xsltFormatNumberPreSuffix(self, |
+ &the_format, &format_info); |
if (nprefix_length<0) { |
found_error = 1; |
goto OUTPUT_NUMBER; |
@@ -1214,7 +1191,7 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self, |
/* Finally do the -ve suffix */ |
if (*the_format != 0) { |
nsuffix = the_format; |
- nsuffix_length = xsltFormatNumberPreSuffix(self, |
+ nsuffix_length = xsltFormatNumberPreSuffix(self, |
&the_format, &format_info); |
if (nsuffix_length < 0) { |
found_error = 1; |
@@ -1232,12 +1209,12 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self, |
* if -ve prefix/suffix == +ve ones, discard & use default |
*/ |
if ((nprefix_length != prefix_length) || |
- (nsuffix_length != suffix_length) || |
- ((nprefix_length > 0) && |
+ (nsuffix_length != suffix_length) || |
+ ((nprefix_length > 0) && |
(xmlStrncmp(nprefix, prefix, prefix_length) !=0 )) || |
- ((nsuffix_length > 0) && |
+ ((nsuffix_length > 0) && |
(xmlStrncmp(nsuffix, suffix, suffix_length) !=0 ))) { |
- prefix = nprefix; |
+ prefix = nprefix; |
prefix_length = nprefix_length; |
suffix = nsuffix; |
suffix_length = nsuffix_length; |
@@ -1283,9 +1260,9 @@ OUTPUT_NUMBER: |
number = fabs(number) * (double)format_info.multiplier; |
scale = pow(10.0, (double)(format_info.frac_digits + format_info.frac_hash)); |
number = floor((scale * number + 0.5)) / scale; |
- if ((self->grouping != NULL) && |
+ if ((self->grouping != NULL) && |
(self->grouping[0] != 0)) { |
- |
+ |
len = xmlStrlen(self->grouping); |
pchar = xsltGetUTF8Char(self->grouping, &len); |
xsltNumberFormatDecimal(buffer, floor(number), self->zeroDigit[0], |
@@ -1314,14 +1291,14 @@ OUTPUT_NUMBER: |
/* 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)); |
+ xmlBufferAdd(buffer, self->decimalPoint, |
+ xsltUTF8Size(self->decimalPoint)); |
} |
else { |
number -= floor(number); |
if ((number != 0) || (format_info.frac_digits != 0)) { |
xmlBufferAdd(buffer, self->decimalPoint, |
- xsltUTF8Size(self->decimalPoint)); |
+ xsltUTF8Size(self->decimalPoint)); |
number = floor(scale * number + 0.5); |
for (j = format_info.frac_hash; j > 0; j--) { |
if (fmod(number, 10.0) >= 1.0) |