summaryrefslogtreecommitdiffstats
path: root/vespajlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-04-06 14:29:10 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2022-04-06 14:29:10 +0200
commit091ab18c517b68617d049dd102bbf3fb3d46c022 (patch)
tree9ba1182cb9b5654231e14d27853c32029896ca16 /vespajlib
parent1972568cd73c2769ac25a4321574cb1c50beae46 (diff)
Skip unnecessary surrogate check if ! isBmpCodePoint, and move high surrogate check inside isTextCharacter.
Diffstat (limited to 'vespajlib')
-rw-r--r--vespajlib/src/main/java/com/yahoo/text/Text.java13
1 files changed, 4 insertions, 9 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/text/Text.java b/vespajlib/src/main/java/com/yahoo/text/Text.java
index 7ce24f40bb2..8a97ddc7cbc 100644
--- a/vespajlib/src/main/java/com/yahoo/text/Text.java
+++ b/vespajlib/src/main/java/com/yahoo/text/Text.java
@@ -50,9 +50,10 @@ public final class Text {
return (codepoint < 0x80)
? allowedAsciiChars[codepoint]
- : isTextCharAboveUsAscii(codepoint);
+ : (codepoint < Character.MIN_SURROGATE) || isTextCharAboveUsAscii(codepoint);
}
private static boolean isTextCharAboveUsAscii(int codepoint) {
+ if (codepoint <= Character.MAX_HIGH_SURROGATE) return false;
if (codepoint < 0xFDD0) return true;
if (codepoint <= 0xFDDF) return false;
if (codepoint < 0x1FFFE) return true;
@@ -121,20 +122,14 @@ public final class Text {
int codePoint = string.codePointAt(i);
if (codePoint < 0x80) {
if ( ! allowedAsciiChars[codePoint]) return false;
- i++;
} else if (codePoint < Character.MIN_SURROGATE) {
- i++;
} else {
if ( ! isTextCharAboveUsAscii(codePoint)) return false;
- if ( ! Character.isSupplementaryCodePoint(codePoint)) {
- if (Character.isHighSurrogate((char)codePoint)) return false;
+ if ( ! Character.isBmpCodePoint(codePoint)) {
i++;
- } else {
- if (Character.isHighSurrogate(Character.highSurrogate(codePoint))
- && ! Character.isLowSurrogate(Character.lowSurrogate(codePoint))) return false;
- i += 2;
}
}
+ i++;
}
return true;
}