--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/ptienginev2/src/PtiLanguageDatabase.cpp Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,457 @@
+/*
+* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Language database class implementation.
+*
+*/
+
+
+#include <ecom/ecom.h>
+#include "PtiLanguageDatabase.h"
+#include "PtiUids.hrh"
+#include <languages.hrh>
+
+const TInt KDefaultDatabasesGran = 3;
+
+//
+// LOCAl METHODS
+//
+
+void DBCleanup( TAny* aAny )
+ {
+ RImplInfoPtrArray* implArray =
+ reinterpret_cast< RImplInfoPtrArray*> ( aAny );
+ implArray->ResetAndDestroy();
+ implArray->Close();
+ }
+
+//
+// CPtiLanguageDatabase
+//
+
+// ---------------------------------------------------------------------------
+// CPtiLanguageDatabase::CreateDatabaseL
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPtiLanguageDatabase* CPtiLanguageDatabase::CreateDatabaseL(TUid aImplUid)
+ {
+ TUid dtorIDKey;
+ CPtiLanguageDatabase* iface = (CPtiLanguageDatabase*)REComSession::CreateImplementationL(aImplUid, dtorIDKey);
+ if (iface)
+ {
+ iface->SetDestructorKeyId(dtorIDKey.iUid);
+ }
+ return iface;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CPtiLanguageDatabase::ListDatabasesLC
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CArrayFix<TInt>* CPtiLanguageDatabase::ListDatabasesLC(TInt aCoreUID)
+ {
+ RImplInfoPtrArray infoArray;
+ TInt i;
+
+ CArrayFixFlat<TInt>* result = new (ELeave) CArrayFixFlat<TInt>(KDefaultDatabasesGran);
+ CleanupStack::PushL( result );
+
+ CleanupStack::PushL( TCleanupItem( DBCleanup, &infoArray ) );
+ REComSession::ListImplementationsL(TUid::Uid(aCoreUID), infoArray);
+
+ for (i = 0; i < infoArray.Count(); i++)
+ {
+ result->AppendL(infoArray[i]->ImplementationUid().iUid);
+ }
+
+ CleanupStack::PopAndDestroy(); // infoArray
+
+ return result;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CPtiLanguageDatabase::~CPtiLanguageDatabase
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPtiLanguageDatabase::~CPtiLanguageDatabase()
+ {
+ REComSession::DestroyedImplementation(TUid::Uid(iDtorKeyId));
+ }
+
+
+// ---------------------------------------------------------------------------
+// CPtiLanguageDatabase::CoreUID
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CPtiLanguageDatabase::CoreUID() const
+ {
+ return 0;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CPtiLanguageDatabase::NumLanguages
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CPtiLanguageDatabase::NumLanguages() const
+ {
+ return 0;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CPtiLanguageDatabase::LanguageCode
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CPtiLanguageDatabase::LanguageCode(TInt /*aIndex*/) const
+ {
+ return 0;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CPtiLanguageDatabase::SubLanguageCode
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CPtiLanguageDatabase::SubLanguageCode(TInt /*aIndex*/) const
+ {
+ return 0;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CPtiLanguageDatabase::LangData
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt8* CPtiLanguageDatabase::LangData(TInt /*aIndex*/) const
+ {
+ return NULL;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CPtiLanguageDatabase::LangData
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt8* CPtiLanguageDatabase::LangData(TInt /*aIndex*/,
+ TAny* /*aNativeParams*/) const
+ {
+ return NULL;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CPtiLanguageDatabase::PinyinPhraseData
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt8* CPtiLanguageDatabase::PinyinPhraseData() const
+ {
+ return NULL;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CPtiLanguageDatabase::ZhuyinPhraseData
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt8* CPtiLanguageDatabase::ZhuyinPhraseData() const
+ {
+ return NULL;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CPtiLanguageDatabase::NativeId
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CPtiLanguageDatabase::NativeId(TInt /*aIndex*/) const
+ {
+ return 0;
+ }
+
+
+// List of known language database uids. There maybe also others,
+// but we don't need to instantiate databases for uids listed here
+// to find out which language is implemented in it.
+const TPtiLangDatabaseMapping langUids[] =
+ {
+ {EPtiLangImplUidEnglish, ELangEnglish},
+ {EPtiLangImplUidFrench, ELangFrench},
+ {EPtiLangImplUidGerman, ELangGerman},
+ {EPtiLangImplUidSpanish, ELangSpanish},
+ {EPtiLangImplUidItalian, ELangItalian},
+ {EPtiLangImplUidSwedish, ELangSwedish},
+ {EPtiLangImplUidDanish, ELangDanish},
+ {EPtiLangImplUidNorwegian, ELangNorwegian},
+ {EPtiLangImplUidFinnish, ELangFinnish},
+ {EPtiLangImplUidPortuguese, ELangPortuguese},
+ {EPtiLangImplUidTurkish, ELangTurkish},
+ {EPtiLangImplUidIcelandic, ELangIcelandic},
+ {EPtiLangImplUidRussian, ELangRussian},
+ {EPtiLangImplUidHungarian, ELangHungarian},
+ {EPtiLangImplUidDutch, ELangDutch},
+ {EPtiLangImplUidCzech, ELangCzech},
+ {EPtiLangImplUidSlovak, ELangSlovak},
+ {EPtiLangImplUidPolish, ELangPolish},
+ {EPtiLangImplUidSlovenian, ELangSlovenian},
+ {EPtiLangImplUidJapanese, ELangJapanese},
+ {EPtiLangImplUidThai, ELangThai},
+ {EPtiLangImplUidArabic, ELangArabic},
+ {EPtiLangImplUidTagalog, ELangTagalog},
+ {EPtiLangImplUidCroatian, ELangCroatian},
+ {EPtiLangImplUidEstonian, ELangEstonian},
+ {EPtiLangImplUidGreek, ELangGreek},
+ {EPtiLangImplUidHebrew, ELangHebrew},
+ {EPtiLangImplUidHindi, ELangHindi},
+ {EPtiLangImplUidIndonesian, ELangIndonesian},
+ {EPtiLangImplUidLatvian, ELangLatvian},
+ {EPtiLangImplUidLithuanian, ELangLithuanian},
+ {EPtiLangImplUidMalay, ELangMalay},
+ {EPtiLangImplUidRomanian, ELangRomanian},
+ {EPtiLangImplUidSerbian, ELangSerbian},
+ {EPtiLangImplUidUkrainian, ELangUkrainian},
+ {EPtiLangImplUidBulgarian, ELangBulgarian},
+ {EPtiLangImplUidVietnamese, ELangVietnamese},
+ {EPtiLangImplUidPrcChinese, ELangPrcChinese},
+ {EPtiLangImplUidHongKongChinese, ELangHongKongChinese},
+ {EPtiLangImplUidTaiwanChinese, ELangTaiwanChinese},
+ {EPtiLangImplUidCatalan, ELangCatalan},
+ {EPtiLangImplUidGalician, KLangGalician},
+ {EPtiLangImplUidBasque, KLangBasque},
+ {EPtiLangImplUidUrdu, ELangUrdu},
+
+ // Second set begins here.
+ {EPtiLangImplUidEnglish2, ELangEnglish},
+ {EPtiLangImplUidFinnish2, ELangFinnish},
+ {EPtiLangImplUidGerman2, ELangGerman},
+ {EPtiLangImplUidFrench2, ELangFrench},
+ {EPtiLangImplUidDanish2, ELangDanish},
+ {EPtiLangImplUidHindi2, ELangHindi},
+ {EPtiLangImplUidRussian2, ELangRussian},
+ {EPtiLangImplUidArabic2, ELangArabic},
+ {EPtiLangImplUidHebrew2, ELangHebrew},
+ {EPtiLangImplUidSwedish2, ELangSwedish},
+ {EPtiLangImplUidEstonian2, ELangEstonian},
+ {EPtiLangImplUidIcelandic2, ELangIcelandic},
+ {EPtiLangImplUidItalian2, ELangItalian},
+ {EPtiLangImplUidCroatian2, ELangCroatian},
+ {EPtiLangImplUidHungarian2, ELangHungarian},
+ {EPtiLangImplUidNorwegian2, ELangNorwegian},
+ {EPtiLangImplUidDutch2, ELangDutch},
+ {EPtiLangImplUidChinesePrc2, ELangPrcChinese},
+ {EPtiLangImplUidChineseTW2, ELangTaiwanChinese},
+ {EPtiLangImplUidChineseHK2, ELangHongKongChinese},
+
+// {EPtiLangImplUidChinesePAN2, ELangEnglish},
+ {EPtiLangImplUidTagalog2, ELangTagalog},
+ {EPtiLangImplUidThai2, ELangThai},
+ {EPtiLangImplUidSlovenian2, ELangSlovenian},
+ {EPtiLangImplUidSlovak2, ELangSlovak},
+ {EPtiLangImplUidSerbian2, ELangSerbian},
+ {EPtiLangImplUidCzech2, ELangCzech},
+ {EPtiLangImplUidBulgarian2, ELangBulgarian},
+ {EPtiLangImplUidGreek2, ELangGreek},
+ {EPtiLangImplUidSpanish2, ELangSpanish},
+ {EPtiLangImplUidLithuanian2, ELangLithuanian},
+ {EPtiLangImplUidLatvian2, ELangLatvian},
+ {EPtiLangImplUidMalay2, ELangMalay},
+
+ {EPtiLangImplUidPolish2, ELangPolish},
+ {EPtiLangImplUidRomanian2, ELangRomanian},
+ {EPtiLangImplUidUkrainian2, ELangUkrainian},
+ {EPtiLangImplUidTurkish2, ELangTurkish},
+ {EPtiLangImplUidVietnamese2, ELangVietnamese},
+
+ {EPtiLangImplUidPortuguese2, ELangPortuguese},
+ {EPtiLangImplUidFarsi2, ELangFarsi},
+ {EPtiLangImplUidUrdu2, ELangUrdu},
+ {EPtiLangImplUidMarathi2, ELangMarathi},
+ {EPtiLangImplUidCanadianFrench2, ELangCanadianFrench},
+ {EPtiLangImplUidIndonesian2, ELangIndonesian},
+ {EPtiLangImplUidBrazilianPortuguese2, ELangBrazilianPortuguese},
+ {EPtiLangImplUidLatinAmericanSpanish2, ELangLatinAmericanSpanish},
+ {EPtiLangImplUidCatalan2, ELangCatalan},
+ {EPtiLangImplUidGalician2, KLangGalician},
+ {EPtiLangImplUidBasque2, KLangBasque},
+ // third set begins here.
+ {EPtiLangImplUidEnglish3, ELangEnglish},
+ {EPtiLangImplUidFrench3, ELangFrench},
+ {EPtiLangImplUidGerman3, ELangGerman},
+ {EPtiLangImplUidSpanish3, ELangSpanish},
+ {EPtiLangImplUidItalian3, ELangItalian},
+ {EPtiLangImplUidSwedish3, ELangSwedish},
+ {EPtiLangImplUidDanish3, ELangDanish},
+ {EPtiLangImplUidNorwegian3, ELangNorwegian},
+ {EPtiLangImplUidFinnish3, ELangFinnish},
+ {EPtiLangImplUidPortuguese3, ELangPortuguese},
+ {EPtiLangImplUidTurkish3, ELangTurkish},
+ {EPtiLangImplUidIcelandic3, ELangIcelandic},
+ {EPtiLangImplUidRussian3, ELangRussian},
+ {EPtiLangImplUidHungarian3, ELangHungarian},
+ {EPtiLangImplUidDutch3, ELangDutch},
+ {EPtiLangImplUidCzech3, ELangCzech},
+ {EPtiLangImplUidSlovak3, ELangSlovak},
+ {EPtiLangImplUidPolish3, ELangPolish},
+ {EPtiLangImplUidSlovenian3, ELangSlovenian},
+ {EPtiLangImplUidThai3, ELangThai},
+ {EPtiLangImplUidArabic3, ELangArabic},
+ {EPtiLangImplUidTagalog3, ELangTagalog},
+ {EPtiLangImplUidCroatian3, ELangCroatian},
+ {EPtiLangImplUidEstonian3, ELangEstonian},
+ {EPtiLangImplUidGreek3, ELangGreek},
+ {EPtiLangImplUidHebrew3, ELangHebrew},
+ {EPtiLangImplUidHindi3, ELangHindi},
+ {EPtiLangImplUidIndonesian3, ELangIndonesian},
+ {EPtiLangImplUidLatvian3, ELangLatvian},
+ {EPtiLangImplUidLithuanian3, ELangLithuanian},
+ {EPtiLangImplUidMalay3, ELangMalay},
+ {EPtiLangImplUidRomanian3, ELangRomanian},
+ {EPtiLangImplUidSerbian3, ELangSerbian},
+ {EPtiLangImplUidUkrainian3, ELangUkrainian},
+ {EPtiLangImplUidVietnamese3, ELangVietnamese},
+ {EPtiLangImplUidBulgarian3, ELangBulgarian},
+ {EPtiLangImplUidBasque3, KLangBasque},
+ {EPtiLangImplUidCatalan3, ELangCatalan},
+ {EPtiLangImplUidGalician3, KLangGalician},
+ {EPtiLangImplUidUrdu3, ELangUrdu},
+ {EPtiLangImplUidMarathi3, ELangMarathi},
+ {0, 0}
+ };
+
+
+// ---------------------------------------------------------------------------
+// CPtiLanguageDatabase::LanguageCodeForUid
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CPtiLanguageDatabase::LanguageCodeForUid(TInt aUid)
+ {
+ TInt i;
+
+ for (i = 0; ; i++)
+ {
+ if (langUids[i].iUid == 0)
+ {
+ break;
+ }
+ else if (langUids[i].iUid == aUid)
+ {
+ return langUids[i].iLangCode;
+ }
+ }
+
+ return 0;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CPtiLanguageDatabase::CreateMappingTableL
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CPtiLanguageDatabase::CreateMappingTableL(TInt aCoreUid, RArray<TPtiLangDatabaseMapping>& aResult)
+ {
+ TInt res = 0, i, lc;
+ TPtiLangDatabaseMapping map;
+ CArrayFix<TInt>* dbs = ListDatabasesLC(aCoreUid);
+
+ for (i = 0; i < dbs->Count(); i++)
+ {
+ lc = LanguageCodeForUid(dbs->At(i));
+ map.iUid = dbs->At(i);
+ if (lc)
+ {
+ map.iLangCode = lc;
+ User::LeaveIfError(aResult.Append(map));
+ }
+ else
+ {
+ CPtiLanguageDatabase* db = CreateDatabaseL(TUid::Uid(dbs->At(i)));
+ if (db)
+ {
+ CleanupStack::PushL(db);
+ map.iLangCode = db->LanguageCode(0);
+ User::LeaveIfError(aResult.Append(map));
+ CleanupStack::PopAndDestroy(); // db
+ }
+ }
+ }
+
+ CleanupStack::PopAndDestroy(); // dbs
+ return res;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CPtiLanguageDatabase::CreateMappingTableOpaqueL
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CPtiLanguageDatabase::CreateMappingTableWithOpaqueL(TInt aCoreUid, RArray<TPtiLangDatabaseMappingOpaque>& aResult)
+ {
+ TInt res = 0, lc;
+ TPtiLangDatabaseMappingOpaque map;
+ RImplInfoPtrArray infoArray;
+ TInt i;
+
+ CleanupStack::PushL( TCleanupItem( DBCleanup, &infoArray ) );
+ REComSession::ListImplementationsL(TUid::Uid(aCoreUid), infoArray);
+
+ for (i = 0; i < infoArray.Count(); i++)
+ {
+ lc = LanguageCodeForUid(infoArray[i]->ImplementationUid().iUid);
+
+ map.iUid = infoArray[i]->ImplementationUid().iUid;
+ map.iOpaque.Copy(infoArray[i]->OpaqueData().Left(KOpaqueDataLen));
+
+ if (lc)
+ {
+ map.iLangCode = lc;
+ User::LeaveIfError(aResult.Append(map));
+ }
+ else
+ {
+ CPtiLanguageDatabase* db = CreateDatabaseL(infoArray[i]->ImplementationUid());
+ if (db)
+ {
+ CleanupStack::PushL(db);
+ map.iLangCode = db->LanguageCode(0);
+ User::LeaveIfError(aResult.Append(map));
+ CleanupStack::PopAndDestroy(); // db
+ }
+ }
+ }
+
+ CleanupStack::PopAndDestroy(); // infoArray
+
+ return res;
+ }
+
+
+// End of file
+
+