diff options
author | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-12 20:55:53 +0000 |
---|---|---|
committer | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-12 20:55:53 +0000 |
commit | bde885b4e8cf11db7ba2af6c70a6580830a52e7a (patch) | |
tree | 7cb519bf772ed395b612ddabbe27d989ec44b958 /ui/gfx/utf16_indexing.h | |
parent | 9561605bc712063ba4ccb315c0a5cf5b0e3b221e (diff) | |
download | chromium_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.h | 49 |
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_ |