--- 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;