logsui/logscntfinder/src/logspredictivelatin12keytranslator.cpp
changeset 21 2f0af9ba7665
parent 9 68f3171a5819
--- a/logsui/logscntfinder/src/logspredictivelatin12keytranslator.cpp	Fri Sep 17 16:47:32 2010 +0300
+++ b/logsui/logscntfinder/src/logspredictivelatin12keytranslator.cpp	Fri Oct 15 14:47:48 2010 +0300
@@ -14,9 +14,7 @@
 * Description:
 *
 */
-#include <QObject>
 #include <QLocale>
-#include <QHash>
 #include <hbinputkeymap.h>
 #include <hbinputsettingproxy.h>
 #include <QTextCodec>
@@ -24,10 +22,13 @@
 #include "logspredictivelatin12keytranslator.h"
 #include "logslogger.h"
 
+
 //mapping char,key(name)
-const QChar SpecialMapping[] = {'+', '*', '*', '*','#','#','%','1'};
-const int SpecialsCount = 4;
+const QChar SpecialMapping[] = {'+', StarKey, '*', StarKey, '#',HashKey };
+const int SpecialsCount = 3;
 const QChar SpaceSepar(' ');
+const QChar ZeroSepar('0');
+const int NotAssigned = -1;
 
 
 // -----------------------------------------------------------------------------
@@ -94,18 +95,118 @@
 }
 
 // -----------------------------------------------------------------------------
+// LogsPredictiveLatin12KeyTranslator::patternTokens()
+// -----------------------------------------------------------------------------
+//
+QStringList LogsPredictiveLatin12KeyTranslator::patternTokens( const QString& pattern ) const
+{
+        
+    LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveLatin12KeyTranslator::\
+patternTokens()" )
+    LOGS_QDEBUG_2( "logs [FINDER] pattern ", pattern );
+    QString car;
+    QString cdr;
+    
+    QStringList target;
+    splitPattern( pattern, car, cdr );
+    if ( car.length() ) {
+        target.append( car );
+        if ( cdr.length() ) {
+            target.append( cdr );
+        }
+    }
+    LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveLatin12KeyTranslator::\
+patternTokens()" )
+    return target;
+}
+
+// -----------------------------------------------------------------------------
+// LogsPredictiveLatin12KeyTranslator::splitPattern()
+// -----------------------------------------------------------------------------
+//
+void LogsPredictiveLatin12KeyTranslator::splitPattern( const QString& pattern, 
+                                                  QString& car, QString& cdr ) const
+{
+    car = "";
+    cdr = "";
+    
+    QChar current;
+    QChar previous;
+    int splitStart = NotAssigned;
+    int splitEnd = NotAssigned;
+    int index = 0;
+    while( splitEnd == NotAssigned && index < pattern.length() ) {
+        current = pattern[index];
+        splitStart = splitStart == NotAssigned &&
+                    ( previous != ZeroSepar && previous != QChar() ) && 
+                    current == ZeroSepar ? 
+                        index : splitStart;
+        splitEnd = splitStart != NotAssigned && 
+                   previous == ZeroSepar && 
+                   current != ZeroSepar ?
+                      index : splitEnd;
+        previous = current;
+        index++;
+    }
+    
+    if ( splitStart != NotAssigned && splitEnd != NotAssigned ) {
+        car = pattern.left( splitStart );
+        cdr = pattern.right( pattern.length() - splitEnd );  
+    } else {
+        car = pattern; 
+    }
+}
+
+// -----------------------------------------------------------------------------
+// LogsPredictiveLatin12KeyTranslator::trimPattern()
+// -----------------------------------------------------------------------------
+//
+QString& LogsPredictiveLatin12KeyTranslator::trimPattern( QString& pattern, 
+                                                     bool tailOnly ) const
+{
+    QRegExp lead("^0*");//remove leading zeros
+    QRegExp trail("0*$");//remove trailing zeros
+    
+    if ( pattern.length() ) {
+        if ( !tailOnly ) {
+            pattern.remove( lead );
+        }
+        
+        pattern.remove( trail );
+        
+        if( !pattern.length() ) {
+            pattern += ZeroSepar;
+        }
+    }
+    return pattern;
+}
+
+
+// -----------------------------------------------------------------------------
+// LogsPredictiveLatin12KeyTranslator::hasPatternSeparators()
+// -----------------------------------------------------------------------------
+//
+int LogsPredictiveLatin12KeyTranslator::hasPatternSeparators( 
+        const QString& pattern ) const
+{
+    return pattern.count( ZeroSepar );
+
+}
+
+// -----------------------------------------------------------------------------
 // LogsPredictiveLatin12KeyTranslator::translateChar()
 // -----------------------------------------------------------------------------
 //
-const QChar LogsPredictiveLatin12KeyTranslator::translateChar( 
+const QString LogsPredictiveLatin12KeyTranslator::translateChar( 
                                                     const QChar character,
                                                     bool& ok ) const
 {
     ok = true;
-    QChar keycode = mSpecialKeyMap[ character ]; 
-    if ( keycode.isNull() ) {
+    QChar sch = mSpecialKeyMap[ character ];
+    QString keycode( sch );
+    if ( sch.isNull() ) {
         keycode = LogsPredictive12KeyTranslator::translateChar( character );
-        if ( keycode.isNull() ) {
+        if ( keycode.isEmpty() ) {
             QString decomposed = character.decomposition();
             if (decomposed.isEmpty()) {
                 ok = false;