diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2017-09-13 13:35:49 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2017-09-13 13:35:49 +0200 |
commit | 3f0fba004badec01e536ca0fe2889e7e0bb93d7a (patch) | |
tree | cdf682e89f56c29fd6a8cd650bdb8bba42eca555 /include/rtl | |
parent | 2d22b39fb7ddbb02f246e2943b228931e5d583e1 (diff) |
New rtl::isUnicodeScalarValue, rtl::isSurrogate
There are apparently various places that want to check for a Unicode scalar
value rather than for a Unicode code point. Changed those uses of
rtl::isUnicodeCodePoint where that was obvious. (For changing
svtools/source/svrtf/svparser.cxx see 8e0fb74dc01927b60d8b868548ef8fe1d7a80ce3
"Revert 'svtools: HTML import: don't put lone surrogates in OUString'".) Other
uses of rtl::isUnicodeCodePoint might also want to use rtl::isUnicodeScalarValue
instead.
As a side effect, this change also introduces rtl::isSurrogate, which is useful
in a few places as well.
Change-Id: I9245f4f98b83877145a4d392f0ddb7c5d824a535
Diffstat (limited to 'include/rtl')
-rw-r--r-- | include/rtl/character.hxx | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/include/rtl/character.hxx b/include/rtl/character.hxx index b83121a4a6d4..ee26f4ae1f9a 100644 --- a/include/rtl/character.hxx +++ b/include/rtl/character.hxx @@ -335,6 +335,20 @@ sal_uInt32 const surrogatesLowLast = 0xDFFF; } /// @endcond +/** Check for surrogate. + + @param code A Unicode code point. + + @return True if code is a surrogate code point (0xD800--0xDFFF). + + @since LibreOffice 6.0 +*/ +inline bool isSurrogate(sal_uInt32 code) { + assert(isUnicodeCodePoint(code)); + return code >= detail::surrogatesHighFirst + && code <= detail::surrogatesLowLast; +} + /** Check for high surrogate. @param code A Unicode code point. @@ -433,6 +447,19 @@ inline std::size_t splitSurrogates(sal_uInt32 code, sal_Unicode * output) { } } +/** Check for Unicode scalar value. + + @param code An integer. + + @return True if code is a Unicode scalar value. + + @since LibreOffice 6.0 +*/ +inline bool isUnicodeScalarValue(sal_uInt32 code) +{ + return isUnicodeCodePoint(code) && !isSurrogate(code); +} + } #endif |