Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/flo-bit/shapecraft. flo-bit.dev/shapecraft
Something went wrong. Try again.
2.0 kB · 68 lines
JavaScript
at commit da69385e
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869import { Delim, Number as NumberToken, Function as FunctionToken} from '../../tokenizer/index.js';
const SOLIDUS = 0x002F; // U+002F SOLIDUS (/)
// Media Queries Level 3 defines terms of <ratio> as a positive (not zero or negative)// integers (see https://drafts.csswg.org/mediaqueries-3/#values)// However, Media Queries Level 4 removes any definition of values// (see https://drafts.csswg.org/mediaqueries-4/#values) and refers to// CSS Values and Units for detail. In CSS Values and Units Level 4 a <ratio>// definition was added (see https://drafts.csswg.org/css-values-4/#ratios) which// defines ratio as "<number [0,∞]> [ / <number [0,∞]> ]?" and based on it// any constrains on terms were removed. Parser also doesn't test numbers// in any way to make possible for linting and fixing them by the tools using CSSTree.// An additional syntax examination may be applied by a lexer.function consumeTerm() { this.skipSC();
switch (this.tokenType) { case NumberToken: return this.Number();
case FunctionToken: return this.Function(this.readSequence, this.scope.Value);
default: this.error('Number of function is expected'); }}
export const name = 'Ratio';export const structure = { left: ['Number', 'Function'], right: ['Number', 'Function', null]};
// <number [0,∞]> [ / <number [0,∞]> ]?export function parse() { const start = this.tokenStart; const left = consumeTerm.call(this); let right = null;
this.skipSC(); if (this.isDelim(SOLIDUS)) { this.eatDelim(SOLIDUS); right = consumeTerm.call(this); }
return { type: 'Ratio', loc: this.getLocation(start, this.tokenStart), left, right };}
export function generate(node) { this.node(node.left); this.token(Delim, '/'); if (node.right) { this.node(node.right); } else { this.node(NumberToken, 1); }}