Commit graph

239 commits

Author SHA1 Message Date
Jean Chalard
a245d15da5 Have dicttool use the native library to generate v4 dicts.
Yay !

Change-Id: Iea8ced9e81031b9ab7eff05ad9ef7215be248de9
2013-12-13 18:18:20 +09:00
Jean Chalard
7b55cd3e2b Remove flags from Java side.
This simplifies the code quite a bit.
- GERMAN_UMLAUTS are now handled through a key-value attribute.
  The dictionary generator does not need to know about it any more.
- FRENCH_LIGATURES are deprecated as we handle them with shortcuts now.
- CONTAINS_BIGRAMS is deprecated. Bigram processing is always applied
  regardless of this flag.

Bug: 11281748
Change-Id: If567e52e245a9342adc7f3104a0f7d8d782df8c1
2013-12-13 18:15:05 +09:00
Ken Wakasa
2fa3693c26 Reset to 9bd6dac470
The bulk merge from -bayo to klp-dev should not have been merged to master.

Change-Id: I527a03a76f5247e4939a672f27c314dc11cbb854
2013-12-13 17:13:32 +09:00
Keisuke Kuroyanagi
db4f373004 Fix: PtNode array size writirng when array size > 127. DO NOT MERGE.
This is a manual cherrypick of Ib729ceedbc8ef837e50490439817b36039ae2b4e.

Bug: 11772864
Change-Id: I5ecbe729dbdd24e194e48b4d68b17af8549c4726
2013-11-21 08:45:51 +00:00
Ken Wakasa
7abdab1c6f Merge "Add a time stamp for unigrams." 2013-10-11 10:17:01 +00:00
Ken Wakasa
be22a01df3 Merge "Add resolveBigramPositions." 2013-10-11 07:45:20 +00:00
Yuichiro Hanada
c32962b8f1 Add a time stamp for unigrams.
Bug: 10920255
Change-Id: I26d2cce3c322a4ff39a614f8615f43fb7bd3baed
2013-10-11 15:08:09 +09:00
Yuichiro Hanada
9514ed5c2a Add the new format of bigram entries.
In new format, each bigram entry has flags (1 byte), a terminal id (3 byte),
a time-stamp (4 byte), a counter (1 byte) and a level (1 byte).

Bug: 10920255
Bug: 10920165
Change-Id: I0f7fc125a6178e6d25a07e8462afc41a7f57e3e1
2013-10-11 14:50:41 +09:00
Yuichiro Hanada
67c758f160 Add resolveBigramPositions.
Bug: 11073222
Change-Id: I680e4304c6ab701e9aa132e1e140d789097a53ae
2013-10-09 17:39:22 +09:00
Jean Chalard
ca9c3c0613 Fix a possible IOOB
We want to use StringUtils here, but it's full of references to
stuff not accessible host-side like JsonReader and TextUtils
and SettingsValues :/

Bug: 11061476
Change-Id: I3c0194979833ede283b4f9190335dba5376fe6fc
2013-10-07 23:16:57 +09:00
Yuichiro Hanada
e4e0add9fb Add Ver4DictUpdater.
Change-Id: I986ab26faf535fc4bc98443053f534eced9d048f
2013-10-04 17:33:29 +09:00
Yuichiro Hanada
75d60e821c Refactor BinaryDictIOUtilsTests.
Change-Id: I2208378b33038771b460abb33f9a690872e998e2
2013-10-04 14:19:13 +09:00
Yuichiro Hanada
14d31d4640 Add AbstractDictDecoder.
Change-Id: Ie69d84e090f69dc3ea1f5de73ad8c954ecd2c6a7
2013-10-04 14:16:59 +09:00
Yuichiro Hanada
73b9d3b879 Separate shortcut targets from the trie file.
Bug: 10920165
Change-Id: I340759eadbde7fb64cb3b9a3c619ee3a768cedf8
2013-10-04 11:16:10 +09:00
Yuichiro Hanada
3dd77a6d66 Add SparseTableContentWriter to Ver4DictEncoder.
Bug: 10920165
Change-Id: I6372492e97297baad4c5aeeb3fb36dcccd7a944b
2013-10-03 20:31:01 +09:00
Yuichiro Hanada
d6e307a4b7 Add DictUpdater.
Change-Id: Ic586e46e5a9f59de53d53e59886d635345940974
2013-10-03 20:16:34 +09:00
Yuichiro Hanada
3aa8977cb2 Remove some unused variables.
Change-Id: Iaf1556fec194d17cb4318f2bdcc837f8d79449ef
2013-10-02 18:26:03 +09:00
Yuichiro Hanada
4284e9aae7 Make SparseTable have multiple content tables.
Bug: 10920165
Change-Id: Ie9008452ee292fb0b1fec66e2ffed228c4af6c3e
2013-10-02 15:36:13 +09:00
Jean Chalard
fa946d4a0f Fix a test and crash with a better error message when reading
When there are too many bigrams, we stop reading the file,
so the file pointer is in an inconsistent place. This means we
have no idea what's going to happen next. It's better to crash
right away.

