@@ -78,45 +78,48 @@ function asciiCaselessMatch(s1, s2) {
78
78
return s1 . toLowerCase ( ) == s2 . toLowerCase ( ) ;
79
79
}
80
80
81
- function tokenize ( str ) {
82
- str = preprocess ( str ) ;
83
- var i = - 1 ;
84
- var tokens = [ ] ;
85
- var code ;
81
+ var tokenize = ( function ( ) {
82
+ let str ;
83
+ let i ;
84
+ let tokens ;
85
+ let code ;
86
86
87
- var codepoint = function ( i ) {
87
+ function codepoint ( i ) {
88
88
if ( i >= str . length ) {
89
89
return 0 ;
90
90
}
91
91
return str [ i ] ;
92
92
}
93
- var next = function ( num ) {
93
+ function next ( num ) {
94
94
if ( num === undefined )
95
95
num = 1 ;
96
96
if ( num > 3 )
97
97
throw new SpecError ( "no more than three codepoints of lookahead." ) ;
98
98
return codepoint ( i + num ) ;
99
- } ;
100
- var consume = function ( num ) {
99
+ }
100
+ function consume ( num ) {
101
101
if ( num === undefined )
102
102
num = 1 ;
103
103
i += num ;
104
104
code = codepoint ( i ) ;
105
105
//console.log('Consume '+i+' '+String.fromCharCode(code) + ' 0x' + code.toString(16));
106
106
return true ;
107
- } ;
108
- var reconsume = function ( ) {
107
+ }
108
+ function reconsume ( ) {
109
109
i -= 1 ;
110
110
return true ;
111
- } ;
112
- var eof = function ( codepoint ) {
111
+ }
112
+ function eof ( codepoint ) {
113
113
if ( codepoint === undefined ) codepoint = code ;
114
114
return codepoint == 0 ;
115
- } ;
116
- var donothing = function ( ) { } ;
117
- var parseerror = function ( ) { console . log ( "Parse error at index " + i + ", processing codepoint 0x" + code . toString ( 16 ) + "." ) ; return true ; } ;
115
+ }
116
+ function donothing ( ) { }
117
+ function parseerror ( ) {
118
+ console . log ( "Parse error at index " + i + ", processing codepoint 0x" + code . toString ( 16 ) + "." ) ;
119
+ return true ;
120
+ }
118
121
119
- var consumeAToken = function ( ) {
122
+ function consumeAToken ( ) {
120
123
consumeComments ( ) ;
121
124
consume ( ) ;
122
125
if ( whitespace ( code ) ) {
@@ -206,9 +209,9 @@ function tokenize(str) {
206
209
}
207
210
else if ( eof ( ) ) return new EOFToken ( ) ;
208
211
else return new DelimToken ( code ) ;
209
- } ;
212
+ }
210
213
211
- var consumeComments = function ( ) {
214
+ function consumeComments ( ) {
212
215
while ( next ( 1 ) == 0x2f && next ( 2 ) == 0x2a ) {
213
216
consume ( 2 ) ;
214
217
while ( true ) {
@@ -222,9 +225,9 @@ function tokenize(str) {
222
225
}
223
226
}
224
227
}
225
- } ;
228
+ }
226
229
227
- var consumeANumericToken = function ( ) {
230
+ function consumeANumericToken ( ) {
228
231
var { value, isInteger, sign} = consumeANumber ( ) ;
229
232
if ( wouldStartAnIdentifier ( next ( 1 ) , next ( 2 ) , next ( 3 ) ) ) {
230
233
const unit = consumeAName ( ) ;
@@ -235,9 +238,9 @@ function tokenize(str) {
235
238
} else {
236
239
return new NumberToken ( value , isInteger , sign ) ;
237
240
}
238
- } ;
241
+ }
239
242
240
- var consumeAnIdentlikeToken = function ( ) {
243
+ function consumeAnIdentlikeToken ( ) {
241
244
var str = consumeAName ( ) ;
242
245
if ( str . toLowerCase ( ) == "url" && next ( ) == 0x28 ) {
243
246
consume ( ) ;
@@ -255,9 +258,9 @@ function tokenize(str) {
255
258
} else {
256
259
return new IdentToken ( str ) ;
257
260
}
258
- } ;
261
+ }
259
262
260
- var consumeAStringToken = function ( endingCodePoint ) {
263
+ function consumeAStringToken ( endingCodePoint ) {
261
264
if ( endingCodePoint === undefined ) endingCodePoint = code ;
262
265
var string = "" ;
263
266
while ( consume ( ) ) {
@@ -279,9 +282,9 @@ function tokenize(str) {
279
282
string += String . fromCodePoint ( code ) ;
280
283
}
281
284
}
282
- } ;
285
+ }
283
286
284
- var consumeAURLToken = function ( ) {
287
+ function consumeAURLToken ( ) {
285
288
var token = new URLToken ( "" ) ;
286
289
while ( whitespace ( next ( ) ) ) consume ( ) ;
287
290
if ( eof ( next ( ) ) ) return token ;
@@ -313,9 +316,9 @@ function tokenize(str) {
313
316
token . value += String . fromCodePoint ( code ) ;
314
317
}
315
318
}
316
- } ;
319
+ }
317
320
318
- var consumeEscape = function ( ) {
321
+ function consumeEscape ( ) {
319
322
// Assume the the current character is the \
320
323
// and the next code point is not a newline.
321
324
consume ( ) ;
@@ -339,18 +342,18 @@ function tokenize(str) {
339
342
} else {
340
343
return code ;
341
344
}
342
- } ;
345
+ }
343
346
344
- var areAValidEscape = function ( c1 , c2 ) {
347
+ function areAValidEscape ( c1 , c2 ) {
345
348
if ( c1 != 0x5c ) return false ;
346
349
if ( newline ( c2 ) ) return false ;
347
350
return true ;
348
- } ;
349
- var startsWithAValidEscape = function ( ) {
351
+ }
352
+ function startsWithAValidEscape ( ) {
350
353
return areAValidEscape ( code , next ( ) ) ;
351
- } ;
354
+ }
352
355
353
- var wouldStartAnIdentifier = function ( c1 , c2 , c3 ) {
356
+ function wouldStartAnIdentifier ( c1 , c2 , c3 ) {
354
357
if ( c1 == 0x2d ) {
355
358
return namestartchar ( c2 ) || c2 == 0x2d || areAValidEscape ( c2 , c3 ) ;
356
359
} else if ( namestartchar ( c1 ) ) {
@@ -360,12 +363,12 @@ function tokenize(str) {
360
363
} else {
361
364
return false ;
362
365
}
363
- } ;
364
- var startsWithAnIdentifier = function ( ) {
366
+ }
367
+ function startsWithAnIdentifier ( ) {
365
368
return wouldStartAnIdentifier ( code , next ( 1 ) , next ( 2 ) ) ;
366
- } ;
369
+ }
367
370
368
- var wouldStartANumber = function ( c1 , c2 , c3 ) {
371
+ function wouldStartANumber ( c1 , c2 , c3 ) {
369
372
if ( c1 == 0x2b || c1 == 0x2d ) {
370
373
if ( digit ( c2 ) ) return true ;
371
374
if ( c2 == 0x2e && digit ( c3 ) ) return true ;
@@ -378,12 +381,12 @@ function tokenize(str) {
378
381
} else {
379
382
return false ;
380
383
}
381
- } ;
382
- var startsWithANumber = function ( ) {
384
+ }
385
+ function startsWithANumber ( ) {
383
386
return wouldStartANumber ( code , next ( 1 ) , next ( 2 ) ) ;
384
- } ;
387
+ }
385
388
386
- var consumeAName = function ( ) {
389
+ function consumeAName ( ) {
387
390
var result = "" ;
388
391
while ( consume ( ) ) {
389
392
if ( namechar ( code ) ) {
@@ -395,9 +398,9 @@ function tokenize(str) {
395
398
return result ;
396
399
}
397
400
}
398
- } ;
401
+ }
399
402
400
- var consumeANumber = function ( ) {
403
+ function consumeANumber ( ) {
401
404
let isInteger = true ;
402
405
let sign ;
403
406
let numberPart = "" ;
@@ -443,9 +446,9 @@ function tokenize(str) {
443
446
// if(exponentPart) value = value * Math.pow(10, +exponentPart);
444
447
445
448
return { value, isInteger, sign} ;
446
- } ;
449
+ }
447
450
448
- var consumeTheRemnantsOfABadURL = function ( ) {
451
+ function consumeTheRemnantsOfABadURL ( ) {
449
452
while ( consume ( ) ) {
450
453
if ( code == 0x29 || eof ( ) ) {
451
454
return ;
@@ -456,22 +459,30 @@ function tokenize(str) {
456
459
donothing ( ) ;
457
460
}
458
461
}
459
- } ;
462
+ }
460
463
461
464
465
+ function tokenize ( input ) {
466
+ str = preprocess ( input ) ;
467
+ i = - 1 ;
468
+ tokens = [ ] ;
469
+ code ;
462
470
463
- var iterationCount = 0 ;
464
- while ( true ) {
465
- var token = consumeAToken ( ) ;
466
- tokens . push ( token ) ;
467
- if ( token instanceof EOFToken ) {
468
- break ;
471
+ var iterationCount = 0 ;
472
+ while ( true ) {
473
+ var token = consumeAToken ( ) ;
474
+ tokens . push ( token ) ;
475
+ if ( token instanceof EOFToken ) {
476
+ break ;
477
+ }
478
+ iterationCount ++ ;
479
+ if ( iterationCount > str . length * 2 ) throw new Error ( "I'm infinite-looping!" ) ;
469
480
}
470
- iterationCount ++ ;
471
- if ( iterationCount > str . length * 2 ) throw new Error ( "I'm infinite-looping!" ) ;
481
+ return tokens ;
472
482
}
473
- return tokens ;
474
- }
483
+
484
+ return tokenize ;
485
+ } ) ( ) ;
475
486
476
487
class CSSParserToken {
477
488
constructor ( type ) {
0 commit comments