Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/flo-bit/shapecraft. flo-bit.dev/shapecraft
Something went wrong. Try again.
1.5 kB · 66 lines
JavaScript
at commit da69385e
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667import { Ident, LeftParenthesis, RightParenthesis} from '../../tokenizer/index.js';
export const name = 'Scope';export const structure = { root: ['SelectorList', 'Raw', null], limit: ['SelectorList', 'Raw', null]};
export function parse() { let root = null; let limit = null;
this.skipSC();
const startOffset = this.tokenStart; if (this.tokenType === LeftParenthesis) { this.next(); this.skipSC(); root = this.parseWithFallback( this.SelectorList, () => this.Raw(false, true) ); this.skipSC(); this.eat(RightParenthesis); }
if (this.lookupNonWSType(0) === Ident) { this.skipSC(); this.eatIdent('to'); this.skipSC(); this.eat(LeftParenthesis); this.skipSC(); limit = this.parseWithFallback( this.SelectorList, () => this.Raw(false, true) ); this.skipSC(); this.eat(RightParenthesis); }
return { type: 'Scope', loc: this.getLocation(startOffset, this.tokenStart), root, limit };}
export function generate(node) { if (node.root) { this.token(LeftParenthesis, '('); this.node(node.root); this.token(RightParenthesis, ')'); }
if (node.limit) { this.token(Ident, 'to'); this.token(LeftParenthesis, '('); this.node(node.limit); this.token(RightParenthesis, ')'); }}