Change-Id: Id3b7b78cbe4fda3493b3c9c46758763e1ab5f6a3
2013-10-02 11:48:47 +09:00
Yuichiro Hanada
bc4926235d Add skipPtNode to DictDecoders.
Change-Id: I042ff041b68572182c87dc87db6a6aa2bbbefc6c
2013-10-01 17:21:21 +09:00
Ken Wakasa
25f4782853 Merge "Separate bigram entries from the trie file." 2013-09-30 08:00:01 +00:00
Yuichiro Hanada
fd46e87da2 Separate bigram entries from the trie file.
Bug: 10920165
Change-Id: I42eb7f228994a56c2f31a1c83904c8c360b6d088
2013-09-30 16:42:42 +09:00
Yuichiro Hanada
dc4f357f6b Change scopes of some methods in DynamicBinaryDictIOUtils.
Change-Id: I1371d41760b38834d1d5ff40e682ac0a6fc9f2e9
2013-09-30 11:32:07 +09:00
Keisuke Kuroyanagi
5ed30a7660 Set header attributes for ExpandableBinaryDictionary.
Bug: 6669677

Change-Id: I2462777eaa07600f1c774226adfc4f351882f523
2013-09-28 12:50:09 +09:00
Keisuke Kuroyanagi
e3e10317b0 Merge "Create empty dictionary file in native code." 2013-09-26 08:03:38 +00:00
Yuichiro Hanada
d188af7022 Add SparseTable.
Bug: 10920165
Change-Id: I749dd0269e788799e30b10beb2671813d40ce15f
2013-09-26 16:16:30 +09:00
Keisuke Kuroyanagi
5ef6209656 Create empty dictionary file in native code.
Bug: 6669677
Change-Id: I46d23deee1fd091678f4593561cb8687eb815212
2013-09-26 12:59:02 +09:00
Yuichiro Hanada
22c5c450fe Make Ver4DictEncoder write an address table of terminal nodes.
Bug: 10920165
Change-Id: I86017456ea9fa5d6e12b57172c34f5ed4f88ef94
2013-09-25 17:03:54 +09:00
Yuichiro Hanada
14087ba52c Add Ver4DictDecoder.
Bug: 9618601
Change-Id: I43c5840505c6a847aaf4893a400392ccd45903c0
2013-09-19 16:11:23 +09:00
Yuichiro Hanada
d0c87576ff Fix getChildrenPosition.
Change-Id: Ic39592dbf0d4e6d2e4879cdb1a95b65d46a57e92
2013-09-18 15:50:10 +09:00
Yuichiro Hanada
a141d8ef7d Add Ver4DictEncoder.
Bug: 9618601
Change-Id: I161d2845906f07c1251deb8005fdffe49c5b7940
2013-09-13 17:33:51 +09:00
Yuichiro Hanada
0e40cd0c40 Add getDictDecoder.
Bug: 9618601
Change-Id: I173100ac704c03f7d5d0d53477e83cab5d1110d4
2013-09-12 20:14:09 +09:00
Yuichiro Hanada
be470f06e4 Hide DictBuffer from BinaryDictDecoderUtils.
Bug: 9618601
Change-Id: I87515bc1555bdfe09426a056ceda74d8e63eba82
2013-09-12 16:49:54 +09:00
Yuichiro Hanada
7547a7042c Add writePtNode to DictEncoder.
Bug: 9618601
Change-Id: Ie4529444780edee8d0f0d5f23c5619c1a3344286
2013-09-11 18:27:06 +09:00
Yuichiro Hanada
95bc256f41 Add a flag to readDictioanryBinary in DictDecoder.
Change-Id: I356adb72047ebc43c924fbff1ff45e7460508a31
2013-09-11 18:20:56 +09:00
Yuichiro Hanada
8a06b26cb4 Check the version of format options before writing.
Change-Id: I3951e4395a2da225e240e856c23339b679e6155e
2013-09-10 18:59:31 +09:00
Yuichiro Hanada
70e81af726 Hide physical structure of the dictionary from BinaryDictEncoderUtils.
Bug: 9618601
Change-Id: I01b8da42058d7c05bf7f4e6d43718032c2ad12c5
2013-09-09 14:55:33 +09:00
Yuichiro Hanada
563bcb5117 Rename write(|Signed)VariableAddress and to write(|Signed)ChildrenPosition.
Change-Id: Ib018bde346744b470a4fb13b0c57e3a633b8bb20
2013-09-06 23:53:58 +09:00
Yuichiro Hanada
6156892b7e Add computeChildrenPosition and simplify writePlacedNode.
Change-Id: Idcf0e056bf61e29844d4d0e91c482cd78c41704c
2013-09-06 23:52:10 +09:00
Yuichiro Hanada
55f5f7a005 [Refactor] Add writeDictionaryHeader.
Change-Id: I69026c47ce1d23f5c39c99ace76fa6b96cd1ce1b
2013-09-05 16:19:26 +09:00
Yuichiro Hanada
663f5375d1 Add comments about how to calculate parent and children addresses.
Change-Id: Idf37d9a08a7b464a14c8755bedb755005e49ba33
2013-09-05 15:10:28 +09:00
Yuichiro Hanada
d5a3c593db Remove a broken dictionary file when fail to read a dictionary file.
Bug: 10434720
Change-Id: Ibdf05a39113538546b8fcf9d59af7dddf7ca27fc
2013-08-26 18:08:21 +09:00
Yuichiro Hanada
b50a7a4bc7 Simplify computeActualNodeArraySize.
Change-Id: I128d02866c2cc70c42263496927327b8a2130139
2013-08-26 08:30:23 +00:00
Yuichiro Hanada
752a33640c [Refactor] Add DictDecoder.readUnigramsAndBigramsBinary.
Change-Id: I259db91d837c67cbcb3b6dc504b21dca23a6a5be
2013-08-26 17:24:38 +09:00
Yuichiro Hanada
bb5b84a826 [Refactor] Add DictDecoder.getTerminalPosition.
Change-Id: I9d04f64a58f5481cbb64cf1c09b5c485dd4176b4
2013-08-26 16:14:59 +09:00
Yuichiro Hanada
576f625ee1 Rename CharGroup to PtNode.
Bug: 10233675
Change-Id: I7b0eb07d195cd386cd0d9e97cd59bf48fcf24107
2013-08-26 15:58:30 +09:00
Yuichiro Hanada
8f4d5d5f23 Fix getDictionaryFileHeader.
Change-Id: I5186f41b0f38eb08f4154f7b3de7ffc2119fc44b
2013-08-23 22:39:36 +09:00
Yuichiro Hanada
e9a10ff0f0 Add DictDecoder.readDictionaryBinary.
Bug: 10434720
Change-Id: I14690a6e0f922ed1bab3a4b6c9a457ae84d4c1a4
2013-08-23 20:29:25 +09:00
Yuichiro Hanada
aa4168ee09 Fix writePlacedNode.
Change-Id: I1d6b086f1d9f0dbd8d74f964e29ae62c533af978
2013-08-22 23:02:08 +09:00
Yuichiro Hanada
e301085a70 Move findWordByBinaryDictReader to BinaryDictIOUtilsTests.
Change-Id: I443238fd816dea9650dcbbeb3ea757f9674fa52f
2013-08-22 14:49:49 +09:00
Yuichiro Hanada
c922c8a504 Add DictEncoder.
Change-Id: I41049b9118b58838e5dedf8e5618d939ca70c5ef
2013-08-22 11:53:41 +09:00
Yuichiro Hanada
558e34c7bd Make readPtNode be called with the address from the beginning of the file.
Change-Id: I8939fdfb4f79e55bcd7393633784effb30df3f8f
2013-08-21 20:02:18 +09:00
Yuichiro Hanada
a306e08753 Rename BinaryDictEncoder to BinaryDictEncoderUtils.
Change-Id: I4dabf17da7003b1d8204a83dbd10e5be6e8fd805
2013-08-21 18:54:34 +09:00
Yuichiro Hanada
107a5f6fb8 Add PtNodeReader.
Change-Id: Ic918822fc1b3a8a7c39ffbcf7defde2c5bf888db
2013-08-21 18:43:18 +09:00
Yuichiro Hanada
065aad9501 Add DictDecoder.
Change-Id: Ia1c32f21fe07081ce04d093660e18146b93275a4
2013-08-20 17:43:13 +09:00
Yuichiro Hanada
112257e40f Rename BinaryDictDecoder to Ver3DictDecoder.
Change-Id: Ibf9b95b658df6e2c2218bdb62e2380f326a03832
2013-08-20 17:11:51 +09:00
Yuichiro Hanada
66004ce2de Remove populateOptions.
Change-Id: I1a1830aaa8ea586b68fc34ff3a27ae52b810e8af
2013-08-20 16:06:52 +09:00
Yuichiro Hanada
77bce05e6f [Refactor] Rename BinaryDictReader and BinaryDictDecoder.
BinaryDictReader -> BinaryDictDecoder.
BinaryDictDecoder -> BianryDictDecoderUtils.

