1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski #ifndef _I18N_TRANSLITERATIONIMPL_HXX_
24*b1cdbd2cSJim Jagielski #define _I18N_TRANSLITERATIONIMPL_HXX_
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski #include <com/sun/star/i18n/XLocaleData.hpp>
27*b1cdbd2cSJim Jagielski #include <com/sun/star/i18n/XExtendedTransliteration.hpp>
28*b1cdbd2cSJim Jagielski #include <cppuhelper/implbase2.hxx> // helper for implementations
29*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XMultiServiceFactory.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XServiceInfo.hpp>
31*b1cdbd2cSJim Jagielski #include <sal/types.h>
32*b1cdbd2cSJim Jagielski 
33*b1cdbd2cSJim Jagielski namespace com { namespace sun { namespace star { namespace i18n {
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 1
36*b1cdbd2cSJim Jagielski #define RETURN_DEBUG_STRING (rtl::OUString::createFromAscii("return from transliterationImpl"));
37*b1cdbd2cSJim Jagielski #define RETURN_DEBUG_NUMBER 'TRAN'
38*b1cdbd2cSJim Jagielski #else
39*b1cdbd2cSJim Jagielski #define RETURN_DEBUG_STRING
40*b1cdbd2cSJim Jagielski #define RETURN_DEBUG_NUMBER
41*b1cdbd2cSJim Jagielski #endif
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski class TransliterationImpl : public cppu::WeakImplHelper2
44*b1cdbd2cSJim Jagielski <
45*b1cdbd2cSJim Jagielski     com::sun::star::i18n::XExtendedTransliteration,
46*b1cdbd2cSJim Jagielski     com::sun::star::lang::XServiceInfo
47*b1cdbd2cSJim Jagielski >
48*b1cdbd2cSJim Jagielski {
49*b1cdbd2cSJim Jagielski public:
50*b1cdbd2cSJim Jagielski     // Constructors
51*b1cdbd2cSJim Jagielski     TransliterationImpl(const com::sun::star::uno::Reference < com::sun::star::lang::XMultiServiceFactory >& xMSF);
52*b1cdbd2cSJim Jagielski     // Destructor
53*b1cdbd2cSJim Jagielski     ~TransliterationImpl();
54*b1cdbd2cSJim Jagielski 
55*b1cdbd2cSJim Jagielski     // Methods
56*b1cdbd2cSJim Jagielski     virtual rtl::OUString SAL_CALL getName(  ) throw(com::sun::star::uno::RuntimeException) ;
57*b1cdbd2cSJim Jagielski     virtual sal_Int16 SAL_CALL getType(  ) throw(com::sun::star::uno::RuntimeException) ;
58*b1cdbd2cSJim Jagielski 
59*b1cdbd2cSJim Jagielski     virtual void SAL_CALL loadModule( TransliterationModules modName, const com::sun::star::lang::Locale& rLocale )
60*b1cdbd2cSJim Jagielski         throw(com::sun::star::uno::RuntimeException) ;
61*b1cdbd2cSJim Jagielski     virtual void SAL_CALL loadModuleNew( const com::sun::star::uno::Sequence< TransliterationModulesNew >& modName,
62*b1cdbd2cSJim Jagielski         const com::sun::star::lang::Locale& rLocale ) throw(com::sun::star::uno::RuntimeException) ;
63*b1cdbd2cSJim Jagielski     virtual void SAL_CALL loadModuleByImplName( const rtl::OUString& implName,
64*b1cdbd2cSJim Jagielski         const com::sun::star::lang::Locale& rLocale ) throw(com::sun::star::uno::RuntimeException);
65*b1cdbd2cSJim Jagielski     virtual void SAL_CALL loadModulesByImplNames(const com::sun::star::uno::Sequence< rtl::OUString >& modNamelist,
66*b1cdbd2cSJim Jagielski         const com::sun::star::lang::Locale& rLocale) throw(com::sun::star::uno::RuntimeException);
67*b1cdbd2cSJim Jagielski 
68*b1cdbd2cSJim Jagielski     virtual com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL getAvailableModules(
69*b1cdbd2cSJim Jagielski         const com::sun::star::lang::Locale& rLocale, sal_Int16 sType )
70*b1cdbd2cSJim Jagielski         throw(com::sun::star::uno::RuntimeException);
71*b1cdbd2cSJim Jagielski 
72*b1cdbd2cSJim Jagielski     virtual rtl::OUString SAL_CALL transliterate( const rtl::OUString& inStr, sal_Int32 startPos, sal_Int32 nCount,
73*b1cdbd2cSJim Jagielski         com::sun::star::uno::Sequence< sal_Int32 >& offset  ) throw(com::sun::star::uno::RuntimeException) ;
74*b1cdbd2cSJim Jagielski 
75*b1cdbd2cSJim Jagielski     virtual rtl::OUString SAL_CALL folding( const rtl::OUString& inStr, sal_Int32 startPos, sal_Int32 nCount,
76*b1cdbd2cSJim Jagielski         com::sun::star::uno::Sequence< sal_Int32 >& offset ) throw(com::sun::star::uno::RuntimeException);
77*b1cdbd2cSJim Jagielski 
78*b1cdbd2cSJim Jagielski     // Methods in XExtendedTransliteration
79*b1cdbd2cSJim Jagielski     virtual rtl::OUString SAL_CALL transliterateString2String( const rtl::OUString& inStr, sal_Int32 startPos, sal_Int32 nCount )
80*b1cdbd2cSJim Jagielski         throw(com::sun::star::uno::RuntimeException) ;
81*b1cdbd2cSJim Jagielski     virtual rtl::OUString SAL_CALL transliterateChar2String( sal_Unicode inChar )
82*b1cdbd2cSJim Jagielski         throw(com::sun::star::uno::RuntimeException) ;
83*b1cdbd2cSJim Jagielski     virtual sal_Unicode SAL_CALL transliterateChar2Char( sal_Unicode inChar )
84*b1cdbd2cSJim Jagielski         throw(com::sun::star::i18n::MultipleCharsOutputException,
85*b1cdbd2cSJim Jagielski                 com::sun::star::uno::RuntimeException) ;
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski /*
88*b1cdbd2cSJim Jagielski     virtual void SAL_CALL createCascadeInstance( const com::sun::star::uno::Sequence< rtl::OUString >& modNamelist,
89*b1cdbd2cSJim Jagielski         const com::sun::star::lang::Locale& rLocale ) throw(com::sun::star::uno::RuntimeException) ;
90*b1cdbd2cSJim Jagielski     virtual rtl::OUString SAL_CALL folding_reverse( const rtl::OUString& inStr, sal_Int32 startPos,
91*b1cdbd2cSJim Jagielski         sal_Int32 nCount ) throw(com::sun::star::uno::RuntimeException);
92*b1cdbd2cSJim Jagielski     virtual sal_Int32 SAL_CALL transliterateMatch( const rtl::OUString& content, sal_Int32 pos1, sal_Int32 nCount1,
93*b1cdbd2cSJim Jagielski         const rtl::OUString& pattern, sal_Int32 pos2, sal_Int32 nCount2 )
94*b1cdbd2cSJim Jagielski         throw(com::sun::star::uno::RuntimeException);
95*b1cdbd2cSJim Jagielski */
96*b1cdbd2cSJim Jagielski     virtual sal_Bool SAL_CALL equals( const rtl::OUString& str1, sal_Int32 pos1, sal_Int32 nCount1,
97*b1cdbd2cSJim Jagielski         sal_Int32& nMatch1, const rtl::OUString& str2, sal_Int32 pos2, sal_Int32 nCount2, sal_Int32& nMatch2 )
98*b1cdbd2cSJim Jagielski         throw(com::sun::star::uno::RuntimeException);
99*b1cdbd2cSJim Jagielski     virtual com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL transliterateRange( const rtl::OUString& str1,
100*b1cdbd2cSJim Jagielski         const rtl::OUString& str2 ) throw(com::sun::star::uno::RuntimeException) ;
101*b1cdbd2cSJim Jagielski 
102*b1cdbd2cSJim Jagielski     virtual sal_Int32 SAL_CALL compareSubstring( const rtl::OUString& s1, sal_Int32 off1, sal_Int32 len1,
103*b1cdbd2cSJim Jagielski         const rtl::OUString& s2, sal_Int32 off2, sal_Int32 len2) throw(com::sun::star::uno::RuntimeException);
104*b1cdbd2cSJim Jagielski 
105*b1cdbd2cSJim Jagielski     virtual sal_Int32 SAL_CALL compareString( const rtl::OUString& s1, const rtl::OUString& s2)
106*b1cdbd2cSJim Jagielski         throw(com::sun::star::uno::RuntimeException);
107*b1cdbd2cSJim Jagielski 
108*b1cdbd2cSJim Jagielski     //XServiceInfo
109*b1cdbd2cSJim Jagielski     virtual rtl::OUString SAL_CALL getImplementationName(void) throw( com::sun::star::uno::RuntimeException );
110*b1cdbd2cSJim Jagielski     virtual sal_Bool SAL_CALL supportsService(const rtl::OUString& ServiceName)
111*b1cdbd2cSJim Jagielski         throw( com::sun::star::uno::RuntimeException );
112*b1cdbd2cSJim Jagielski     virtual com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL getSupportedServiceNames(void)
113*b1cdbd2cSJim Jagielski         throw( com::sun::star::uno::RuntimeException );
114*b1cdbd2cSJim Jagielski 
115*b1cdbd2cSJim Jagielski private:
116*b1cdbd2cSJim Jagielski #define maxCascade 27
117*b1cdbd2cSJim Jagielski     com::sun::star::uno::Reference< com::sun::star::i18n::XExtendedTransliteration > bodyCascade[maxCascade];
118*b1cdbd2cSJim Jagielski     sal_Int16 numCascade;
119*b1cdbd2cSJim Jagielski     sal_Bool caseignoreOnly;
120*b1cdbd2cSJim Jagielski     com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory > xSMgr;
121*b1cdbd2cSJim Jagielski     com::sun::star::uno::Reference< XLocaleData > localedata;
122*b1cdbd2cSJim Jagielski     com::sun::star::uno::Reference< com::sun::star::i18n::XExtendedTransliteration > caseignore;
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski     /** structure to cache the last transliteration body used. */
125*b1cdbd2cSJim Jagielski     struct TransBody
126*b1cdbd2cSJim Jagielski     {
127*b1cdbd2cSJim Jagielski         ::osl::Mutex mutex;
128*b1cdbd2cSJim Jagielski         ::rtl::OUString Name;
129*b1cdbd2cSJim Jagielski         ::com::sun::star::uno::Reference< ::com::sun::star::i18n::XExtendedTransliteration > Body;
130*b1cdbd2cSJim Jagielski     };
131*b1cdbd2cSJim Jagielski     static TransBody lastTransBody;
132*b1cdbd2cSJim Jagielski 
133*b1cdbd2cSJim Jagielski     virtual sal_Bool SAL_CALL loadModuleByName( const rtl::OUString& implName,
134*b1cdbd2cSJim Jagielski         com::sun::star::uno::Reference<com::sun::star::i18n::XExtendedTransliteration> & body, const com::sun::star::lang::Locale& rLocale)
135*b1cdbd2cSJim Jagielski         throw(com::sun::star::uno::RuntimeException);
136*b1cdbd2cSJim Jagielski 
137*b1cdbd2cSJim Jagielski     void clear();
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski     void loadBody( ::rtl::OUString &implName,
140*b1cdbd2cSJim Jagielski         ::com::sun::star::uno::Reference< ::com::sun::star::i18n::XExtendedTransliteration >& body )
141*b1cdbd2cSJim Jagielski         throw (::com::sun::star::uno::RuntimeException);
142*b1cdbd2cSJim Jagielski 
143*b1cdbd2cSJim Jagielski     com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL getRange(
144*b1cdbd2cSJim Jagielski         const com::sun::star::uno::Sequence< rtl::OUString > &inStrs,
145*b1cdbd2cSJim Jagielski         sal_Int32 length, const sal_Int16 _nCascade)
146*b1cdbd2cSJim Jagielski         throw(com::sun::star::uno::RuntimeException);
147*b1cdbd2cSJim Jagielski };
148*b1cdbd2cSJim Jagielski 
149*b1cdbd2cSJim Jagielski } } } }
150*b1cdbd2cSJim Jagielski 
151*b1cdbd2cSJim Jagielski #endif
152