FrameHelper.java
3.57 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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/*
* Decompiled with CFR 0_118.
*/
package com.adobe.xfa.text;
import com.adobe.xfa.text.DispLineWrapped;
import com.adobe.xfa.text.FrameLineInfo;
import com.adobe.xfa.text.TextFrame;
import com.adobe.xfa.text.TextSparseStream;
import com.adobe.xfa.ut.UnitSpan;
abstract class FrameHelper
extends FrameLineInfo {
static final int PROCESS_LOADED_FRAMES = 0;
static final int PROCESS_NULL_FRAMES = 1;
static final int PROCESS_FORCE_LOAD = 2;
private final int meProcess;
private TextFrame mpoFrame;
private boolean mbFrameLocked;
FrameHelper(TextSparseStream poStream, int eProcess) {
super(poStream);
this.meProcess = eProcess;
}
FrameHelper(TextSparseStream poStream) {
this(poStream, 0);
}
boolean processFrames() {
int nFrame;
int nFrameLimit;
if (this.mbFrameLocked) {
nFrame = this.getFrameIndex();
nFrameLimit = nFrame + 1;
} else {
nFrame = 0;
nFrameLimit = this.getStream().getFrameCount();
}
while (nFrame < nFrameLimit) {
this.setFrameIndex(nFrame);
int nAbsLineIndex = this.getAbsLineIndex();
this.mpoFrame = this.getStream().getFrame(nFrame);
boolean bSkipFrame = false;
if (this.mpoFrame == null) {
switch (this.meProcess) {
case 0: {
bSkipFrame = true;
break;
}
case 2: {
if (this.getStream().isAutoLoadSuppressed()) {
bSkipFrame = true;
break;
}
this.mpoFrame = this.getStream().forceFrame(nFrame);
}
}
}
if (!bSkipFrame && !this.processOneFrame(this.mpoFrame)) {
return false;
}
if (this.mpoFrame != null) {
this.setAbsLineIndex(nAbsLineIndex + this.mpoFrame.getLineCount());
this.setOffset(this.getOffset().add(this.mpoFrame.getBMax()));
}
++nFrame;
}
this.mpoFrame = null;
return this.finish();
}
TextFrame getFrame() {
return this.getStream().getFrame(this.getFrameIndex());
}
DispLineWrapped getLine() {
TextFrame poFrame = this.getFrame();
if (poFrame == null) {
return null;
}
if (this.getLineIndex() >= poFrame.getLineCount()) {
return null;
}
return poFrame.getLine(this.getLineIndex());
}
boolean isFrameLocked() {
return this.mbFrameLocked;
}
void lockFrame(TextFrame poFrame) {
boolean bFound;
FrameFinder oFinder = new FrameFinder(this.getStream(), poFrame);
boolean bl = bFound = !oFinder.processFrames();
assert (bFound);
super.copyFrom(oFinder);
}
protected void setFrame(TextFrame poFrame) {
this.mpoFrame = poFrame;
}
protected abstract boolean processOneFrame(TextFrame var1);
protected boolean finish() {
return true;
}
private static class FrameFinder
extends FrameHelper {
private final TextFrame mpoSearchFrame;
FrameFinder(TextSparseStream poStream, TextFrame poSearchFrame) {
super(poStream);
this.mpoSearchFrame = poSearchFrame;
}
@Override
protected boolean processOneFrame(TextFrame poFrame) {
return poFrame != this.mpoSearchFrame;
}
}
}