summaryrefslogtreecommitdiff
path: root/include/rtl
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2017-09-13 13:35:49 +0200
committerStephan Bergmann <sbergman@redhat.com>2017-09-13 13:35:49 +0200
commit3f0fba004badec01e536ca0fe2889e7e0bb93d7a (patch)
treecdf682e89f56c29fd6a8cd650bdb8bba42eca555 /include/rtl
parent2d22b39fb7ddbb02f246e2943b228931e5d583e1 (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.hxx27
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