diff options
author | 2011-09-28 20:17:35 -0700 | |
---|---|---|
committer | 2011-09-28 20:17:35 -0700 | |
commit | 55072fefe601a08511df1b6387d918ca5831d2c7 (patch) | |
tree | cf1c571617e30ceaea7202a0a8cda954a1a119a2 | |
parent | 3da2b6128367498577fc4ac83cb07075c2904205 (diff) | |
parent | e12e29ca7f758f688ebb432ccbea944e67326127 (diff) | |
download | latinime-55072fefe601a08511df1b6387d918ca5831d2c7.tar.gz latinime-55072fefe601a08511df1b6387d918ca5831d2c7.tar.xz latinime-55072fefe601a08511df1b6387d918ca5831d2c7.zip |
Merge "Fix a bug where ampersands in XML would not work"
-rw-r--r-- | tools/makedict/src/com/android/inputmethod/latin/XmlDictInputOutput.java | 14 |
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 "&". + 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; + } } } |