mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-20 23:37: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
|
||||
/*
|
||||
**************************************************************************
|
||||
|
|
@ -438,7 +438,7 @@ RegexMatcher &RegexMatcher::appendReplacement(UText *dest,
|
|||
status = U_REGEX_INVALID_CAPTURE_GROUP_NAME;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} else if (u_isdigit(nextChar)) {
|
||||
// $n Scan for a capture group number
|
||||
int32_t numCaptureGroups = fPattern->fGroupMap->size();
|
||||
|
|
@ -459,7 +459,7 @@ RegexMatcher &RegexMatcher::appendReplacement(UText *dest,
|
|||
break;
|
||||
}
|
||||
(void)UTEXT_NEXT32(replacement);
|
||||
groupNum=groupNum*10 + nextDigitVal;
|
||||
groupNum=groupNum*10 + nextDigitVal;
|
||||
++numDigits;
|
||||
}
|
||||
} else {
|
||||
|
|
@ -801,7 +801,7 @@ UBool RegexMatcher::find(UErrorCode &status) {
|
|||
|
||||
case START_LINE:
|
||||
{
|
||||
UChar32 c;
|
||||
UChar32 ch;
|
||||
if (startPos == fAnchorStart) {
|
||||
MatchAt(startPos, FALSE, status);
|
||||
if (U_FAILURE(status)) {
|
||||
|
|
@ -811,17 +811,17 @@ UBool RegexMatcher::find(UErrorCode &status) {
|
|||
return TRUE;
|
||||
}
|
||||
UTEXT_SETNATIVEINDEX(fInputText, startPos);
|
||||
c = UTEXT_NEXT32(fInputText);
|
||||
ch = UTEXT_NEXT32(fInputText);
|
||||
startPos = UTEXT_GETNATIVEINDEX(fInputText);
|
||||
} else {
|
||||
UTEXT_SETNATIVEINDEX(fInputText, startPos);
|
||||
c = UTEXT_PREVIOUS32(fInputText);
|
||||
ch = UTEXT_PREVIOUS32(fInputText);
|
||||
UTEXT_SETNATIVEINDEX(fInputText, startPos);
|
||||
}
|
||||
|
||||
if (fPattern->fFlags & UREGEX_UNIX_LINES) {
|
||||
for (;;) {
|
||||
if (c == 0x0a) {
|
||||
if (ch == 0x0a) {
|
||||
MatchAt(startPos, FALSE, status);
|
||||
if (U_FAILURE(status)) {
|
||||
return FALSE;
|
||||
|
|
@ -836,7 +836,7 @@ UBool RegexMatcher::find(UErrorCode &status) {
|
|||
fHitEnd = TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
c = UTEXT_NEXT32(fInputText);
|
||||
ch = UTEXT_NEXT32(fInputText);
|
||||
startPos = UTEXT_GETNATIVEINDEX(fInputText);
|
||||
// Note that it's perfectly OK for a pattern to have a zero-length
|
||||
// match at the end of a string, so we must make sure that the loop
|
||||
|
|
@ -846,8 +846,8 @@ UBool RegexMatcher::find(UErrorCode &status) {
|
|||
}
|
||||
} else {
|
||||
for (;;) {
|
||||
if (isLineTerminator(c)) {
|
||||
if (c == 0x0d && startPos < fActiveLimit && UTEXT_CURRENT32(fInputText) == 0x0a) {
|
||||
if (isLineTerminator(ch)) {
|
||||
if (ch == 0x0d && startPos < fActiveLimit && UTEXT_CURRENT32(fInputText) == 0x0a) {
|
||||
(void)UTEXT_NEXT32(fInputText);
|
||||
startPos = UTEXT_GETNATIVEINDEX(fInputText);
|
||||
}
|
||||
|
|
@ -865,7 +865,7 @@ UBool RegexMatcher::find(UErrorCode &status) {
|
|||
fHitEnd = TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
c = UTEXT_NEXT32(fInputText);
|
||||
ch = UTEXT_NEXT32(fInputText);
|
||||
startPos = UTEXT_GETNATIVEINDEX(fInputText);
|
||||
// Note that it's perfectly OK for a pattern to have a zero-length
|
||||
// match at the end of a string, so we must make sure that the loop
|
||||
|
|
@ -1034,7 +1034,7 @@ UBool RegexMatcher::findUsingChunk(UErrorCode &status) {
|
|||
return FALSE;
|
||||
}
|
||||
}
|
||||
U_ASSERT(FALSE);
|
||||
U_ASSERT(FALSE);
|
||||
|
||||
case START_STRING:
|
||||
case START_CHAR:
|
||||
|
|
@ -1067,7 +1067,7 @@ UBool RegexMatcher::findUsingChunk(UErrorCode &status) {
|
|||
|
||||
case START_LINE:
|
||||
{
|
||||
UChar32 c;
|
||||
UChar32 ch;
|
||||
if (startPos == fAnchorStart) {
|
||||
MatchChunkAt(startPos, FALSE, status);
|
||||
if (U_FAILURE(status)) {
|
||||
|
|
@ -1081,8 +1081,8 @@ UBool RegexMatcher::findUsingChunk(UErrorCode &status) {
|
|||
|
||||
if (fPattern->fFlags & UREGEX_UNIX_LINES) {
|
||||
for (;;) {
|
||||
c = inputBuf[startPos-1];
|
||||
if (c == 0x0a) {
|
||||
ch = inputBuf[startPos-1];
|
||||
if (ch == 0x0a) {
|
||||
MatchChunkAt(startPos, FALSE, status);
|
||||
if (U_FAILURE(status)) {
|
||||
return FALSE;
|
||||
|
|
@ -1105,9 +1105,9 @@ UBool RegexMatcher::findUsingChunk(UErrorCode &status) {
|
|||
}
|
||||
} else {
|
||||
for (;;) {
|
||||
c = inputBuf[startPos-1];
|
||||
if (isLineTerminator(c)) {
|
||||
if (c == 0x0d && startPos < fActiveLimit && inputBuf[startPos] == 0x0a) {
|
||||
ch = inputBuf[startPos-1];
|
||||
if (isLineTerminator(ch)) {
|
||||
if (ch == 0x0d && startPos < fActiveLimit && inputBuf[startPos] == 0x0a) {
|
||||
startPos++;
|
||||
}
|
||||
MatchChunkAt(startPos, FALSE, status);
|
||||
|
|
@ -2187,7 +2187,7 @@ int32_t RegexMatcher::split(UText *input,
|
|||
break;
|
||||
}
|
||||
i++;
|
||||
dest[i] = utext_extract_replace(fInputText, dest[i],
|
||||
dest[i] = utext_extract_replace(fInputText, dest[i],
|
||||
start64(groupNum, status), end64(groupNum, status), &status);
|
||||
}
|
||||
|
||||
|
|
@ -2200,7 +2200,7 @@ int32_t RegexMatcher::split(UText *input,
|
|||
if (dest[i] == NULL) {
|
||||
dest[i] = utext_openUChars(NULL, NULL, 0, &status);
|
||||
} else {
|
||||
static UChar emptyString[] = {(UChar)0};
|
||||
static const UChar emptyString[] = {(UChar)0};
|
||||
utext_replace(dest[i], 0, utext_nativeLength(dest[i]), emptyString, 0, &status);
|
||||
}
|
||||
}
|
||||
|
|
@ -2774,7 +2774,7 @@ void RegexMatcher::MatchAt(int64_t startIdx, UBool toEnd, UErrorCode &status) {
|
|||
int64_t *pat = fPattern->fCompiledPat->getBuffer();
|
||||
|
||||
const UChar *litText = fPattern->fLiteralText.getBuffer();
|
||||
UVector *sets = fPattern->fSets;
|
||||
UVector *fSets = fPattern->fSets;
|
||||
|
||||
fFrameSize = fPattern->fFrameSize;
|
||||
REStackFrame *fp = resetStack();
|
||||
|
|
@ -3376,7 +3376,7 @@ GC_Done:
|
|||
|
||||
// There is input left. Pick up one char and test it for set membership.
|
||||
UChar32 c = UTEXT_NEXT32(fInputText);
|
||||
U_ASSERT(opValue > 0 && opValue < sets->size());
|
||||
U_ASSERT(opValue > 0 && opValue < fSets->size());
|
||||
if (c<256) {
|
||||
Regex8BitSet *s8 = &fPattern->fSets8[opValue];
|
||||
if (s8->contains(c)) {
|
||||
|
|
@ -3384,7 +3384,7 @@ GC_Done:
|
|||
break;
|
||||
}
|
||||
} else {
|
||||
UnicodeSet *s = (UnicodeSet *)sets->elementAt(opValue);
|
||||
UnicodeSet *s = (UnicodeSet *)fSets->elementAt(opValue);
|
||||
if (s->contains(c)) {
|
||||
// The character is in the set. A Match.
|
||||
fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
|
||||
|
|
@ -3566,7 +3566,14 @@ GC_Done:
|
|||
}
|
||||
}
|
||||
fp = StateSave(fp, fp->fPatIdx, status);
|
||||
} else {
|
||||
// Increment time-out counter. (StateSave() does it if count >= minCount)
|
||||
fTickCounter--;
|
||||
if (fTickCounter <= 0) {
|
||||
IncrementTime(status); // Re-initializes fTickCounter
|
||||
}
|
||||
}
|
||||
|
||||
fp->fPatIdx = opValue + 4; // Loop back.
|
||||
}
|
||||
break;
|
||||
|
|
@ -3623,6 +3630,11 @@ GC_Done:
|
|||
// We haven't met the minimum number of matches yet.
|
||||
// Loop back for another one.
|
||||
fp->fPatIdx = opValue + 4; // Loop back.
|
||||
// Increment time-out counter. (StateSave() does it if count >= minCount)
|
||||
fTickCounter--;
|
||||
if (fTickCounter <= 0) {
|
||||
IncrementTime(status); // Re-initializes fTickCounter
|
||||
}
|
||||
} else {
|
||||
// We do have the minimum number of matches.
|
||||
|
||||
|
|
@ -3659,9 +3671,9 @@ GC_Done:
|
|||
if (newFP == (int64_t *)fp) {
|
||||
break;
|
||||
}
|
||||
int32_t i;
|
||||
for (i=0; i<fFrameSize; i++) {
|
||||
newFP[i] = ((int64_t *)fp)[i];
|
||||
int32_t j;
|
||||
for (j=0; j<fFrameSize; j++) {
|
||||
newFP[j] = ((int64_t *)fp)[j];
|
||||
}
|
||||
fp = (REStackFrame *)newFP;
|
||||
fStack->setSize(newStackSize);
|
||||
|
|
@ -3818,9 +3830,9 @@ GC_Done:
|
|||
// This makes the capture groups from within the look-ahead
|
||||
// expression available.
|
||||
int64_t *newFP = fStack->getBuffer() + newStackSize - fFrameSize;
|
||||
int32_t i;
|
||||
for (i=0; i<fFrameSize; i++) {
|
||||
newFP[i] = ((int64_t *)fp)[i];
|
||||
int32_t j;
|
||||
for (j=0; j<fFrameSize; j++) {
|
||||
newFP[j] = ((int64_t *)fp)[j];
|
||||
}
|
||||
fp = (REStackFrame *)newFP;
|
||||
fStack->setSize(newStackSize);
|
||||
|
|
@ -4111,9 +4123,9 @@ GC_Done:
|
|||
// This op scans through all matching input.
|
||||
// The following LOOP_C op emulates stack unwinding if the following pattern fails.
|
||||
{
|
||||
U_ASSERT(opValue > 0 && opValue < sets->size());
|
||||
U_ASSERT(opValue > 0 && opValue < fSets->size());
|
||||
Regex8BitSet *s8 = &fPattern->fSets8[opValue];
|
||||
UnicodeSet *s = (UnicodeSet *)sets->elementAt(opValue);
|
||||
UnicodeSet *s = (UnicodeSet *)fSets->elementAt(opValue);
|
||||
|
||||
// Loop through input, until either the input is exhausted or
|
||||
// we reach a character that is not a member of the set.
|
||||
|
|
@ -4338,7 +4350,7 @@ void RegexMatcher::MatchChunkAt(int32_t startIdx, UBool toEnd, UErrorCode &statu
|
|||
int64_t *pat = fPattern->fCompiledPat->getBuffer();
|
||||
|
||||
const UChar *litText = fPattern->fLiteralText.getBuffer();
|
||||
UVector *sets = fPattern->fSets;
|
||||
UVector *fSets = fPattern->fSets;
|
||||
|
||||
const UChar *inputBuf = fInputText->chunkContents;
|
||||
|
||||
|
|
@ -4916,7 +4928,7 @@ GC_Done:
|
|||
break;
|
||||
}
|
||||
|
||||
U_ASSERT(opValue > 0 && opValue < sets->size());
|
||||
U_ASSERT(opValue > 0 && opValue < fSets->size());
|
||||
|
||||
// There is input left. Pick up one char and test it for set membership.
|
||||
UChar32 c;
|
||||
|
|
@ -4928,7 +4940,7 @@ GC_Done:
|
|||
break;
|
||||
}
|
||||
} else {
|
||||
UnicodeSet *s = (UnicodeSet *)sets->elementAt(opValue);
|
||||
UnicodeSet *s = (UnicodeSet *)fSets->elementAt(opValue);
|
||||
if (s->contains(c)) {
|
||||
// The character is in the set. A Match.
|
||||
break;
|
||||
|
|
@ -5099,6 +5111,12 @@ GC_Done:
|
|||
}
|
||||
}
|
||||
fp = StateSave(fp, fp->fPatIdx, status);
|
||||
} else {
|
||||
// Increment time-out counter. (StateSave() does it if count >= minCount)
|
||||
fTickCounter--;
|
||||
if (fTickCounter <= 0) {
|
||||
IncrementTime(status); // Re-initializes fTickCounter
|
||||
}
|
||||
}
|
||||
fp->fPatIdx = opValue + 4; // Loop back.
|
||||
}
|
||||
|
|
@ -5156,6 +5174,10 @@ GC_Done:
|
|||
// We haven't met the minimum number of matches yet.
|
||||
// Loop back for another one.
|
||||
fp->fPatIdx = opValue + 4; // Loop back.
|
||||
fTickCounter--;
|
||||
if (fTickCounter <= 0) {
|
||||
IncrementTime(status); // Re-initializes fTickCounter
|
||||
}
|
||||
} else {
|
||||
// We do have the minimum number of matches.
|
||||
|
||||
|
|
@ -5192,9 +5214,9 @@ GC_Done:
|
|||
if (newFP == (int64_t *)fp) {
|
||||
break;
|
||||
}
|
||||
int32_t i;
|
||||
for (i=0; i<fFrameSize; i++) {
|
||||
newFP[i] = ((int64_t *)fp)[i];
|
||||
int32_t j;
|
||||
for (j=0; j<fFrameSize; j++) {
|
||||
newFP[j] = ((int64_t *)fp)[j];
|
||||
}
|
||||
fp = (REStackFrame *)newFP;
|
||||
fStack->setSize(newStackSize);
|
||||
|
|
@ -5339,9 +5361,9 @@ GC_Done:
|
|||
// This makes the capture groups from within the look-ahead
|
||||
// expression available.
|
||||
int64_t *newFP = fStack->getBuffer() + newStackSize - fFrameSize;
|
||||
int32_t i;
|
||||
for (i=0; i<fFrameSize; i++) {
|
||||
newFP[i] = ((int64_t *)fp)[i];
|
||||
int32_t j;
|
||||
for (j=0; j<fFrameSize; j++) {
|
||||
newFP[j] = ((int64_t *)fp)[j];
|
||||
}
|
||||
fp = (REStackFrame *)newFP;
|
||||
fStack->setSize(newStackSize);
|
||||
|
|
@ -5447,7 +5469,7 @@ GC_Done:
|
|||
if (lbStartIdx < 0) {
|
||||
// First time through loop.
|
||||
lbStartIdx = fp->fInputIdx - minML;
|
||||
if (lbStartIdx > 0) {
|
||||
if (lbStartIdx > 0 && lbStartIdx < fInputLength) {
|
||||
U16_SET_CP_START(inputBuf, 0, lbStartIdx);
|
||||
}
|
||||
} else {
|
||||
|
|
@ -5524,7 +5546,7 @@ GC_Done:
|
|||
if (lbStartIdx < 0) {
|
||||
// First time through loop.
|
||||
lbStartIdx = fp->fInputIdx - minML;
|
||||
if (lbStartIdx > 0) {
|
||||
if (lbStartIdx > 0 && lbStartIdx < fInputLength) {
|
||||
U16_SET_CP_START(inputBuf, 0, lbStartIdx);
|
||||
}
|
||||
} else {
|
||||
|
|
@ -5601,9 +5623,9 @@ GC_Done:
|
|||
// This op scans through all matching input.
|
||||
// The following LOOP_C op emulates stack unwinding if the following pattern fails.
|
||||
{
|
||||
U_ASSERT(opValue > 0 && opValue < sets->size());
|
||||
U_ASSERT(opValue > 0 && opValue < fSets->size());
|
||||
Regex8BitSet *s8 = &fPattern->fSets8[opValue];
|
||||
UnicodeSet *s = (UnicodeSet *)sets->elementAt(opValue);
|
||||
UnicodeSet *s = (UnicodeSet *)fSets->elementAt(opValue);
|
||||
|
||||
// Loop through input, until either the input is exhausted or
|
||||
// we reach a character that is not a member of the set.
|
||||
|
|
@ -5796,3 +5818,4 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(RegexMatcher)
|
|||
U_NAMESPACE_END
|
||||
|
||||
#endif // !UCONFIG_NO_REGULAR_EXPRESSIONS
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue