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.6 kB · 67 lines
at commit da69385e
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768'use strict';
const types = require('../../tokenizer/types.cjs');
const name = 'FeatureFunction';const structure = { kind: String, feature: String, value: ['Declaration', 'Selector']};
function getFeatureParser(kind, name) { const featuresOfKind = this.features[kind] || {}; const parser = featuresOfKind[name];
if (typeof parser !== 'function') { this.error(`Unknown feature ${name}()`); }
return parser;}
function parse(kind = 'unknown') { const start = this.tokenStart; const functionName = this.consumeFunctionName(); const valueParser = getFeatureParser.call(this, kind, functionName.toLowerCase());
this.skipSC();
const value = this.parseWithFallback( () => { const startValueToken = this.tokenIndex; const value = valueParser.call(this);
if (this.eof === false && this.isBalanceEdge(startValueToken) === false) { this.error(); }
return value; }, () => this.Raw(null, false) );
if (!this.eof) { this.eat(types.RightParenthesis); }
return { type: 'FeatureFunction', loc: this.getLocation(start, this.tokenStart), kind, feature: functionName, value };}
function generate(node) { this.token(types.Function, node.feature + '('); this.node(node.value); this.token(types.RightParenthesis, ')');}
exports.generate = generate;exports.name = name;exports.parse = parse;exports.structure = structure;