summaryrefslogtreecommitdiffstats
path: root/ui/gfx/utf16_indexing.h
diff options
context:
space:
mode:
authorben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-12 20:55:53 +0000
committerben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-12 20:55:53 +0000
commitbde885b4e8cf11db7ba2af6c70a6580830a52e7a (patch)
tree7cb519bf772ed395b612ddabbe27d989ec44b958 /ui/gfx/utf16_indexing.h
parent9561605bc712063ba4ccb315c0a5cf5b0e3b221e (diff)
downloadchromium_src-bde885b4e8cf11db7ba2af6c70a6580830a52e7a.zip
chromium_src-bde885b4e8cf11db7ba2af6c70a6580830a52e7a.tar.gz
chromium_src-bde885b4e8cf11db7ba2af6c70a6580830a52e7a.tar.bz2
Move a bunch of windows stuff from ui/base/win to ui/gfx/win
R=sky@chromium.org BUG=103304 Review URL: https://codereview.chromium.org/23769011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@222860 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/gfx/utf16_indexing.h')
-rw-r--r--ui/gfx/utf16_indexing.h49
1 files changed, 49 insertions, 0 deletions
diff --git a/ui/gfx/utf16_indexing.h b/ui/gfx/utf16_indexing.h
new file mode 100644
index 0000000..7f56384
--- /dev/null
+++ b/ui/gfx/utf16_indexing.h
@@ -0,0 +1,49 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_GFX_UTF16_INDEXING_H_
+#define UI_GFX_UTF16_INDEXING_H_
+
+#include "base/strings/string16.h"
+#include "ui/gfx/gfx_export.h"
+
+namespace gfx {
+
+// Returns false if s[index-1] is a high surrogate and s[index] is a low
+// surrogate, true otherwise.
+UI_EXPORT bool IsValidCodePointIndex(const string16& s, size_t index);
+
+// |UTF16IndexToOffset| returns the number of code points between |base| and
+// |pos| in the given string. |UTF16OffsetToIndex| returns the index that is
+// |offset| code points away from the given |base| index. These functions are
+// named after glib's |g_utf8_pointer_to_offset| and |g_utf8_offset_to_pointer|,
+// which perform the same function for UTF-8. As in glib, it is an error to
+// pass an |offset| that walks off the edge of the string.
+//
+// These functions attempt to deal with invalid use of UTF-16 surrogates in a
+// way that makes as much sense as possible: unpaired surrogates are treated as
+// single characters, and if an argument index points to the middle of a valid
+// surrogate pair, it is treated as though it pointed to the end of that pair.
+// The index returned by |UTF16OffsetToIndex| never points to the middle of a
+// surrogate pair.
+//
+// The following identities hold:
+// If |s| contains no surrogate pairs, then
+// UTF16IndexToOffset(s, base, pos) == pos - base
+// UTF16OffsetToIndex(s, base, offset) == base + offset
+// If |pos| does not point to the middle of a surrogate pair, then
+// UTF16OffsetToIndex(s, base, UTF16IndexToOffset(s, base, pos)) == pos
+// Always,
+// UTF16IndexToOffset(s, base, UTF16OffsetToIndex(s, base, ofs)) == ofs
+// UTF16IndexToOffset(s, i, j) == -UTF16IndexToOffset(s, j, i)
+UI_EXPORT ptrdiff_t UTF16IndexToOffset(const string16& s,
+ size_t base,
+ size_t pos);
+UI_EXPORT size_t UTF16OffsetToIndex(const string16& s,
+ size_t base,
+ ptrdiff_t offset);
+
+} // namespace gfx
+
+#endif // UI_GFX_UTF16_INDEXING_H_