summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/platform/wtf/text/string_view.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/platform/wtf/text/string_view.cc')
-rw-r--r--chromium/third_party/blink/renderer/platform/wtf/text/string_view.cc22
1 files changed, 22 insertions, 0 deletions
diff --git a/chromium/third_party/blink/renderer/platform/wtf/text/string_view.cc b/chromium/third_party/blink/renderer/platform/wtf/text/string_view.cc
index 9a56ddff705..393bcff4b1d 100644
--- a/chromium/third_party/blink/renderer/platform/wtf/text/string_view.cc
+++ b/chromium/third_party/blink/renderer/platform/wtf/text/string_view.cc
@@ -4,6 +4,8 @@
#include "third_party/blink/renderer/platform/wtf/text/string_view.h"
+#include <unicode/utf16.h>
+
#include "third_party/blink/renderer/platform/wtf/text/atomic_string.h"
#include "third_party/blink/renderer/platform/wtf/text/string_impl.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
@@ -135,4 +137,24 @@ StringView StringView::LowerASCIIMaybeUsingBuffer(
StackStringViewAllocator(buffer));
}
+UChar32 StringView::CodepointAt(unsigned i) const {
+ SECURITY_DCHECK(i < length());
+ if (Is8Bit())
+ return (*this)[i];
+ UChar32 codepoint;
+ U16_GET(Characters16(), 0, i, length(), codepoint);
+ return codepoint;
+}
+
+unsigned StringView::NextCodePointOffset(unsigned i) const {
+ SECURITY_DCHECK(i < length());
+ if (Is8Bit())
+ return i + 1;
+ const UChar* str = Characters16() + i;
+ ++i;
+ if (i < length() && U16_IS_LEAD(*str++) && U16_IS_TRAIL(*str))
+ ++i;
+ return i;
+}
+
} // namespace WTF