Change-Id: Iadf2153b379b760538ecda488dda4f17225e5f37
2013-08-19 19:36:31 +09:00
Yuichiro Hanada
d794b42f98 Add HeaderReaderInterface.
Change-Id: I298f86b70d18cd08b240509b6f757c72e1a59ffe
2013-08-19 11:15:03 +09:00
Yuichiro Hanada
3a73b37b30 Make BinaryDictIOUtils and DynamicBinaryIOUtils use BinaryDictReader.
Change-Id: I191dfe0e05ff3c2c5af99e8beebbb73b097748a3
2013-08-16 21:06:23 +09:00
Yuichiro Hanada
e72c4e5fc7 Remove a static buffer for thread safety.
Change-Id: I335c35eb182ff63abb8a5b04c053a98d44b7c6ce
2013-08-16 20:22:46 +09:00
Ken Wakasa
47bac6ebf2 Merge "Remove unnecessary caching." 2013-08-16 08:28:19 +00:00
Yuichiro Hanada
6e26cc3f5d Remove unnecessary caching.
Change-Id: Ic4ccab9d344b30b72fca1503827eec1c628fa4ac
2013-08-16 17:10:45 +09:00
Jean Chalard
af30cbf0ee Rename Node to PtNodeArray
Bug: 10247660
Change-Id: I1a0ac19f58f96adb5efac5fd35c6404831618c99
2013-08-16 16:24:54 +09:00
Yuichiro Hanada
94460eba11 [Refactor] Divide BinaryDictInputOutput into BinaryDictEncoder and BinaryDictDecoder.
Change-Id: I7c3269d77e3e3b567e459dcaa1bc029903941744
2013-08-15 20:23:07 +09:00
Jean Chalard
e7870a2c0d Add an initial JNI interface to dicttool.
Bug: 10100269
Change-Id: I883992c2033e7d9e7c754c0bf653767728b221b6
2013-08-15 17:58:55 +09:00
Ken Wakasa
117f18e844 Revert "[Refactor] Divide BinaryDictInputOutput into BinaryDictInputUtils and BinaryDictOutputUtils."
This reverts commit 4c63d0614e.

