Spaces:
Configuration error
Configuration error
import { | |
WhiteSpace, | |
Comment, | |
AtKeyword, | |
CDO, | |
CDC | |
} from '../../tokenizer/index.js'; | |
const EXCLAMATIONMARK = 0x0021; // U+0021 EXCLAMATION MARK (!) | |
function consumeRaw(startToken) { | |
return this.Raw(startToken, null, false); | |
} | |
export const name = 'StyleSheet'; | |
export const walkContext = 'stylesheet'; | |
export const structure = { | |
children: [[ | |
'Comment', | |
'CDO', | |
'CDC', | |
'Atrule', | |
'Rule', | |
'Raw' | |
]] | |
}; | |
export function parse() { | |
const start = this.tokenStart; | |
const children = this.createList(); | |
let child; | |
scan: | |
while (!this.eof) { | |
switch (this.tokenType) { | |
case WhiteSpace: | |
this.next(); | |
continue; | |
case Comment: | |
// ignore comments except exclamation comments (i.e. /*! .. */) on top level | |
if (this.charCodeAt(this.tokenStart + 2) !== EXCLAMATIONMARK) { | |
this.next(); | |
continue; | |
} | |
child = this.Comment(); | |
break; | |
case CDO: // <!-- | |
child = this.CDO(); | |
break; | |
case CDC: // --> | |
child = this.CDC(); | |
break; | |
// CSS Syntax Module Level 3 | |
// Β§2.2 Error handling | |
// At the "top level" of a stylesheet, an <at-keyword-token> starts an at-rule. | |
case AtKeyword: | |
child = this.parseWithFallback(this.Atrule, consumeRaw); | |
break; | |
// Anything else starts a qualified rule ... | |
default: | |
child = this.parseWithFallback(this.Rule, consumeRaw); | |
} | |
children.push(child); | |
} | |
return { | |
type: 'StyleSheet', | |
loc: this.getLocation(start, this.tokenStart), | |
children | |
}; | |
} | |
export function generate(node) { | |
this.children(node); | |
} | |