@@ -184,6 +184,59 @@ class CSSSyntaxParser {
184
184
}
185
185
}
186
186
187
+ /* *
188
+ * Consume a delimiter, returning false if a required delimiter is not found.
189
+ */
190
+ constexpr bool consumeDelimiter (CSSDelimiter delimiter) {
191
+ if (delimiter == CSSDelimiter::None) {
192
+ return true ;
193
+ }
194
+
195
+ bool hasWhiteSpace = peek ().type () == CSSTokenType::WhiteSpace;
196
+ consumeWhitespace ();
197
+
198
+ switch (delimiter) {
199
+ case CSSDelimiter::Comma:
200
+ if (peek ().type () == CSSTokenType::Comma) {
201
+ consumeToken ();
202
+ consumeWhitespace ();
203
+ return true ;
204
+ }
205
+ return false ;
206
+ case CSSDelimiter::Whitespace:
207
+ return hasWhiteSpace;
208
+ case CSSDelimiter::OptionalWhitespace:
209
+ return true ;
210
+ case CSSDelimiter::CommaOrWhitespace:
211
+ if (peek ().type () == CSSTokenType::Comma) {
212
+ consumeToken ();
213
+ consumeWhitespace ();
214
+ return true ;
215
+ }
216
+ return hasWhiteSpace;
217
+ case CSSDelimiter::Solidus:
218
+ if (peek ().type () == CSSTokenType::Delim &&
219
+ peek ().stringValue () == " /" ) {
220
+ consumeToken ();
221
+ consumeWhitespace ();
222
+ return true ;
223
+ }
224
+ return false ;
225
+ case CSSDelimiter::SolidusOrWhitespace:
226
+ if (peek ().type () == CSSTokenType::Delim &&
227
+ peek ().stringValue () == " /" ) {
228
+ consumeToken ();
229
+ consumeWhitespace ();
230
+ return true ;
231
+ }
232
+ return hasWhiteSpace;
233
+ case CSSDelimiter::None:
234
+ return true ;
235
+ }
236
+
237
+ return false ;
238
+ }
239
+
187
240
private:
188
241
constexpr CSSSyntaxParser (CSSSyntaxParser& parser, CSSTokenType terminator)
189
242
: tokenizer_{parser.tokenizer_ },
@@ -220,7 +273,7 @@ struct CSSComponentValueVisitorDispatcher {
220
273
CSSDelimiter delimiter,
221
274
const VisitorsT&... visitors) {
222
275
auto originalParser = parser;
223
- if (!consumeDelimiter (delimiter)) {
276
+ if (!parser. consumeDelimiter (delimiter)) {
224
277
parser = originalParser;
225
278
return {};
226
279
}
@@ -265,59 +318,6 @@ struct CSSComponentValueVisitorDispatcher {
265
318
return ReturnT{};
266
319
}
267
320
268
- /* *
269
- * Consume a delimiter, returning false if a required delimiter is not found.
270
- */
271
- constexpr bool consumeDelimiter (CSSDelimiter delimiter) {
272
- if (delimiter == CSSDelimiter::None) {
273
- return true ;
274
- }
275
-
276
- bool hasWhiteSpace = parser.peek ().type () == CSSTokenType::WhiteSpace;
277
- parser.consumeWhitespace ();
278
-
279
- switch (delimiter) {
280
- case CSSDelimiter::Comma:
281
- if (parser.peek ().type () == CSSTokenType::Comma) {
282
- parser.consumeToken ();
283
- parser.consumeWhitespace ();
284
- return true ;
285
- }
286
- return false ;
287
- case CSSDelimiter::Whitespace:
288
- return hasWhiteSpace;
289
- case CSSDelimiter::OptionalWhitespace:
290
- return true ;
291
- case CSSDelimiter::CommaOrWhitespace:
292
- if (parser.peek ().type () == CSSTokenType::Comma) {
293
- parser.consumeToken ();
294
- parser.consumeWhitespace ();
295
- return true ;
296
- }
297
- return hasWhiteSpace;
298
- case CSSDelimiter::Solidus:
299
- if (parser.peek ().type () == CSSTokenType::Delim &&
300
- parser.peek ().stringValue () == " /" ) {
301
- parser.consumeToken ();
302
- parser.consumeWhitespace ();
303
- return true ;
304
- }
305
- return false ;
306
- case CSSDelimiter::SolidusOrWhitespace:
307
- if (parser.peek ().type () == CSSTokenType::Delim &&
308
- parser.peek ().stringValue () == " /" ) {
309
- parser.consumeToken ();
310
- parser.consumeWhitespace ();
311
- return true ;
312
- }
313
- return hasWhiteSpace;
314
- case CSSDelimiter::None:
315
- return true ;
316
- }
317
-
318
- return false ;
319
- }
320
-
321
321
constexpr std::optional<ReturnT> visitFunction (
322
322
const CSSComponentValueVisitor<ReturnT> auto & visitor,
323
323
const CSSComponentValueVisitor<ReturnT> auto &... rest) {
@@ -393,7 +393,7 @@ struct CSSComponentValueVisitorDispatcher {
393
393
}
394
394
};
395
395
396
- template <typename ReturnT>
396
+ template <CSSSyntaxVisitorReturn ReturnT>
397
397
constexpr ReturnT CSSSyntaxParser::consumeComponentValue (
398
398
CSSDelimiter delimiter,
399
399
const CSSComponentValueVisitor<ReturnT> auto &... visitors)
@@ -404,7 +404,7 @@ constexpr ReturnT CSSSyntaxParser::consumeComponentValue(
404
404
.consumeComponentValue (delimiter, visitors...);
405
405
}
406
406
407
- template <typename ReturnT>
407
+ template <CSSSyntaxVisitorReturn ReturnT>
408
408
constexpr ReturnT CSSSyntaxParser::consumeComponentValue (
409
409
const CSSComponentValueVisitor<ReturnT> auto &... visitors)
410
410
requires(CSSUniqueComponentValueVisitors<ReturnT, decltype(visitors)...>)
0 commit comments