Skip to content

Commit dacf014

Browse files
authored
Optim input tmp (#63)
* tmp * refactor
1 parent 8d1449e commit dacf014

4 files changed

Lines changed: 274 additions & 130 deletions

File tree

src/main/java/ch/digitalfondue/jfiveparse/Characters.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ final class Characters {
2424
static final char EXCLAMATION_MARK = 0x0021;
2525
/** & */
2626
static final char AMPERSAND = 0x0026;
27+
/** < */
2728
static final char LESSTHAN_SIGN = 0x003C;
29+
/** > */
2830
static final char GREATERTHAN_SIGN = 0x003E;
2931
static final char SOLIDUS = 0x002F;
3032
static final char QUESTION_MARK = 0x003F;

src/main/java/ch/digitalfondue/jfiveparse/ProcessedInputStream.java

Lines changed: 149 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -52,51 +52,130 @@ int readUntilAttributeValue(ResizableCharBuilder builder, int quoteChar, boolean
5252
return readUntilAttributeValueInternal(builder, quoteChar, stopAtAmpersand);
5353
}
5454

55+
private static boolean mustStopReadUntilAttributeValueUnquoted(int chr) {
56+
return Common.isTabLfFfCrOrSpace(chr) || chr == Characters.AMPERSAND || chr == Characters.GREATERTHAN_SIGN
57+
|| chr == Characters.NULL || chr == Characters.QUOTATION_MARK ||
58+
chr == Characters.APOSTROPHE || chr == Characters.LESSTHAN_SIGN ||
59+
chr == Characters.EQUALS_SIGN || chr == Characters.GRAVE_ACCENT || chr == Characters.EOF;
60+
}
61+
5562
int readUntilAttributeValueUnquoted(ResizableCharBuilder builder) {
5663
int chr;
5764
while (!buffer.isEmpty) {
5865
chr = buffer.removeFirst();
59-
if (Common.isTabLfFfCrOrSpace(chr) || chr == Characters.AMPERSAND || chr == '>' || chr == Characters.NULL ||
60-
chr == '"' || chr == '\'' || chr == Characters.LESSTHAN_SIGN || chr == '=' || chr == '`' || chr == Characters.EOF) {
66+
if (mustStopReadUntilAttributeValueUnquoted(chr)) {
6167
return chr;
6268
}
6369
builder.append((char) chr);
6470
}
6571
return readUntilAttributeValueUnquotedInternal(builder);
6672
}
6773

74+
int readUntilTagName(ResizableCharBuilder builder) {
75+
int chr;
76+
while (!buffer.isEmpty) {
77+
chr = buffer.removeFirst();
78+
if (Common.isTabLfFfCrOrSpace(chr) || chr == Characters.SOLIDUS || chr == Characters.GREATERTHAN_SIGN || chr == Characters.NULL || chr == Characters.EOF) {
79+
return chr;
80+
}
81+
builder.append((char) chr);
82+
}
83+
return readUntilTagNameInternal(builder);
84+
}
85+
86+
private static boolean mustStopReadUntilAttributeName(int chr) {
87+
return Common.isTabLfFfCrOrSpace(chr) || chr == Characters.SOLIDUS || chr == Characters.EQUALS_SIGN || chr == Characters.GREATERTHAN_SIGN || chr == Characters.NULL ||
88+
chr == Characters.QUOTATION_MARK || chr == Characters.APOSTROPHE || chr == Characters.LESSTHAN_SIGN || chr == Characters.EOF;
89+
}
90+
91+
int readUntilAttributeName(ResizableCharBuilder builder) {
92+
int chr;
93+
while (!buffer.isEmpty) {
94+
chr = buffer.removeFirst();
95+
if (mustStopReadUntilAttributeName(chr)) {
96+
return chr;
97+
}
98+
builder.append((char) chr);
99+
}
100+
return readUntilAttributeNameInternal(builder);
101+
}
102+
103+
int readUntilComment(ResizableCharBuilder builder) {
104+
int chr;
105+
while (!buffer.isEmpty) {
106+
chr = buffer.removeFirst();
107+
if (chr == Characters.HYPHEN_MINUS || chr == Characters.NULL || chr == Characters.EOF) {
108+
return chr;
109+
}
110+
builder.append((char) chr);
111+
}
112+
return readUntilCommentInternal(builder);
113+
}
114+
68115
protected int readUntilInternal(ResizableCharBuilder builder, boolean stopAtAmpersand, boolean stopAtLessThan) {
69116
int chr;
70-
while ((chr = read()) != -1) {
117+
while ((chr = read()) != Characters.EOF) {
71118
if ((stopAtAmpersand && chr == Characters.AMPERSAND) || (stopAtLessThan && chr == Characters.LESSTHAN_SIGN) || chr == Characters.NULL) {
72119
return chr;
73120
}
74121
builder.append((char) chr);
75122
}
76-
return -1;
123+
return Characters.EOF;
77124
}
78125

79126
protected int readUntilAttributeValueInternal(ResizableCharBuilder builder, int quoteChar, boolean stopAtAmpersand) {
80127
int chr;
81-
while ((chr = read()) != -1) {
128+
while ((chr = read()) != Characters.EOF) {
82129
if (chr == quoteChar || (stopAtAmpersand && chr == Characters.AMPERSAND) || chr == Characters.NULL) {
83130
return chr;
84131
}
85132
builder.append((char) chr);
86133
}
87-
return -1;
134+
return Characters.EOF;
88135
}
89136

90137
protected int readUntilAttributeValueUnquotedInternal(ResizableCharBuilder builder) {
91138
int chr;
92-
while ((chr = read()) != -1) {
93-
if (Common.isTabLfFfCrOrSpace(chr) || chr == Characters.AMPERSAND || chr == '>' || chr == Characters.NULL ||
94-
chr == '"' || chr == '\'' || chr == Characters.LESSTHAN_SIGN || chr == '=' || chr == '`') {
139+
while ((chr = read()) != Characters.EOF) {
140+
if (mustStopReadUntilAttributeValueUnquoted(chr)) {
141+
return chr;
142+
}
143+
builder.append((char) chr);
144+
}
145+
return Characters.EOF;
146+
}
147+
148+
protected int readUntilTagNameInternal(ResizableCharBuilder builder) {
149+
int chr;
150+
while ((chr = read()) != Characters.EOF) {
151+
if (Common.isTabLfFfCrOrSpace(chr) || chr == Characters.SOLIDUS || chr == Characters.GREATERTHAN_SIGN || chr == Characters.NULL) {
152+
return chr;
153+
}
154+
builder.append((char) chr);
155+
}
156+
return Characters.EOF;
157+
}
158+
159+
protected int readUntilAttributeNameInternal(ResizableCharBuilder builder) {
160+
int chr;
161+
while ((chr = read()) != Characters.EOF) {
162+
if (mustStopReadUntilAttributeName(chr)) {
163+
return chr;
164+
}
165+
builder.append((char) chr);
166+
}
167+
return Characters.EOF;
168+
}
169+
170+
protected int readUntilCommentInternal(ResizableCharBuilder builder) {
171+
int chr;
172+
while ((chr = read()) != Characters.EOF) {
173+
if (chr == Characters.HYPHEN_MINUS || chr == Characters.NULL) {
95174
return chr;
96175
}
97176
builder.append((char) chr);
98177
}
99-
return -1;
178+
return Characters.EOF;
100179
}
101180

102181
//
@@ -163,7 +242,7 @@ static class StringProcessedInputStream extends ProcessedInputStream {
163242
// used for test
164243
protected int getCharAt(int pos) {
165244
if (pos >= length) {
166-
return -1;
245+
return Characters.EOF;
167246
}
168247
return input[pos];
169248
}
@@ -173,7 +252,7 @@ protected int read() {
173252
if (pos < length) {
174253
return input[pos++];
175254
}
176-
return -1;
255+
return Characters.EOF;
177256
}
178257

179258
@Override
@@ -191,7 +270,7 @@ protected int readUntilInternal(ResizableCharBuilder builder, boolean stopAtAmpe
191270
}
192271
builder.append(input, pos, n - pos);
193272
pos = n;
194-
return -1;
273+
return Characters.EOF;
195274
}
196275

197276
@Override
@@ -209,7 +288,7 @@ protected int readUntilAttributeValueInternal(ResizableCharBuilder builder, int
209288
}
210289
builder.append(input, pos, n - pos);
211290
pos = n;
212-
return -1;
291+
return Characters.EOF;
213292
}
214293

215294
@Override
@@ -218,8 +297,61 @@ protected int readUntilAttributeValueUnquotedInternal(ResizableCharBuilder build
218297
int i = pos;
219298
while (i < n) {
220299
char c = input[i];
221-
if (Common.isTabLfFfCrOrSpace(c) || c == Characters.AMPERSAND || c == '>' || c == Characters.NULL ||
222-
c == '"' || c == '\'' || c == Characters.LESSTHAN_SIGN || c == '=' || c == '`') {
300+
if (mustStopReadUntilAttributeValueUnquoted(c)) {
301+
builder.append(input, pos, i - pos);
302+
pos = i + 1;
303+
return c;
304+
}
305+
i++;
306+
}
307+
builder.append(input, pos, n - pos);
308+
pos = n;
309+
return Characters.EOF;
310+
}
311+
312+
@Override
313+
protected int readUntilTagNameInternal(ResizableCharBuilder builder) {
314+
int n = length;
315+
int i = pos;
316+
while (i < n) {
317+
char c = input[i];
318+
if (Common.isTabLfFfCrOrSpace(c) || c == Characters.SOLIDUS || c == Characters.GREATERTHAN_SIGN || c == Characters.NULL) {
319+
builder.append(input, pos, i - pos);
320+
pos = i + 1;
321+
return c;
322+
}
323+
i++;
324+
}
325+
builder.append(input, pos, n - pos);
326+
pos = n;
327+
return Characters.EOF;
328+
}
329+
330+
@Override
331+
protected int readUntilAttributeNameInternal(ResizableCharBuilder builder) {
332+
int n = length;
333+
int i = pos;
334+
while (i < n) {
335+
char c = input[i];
336+
if (mustStopReadUntilAttributeName(c)) {
337+
builder.append(input, pos, i - pos); // append remaining
338+
pos = i + 1;
339+
return c;
340+
}
341+
i++;
342+
}
343+
builder.append(input, pos, n - pos);
344+
pos = n;
345+
return Characters.EOF;
346+
}
347+
348+
@Override
349+
protected int readUntilCommentInternal(ResizableCharBuilder builder) {
350+
int n = length;
351+
int i = pos;
352+
while (i < n) {
353+
char c = input[i];
354+
if (c == '-' || c == Characters.NULL) {
223355
builder.append(input, pos, i - pos);
224356
pos = i + 1;
225357
return c;
@@ -228,7 +360,7 @@ protected int readUntilAttributeValueUnquotedInternal(ResizableCharBuilder build
228360
}
229361
builder.append(input, pos, n - pos);
230362
pos = n;
231-
return -1;
363+
return Characters.EOF;
232364
}
233365
}
234366

src/main/java/ch/digitalfondue/jfiveparse/Tokenizer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ final class Tokenizer {
3636

3737
// tag related
3838
private Attributes attributes;
39-
private final ResizableCharBuilder currentAttributeName = new ResizableCharBuilder();
39+
final ResizableCharBuilder currentAttributeName = new ResizableCharBuilder();
4040
ResizableCharBuilder currentAttributeValue;
4141
private int currentAttributeQuoteType;
4242
private boolean selfClosing;
@@ -51,7 +51,7 @@ final class Tokenizer {
5151
private StringBuilder doctypeSystemIdentifier;
5252

5353
// comment related
54-
private ResizableCharBuilder commentToken;
54+
ResizableCharBuilder commentToken;
5555

5656
//
5757
private final ResizableCharBuilder temporaryBuffer = new ResizableCharBuilder();

0 commit comments

Comments
 (0)