diff options
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.cc | 22 |
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 |