mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-19 23:07:33 +09:00
Issue #1971 - Part 2: Update ICU source to 63.2.
This commit is contained in:
parent
8df84683be
commit
1e69214382
3160 changed files with 275815 additions and 234203 deletions
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (C) 2016 and later: Unicode, Inc. and others.
|
||||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html
|
||||
/*
|
||||
******************************************************************************
|
||||
|
|
@ -6,7 +6,7 @@
|
|||
* Corporation and others. All Rights Reserved.
|
||||
******************************************************************************
|
||||
* file name: nfrs.cpp
|
||||
* encoding: US-ASCII
|
||||
* encoding: UTF-8
|
||||
* tab size: 8 (not used)
|
||||
* indentation:4
|
||||
*
|
||||
|
|
@ -23,6 +23,7 @@
|
|||
#include "nfrule.h"
|
||||
#include "nfrlist.h"
|
||||
#include "patternprops.h"
|
||||
#include "putilimp.h"
|
||||
|
||||
#ifdef RBNF_DEBUG
|
||||
#include "cmemory.h"
|
||||
|
|
@ -544,7 +545,7 @@ NFRuleSet::findNormalRule(int64_t number) const
|
|||
// an explanation of the rollback rule). If we do, roll back
|
||||
// one rule and return that one instead of the one we'd normally
|
||||
// return
|
||||
if (result->shouldRollBack((double)number)) {
|
||||
if (result->shouldRollBack(number)) {
|
||||
if (hi == 1) { // bad rule set, no prior rule to rollback to from this base
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -680,7 +681,7 @@ static void dumpUS(FILE* f, const UnicodeString& us) {
|
|||
#endif
|
||||
|
||||
UBool
|
||||
NFRuleSet::parse(const UnicodeString& text, ParsePosition& pos, double upperBound, Formattable& result) const
|
||||
NFRuleSet::parse(const UnicodeString& text, ParsePosition& pos, double upperBound, uint32_t nonNumericalExecutedRuleMask, Formattable& result) const
|
||||
{
|
||||
// try matching each rule in the rule set against the text being
|
||||
// parsed. Whichever one matches the most characters is the one
|
||||
|
|
@ -706,9 +707,12 @@ NFRuleSet::parse(const UnicodeString& text, ParsePosition& pos, double upperBoun
|
|||
#endif
|
||||
// Try each of the negative rules, fraction rules, infinity rules and NaN rules
|
||||
for (int i = 0; i < NON_NUMERICAL_RULE_LENGTH; i++) {
|
||||
if (nonNumericalRules[i]) {
|
||||
if (nonNumericalRules[i] && ((nonNumericalExecutedRuleMask >> i) & 1) == 0) {
|
||||
// Mark this rule as being executed so that we don't try to execute it again.
|
||||
nonNumericalExecutedRuleMask |= 1 << i;
|
||||
|
||||
Formattable tempResult;
|
||||
UBool success = nonNumericalRules[i]->doParse(text, workingPos, 0, upperBound, tempResult);
|
||||
UBool success = nonNumericalRules[i]->doParse(text, workingPos, 0, upperBound, nonNumericalExecutedRuleMask, tempResult);
|
||||
if (success && (workingPos.getIndex() > highWaterMark.getIndex())) {
|
||||
result = tempResult;
|
||||
highWaterMark = workingPos;
|
||||
|
|
@ -747,7 +751,7 @@ NFRuleSet::parse(const UnicodeString& text, ParsePosition& pos, double upperBoun
|
|||
continue;
|
||||
}
|
||||
Formattable tempResult;
|
||||
UBool success = rules[i]->doParse(text, workingPos, fIsFractionRuleSet, upperBound, tempResult);
|
||||
UBool success = rules[i]->doParse(text, workingPos, fIsFractionRuleSet, upperBound, nonNumericalExecutedRuleMask, tempResult);
|
||||
if (success && workingPos.getIndex() > highWaterMark.getIndex()) {
|
||||
result = tempResult;
|
||||
highWaterMark = workingPos;
|
||||
|
|
@ -829,18 +833,23 @@ int64_t util64_fromDouble(double d) {
|
|||
return result;
|
||||
}
|
||||
|
||||
int64_t util64_pow(int32_t r, uint32_t e) {
|
||||
if (r == 0) {
|
||||
uint64_t util64_pow(uint32_t base, uint16_t exponent) {
|
||||
if (base == 0) {
|
||||
return 0;
|
||||
} else if (e == 0) {
|
||||
return 1;
|
||||
} else {
|
||||
int64_t n = r;
|
||||
while (--e > 0) {
|
||||
n *= r;
|
||||
}
|
||||
return n;
|
||||
}
|
||||
uint64_t result = 1;
|
||||
uint64_t pow = base;
|
||||
while (true) {
|
||||
if ((exponent & 1) == 1) {
|
||||
result *= pow;
|
||||
}
|
||||
exponent >>= 1;
|
||||
if (exponent == 0) {
|
||||
break;
|
||||
}
|
||||
pow *= pow;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
static const uint8_t asciiDigits[] = {
|
||||
|
|
@ -1024,4 +1033,3 @@ U_NAMESPACE_END
|
|||
|
||||
/* U_HAVE_RBNF */
|
||||
#endif
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue