diff -r acd4e87b24b4 -r 2f0af9ba7665 logsui/logscntfinder/src/logspredictivelatin12keytranslator.cpp --- 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 #include -#include #include #include #include @@ -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;