// read from the file.
//
public RBBIDataHeader fHeader;
- public short fFTable[];
- short fRTable[];
- short fSFTable[];
- short fSRTable[];
+ public short fFTable[];
+ public short fRTable[];
+ public short fSFTable[];
+ public short fSRTable[];
Trie2 fTrie;
String fRuleSource;
int fStatusTable[];
///CLOVER:OFF
/* Debug function to display the break iterator data. */
- void dump(java.io.PrintStream out) {
+ public void dump(java.io.PrintStream out) {
if (fFTable.length == 0) {
// There is no table. Fail early for testing purposes.
throw new NullPointerException();
// Size of table size in shorts.
// the "4" is the size of struct RBBIStateTableRow, the row header part only.
- int rowLen = 4 + fRB.fSetBuilder.getNumCharCategories();
+ int rowLen = 4 + fRB.fSetBuilder.getNumCharCategories(); // Row Length in shorts.
int tableSize = getTableSize() / 2;
table[RBBIDataWrapper.NUMSTATES] = (short)(numStates >>> 16);
table[RBBIDataWrapper.NUMSTATES+1] = (short)(numStates & 0x0000ffff);
- // RBBIStateTable.fRowLen
- table[RBBIDataWrapper.ROWLEN] = (short)(rowLen >>> 16);
- table[RBBIDataWrapper.ROWLEN+1] = (short)(rowLen & 0x0000ffff);
+ // RBBIStateTable.fRowLen. In bytes.
+ int rowLenInBytes = rowLen * 2;
+ table[RBBIDataWrapper.ROWLEN] = (short)(rowLenInBytes >>> 16);
+ table[RBBIDataWrapper.ROWLEN+1] = (short)(rowLenInBytes & 0x0000ffff);
// RBBIStateTable.fFlags
int flags = 0;
version https://git-lfs.github.com/spec/v1
-oid sha256:f78382b447bb13c03234b53e18b013cea1d2ff6a0f71679885ee00d787003822
-size 12475101
+oid sha256:fa37df37ddad555dfc900d38890567a820d0efa27e72b9d9db81e914e2b558ec
+size 12461103
// or simply retired if it is no longer interesting.
import java.text.CharacterIterator;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Locale;
}
}
}
+
+ @Test
+ public void TestTableRebuild() {
+ // Test to verify that rebuilding the state tables from rule source for the standard
+ // break iterator types yields the same tables as are imported from ICU4C as part of the default data.
+ List<RuleBasedBreakIterator> breakIterators = new ArrayList<RuleBasedBreakIterator>();
+ breakIterators.add((RuleBasedBreakIterator)BreakIterator.getCharacterInstance(Locale.ENGLISH));
+ breakIterators.add((RuleBasedBreakIterator)BreakIterator.getWordInstance(Locale.ENGLISH));
+ breakIterators.add((RuleBasedBreakIterator)BreakIterator.getSentenceInstance(Locale.ENGLISH));
+ breakIterators.add((RuleBasedBreakIterator)BreakIterator.getLineInstance(Locale.ENGLISH));
+
+ for (RuleBasedBreakIterator bi: breakIterators) {
+ String rules = bi.toString();
+ RuleBasedBreakIterator bi2 = new RuleBasedBreakIterator(rules);
+
+ assertTrue("Forward Table", Arrays.equals(bi.fRData.fFTable, bi2.fRData.fFTable));
+ assertTrue("Reverse Table", Arrays.equals(bi.fRData.fRTable, bi2.fRData.fRTable));
+ assertTrue("Safe Forward Table", Arrays.equals(bi.fRData.fSFTable, bi2.fRData.fSFTable));
+ assertTrue("SafeForward Table", Arrays.equals(bi.fRData.fSRTable, bi2.fRData.fSRTable));
+ }
+ }
}