WordBreakIterator.java
3.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/*
* Decompiled with CFR 0_118.
*/
package com.adobe.xfa.text;
import com.adobe.xfa.text.GraphemeBreakIterator;
import com.adobe.xfa.text.IteratorData;
import com.adobe.xfa.text.TextBreakIterator;
import com.adobe.xfa.text.TextCharProp;
import com.adobe.xfa.text.TextCharPropIterator;
class WordBreakIterator
extends TextBreakIterator {
private final GraphemeBreakIterator moGraphemeIterator;
private final IteratorData moData = new IteratorData();
private IteratorData moPrevData = new IteratorData();
private boolean mbPrev;
private static final int WB_NO = 0;
private static final int WB_YES = 1;
private static final int WB_1ST = 2;
private static final int WB_MID = 3;
static final int[][] gbWordBreak = new int[][]{{0, 1, 0, 2, 1, 3, 1, 1}, {1, 1, 1, 2, 1, 1, 1, 1}, {0, 1, 0, 2, 0, 1, 1, 0}, {1, 1, 1, 2, 1, 1, 1, 1}, {1, 1, 0, 2, 0, 1, 1, 1}, {1, 1, 1, 2, 1, 1, 1, 1}, {1, 1, 1, 2, 1, 1, 1, 1}, {0, 1, 0, 2, 1, 1, 3, 1}};
public WordBreakIterator(TextCharPropIterator poTextCharPropIterator) {
this.moGraphemeIterator = new GraphemeBreakIterator(poTextCharPropIterator);
this.mbPrev = false;
this.doFirst();
}
@Override
public int first() {
return this.doFirst();
}
@Override
public int next() {
if (this.mbPrev ? this.moPrevData.mbEnd : this.moData.mbEnd) {
return Integer.MAX_VALUE;
}
block6 : do {
int eNextData;
int ePrevData;
int nTestIndex = this.moData.mnCharIndex;
if (this.mbPrev) {
ePrevData = this.moPrevData.mePrevData;
eNextData = this.moData.mePrevData;
this.mbPrev = false;
} else {
ePrevData = this.moData.mePrevData;
eNextData = this.moData.next(this.moGraphemeIterator);
}
if (this.moData.mbEnd) {
return nTestIndex;
}
int nPrevIndex = TextCharProp.wordToIndex(ePrevData);
int nNextIndex = TextCharProp.wordToIndex(eNextData);
switch (gbWordBreak[nPrevIndex][nNextIndex]) {
case 0: {
this.moData.mePrevData = eNextData;
break;
}
case 1: {
return nTestIndex;
}
case 2: {
break;
}
case 3: {
this.moPrevData = this.moData;
this.moData.mePrevData = eNextData;
eNextData = this.moData.next(this.moGraphemeIterator);
if (!this.moData.mbEnd && TextCharProp.getWordClass(eNextData) == TextCharProp.getWordClass(this.moPrevData.mePrevData)) continue block6;
return nTestIndex;
}
}
} while (true);
}
private int doFirst() {
int nIndex;
this.moData.mnCharIndex = nIndex = this.moGraphemeIterator.first();
this.moData.mePrevData = this.moData.next(this.moGraphemeIterator);
return nIndex;
}
}