aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean Chalard <jchalard@google.com>2011-09-28 20:19:11 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2011-09-28 20:19:11 -0700
commitee34a9549ecd669a66ba96cbe2d38c643eff2531 (patch)
treecf1c571617e30ceaea7202a0a8cda954a1a119a2
parent2258aa830efa3f42e23ce47b3e899df39d67c65b (diff)
parent55072fefe601a08511df1b6387d918ca5831d2c7 (diff)
downloadlatinime-ee34a9549ecd669a66ba96cbe2d38c643eff2531.tar.gz
latinime-ee34a9549ecd669a66ba96cbe2d38c643eff2531.tar.xz
latinime-ee34a9549ecd669a66ba96cbe2d38c643eff2531.zip
am 55072fef: Merge "Fix a bug where ampersands in XML would not work"
* commit '55072fefe601a08511df1b6387d918ca5831d2c7': Fix a bug where ampersands in XML would not work
-rw-r--r--tools/makedict/src/com/android/inputmethod/latin/XmlDictInputOutput.java14
1 files changed, 11 insertions, 3 deletions
diff --git a/tools/makedict/src/com/android/inputmethod/latin/XmlDictInputOutput.java b/tools/makedict/src/com/android/inputmethod/latin/XmlDictInputOutput.java
index 096bfd182..35a7b51d6 100644
--- a/tools/makedict/src/com/android/inputmethod/latin/XmlDictInputOutput.java
+++ b/tools/makedict/src/com/android/inputmethod/latin/XmlDictInputOutput.java
@@ -60,6 +60,7 @@ public class XmlDictInputOutput {
final FusionDictionary mDictionary;
int mState; // the state of the parser
int mFreq; // the currently read freq
+ String mWord; // the current word
final HashMap<String, ArrayList<WeightedString>> mBigramsMap;
/**
@@ -72,6 +73,7 @@ public class XmlDictInputOutput {
HashMap<String, ArrayList<WeightedString>> bigrams) {
mDictionary = dict;
mBigramsMap = bigrams;
+ mWord = "";
mState = START;
mFreq = 0;
}
@@ -80,6 +82,7 @@ public class XmlDictInputOutput {
public void startElement(String uri, String localName, String qName, Attributes attrs) {
if (WORD_TAG.equals(localName)) {
mState = WORD;
+ mWord = "";
for (int attrIndex = 0; attrIndex < attrs.getLength(); ++attrIndex) {
final String attrName = attrs.getLocalName(attrIndex);
if (FREQUENCY_ATTR.equals(attrName)) {
@@ -94,14 +97,19 @@ public class XmlDictInputOutput {
@Override
public void characters(char[] ch, int start, int length) {
if (WORD == mState) {
- final String word = String.copyValueOf(ch, start, length);
- mDictionary.add(word, mFreq, mBigramsMap.get(word));
+ // The XML parser is free to return text in arbitrary chunks one after the
+ // other. In particular, this happens in some implementations when it finds
+ // an escape code like "&amp;".
+ mWord += String.copyValueOf(ch, start, length);
}
}
@Override
public void endElement(String uri, String localName, String qName) {
- if (WORD == mState) mState = START;
+ if (WORD == mState) {
+ mDictionary.add(mWord, mFreq, mBigramsMap.get(mWord));
+ mState = START;
+ }
}
}