Change-Id: I1fa277d720bab4d895259df7d6d82eebfa5eb6c5
2013-08-15 08:54:29 +00:00
Yuichiro Hanada
4c63d0614e [Refactor] Divide BinaryDictInputOutput into BinaryDictInputUtils and BinaryDictOutputUtils.
Change-Id: I0d476abe763c11ba9005152f928e8dccf15ac9de
2013-08-15 15:46:58 +09:00
Yuichiro Hanada
1db93c9c04 [Refactor] Move some helper methods to BinaryDictIOUtils.
Change-Id: Ib817a975dc1f82241f732b236c44b042fda25b3c
2013-08-15 10:49:40 +09:00
Yuichiro Hanada
3edb62c69b Move some methods in BinaryDictIOUtils to DynamicBinaryDictIOUtils.
Change-Id: I9ba55582c533fef0eb3e60c46bf23c8b16ee1ff4
2013-08-14 19:33:36 +09:00
Ken Wakasa
f795f2b789 Merge "Add FusionDictionaryBufferFromWritableByteBufferFactory." 2013-08-14 10:26:21 +00:00
Yuichiro Hanada
665592774c Move some constants in BinaryDictInputOutput to FormatSpec.
Change-Id: I6b12faf35b65238b9a64c82d4d1a6050f980e72e
2013-08-14 19:19:27 +09:00
Yuichiro Hanada
bbc8a930f7 Add FusionDictionaryBufferFromWritableByteBufferFactory.
Change-Id: I23de0a178e7f11f2cf301fd433cde60c6152055b
2013-08-14 17:07:44 +09:00
Yuichiro Hanada
3feacba1eb Add BinaryDictReader.
Bug: 9618601

