summaryrefslogtreecommitdiffstats
path: root/sal/textenc/tenchelp.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sal/textenc/tenchelp.hxx')
-rw-r--r--sal/textenc/tenchelp.hxx250
1 files changed, 250 insertions, 0 deletions
diff --git a/sal/textenc/tenchelp.hxx b/sal/textenc/tenchelp.hxx
new file mode 100644
index 000000000..901156730
--- /dev/null
+++ b/sal/textenc/tenchelp.hxx
@@ -0,0 +1,250 @@
+/* -*- 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_SAL_TEXTENC_TENCHELP_HXX
+#define INCLUDED_SAL_TEXTENC_TENCHELP_HXX
+
+#include <sal/config.h>
+
+#include <rtl/tencinfo.h>
+#include <rtl/textcvt.h>
+#include <rtl/textenc.h>
+#include <sal/types.h>
+
+#include "unichars.hxx"
+
+#define RTL_TEXTCVT_BYTE_PRIVATE_START 0xF100
+#define RTL_TEXTCVT_BYTE_PRIVATE_END 0xF1FF
+
+/* ----------------- */
+/* - TextConverter - */
+/* ----------------- */
+
+typedef
+sal_Size (* ImplConvertToUnicodeProc)(void const * pData,
+ void * pContext,
+ char const * pSrcBuf,
+ sal_Size nSrcBytes,
+ sal_Unicode * pDestBuf,
+ sal_Size nDestChars,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtBytes);
+
+typedef
+sal_Size (* ImplConvertToTextProc)(void const * pData,
+ void * pContext,
+ sal_Unicode const * pSrcBuf,
+ sal_Size nSrcChars,
+ char * pDestBuf,
+ sal_Size nDestBytes,
+ sal_uInt32 nFlags,
+ sal_uInt32 * pInfo,
+ sal_Size * pSrcCvtChars);
+
+typedef void * (* ImplCreateTextContextProc)();
+
+typedef void (* ImplDestroyTextContextProc)(void * pContext);
+
+typedef void (* ImplResetTextContextProc)(void * pContext);
+
+typedef void * (* ImplCreateUnicodeContextProc)();
+
+typedef void (* ImplDestroyUnicodeContextProc)(void * pContext);
+
+typedef void (* ImplResetUnicodeContextProc)(void * pContext);
+
+struct ImplTextConverter
+{
+ void const * mpConvertData;
+ ImplConvertToUnicodeProc mpConvertTextToUnicodeProc;
+ ImplConvertToTextProc mpConvertUnicodeToTextProc;
+ ImplCreateTextContextProc mpCreateTextToUnicodeContext;
+ ImplDestroyTextContextProc mpDestroyTextToUnicodeContext;
+ ImplResetTextContextProc mpResetTextToUnicodeContext;
+ ImplCreateUnicodeContextProc mpCreateUnicodeToTextContext;
+ ImplDestroyUnicodeContextProc mpDestroyUnicodeToTextContext;
+ ImplResetUnicodeContextProc mpResetUnicodeToTextContext;
+};
+
+/* ----------------------------- */
+/* - TextEncoding - Structures - */
+/* ----------------------------- */
+
+struct SAL_DLLPUBLIC_RTTI ImplTextEncodingData
+{
+ ImplTextConverter maConverter;
+ sal_uInt8 mnMinCharSize;
+ sal_uInt8 mnMaxCharSize;
+ sal_uInt8 mnAveCharSize;
+ sal_uInt8 mnBestWindowsCharset;
+ char const * mpBestUnixCharset;
+ char const * mpBestMimeCharset;
+ sal_uInt32 mnInfoFlags;
+};
+
+/* ----------------------------------- */
+/* - TextConverter - Byte-Structures - */
+/* ----------------------------------- */
+
+struct ImplUniCharTabData
+{
+ sal_uInt16 mnUniChar;
+ unsigned char mnChar;
+ unsigned char mnChar2;
+ // to cater for mappings like MS1258 with 1--2 bytes per Unicode char,
+ // 0 if unused
+};
+
+struct ImplByteConvertData
+{
+ const sal_uInt16* mpToUniTab1;
+ const sal_uInt16* mpToUniTab2;
+ unsigned char mnToUniStart1;
+ unsigned char mnToUniEnd1;
+ unsigned char mnToUniStart2;
+ unsigned char mnToUniEnd2;
+ const unsigned char* mpToCharTab1;
+ const unsigned char* mpToCharTab2;
+ const ImplUniCharTabData* mpToCharExTab;
+ sal_uInt16 mnToCharStart1;
+ sal_uInt16 mnToCharEnd1;
+ sal_uInt16 mnToCharStart2;
+ sal_uInt16 mnToCharEnd2;
+ sal_uInt16 mnToCharExCount;
+};
+
+/* ----------------------------------- */
+/* - TextConverter - DBCS-Structures - */
+/* ----------------------------------- */
+
+struct ImplDBCSEUDCData
+{
+ unsigned char mnLeadStart;
+ unsigned char mnLeadEnd;
+ unsigned char mnTrail1Start;
+ unsigned char mnTrail1End;
+ unsigned char mnTrail2Start;
+ unsigned char mnTrail2End;
+ unsigned char mnTrail3Start;
+ unsigned char mnTrail3End;
+ unsigned char mnTrailCount;
+ sal_uInt16 mnTrailRangeCount;
+ sal_uInt16 mnUniStart;
+ sal_uInt16 mnUniEnd;
+};
+
+struct ImplDBCSToUniLeadTab
+{
+ sal_uInt16 mnUniChar;
+ sal_uInt8 mnTrailStart;
+ sal_uInt8 mnTrailEnd;
+ const sal_uInt16* mpToUniTrailTab;
+};
+
+struct ImplUniToDBCSHighTab
+{
+ sal_uInt8 mnLowStart;
+ sal_uInt8 mnLowEnd;
+ const sal_uInt16* mpToUniTrailTab;
+};
+
+struct ImplDBCSConvertData
+{
+ const ImplDBCSToUniLeadTab* mpToUniLeadTab;
+ const ImplUniToDBCSHighTab* mpToDBCSHighTab;
+ unsigned char mnLeadStart;
+ unsigned char mnLeadEnd;
+ unsigned char mnTrailStart;
+ unsigned char mnTrailEnd;
+ const ImplDBCSEUDCData* mpEUDCTab;
+ sal_uInt16 mnEUDCCount;
+};
+
+/* ---------------------------------- */
+/* - TextConverter - EUC-Structures - */
+/* ---------------------------------- */
+
+struct ImplEUCJPConvertData
+{
+ const ImplDBCSToUniLeadTab* mpJIS0208ToUniLeadTab;
+ const ImplDBCSToUniLeadTab* mpJIS0212ToUniLeadTab;
+ const ImplUniToDBCSHighTab* mpUniToJIS0208HighTab;
+ const ImplUniToDBCSHighTab* mpUniToJIS0212HighTab;
+};
+
+/* --------------------------------- */
+/* - TextConverter - HelpFunctions - */
+/* --------------------------------- */
+
+inline sal_Unicode ImplGetUndefinedUnicodeChar(
+ unsigned char cChar, sal_uInt32 nFlags)
+{
+ return ((nFlags & RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MASK)
+ == RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MAPTOPRIVATE) ?
+ RTL_TEXTCVT_BYTE_PRIVATE_START + cChar :
+ RTL_TEXTENC_UNICODE_REPLACEMENT_CHARACTER;
+}
+
+/* ----------------------------- */
+/* - TextConverter - Functions - */
+/* ----------------------------- */
+
+sal_Size ImplDBCSToUnicode( const void* pData, void* pContext,
+ const char* pSrcBuf, sal_Size nSrcBytes,
+ sal_Unicode* pDestBuf, sal_Size nDestChars,
+ sal_uInt32 nFlags, sal_uInt32* pInfo,
+ sal_Size* pSrcCvtBytes );
+sal_Size ImplUnicodeToDBCS( const void* pData, void* pContext,
+ const sal_Unicode* pSrcBuf, sal_Size nSrcChars,
+ char* pDestBuf, sal_Size nDestBytes,
+ sal_uInt32 nFlags, sal_uInt32* pInfo,
+ sal_Size* pSrcCvtChars );
+sal_Size ImplEUCJPToUnicode( const void* pData,
+ void* pContext,
+ const char* pSrcBuf, sal_Size nSrcBytes,
+ sal_Unicode* pDestBuf, sal_Size nDestChars,
+ sal_uInt32 nFlags, sal_uInt32* pInfo,
+ sal_Size* pSrcCvtBytes );
+sal_Size ImplUnicodeToEUCJP( const void* pData,
+ void* pContext,
+ const sal_Unicode* pSrcBuf, sal_Size nSrcChars,
+ char* pDestBuf, sal_Size nDestBytes,
+ sal_uInt32 nFlags, sal_uInt32* pInfo,
+ sal_Size* pSrcCvtChars );
+void* ImplUTF7CreateUTF7TextToUnicodeContext();
+void ImplUTF7DestroyTextToUnicodeContext( void* pContext );
+void ImplUTF7ResetTextToUnicodeContext( void* pContext );
+sal_Size ImplUTF7ToUnicode( const void* pData, void* pContext,
+ const char* pSrcBuf, sal_Size nSrcBytes,
+ sal_Unicode* pDestBuf, sal_Size nDestChars,
+ sal_uInt32 nFlags, sal_uInt32* pInfo,
+ sal_Size* pSrcCvtBytes );
+void* ImplUTF7CreateUnicodeToTextContext();
+void ImplUTF7DestroyUnicodeToTextContext( void* pContext );
+void ImplUTF7ResetUnicodeToTextContext( void* pContext );
+sal_Size ImplUnicodeToUTF7( const void* pData, void* pContext,
+ const sal_Unicode* pSrcBuf, sal_Size nSrcChars,
+ char* pDestBuf, sal_Size nDestBytes,
+ sal_uInt32 nFlags, sal_uInt32* pInfo,
+ sal_Size* pSrcCvtChars );
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */