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