From f115088924ae24d78b468c52a9bb10dc3ae6aae0 Mon Sep 17 00:00:00 2001
From: Amith Yamasani <yamasani@google.com>
Date: Fri, 7 Aug 2009 14:04:24 -0700
Subject: [PATCH] Allow for non-starting letters to be upper case in dictionary
 lookup.

Add lowercase optimization to user dictionary as well.
---
 dictionary/src/dictionary.cpp                      | 14 ++++++--------
 dictionary/src/dictionary.h                        |  2 +-
 .../inputmethod/latin/ExpandableDictionary.java    |  6 +++++-
 3 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/dictionary/src/dictionary.cpp b/dictionary/src/dictionary.cpp
index 02843abc23..8db5f12e73 100644
--- a/dictionary/src/dictionary.cpp
+++ b/dictionary/src/dictionary.cpp
@@ -147,16 +147,14 @@ Dictionary::addWord(unsigned short *word, int length, int frequency)
 }
 
 unsigned short
-Dictionary::toLowerCase(unsigned short c, const int depth) {
+Dictionary::toLowerCase(unsigned short c) {
     if (c < sizeof(BASE_CHARS) / sizeof(BASE_CHARS[0])) {
         c = BASE_CHARS[c];
     }
-    if (depth == 0) {
-        if (c >='A' && c <= 'Z') {
-            c |= 32;
-        } else if (c > 127) {
-            c = u_tolower(c);
-        }
+    if (c >='A' && c <= 'Z') {
+        c |= 32;
+    } else if (c > 127) {
+        c = u_tolower(c);
     }
     return c;
 }
@@ -201,7 +199,7 @@ Dictionary::getWordsRec(int pos, int depth, int maxDepth, bool completion, int s
 
     for (int i = 0; i < count; i++) {
         unsigned short c = getChar(&pos);
-        unsigned short lowerC = toLowerCase(c, depth);
+        unsigned short lowerC = toLowerCase(c);
         bool terminal = getTerminal(&pos);
         int childrenAddress = getAddress(&pos);
         int freq = 1;
diff --git a/dictionary/src/dictionary.h b/dictionary/src/dictionary.h
index 9173e39b0c..8f195ca9a5 100644
--- a/dictionary/src/dictionary.h
+++ b/dictionary/src/dictionary.h
@@ -49,7 +49,7 @@ private:
 
     bool sameAsTyped(unsigned short *word, int length);
     bool addWord(unsigned short *word, int length, int frequency);
-    unsigned short toLowerCase(unsigned short c, int depth);
+    unsigned short toLowerCase(unsigned short c);
     void getWordsRec(int pos, int depth, int maxDepth, bool completion, int frequency,
             int inputIndex, int diffs);
     bool isValidWordRec(int pos, unsigned short *word, int offset, int length);
diff --git a/src/com/android/inputmethod/latin/ExpandableDictionary.java b/src/com/android/inputmethod/latin/ExpandableDictionary.java
index 3f20783e42..c32796e57e 100644
--- a/src/com/android/inputmethod/latin/ExpandableDictionary.java
+++ b/src/com/android/inputmethod/latin/ExpandableDictionary.java
@@ -250,7 +250,11 @@ public class ExpandableDictionary extends Dictionary {
         if (c < BASE_CHARS.length) {
             c = BASE_CHARS[c];
         }
-        c = Character.toLowerCase(c);
+        if (c >= 'A' && c <= 'Z') {
+            c = (char) (c | 32);
+        } else {
+            c = Character.toLowerCase(c);
+        }
         return c;
     }
 
-- 
GitLab