11import dbg from "../../debug/debug.js" ;
2- import { Token } from "../../ast/mod.ts" ;
2+ import type { Token } from "../../ast/mod.ts" ;
33
4- let debug = dbg ( "lex" ) ;
4+ const debug = dbg ( "lex" ) ;
55
66/**
77 * Convert a CSS string into an array of lexical tokens.
@@ -10,21 +10,21 @@ let debug = dbg("lex");
1010 * @returns {Array } lexical tokens
1111 */
1212export function lex ( css : string ) : Token [ ] {
13- var start = 0 ; // Debug timer start.
14-
15- var buffer = "" ; // Character accumulator
16- var ch ; // Current character
17- var column = 0 ; // Current source column number
18- var cursor = - 1 ; // Current source cursor position
19- var depth = 0 ; // Current nesting depth
20- var line = 1 ; // Current source line number
21- var state = "before-selector" ; // Current state
22- var stack = [ state ] ; // State stack
23- var token : Token = { } ; // Current token
24- var tokens : Token [ ] = [ ] ; // Token accumulator
13+ let start = 0 ; // Debug timer start.
14+
15+ let buffer = "" ; // Character accumulator
16+ let ch : string ; // Current character
17+ let column = 0 ; // Current source column number
18+ let cursor = - 1 ; // Current source cursor position
19+ let depth = 0 ; // Current nesting depth
20+ let line = 1 ; // Current source line number
21+ let state = "before-selector" ; // Current state
22+ const stack = [ state ] ; // State stack
23+ let token : Token = { } ; // Current token
24+ const tokens : Token [ ] = [ ] ; // Token accumulator
2525
2626 // Supported @-rules, in roughly descending order of usage probability.
27- var atRules : any = [
27+ const atRules : any = [
2828 "media" ,
2929 "keyframes" ,
3030 { name : "-webkit-keyframes" , type : "keyframes" , prefix : "-webkit-" } ,
@@ -49,7 +49,7 @@ export function lex(css: string): Token[] {
4949 *
5050 * @returns {String } The next character.
5151 */
52- function getCh ( ) {
52+ function getCh ( ) : string {
5353 skip ( ) ;
5454 return css [ cursor ] ;
5555 }
@@ -73,8 +73,8 @@ export function lex(css: string): Token[] {
7373 * @returns {Boolean } Whether the string was found.
7474 */
7575 function isNextString ( str : string ) : boolean {
76- var start = cursor + 1 ;
77- return ( str === css . slice ( start , start + str . length ) ) ;
76+ let start = cursor + 1 ;
77+ return str === css . slice ( start , start + str . length ) ;
7878 }
7979
8080 /**
@@ -85,7 +85,7 @@ export function lex(css: string): Token[] {
8585 * @returns {Number|false } The position, or `false` if not found.
8686 */
8787 function find ( str : string ) : number | boolean {
88- var pos = css . slice ( cursor ) . indexOf ( str ) ;
88+ let pos = css . slice ( cursor ) . indexOf ( str ) ;
8989
9090 return pos > 0 ? pos : false ;
9191 }
@@ -117,7 +117,7 @@ export function lex(css: string): Token[] {
117117 * @returns {String } The removed state.
118118 */
119119 function popState ( ) : string | undefined {
120- var removed = stack . pop ( ) ;
120+ let removed = stack . pop ( ) ;
121121 state = stack [ stack . length - 1 ] ;
122122
123123 return removed ;
@@ -143,7 +143,7 @@ export function lex(css: string): Token[] {
143143 * @returns {String } The replaced state.
144144 */
145145 function replaceState ( newState : string ) : string {
146- var previousState = state ;
146+ let previousState = state ;
147147 stack [ stack . length - 1 ] = state = newState ;
148148
149149 return previousState ;
@@ -165,7 +165,7 @@ export function lex(css: string): Token[] {
165165 }
166166 cursor ++ ;
167167 } else {
168- var skipStr = css . slice ( cursor , cursor + ( n || 0 ) ) . split ( "\n" ) ;
168+ let skipStr = css . slice ( cursor , cursor + ( n || 0 ) ) . split ( "\n" ) ;
169169 if ( skipStr . length > 1 ) {
170170 line += skipStr . length - 1 ;
171171 column = 1 ;
@@ -221,7 +221,7 @@ export function lex(css: string): Token[] {
221221
222222 start = Date . now ( ) ;
223223
224- while ( ch = getCh ( ) ) {
224+ while ( ( ch = getCh ( ) ) ) {
225225 debug ( ch , getState ( ) ) ;
226226
227227 // column += 1;
@@ -311,7 +311,7 @@ export function lex(css: string): Token[] {
311311 // Tokenize a declaration
312312 // if value is empty skip the declaration
313313 if ( buffer . trim ( ) . length > 0 ) {
314- token . value = buffer . trim ( ) , addToken ( ) ;
314+ ( token . value = buffer . trim ( ) ) , addToken ( ) ;
315315 }
316316 replaceState ( "before-name" ) ;
317317 break ;
@@ -524,7 +524,7 @@ export function lex(css: string): Token[] {
524524 if ( isNextChar ( "*" ) ) {
525525 // Ignore comments in selectors, properties and values. They are
526526 // difficult to represent in the AST.
527- var pos = find ( "*/" ) ;
527+ let pos = find ( "*/" ) ;
528528
529529 if ( pos && typeof pos !== "boolean" ) {
530530 skip ( pos + 1 ) ;
@@ -596,11 +596,11 @@ export function lex(css: string): Token[] {
596596
597597 default :
598598 // Iterate over the supported @-rules and attempt to tokenize one.
599- var tokenized = false ;
600- var name ;
601- var rule ;
599+ let tokenized = false ;
600+ let name ;
601+ let rule ;
602602
603- for ( var j = 0 , len = atRules . length ; ! tokenized && j < len ; ++ j ) {
603+ for ( let j = 0 , len = atRules . length ; ! tokenized && j < len ; ++ j ) {
604604 rule = atRules [ j ] ;
605605 name = rule . name || rule ;
606606
@@ -683,7 +683,7 @@ export function lex(css: string): Token[] {
683683 }
684684 }
685685
686- debug ( "ran in" , ( Date . now ( ) - start ) + "ms" ) ;
686+ debug ( "ran in" , Date . now ( ) - start + "ms" ) ;
687687
688688 return tokens ;
689689}
0 commit comments