Change-Id: Ief07fa0c3c4f7f5999a3fafcef4e47b6b6fd8143
2013-08-13 19:55:05 +09:00
Yuichiro Hanada
b7bb9c9722 Make readHeader check the header size before using it.
Change-Id: I5dc3e2b674f7343ef57317fde6bdb7349a7fe04c
2013-08-13 17:06:25 +09:00
Yuichiro Hanada
7ec9db2c34 Remove the code and comments about version 1 format.
Change-Id: I827052f234eeaa4dbcfd37da69a99866896a158b
2013-08-09 16:05:07 +09:00
Yuichiro Hanada
7d1ae52ded Fix unit tests.
Change-Id: Ic0013089625e112aaccc888d462330640ef7cc6f
2013-08-08 19:12:35 +09:00
Jean Chalard
93445b4821 Fix some warnings
Change-Id: I7290cd1fb675a1b85b9b6ac2d464c932b5bca1dd
2013-07-31 16:17:01 +09:00
Satoshi Kataoka
ffcbbaf127 Refactor on UserHistoryDictionary
Bug: 9429906
Change-Id: I576a91643bdaf5017cc826ac2e07a74a9a275d60
2013-07-26 13:00:19 +09:00
Jean Chalard
25de86a6a2 [FD4] Separate cached address before/after update for groups
This should fix bug#8526576 for good.

Bug: 8526576
Change-Id: I473aad26b69d64efa09d2ec9d8e69f29f5cf4819
2013-07-24 18:40:14 +09:00
Jean Chalard
429db8d61e [FD3] Split stackNodes into two methods.
In the future we need to have a method that computes only
from the size, as we used to have, to initialize the cached
addresses, and a much simpler and faster method to copy
the cached sizes.

Bug: 8526576
Change-Id: I6a5a790303ab8f3bf957c7ca266eb12da7c1ad9e
2013-07-24 17:26:16 +09:00
Jean Chalard
91cbe3566d [FD2] Separate cached address before/after update for nodes.
Bug: 8526576
Change-Id: Ib9f8594a9e12dc75eba296faff2612c4bd7483d3
2013-07-23 17:52:54 +09:00
Jean Chalard
257750d988 [FD1] Move parents' address computation outside
There is no need to do it repeatedly in this loop: it's
clearer and faster to do it at the end only.

Bug: 8526576
Change-Id: I707571179c89479830891ec6d4fd06a9fffed7c1
2013-07-17 20:47:53 +09:00
Jean Chalard
c2e9c511cb Fix Binary dict tests
There are two problems here. The first one is the tests would send
an invalid unicode character. Although we could want dicttool to
handle this more gracefully, it's fine for now.

The second problem is much more serious. If a node has more than
128 children, then the java code will crash trying to read the
dictionary back because of a bug that this change fixes. In
theory, it's possible that happens when we try to load the user
history dictionary back from the disk - native code is not affected
so there is no other point that may cause a problem.
In the practice, that means you'd need to have 129 words with a
common prefix (including empty string) but all different after
this. It's almost impossible with Google Keyboard since there are
only so many keys on the keyboard that you can make a word out
of, and then again you'd have to do it repeatedly until it
actually enters the user history dictionary, wait for it to get
saved on the disk.
The bad news is, if you manage to get this far, the keyboard will
crash every time and won't be able to get up until you clear
data for the package.
The good news is, the dictionary itself is not corrupted and only
the reading code is wrong. So updating to a newer version would
actually even recover from this situation.

All in all, considering how almost-impossible this is to trigger,
I don't think even a single user actually did hit this bug.

Bug: 8583091
Change-Id: Iabb2a7f47cbd9ed3193d2a3487318d280753e071
2013-04-15 12:48:16 +09:00
Jean Chalard
ca0fdbbe2e Fix two bugs in dicttool
Both bugs only affect debug mode. One has the wrong object tested
with equals, the other has the iteration failing in some cases.

