32 // LogsPredictiveTranslator::instance() |
34 // LogsPredictiveTranslator::instance() |
33 // ----------------------------------------------------------------------------- |
35 // ----------------------------------------------------------------------------- |
34 // |
36 // |
35 LogsPredictiveTranslator* LogsPredictiveTranslator::instance() |
37 LogsPredictiveTranslator* LogsPredictiveTranslator::instance() |
36 { |
38 { |
|
39 LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveTranslator::\ |
|
40 instance()" ) |
37 if ( !mInstance ) { |
41 if ( !mInstance ) { |
38 HbInputLanguage lang = |
42 HbInputLanguage lang = |
39 HbInputSettingProxy::instance()->globalInputLanguage(); |
43 HbInputSettingProxy::instance()->globalInputLanguage(); |
|
44 LOGS_QDEBUG_2( "logs [FINDER] Input lang is %d", |
|
45 lang.language() ) |
40 switch( lang.language() ) { |
46 switch( lang.language() ) { |
41 case QLocale::Thai: |
47 case QLocale::Thai: |
42 mInstance = new LogsPredictiveThai12KeyTranslator(); |
48 mInstance = new LogsPredictiveThai12KeyTranslator( lang ); |
43 break; |
49 break; |
44 default: |
50 default: |
45 mInstance = new LogsPredictiveLatin12KeyTranslator(); |
51 mInstance = new LogsPredictiveLatin12KeyTranslator( lang ); |
46 break; |
52 break; |
47 } |
53 } |
48 } |
54 } |
|
55 LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::\ |
|
56 instance()" ) |
49 return mInstance; |
57 return mInstance; |
50 } |
58 } |
51 |
59 |
52 // ----------------------------------------------------------------------------- |
60 // ----------------------------------------------------------------------------- |
53 // LogsPredictiveTranslator::deleteInstance() |
61 // LogsPredictiveTranslator::deleteInstance() |
81 { |
95 { |
82 LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveTranslator::\ |
96 LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveTranslator::\ |
83 ~LogsPredictiveTranslator()" ) |
97 ~LogsPredictiveTranslator()" ) |
84 mInstance = 0; |
98 mInstance = 0; |
85 mKeyMap = 0; |
99 mKeyMap = 0; |
|
100 delete mNameTranslator; |
|
101 mNameTranslator = 0; |
86 LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::\ |
102 LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::\ |
87 ~LogsPredictiveTranslator()" ) |
103 ~LogsPredictiveTranslator()" ) |
88 |
104 |
89 } |
105 } |
90 |
106 |
91 // ----------------------------------------------------------------------------- |
107 // ----------------------------------------------------------------------------- |
|
108 // LogsPredictiveTranslator::translateText() |
|
109 // ----------------------------------------------------------------------------- |
|
110 // |
|
111 const QString LogsPredictiveTranslator::translateText( |
|
112 const QString& text ) |
|
113 { |
|
114 LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveTranslator::translateText()" ) |
|
115 LOGS_QDEBUG_2( "logs [FINDER] text ", text ); |
|
116 |
|
117 bool ok; |
|
118 |
|
119 QString result = translate( text, &ok ); |
|
120 if ( !ok ) { |
|
121 LOGS_QDEBUG( "logs [FINDER] Text is not in input language" ) |
|
122 result = nameTranslator( text ).translate( text ); |
|
123 } |
|
124 |
|
125 LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::translateText()" ) |
|
126 return result; |
|
127 } |
|
128 |
|
129 // ----------------------------------------------------------------------------- |
|
130 // LogsPredictiveTranslator::nameTranslator() |
|
131 // ----------------------------------------------------------------------------- |
|
132 // |
|
133 const LogsPredictiveTranslator& LogsPredictiveTranslator::nameTranslator( |
|
134 const QString& name ) |
|
135 { |
|
136 LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveTranslator::nameTranslator()" ) |
|
137 |
|
138 const LogsPredictiveTranslator* nameTranslator = this; |
|
139 if ( mNameTranslator && mNameTranslator->encodes( name ) ) { |
|
140 LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::\ |
|
141 nameTranslator() - use current" ) |
|
142 nameTranslator = mNameTranslator; |
|
143 } else { |
|
144 delete mNameTranslator; |
|
145 mNameTranslator = new LogsPredictiveLatin12KeyTranslator(); |
|
146 if( mNameTranslator->encodes( name ) ) { |
|
147 nameTranslator = mNameTranslator; |
|
148 LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::\ |
|
149 nameTranslator() - use latin" ) |
|
150 return *nameTranslator; |
|
151 } |
|
152 delete mNameTranslator; |
|
153 mNameTranslator = new LogsPredictiveThai12KeyTranslator(); |
|
154 if( mNameTranslator->encodes( name ) ) { |
|
155 nameTranslator = mNameTranslator; |
|
156 LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::\ |
|
157 nameTranslator() - use thai" ) |
|
158 return *nameTranslator; |
|
159 } |
|
160 delete mNameTranslator; |
|
161 mNameTranslator = 0; |
|
162 LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::\ |
|
163 nameTranslator() - use global input language" ) |
|
164 |
|
165 } |
|
166 |
|
167 |
|
168 return *nameTranslator; |
|
169 |
|
170 } |
|
171 |
|
172 // ----------------------------------------------------------------------------- |
|
173 // LogsPredictiveTranslator::encodes() |
|
174 // ----------------------------------------------------------------------------- |
|
175 // |
|
176 bool LogsPredictiveTranslator::encodes( const QString& sniplet ) |
|
177 { |
|
178 bool ok; |
|
179 translate( sniplet, &ok ); |
|
180 return ok; |
|
181 } |
|
182 |
|
183 // ----------------------------------------------------------------------------- |
|
184 // LogsPredictiveTranslator::translatePattern() |
|
185 // ----------------------------------------------------------------------------- |
|
186 // |
|
187 const QString LogsPredictiveTranslator::translatePattern( |
|
188 const QString& pattern ) const |
|
189 { |
|
190 LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveTranslator::translatePattern()" ) |
|
191 QString result = translate( pattern ); |
|
192 |
|
193 LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::translatePattern()" ) |
|
194 return result; |
|
195 } |
|
196 |
|
197 // ----------------------------------------------------------------------------- |
92 // LogsPredictiveTranslator::translate() |
198 // LogsPredictiveTranslator::translate() |
93 // ----------------------------------------------------------------------------- |
199 // ----------------------------------------------------------------------------- |
94 // |
200 // |
95 const QString LogsPredictiveTranslator::translate( const QString& name, |
201 const QString LogsPredictiveTranslator::translate( const QString& text, |
96 int count ) const |
202 bool* ok, int count ) const |
97 { |
203 { |
98 LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveTranslator::translate()" ) |
204 LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveTranslator::translate()" ) |
99 LOGS_QDEBUG_2( "logs [FINDER] name ", name ); |
205 LOGS_QDEBUG_2( "logs [FINDER] text ", text ); |
100 |
206 |
101 count = count == -1 ? name.length() : count; |
207 count = count == -1 ? text.length() : count; |
|
208 bool isok = ok ? *ok : true; |
102 QString result; |
209 QString result; |
103 const QChar* content = name.data(); |
210 const QChar* content = text.data(); |
104 int index = 0; |
211 int index = 0; |
105 while( index < count ) { |
212 while( index < count && isok ) { |
106 QChar ch = translateChar( *content++ ); |
213 QChar ch = translateChar( *content++, isok ); |
107 if ( !ch.isNull() ) { |
214 if ( !ch.isNull() ) { |
108 result.append( ch ); |
215 result.append( ch ); |
109 } |
216 } |
110 index++; |
217 index++; |
111 } |
218 } |
|
219 if ( ok ) { |
|
220 *ok = isok; |
|
221 } |
112 LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::translate()" ) |
222 LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::translate()" ) |
113 return result; |
223 return result; |
114 } |
224 } |
115 |
225 |
116 // ----------------------------------------------------------------------------- |
226 |
117 // LogsPredictiveTranslator::startsWith() |
|
118 // ----------------------------------------------------------------------------- |
|
119 // |
|
120 int LogsPredictiveTranslator::startsWith( const QString& text, |
|
121 const QString& pattern, |
|
122 bool optimize ) const |
|
123 { |
|
124 LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveTranslator::startsWith()" ) |
|
125 //assumed that text has found based on pattern, thus only checking with |
|
126 //first char is enough, if mightContainZeroes eq false |
|
127 int matchCount = pattern.length(); |
|
128 if ( text.isEmpty() || matchCount > text.length() ) { |
|
129 matchCount = 0; |
|
130 } else { |
|
131 if ( !optimize ) { |
|
132 QString translatedText = translate( text, pattern.length() ); |
|
133 matchCount = translatedText == pattern ? matchCount : 0; |
|
134 } else { |
|
135 matchCount = translateChar( *text.data() ) == *pattern.data() ? |
|
136 matchCount : 0; |
|
137 } |
|
138 } |
|
139 |
|
140 LOGS_QDEBUG_2( "logs [FINDER] matchCount=", matchCount ) |
|
141 LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::startsWith()" ) |
|
142 return matchCount; |
|
143 } |
|
144 |
|