if(offsets == null || input == null || TextUtils.isEmpty(input)){ // return empty tokens return null; } StringBuilder subStrSet = new StringBuilder(); ArrayList tokens = new ArrayList(); ArrayList shortSubStrOffset = new ArrayList(); final int inputLength = input.length(); final StringBuilder subString = new StringBuilder(); final StringBuilder subStrOffset = new StringBuilder(); int tokenType = Token.LATIN; int caseTypePre = DialerSearchToken.FIRSTCASE; int caseTypeCurr = DialerSearchToken.UPPERCASE; int mPos = 0; // Go through the input, create a new token when // a. Token type changed // b. Get the Pinyin of current charater. // c. current character is space. // d. Token case changed from lower case to upper case, // e. the first character is always a separated one // f character == '+' || character == '#' || character == '*' || character == ',' || character == ';' for (int i = 0; i < inputLength; i++) { final char character = input.charAt(i); if (character == '-' || character == ',' ){ mPos++; } else if (character == ' ') { if (subString.length() > 0) { addToken(subString, tokens, tokenType); addOffsets(subStrOffset, shortSubStrOffset); } addSubString(tokens,shortSubStrOffset,subStrSet,offsets); mPos++; caseTypePre = DialerSearchToken.FIRSTCASE; } else if (character < 256) { if (tokenType != Token.LATIN && subString.length() > 0) { addToken(subString, tokens, tokenType); addOffsets(subStrOffset, shortSubStrOffset); } caseTypeCurr = (character>='A' && character<='Z') DialerSearchToken.UPPERCASE:DialerSearchToken.LOWERCASE; if(caseTypePre == DialerSearchToken.LOWERCASE && caseTypeCurr == DialerSearchToken.UPPERCASE){ addToken(subString, tokens, tokenType); addOffsets(subStrOffset, shortSubStrOffset); } caseTypePre = caseTypeCurr; tokenType = Token.LATIN; Character c = Character.toUpperCase(character); if(c != null){ subString.append(c); subStrOffset.append((char)mPos); } mPos++; } else if (character < FIRST_UNIHAN) { //Comment out. Do not cover unknown characters SINCE they can not be input. // if (tokenType != Token.UNKNOWN && subString.length() > 0) { // addToken(subString, tokens, tokenType); // addOffsets(subStrOffset, shortSubStrOffset); // caseTypePre = Token.FIRSTCASE; // } // tokenType = Token.UNKNOWN; // Character c = Character.toUpperCase(character); // if(c != null){ // subString.append(c); // subStrOffset.append((char)(mPos)); // } mPos++; } else { Token t = getToken(character); int tokenSize = t.target.length(); //Current type is PINYIN if (t.type == Token.PINYIN) { |