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
