logsui/logscntfinder/src/logspredictivetranslator.cpp
changeset 4 e52d42f9500c
parent 2 7119b73b84d6
child 8 6c9acdc6adc0
--- a/logsui/logscntfinder/src/logspredictivetranslator.cpp	Fri May 14 15:52:41 2010 +0300
+++ b/logsui/logscntfinder/src/logspredictivetranslator.cpp	Thu May 27 12:51:53 2010 +0300
@@ -17,8 +17,10 @@
 #include <QObject>
 #include <QLocale>
 #include <QHash>
+#include <hbinputkeymapfactory.h>
 #include <hbinputsettingproxy.h>
 #include <QStringList>
+#include <QTextCodec>
 
 #include "logspredictivetranslator.h"
 #include "logspredictivelatin12keytranslator.h"
@@ -34,18 +36,24 @@
 //
 LogsPredictiveTranslator* LogsPredictiveTranslator::instance()
 {
+    LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveTranslator::\
+instance()" )
     if ( !mInstance ) {
         HbInputLanguage lang = 
                 HbInputSettingProxy::instance()->globalInputLanguage();
+        LOGS_QDEBUG_2( "logs [FINDER] Input lang is %d", 
+                       lang.language() )
         switch( lang.language() ) {
             case QLocale::Thai:
-                mInstance = new LogsPredictiveThai12KeyTranslator();
+                mInstance = new LogsPredictiveThai12KeyTranslator( lang );
                 break;
             default:
-                mInstance = new LogsPredictiveLatin12KeyTranslator();
+                mInstance = new LogsPredictiveLatin12KeyTranslator( lang );
                 break;
             }
     }
+    LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::\
+instance()" )
     return mInstance;
 }
 
@@ -64,10 +72,16 @@
 // LogsPredictiveTranslator::LogsPredictiveTranslator()
 // -----------------------------------------------------------------------------
 //
-LogsPredictiveTranslator::LogsPredictiveTranslator()
+LogsPredictiveTranslator::LogsPredictiveTranslator( const HbInputLanguage& lang )
+    : mNameTranslator(0)
+
 {
     LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveTranslator::\
 LogsPredictiveTranslator()" )
+
+    mKeyMap = HbKeymapFactory::instance()->keymap( lang.language(), 
+                                                   lang.variant() );
+
     LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::\
 LogsPredictiveTranslator()" )
 }
@@ -83,62 +97,130 @@
 ~LogsPredictiveTranslator()" )
     mInstance = 0;
     mKeyMap = 0;
+    delete mNameTranslator;
+    mNameTranslator = 0;
     LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::\
 ~LogsPredictiveTranslator()" )
     
 }
 
 // -----------------------------------------------------------------------------
+// LogsPredictiveTranslator::translateText()
+// -----------------------------------------------------------------------------
+//
+const QString LogsPredictiveTranslator::translateText( 
+                                                  const QString& text )
+{
+    LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveTranslator::translateText()" )
+    LOGS_QDEBUG_2( "logs [FINDER] text ", text );
+            
+    bool ok;
+    
+    QString result = translate( text, &ok );
+    if ( !ok ) {
+        LOGS_QDEBUG( "logs [FINDER] Text is not in input language" )
+        result = nameTranslator( text ).translate( text );
+    }
+    
+    LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::translateText()" )
+    return result;
+}
+
+// -----------------------------------------------------------------------------
+// LogsPredictiveTranslator::nameTranslator()
+// -----------------------------------------------------------------------------
+//
+const LogsPredictiveTranslator& LogsPredictiveTranslator::nameTranslator( 
+                                                   const QString& name )
+{
+    LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveTranslator::nameTranslator()" )
+    
+    const LogsPredictiveTranslator* nameTranslator = this;
+    if ( mNameTranslator && mNameTranslator->encodes( name ) ) {
+        LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::\
+nameTranslator() - use current" )
+        nameTranslator = mNameTranslator;
+    } else { 
+        delete mNameTranslator;
+        mNameTranslator = new LogsPredictiveLatin12KeyTranslator();
+        if( mNameTranslator->encodes( name ) ) {
+            nameTranslator = mNameTranslator;
+            LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::\
+nameTranslator() - use latin" )
+            return *nameTranslator;
+        }
+        delete mNameTranslator;
+        mNameTranslator = new LogsPredictiveThai12KeyTranslator();
+        if( mNameTranslator->encodes( name ) ) {
+            nameTranslator = mNameTranslator;
+            LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::\
+nameTranslator() - use thai" )
+            return *nameTranslator;
+        }
+        delete mNameTranslator;
+        mNameTranslator = 0;
+        LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::\
+nameTranslator() - use global input language" )
+
+    }
+    
+        
+    return *nameTranslator;
+    
+}
+
+// -----------------------------------------------------------------------------
+// LogsPredictiveTranslator::encodes()
+// -----------------------------------------------------------------------------
+//
+bool LogsPredictiveTranslator::encodes( const QString& sniplet )
+{
+    bool ok;
+    translate( sniplet, &ok );
+    return ok;
+}
+
+// -----------------------------------------------------------------------------
+// LogsPredictiveTranslator::translatePattern()
+// -----------------------------------------------------------------------------
+//
+const QString LogsPredictiveTranslator::translatePattern( 
+                                                   const QString& pattern ) const
+{
+    LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveTranslator::translatePattern()" )
+    QString result = translate( pattern );
+    
+    LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::translatePattern()" )
+    return result;
+}
+
+// -----------------------------------------------------------------------------
 // LogsPredictiveTranslator::translate()
 // -----------------------------------------------------------------------------
 //
-const QString LogsPredictiveTranslator::translate( const QString& name, 
-                                                   int count ) const
+const QString LogsPredictiveTranslator::translate( const QString& text,
+                                                   bool* ok, int count ) const
 {
     LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveTranslator::translate()" )
-    LOGS_QDEBUG_2( "logs [FINDER] name ", name );
+    LOGS_QDEBUG_2( "logs [FINDER] text ", text );
     
-    count = count == -1 ? name.length() : count;
+    count = count == -1 ? text.length() : count;
+    bool isok = ok ? *ok : true;
     QString result;
-    const QChar* content = name.data();
+    const QChar* content = text.data();
     int index = 0;
-    while( index < count ) {
-        QChar ch = translateChar( *content++ );
+    while( index < count && isok ) {
+        QChar ch = translateChar( *content++, isok );
         if ( !ch.isNull() ) {
             result.append( ch );
         }
         index++;
     }
+    if ( ok ) {
+        *ok = isok;
+    }
     LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::translate()" )
     return result;
 }
 
-// -----------------------------------------------------------------------------
-// LogsPredictiveTranslator::startsWith()
-// -----------------------------------------------------------------------------
-//
-int LogsPredictiveTranslator::startsWith( const QString& text, 
-                                          const QString& pattern,
-                                          bool optimize ) const
-{
-    LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveTranslator::startsWith()" )
-    //assumed that text has found based on pattern, thus only checking with
-    //first char is enough, if mightContainZeroes eq false
-    int matchCount = pattern.length();
-    if ( text.isEmpty() || matchCount > text.length() ) {
-        matchCount = 0;
-    } else {
-        if ( !optimize ) {
-            QString translatedText = translate( text, pattern.length() );
-            matchCount = translatedText == pattern ? matchCount : 0; 
-        } else {
-            matchCount = translateChar( *text.data() ) == *pattern.data() ? 
-                         matchCount : 0;
-        }
-    }
-        
-    LOGS_QDEBUG_2( "logs [FINDER] matchCount=", matchCount )
-    LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::startsWith()" )
-    return matchCount;
-}