xref: /core/i18npool/inc/textconversion.hxx (revision 191e3f8d)
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  *   Licensed to the Apache Software Foundation (ASF) under one or more
12  *   contributor license agreements. See the NOTICE file distributed
13  *   with this work for additional information regarding copyright
14  *   ownership. The ASF licenses this file to you under the Apache
15  *   License, Version 2.0 (the "License"); you may not use this file
16  *   except in compliance with the License. You may obtain a copy of
17  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 #pragma once
20 
21 #include <com/sun/star/lang/XServiceInfo.hpp>
22 #include <com/sun/star/i18n/XExtendedTextConversion.hpp>
23 #include <cppuhelper/implbase.hxx>
24 
25 namespace com::sun::star::linguistic2 { class XConversionDictionary; }
26 namespace com::sun::star::linguistic2 { class XConversionDictionaryList; }
27 namespace com::sun::star::uno { class XComponentContext; }
28 
29 namespace i18npool {
30 
31 
32 
33 class TextConversionService: public cppu::WeakImplHelper
34 <
35     css::i18n::XExtendedTextConversion,
36     css::lang::XServiceInfo
37 >
38 {
39 public:
40         TextConversionService(const char* pImplName);
41         virtual ~TextConversionService() override;
42         // Methods
43         virtual css::i18n::TextConversionResult SAL_CALL
44         getConversions( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength,
45             const css::lang::Locale& aLocale, sal_Int16 nTextConversionType,
46             sal_Int32 nTextConversionOptions ) override = 0;
47         virtual OUString SAL_CALL
48         getConversion( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength,
49             const css::lang::Locale& aLocale, sal_Int16 nTextConversionType,
50             sal_Int32 nTextConversionOptions ) override = 0;
51         virtual OUString SAL_CALL
52         getConversionWithOffset( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength,
53             const css::lang::Locale& aLocale, sal_Int16 nTextConversionType,
54             sal_Int32 nTextConversionOptions, css::uno::Sequence< sal_Int32 >& offset ) override = 0;
55         virtual sal_Bool SAL_CALL
56         interactiveConversion(const css::lang::Locale& aLocale,
57             sal_Int16 nTextConversionType, sal_Int32 nTextConversionOptions ) override = 0;
58 
59     //XServiceInfo
60     OUString SAL_CALL
61         getImplementationName() override;
62     sal_Bool SAL_CALL
63         supportsService(const OUString& ServiceName) override;
64     css::uno::Sequence< OUString > SAL_CALL
65         getSupportedServiceNames() override;
66 private:
67     const char* implementationName;
68 };
69 
70 // for Hangul2Hanja conversion
71 typedef struct {
72     sal_Unicode code;
73     sal_Int16 address;
74     sal_Int16 count;
75 } Hangul_Index;
76 
77 
78 
79 class TextConversion_ko final : public TextConversionService
80 {
81 public:
82     TextConversion_ko( const css::uno::Reference < css::uno::XComponentContext >& rxContext );
83 
84         // Methods
85         css::i18n::TextConversionResult SAL_CALL
86         getConversions( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength,
87             const css::lang::Locale& aLocale, sal_Int16 nTextConversionType,
88             sal_Int32 nTextConversionOptions ) override;
89         OUString SAL_CALL
90         getConversion( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength,
91             const css::lang::Locale& aLocale, sal_Int16 nTextConversionType,
92             sal_Int32 nTextConversionOptions ) override;
93         OUString SAL_CALL
94         getConversionWithOffset( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength,
95             const css::lang::Locale& aLocale, sal_Int16 nTextConversionType,
96             sal_Int32 nTextConversionOptions, css::uno::Sequence< sal_Int32 >& offset ) override;
97         sal_Bool SAL_CALL
98         interactiveConversion(const css::lang::Locale& aLocale,
99             sal_Int16 nTextConversionType,
100             sal_Int32 nTextConversionOptions ) override;
101 
102 private:
103         // Hangul/Hanja system dictionary
104         css::uno::Reference < css::linguistic2::XConversionDictionary > xCD;
105         // Hangul/Hanja user defined dictionary list
106         css::uno::Reference < css::linguistic2::XConversionDictionaryList > xCDL;
107         sal_Int32 maxLeftLength;
108         sal_Int32 maxRightLength;
109         static css::uno::Sequence< OUString >
110             getCharConversions(std::u16string_view aText, sal_Int32 nStartPos, sal_Int32 nLength, bool toHanja);
111 };
112 
113 
114 
115 
116 class TextConversion_zh final : public TextConversionService
117 {
118 public:
119     TextConversion_zh( const css::uno::Reference < css::uno::XComponentContext >& rxContext );
120 
121         // Methods
122         css::i18n::TextConversionResult SAL_CALL
123         getConversions( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength,
124             const css::lang::Locale& aLocale, sal_Int16 nTextConversionType,
125             sal_Int32 nTextConversionOptions ) override;
126         OUString SAL_CALL
127         getConversion( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength,
128             const css::lang::Locale& aLocale, sal_Int16 nTextConversionType,
129             sal_Int32 nTextConversionOptions ) override;
130         OUString SAL_CALL
131         getConversionWithOffset( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength,
132             const css::lang::Locale& aLocale, sal_Int16 nTextConversionType,
133             sal_Int32 nTextConversionOptions, css::uno::Sequence< sal_Int32 >& offset ) override;
134         sal_Bool SAL_CALL
135         interactiveConversion(const css::lang::Locale& aLocale,
136             sal_Int16 nTextConversionType,
137             sal_Int32 nTextConversionOptions ) override;
138 private:
139         // user defined dictionary list
140         css::uno::Reference < css::linguistic2::XConversionDictionaryList > xCDL;
141         OUString getWordConversion(std::u16string_view aText,
142             sal_Int32 nStartPos, sal_Int32 nLength, bool toSChinese, sal_Int32 nConversionOptions, css::uno::Sequence <sal_Int32>& offset);
143         static OUString getCharConversion(std::u16string_view aText, sal_Int32 nStartPos, sal_Int32 nLength, bool toSChinese, sal_Int32 nConversionOptions);
144         css::lang::Locale aLocale;
145 };
146 
147 } // i18npool
148 
149 extern "C" {
150 
151 const sal_Unicode* getHangul2HanjaData();
152 const i18npool::Hangul_Index* getHangul2HanjaIndex();
153 sal_Int16 getHangul2HanjaIndexCount();
154 const sal_uInt16* getHanja2HangulIndex();
155 const sal_Unicode* getHanja2HangulData();
156 
157 const sal_Unicode* getSTC_CharData_T2S();
158 const sal_uInt16* getSTC_CharIndex_T2S();
159 const sal_Unicode* getSTC_CharData_S2V();
160 const sal_uInt16* getSTC_CharIndex_S2V();
161 const sal_Unicode* getSTC_CharData_S2T();
162 const sal_uInt16* getSTC_CharIndex_S2T();
163 
164 const sal_Unicode *getSTC_WordData(sal_Int32&);
165 
166 const sal_uInt16 *getSTC_WordIndex_T2S(sal_Int32&);
167 const sal_uInt16 *getSTC_WordEntry_T2S();
168 const sal_uInt16 *getSTC_WordIndex_S2T(sal_Int32&);
169 const sal_uInt16 *getSTC_WordEntry_S2T();
170 
171 }
172 
173 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
174