Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
LatinIME
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
keyboard
LatinIME
Commits
cc5a71ca
Commit
cc5a71ca
authored
10 years ago
by
Jean Chalard
Committed by
Android (Google) Code Review
10 years ago
Browse files
Options
Downloads
Plain Diff
Merge "[CB17] Remove a member."
parents
8855306c
3285b68c
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
java/src/com/android/inputmethod/latin/WordComposer.java
+18
-31
18 additions, 31 deletions
java/src/com/android/inputmethod/latin/WordComposer.java
java/src/com/android/inputmethod/latin/utils/StringUtils.java
+9
-8
9 additions, 8 deletions
.../src/com/android/inputmethod/latin/utils/StringUtils.java
with
27 additions
and
39 deletions
java/src/com/android/inputmethod/latin/WordComposer.java
+
18
−
31
View file @
cc5a71ca
...
@@ -23,7 +23,6 @@ import com.android.inputmethod.latin.utils.CoordinateUtils;
...
@@ -23,7 +23,6 @@ import com.android.inputmethod.latin.utils.CoordinateUtils;
import
com.android.inputmethod.latin.utils.StringUtils
;
import
com.android.inputmethod.latin.utils.StringUtils
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.Collections
;
import
java.util.Collections
;
/**
/**
...
@@ -51,11 +50,6 @@ public final class WordComposer {
...
@@ -51,11 +50,6 @@ public final class WordComposer {
// The list of events that served to compose this string.
// The list of events that served to compose this string.
private
final
ArrayList
<
Event
>
mEvents
;
private
final
ArrayList
<
Event
>
mEvents
;
private
final
InputPointers
mInputPointers
=
new
InputPointers
(
MAX_WORD_LENGTH
);
private
final
InputPointers
mInputPointers
=
new
InputPointers
(
MAX_WORD_LENGTH
);
// This is the typed word, as a StringBuilder. This has the same contents as mPrimaryKeyCodes
// but under a StringBuilder representation for ease of use, depending on what is more useful
// at any given time. However this is not limited in size, while mPrimaryKeyCodes is limited
// to MAX_WORD_LENGTH code points.
private
final
StringBuilder
mTypedWord
;
// The previous word (before the composing word). Used as context for suggestions. May be null
// The previous word (before the composing word). Used as context for suggestions. May be null
// after resetting and before starting a new composing word, or when there is no context like
// after resetting and before starting a new composing word, or when there is no context like
// at the start of text for example. It can also be set to null externally when the user
// at the start of text for example. It can also be set to null externally when the user
...
@@ -73,6 +67,7 @@ public final class WordComposer {
...
@@ -73,6 +67,7 @@ public final class WordComposer {
private
String
mRejectedBatchModeSuggestion
;
private
String
mRejectedBatchModeSuggestion
;
// Cache these values for performance
// Cache these values for performance
private
CharSequence
mTypedWordCache
;
private
int
mCapsCount
;
private
int
mCapsCount
;
private
int
mDigitsCount
;
private
int
mDigitsCount
;
private
int
mCapitalizedMode
;
private
int
mCapitalizedMode
;
...
@@ -93,7 +88,6 @@ public final class WordComposer {
...
@@ -93,7 +88,6 @@ public final class WordComposer {
mCombinerChain
=
new
CombinerChain
();
mCombinerChain
=
new
CombinerChain
();
mPrimaryKeyCodes
=
new
int
[
MAX_WORD_LENGTH
];
mPrimaryKeyCodes
=
new
int
[
MAX_WORD_LENGTH
];
mEvents
=
CollectionUtils
.
newArrayList
();
mEvents
=
CollectionUtils
.
newArrayList
();
mTypedWord
=
new
StringBuilder
(
MAX_WORD_LENGTH
);
mAutoCorrection
=
null
;
mAutoCorrection
=
null
;
mTrailingSingleQuotesCount
=
0
;
mTrailingSingleQuotesCount
=
0
;
mIsResumed
=
false
;
mIsResumed
=
false
;
...
@@ -101,7 +95,7 @@ public final class WordComposer {
...
@@ -101,7 +95,7 @@ public final class WordComposer {
mCursorPositionWithinWord
=
0
;
mCursorPositionWithinWord
=
0
;
mRejectedBatchModeSuggestion
=
null
;
mRejectedBatchModeSuggestion
=
null
;
mPreviousWordForSuggestion
=
null
;
mPreviousWordForSuggestion
=
null
;
refresh
Siz
e
();
refresh
TypedWordCach
e
();
}
}
/**
/**
...
@@ -109,7 +103,6 @@ public final class WordComposer {
...
@@ -109,7 +103,6 @@ public final class WordComposer {
*/
*/
public
void
reset
()
{
public
void
reset
()
{
mCombinerChain
.
reset
();
mCombinerChain
.
reset
();
mTypedWord
.
setLength
(
0
);
mEvents
.
clear
();
mEvents
.
clear
();
mAutoCorrection
=
null
;
mAutoCorrection
=
null
;
mCapsCount
=
0
;
mCapsCount
=
0
;
...
@@ -121,11 +114,12 @@ public final class WordComposer {
...
@@ -121,11 +114,12 @@ public final class WordComposer {
mCursorPositionWithinWord
=
0
;
mCursorPositionWithinWord
=
0
;
mRejectedBatchModeSuggestion
=
null
;
mRejectedBatchModeSuggestion
=
null
;
mPreviousWordForSuggestion
=
null
;
mPreviousWordForSuggestion
=
null
;
refresh
Siz
e
();
refresh
TypedWordCach
e
();
}
}
private
final
void
refreshSize
()
{
private
final
void
refreshTypedWordCache
()
{
mCodePointSize
=
mTypedWord
.
codePointCount
(
0
,
mTypedWord
.
length
());
mTypedWordCache
=
mCombinerChain
.
getComposingWordWithCombiningFeedback
();
mCodePointSize
=
Character
.
codePointCount
(
mTypedWordCache
,
0
,
mTypedWordCache
.
length
());
}
}
/**
/**
...
@@ -180,12 +174,8 @@ public final class WordComposer {
...
@@ -180,12 +174,8 @@ public final class WordComposer {
final
int
keyY
=
event
.
mY
;
final
int
keyY
=
event
.
mY
;
final
int
newIndex
=
size
();
final
int
newIndex
=
size
();
mCombinerChain
.
processEvent
(
mEvents
,
event
);
mCombinerChain
.
processEvent
(
mEvents
,
event
);
// TODO: remove mTypedWord and compute it dynamically when necessary. We also need to
// make the views of the composing word a SpannableString.
mTypedWord
.
replace
(
0
,
mTypedWord
.
length
(),
mCombinerChain
.
getComposingWordWithCombiningFeedback
().
toString
());
mEvents
.
add
(
event
);
mEvents
.
add
(
event
);
refresh
Siz
e
();
refresh
TypedWordCach
e
();
mCursorPositionWithinWord
=
mCodePointSize
;
mCursorPositionWithinWord
=
mCodePointSize
;
if
(
newIndex
<
MAX_WORD_LENGTH
)
{
if
(
newIndex
<
MAX_WORD_LENGTH
)
{
mPrimaryKeyCodes
[
newIndex
]
=
primaryCode
>=
Constants
.
CODE_SPACE
mPrimaryKeyCodes
[
newIndex
]
=
primaryCode
>=
Constants
.
CODE_SPACE
...
@@ -242,7 +232,7 @@ public final class WordComposer {
...
@@ -242,7 +232,7 @@ public final class WordComposer {
// If we have more than MAX_WORD_LENGTH characters, we don't have everything inside
// If we have more than MAX_WORD_LENGTH characters, we don't have everything inside
// mPrimaryKeyCodes. This should be rare enough that we can afford to just compute
// mPrimaryKeyCodes. This should be rare enough that we can afford to just compute
// the array on the fly when this happens.
// the array on the fly when this happens.
codePoints
=
StringUtils
.
toCodePointArray
(
mTypedWord
.
toString
()
);
codePoints
=
StringUtils
.
toCodePointArray
(
mTypedWord
Cache
);
}
else
{
}
else
{
codePoints
=
mPrimaryKeyCodes
;
codePoints
=
mPrimaryKeyCodes
;
}
}
...
@@ -311,10 +301,8 @@ public final class WordComposer {
...
@@ -311,10 +301,8 @@ public final class WordComposer {
*/
*/
public
void
deleteLast
(
final
Event
event
)
{
public
void
deleteLast
(
final
Event
event
)
{
mCombinerChain
.
processEvent
(
mEvents
,
event
);
mCombinerChain
.
processEvent
(
mEvents
,
event
);
mTypedWord
.
replace
(
0
,
mTypedWord
.
length
(),
mCombinerChain
.
getComposingWordWithCombiningFeedback
().
toString
());
mEvents
.
add
(
event
);
mEvents
.
add
(
event
);
refresh
Siz
e
();
refresh
TypedWordCach
e
();
// We may have deleted the last one.
// We may have deleted the last one.
if
(
0
==
size
())
{
if
(
0
==
size
())
{
mIsFirstCharCapitalized
=
false
;
mIsFirstCharCapitalized
=
false
;
...
@@ -322,10 +310,12 @@ public final class WordComposer {
...
@@ -322,10 +310,12 @@ public final class WordComposer {
if
(
mTrailingSingleQuotesCount
>
0
)
{
if
(
mTrailingSingleQuotesCount
>
0
)
{
--
mTrailingSingleQuotesCount
;
--
mTrailingSingleQuotesCount
;
}
else
{
}
else
{
int
i
=
mTypedWord
.
length
();
int
i
=
mTypedWord
Cache
.
length
();
while
(
i
>
0
)
{
while
(
i
>
0
)
{
i
=
mTypedWord
.
offsetByCodePoints
(
i
,
-
1
);
i
=
Character
.
offsetByCodePoints
(
mTypedWordCache
,
i
,
-
1
);
if
(
Constants
.
CODE_SINGLE_QUOTE
!=
mTypedWord
.
codePointAt
(
i
))
break
;
if
(
Constants
.
CODE_SINGLE_QUOTE
!=
Character
.
codePointAt
(
mTypedWordCache
,
i
))
{
break
;
}
++
mTrailingSingleQuotesCount
;
++
mTrailingSingleQuotesCount
;
}
}
}
}
...
@@ -338,7 +328,7 @@ public final class WordComposer {
...
@@ -338,7 +328,7 @@ public final class WordComposer {
* @return the word that was typed so far. Never returns null.
* @return the word that was typed so far. Never returns null.
*/
*/
public
String
getTypedWord
()
{
public
String
getTypedWord
()
{
return
mTypedWord
.
toString
();
return
mTypedWord
Cache
.
toString
();
}
}
public
String
getPreviousWordForSuggestion
()
{
public
String
getPreviousWordForSuggestion
()
{
...
@@ -447,7 +437,7 @@ public final class WordComposer {
...
@@ -447,7 +437,7 @@ public final class WordComposer {
final
int
[]
primaryKeyCodes
=
mPrimaryKeyCodes
;
final
int
[]
primaryKeyCodes
=
mPrimaryKeyCodes
;
mPrimaryKeyCodes
=
new
int
[
MAX_WORD_LENGTH
];
mPrimaryKeyCodes
=
new
int
[
MAX_WORD_LENGTH
];
final
LastComposedWord
lastComposedWord
=
new
LastComposedWord
(
primaryKeyCodes
,
mEvents
,
final
LastComposedWord
lastComposedWord
=
new
LastComposedWord
(
primaryKeyCodes
,
mEvents
,
mInputPointers
,
mTypedWord
.
toString
(),
committedWord
,
separatorString
,
mInputPointers
,
mTypedWord
Cache
.
toString
(),
committedWord
,
separatorString
,
prevWord
,
mCapitalizedMode
);
prevWord
,
mCapitalizedMode
);
mInputPointers
.
reset
();
mInputPointers
.
reset
();
if
(
type
!=
LastComposedWord
.
COMMIT_TYPE_DECIDED_WORD
if
(
type
!=
LastComposedWord
.
COMMIT_TYPE_DECIDED_WORD
...
@@ -458,14 +448,13 @@ public final class WordComposer {
...
@@ -458,14 +448,13 @@ public final class WordComposer {
mDigitsCount
=
0
;
mDigitsCount
=
0
;
mIsBatchMode
=
false
;
mIsBatchMode
=
false
;
mPreviousWordForSuggestion
=
committedWord
.
toString
();
mPreviousWordForSuggestion
=
committedWord
.
toString
();
mTypedWord
.
setLength
(
0
);
mCombinerChain
.
reset
();
mCombinerChain
.
reset
();
mEvents
.
clear
();
mEvents
.
clear
();
mCodePointSize
=
0
;
mCodePointSize
=
0
;
mTrailingSingleQuotesCount
=
0
;
mTrailingSingleQuotesCount
=
0
;
mIsFirstCharCapitalized
=
false
;
mIsFirstCharCapitalized
=
false
;
mCapitalizedMode
=
CAPS_MODE_OFF
;
mCapitalizedMode
=
CAPS_MODE_OFF
;
refresh
Siz
e
();
refresh
TypedWordCach
e
();
mAutoCorrection
=
null
;
mAutoCorrection
=
null
;
mCursorPositionWithinWord
=
0
;
mCursorPositionWithinWord
=
0
;
mIsResumed
=
false
;
mIsResumed
=
false
;
...
@@ -486,10 +475,8 @@ public final class WordComposer {
...
@@ -486,10 +475,8 @@ public final class WordComposer {
mEvents
.
clear
();
mEvents
.
clear
();
Collections
.
copy
(
mEvents
,
lastComposedWord
.
mEvents
);
Collections
.
copy
(
mEvents
,
lastComposedWord
.
mEvents
);
mInputPointers
.
set
(
lastComposedWord
.
mInputPointers
);
mInputPointers
.
set
(
lastComposedWord
.
mInputPointers
);
mTypedWord
.
setLength
(
0
);
mCombinerChain
.
reset
();
mCombinerChain
.
reset
();
mTypedWord
.
append
(
lastComposedWord
.
mTypedWord
);
refreshTypedWordCache
();
refreshSize
();
mCapitalizedMode
=
lastComposedWord
.
mCapitalizedMode
;
mCapitalizedMode
=
lastComposedWord
.
mCapitalizedMode
;
mAutoCorrection
=
null
;
// This will be filled by the next call to updateSuggestion.
mAutoCorrection
=
null
;
// This will be filled by the next call to updateSuggestion.
mCursorPositionWithinWord
=
mCodePointSize
;
mCursorPositionWithinWord
=
mCodePointSize
;
...
...
This diff is collapsed.
Click to expand it.
java/src/com/android/inputmethod/latin/utils/StringUtils.java
+
9
−
8
View file @
cc5a71ca
...
@@ -172,28 +172,29 @@ public final class StringUtils {
...
@@ -172,28 +172,29 @@ public final class StringUtils {
private
static
final
int
[]
EMPTY_CODEPOINTS
=
{};
private
static
final
int
[]
EMPTY_CODEPOINTS
=
{};
public
static
int
[]
toCodePointArray
(
final
String
string
)
{
public
static
int
[]
toCodePointArray
(
final
CharSequence
charSequence
)
{
return
toCodePointArray
(
string
,
0
,
string
.
length
());
return
toCodePointArray
(
charSequence
,
0
,
charSequence
.
length
());
}
}
/**
/**
* Converts a range of a string to an array of code points.
* Converts a range of a string to an array of code points.
* @param
string
the source string.
* @param
charSequence
the source string.
* @param startIndex the start index inside the string in java chars, inclusive.
* @param startIndex the start index inside the string in java chars, inclusive.
* @param endIndex the end index inside the string in java chars, exclusive.
* @param endIndex the end index inside the string in java chars, exclusive.
* @return a new array of code points. At most endIndex - startIndex, but possibly less.
* @return a new array of code points. At most endIndex - startIndex, but possibly less.
*/
*/
public
static
int
[]
toCodePointArray
(
final
String
string
,
public
static
int
[]
toCodePointArray
(
final
CharSequence
charSequence
,
final
int
startIndex
,
final
int
endIndex
)
{
final
int
startIndex
,
final
int
endIndex
)
{
final
int
length
=
string
.
length
();
final
int
length
=
charSequence
.
length
();
if
(
length
<=
0
)
{
if
(
length
<=
0
)
{
return
EMPTY_CODEPOINTS
;
return
EMPTY_CODEPOINTS
;
}
}
final
int
[]
codePoints
=
new
int
[
string
.
codePointCount
(
startIndex
,
endIndex
)];
final
int
[]
codePoints
=
new
int
[
Character
.
codePointCount
(
charSequence
,
startIndex
,
endIndex
)];
int
destIndex
=
0
;
int
destIndex
=
0
;
for
(
int
index
=
startIndex
;
index
<
endIndex
;
for
(
int
index
=
startIndex
;
index
<
endIndex
;
index
=
string
.
offsetByCodePoints
(
index
,
1
))
{
index
=
Character
.
offsetByCodePoints
(
charSequence
,
index
,
1
))
{
codePoints
[
destIndex
]
=
string
.
codePointAt
(
index
);
codePoints
[
destIndex
]
=
Character
.
codePointAt
(
charSequence
,
index
);
destIndex
++;
destIndex
++;
}
}
return
codePoints
;
return
codePoints
;
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment