summaryrefslogtreecommitdiff
path: root/include/rtl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2015-04-20 09:52:41 +0100
committerCaolán McNamara <caolanm@redhat.com>2015-04-20 10:09:58 +0100
commitfd8c06aded20cfd6b4f9c729cec120c0d2d574aa (patch)
tree3c0d558218456ba87a2858019defcce0ed4c235a /include/rtl
parenta2fea109e6454b10e8e85148b93bdca89066fe8d (diff)
duplicate surrogate code
Change-Id: I9fad024e4b5c8a4ca272f2387df07351198cf5dc
Diffstat (limited to 'include/rtl')
-rw-r--r--include/rtl/surrogates.h57
1 files changed, 57 insertions, 0 deletions
diff --git a/include/rtl/surrogates.h b/include/rtl/surrogates.h
new file mode 100644
index 000000000000..ab98cd666ca3
--- /dev/null
+++ b/include/rtl/surrogates.h
@@ -0,0 +1,57 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_RTL_SURROGATES_H
+#define INCLUDED_RTL_SURROGATES_H
+
+#include <sal/config.h>
+
+#include <sal/types.h>
+
+#define SAL_RTL_FIRST_HIGH_SURROGATE 0xD800
+#define SAL_RTL_LAST_HIGH_SURROGATE 0xDBFF
+#define SAL_RTL_FIRST_LOW_SURROGATE 0xDC00
+#define SAL_RTL_LAST_LOW_SURROGATE 0xDFFF
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+inline bool isHighSurrogate(sal_uInt32 utf16) {
+ return utf16 >= SAL_RTL_FIRST_HIGH_SURROGATE
+ && utf16 <= SAL_RTL_LAST_HIGH_SURROGATE;
+}
+
+inline bool isLowSurrogate(sal_uInt32 utf16) {
+ return utf16 >= SAL_RTL_FIRST_LOW_SURROGATE
+ && utf16 <= SAL_RTL_LAST_LOW_SURROGATE;
+}
+
+inline sal_uInt32 combineSurrogates(sal_uInt32 high, sal_uInt32 low) {
+ return ((high - SAL_RTL_FIRST_HIGH_SURROGATE) << 10)
+ + (low - SAL_RTL_FIRST_LOW_SURROGATE) + 0x10000;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */