@@ -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
0 commit comments