Change-Id: Ie9100d257a3f9e3be340cf3e38116f63417bdc1a
2013-04-10 22:10:31 +09:00
Jean Chalard
a411595b16 Fix two nasty bugs with surrogate pairs.
The important bug is in findWordInTree. The problem, which is
not obvious, is that we were calling codePointAt() with the
code point index in the string, instead of the char index.
The other bug this change fixes was harmless in the practice,
because it's in the iteration which is only used for debug and
pretty printing purposes. It's very similar in that it would
substract a length in code point to a length in chars and
truncate a StringBuilder at that length, so it would fail in a
quite similar manner. This changes the meaning of the "length"
attribute in Position, but it's clearer this way anyway.

Bug: 8450145
Change-Id: If396f883a9e6449de39351553ba83f5be5bd30f0
2013-04-01 17:06:19 +09:00
Jean Chalard
c6799ffeab Send the dictionaries descriptions to the dict pack
Bug: 8255795
Change-Id: I12a5922f50c2d2e3aa639457abcc1483e6a48721
2013-02-23 01:46:39 -08:00
Jean Chalard
2521edec09 Fix a bug with the passed dictionary id
We used to make the dictionary that we passed to the
dictionary pack as an initial value based on the locale.
This is wrong - it should be read from the dictionary.
This change fixes that.

Bug: 7005813
Change-Id: Ib08ed31dd9c216f6f7b9c6c3174ca514bf96e06f
2013-02-22 20:49:48 -08:00
Jean Chalard
af4a7e8c4b Create methods in LatinIME to make the current dict lists
Bug: 7005813
Change-Id: I82232af8e3071333b6fd01e4453b6b3c0a3ddb1f
2013-01-31 09:26:52 +09:00
Tadashi G. Takaoka
8aa9963a89 Fix Apache license comment
Change-Id: Ic56167f952a7f4449da366e1e81610e72c966086
2013-01-21 22:23:37 +09:00
Jean Chalard
fbc5e9b334 [AD3] Implement the interface to choose a local dictionary
Bug: 7702011
Change-Id: Id3b9c58dbbf5097e4d6ce986d20924eae19f9690
2013-01-21 15:40:46 +09:00
Jean Chalard
1d15fe7e51 [AD2] Add a helper method to read an arbitrary dict header
Bug: 7702011
Change-Id: Ib88f6dc222892831ae6932635b65fd2595b16b43
2013-01-18 20:34:28 +09:00
Ken Wakasa
b6ca354431 Small code cleanups
Multi-project commit with I249d5fbe

Change-Id: Ia28c4e970992aa1299a30e604eaa5d096655c3a5
2013-01-07 12:13:42 +09:00
Ken Wakasa
45239029ce Remove trailing spaces
Change-Id: I260b85ef9e91d17f97d6e405d2d92a65b443df44
2012-12-19 15:36:55 +09:00
Jean Chalard
f1b464da31 Remove a useless member
Change-Id: Id13e0aeec6ec3655d6bb0edc7f8f7821e7dc5a36
2012-12-11 19:15:24 +09:00
Jean Chalard
2da8866518 Remove a couple Eclipse and Android Lint warnings
Change-Id: I0c29c5d2abcbf80759b996d34b534deb083cd7d3
2012-12-06 21:30:51 +09:00
Jean Chalard
51a0ef8c59 Add a plumbing option to dicttool info.
Also align the `porcelain' option to the diff command
that was used mistakenly.

Bug: 7388665
Change-Id: Ic0e1b98c62ce37b2e909384a0370af4458563703
2012-10-31 16:35:22 +09:00
Jean Chalard
f41389a74b Remove warnings
Thanks Eclipse

Change-Id: I88e3979ed22be5d8be5a5accdde417c6b1a8bf2d
2012-10-29 14:24:16 +09:00
Jean Chalard
a23e333079 Implement the word-level diff (A9)
Bug: 7388857
Change-Id: I4c4560d4f4b579936a44cdf409a4c27300b65610
2012-10-29 12:31:22 +09:00
Jean Chalard
47cac57e45 Finish up the "info" command in dicttool. (A6)
Bug: 7388857
Change-Id: I704f12a6be76ce1644ec5e8dd3b667f112e9c04a
2012-10-25 19:15:24 +09:00