npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

css-syntax-parser

v1.5.1

Published

A simple parser for MDN's "CSS value definition syntax"

Downloads

43

Readme

Css Syntax Parser

A simple parser for MDN's "CSS value definition syntax".

let resolveSyntax = require('css-syntax-parser');

const syntax = resolveSyntax('[ <length> | <percentage> | auto ]{1,4}');

syntax.print();
// [
// .  COMPOSED
// .  -combinator: |
// .  .  DATA TYPE
// .  .  -name: length
// .  .  -non-terminal: false
// .  .
// .  .  DATA TYPE
// .  .  -name: percentage
// .  .  -non-terminal: false
// .  .
// .  .  KEYWORD
// .  .  -value: auto
// .  .
// ]
// -multiplier: {range}
// -range: { min: 1, max: 4 }

console.log(syntax.type); // brackets
console.log(syntax.multiplier); // {range}
console.log(syntax.range.min); // 1 
console.log(syntax.range.max); // 4

let content = syntax.content;
console.log(content.type); // composed 
console.log(content.combinator); // |

let child1 = content.children[1]; 
console.log(child1.type); // data-type
console.log(child1.name); // percentage
console.log(child1.nonTerminal); // false

in Typescript:

import {
    resolveSyntax,
    BracketsTerm,
    ComposedTerm,
    DataTypeTerm,
    Term,
    TermMultiplier,
    TermType
} from 'css-syntax-parser';

const syntax: Term = resolveSyntax('[ <length> | <percentage> | auto ]{1,4}');

console.log(syntax.type); // brackets

if (syntax.type === TermType.BRACKETS) {

    const brackets: BracketsTerm = <BracketsTerm>syntax;

    if (brackets.multiplier === TermMultiplier.RANGE) {

        console.log(brackets.multiplier); // range
        console.log(brackets.range.min); // 1
        console.log(brackets.range.max); // 4
    }

    if (brackets.content.type === TermType.COMPOSED) {

        const content: ComposedTerm = <ComposedTerm>brackets.content;
        console.log(content.type); // composed
        console.log(content.combinator); // exactly one

        if (content.children[1].type === TermType.DATA_TYPE) {

            const child1: DataTypeTerm = <DataTypeTerm>content.children[1];
            console.log(child1.type); // data-type
            console.log(child1.name); // percentage
            console.log(child1.nonTerminal); // false
        }
    }
}

Methods

| Method | | --- | | resolveSyntax(syntax, recursive?) | | resolveSyntaxByName(propertyName, recursive?) |

Terms

| Type | Samples | | --- | --- | | literal | /, , | | keyword | black, top, none | | method | calc( <calc-sum> ), repeat( <length-percentage> ) | | data-type | <calc-sum>, <'border-width'> | | composed | <attr-name> <type-or-unit>, <'border-style'> && <'color'> | | bracket | [ <string-token> && <ident-token> ] |

Combinators

| Type | Samples |
| --- | --- |
| mandatory exact order | value1 value2 |
| mandatory any order | value1 && value2 |
| at least one | value1 || value2 |
| exactly one | value1 | value2 |

Multipliers

| Type | Samples |
| --- | --- |
| zero or more | * |
| one or more | + |
| optional | ? |
| range | {1,4} | | array | # | | required | ! |

Recursive resolve

let { resolveSyntaxByName } = require('css-syntax-parser');

const syntax = resolveSyntaxByName('grid', true);

syntax.print();

// COMPOSED
// -combinator: |
// .  [
// .  .  COMPOSED
// .  .  -combinator: |
// .  .  .  KEYWORD
// .  .  .  -value: none
// .  .  .  
// .  .  .  [
// .  .  .  .  COMPOSED
// .  .  .  .  -combinator:  
// .  .  .  .  .  [
// .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  -combinator: |
// .  .  .  .  .  .  .  KEYWORD
// .  .  .  .  .  .  .  -value: none
// .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  [
// .  .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  .  -combinator:  
// .  .  .  .  .  .  .  .  .  [
// .  .  .  .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  .  .  .  -combinator:  
// .  .  .  .  .  .  .  .  .  .  .  [
// .  .  .  .  .  .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  .  .  .  .  .  -combinator:  
// .  .  .  .  .  .  .  .  .  .  .  .  .  STRING
// .  .  .  .  .  .  .  .  .  .  .  .  .  -value: [
// .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  .  -name: custom-ident
// .  .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  .  -multiplier: *
// .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  STRING
// .  .  .  .  .  .  .  .  .  .  .  .  .  -value: ]
// .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  ]
// .  .  .  .  .  .  .  .  .  .  .  -multiplier: ?
// .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  [
// .  .  .  .  .  .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  .  .  .  .  .  -combinator: |
// .  .  .  .  .  .  .  .  .  .  .  .  .  [
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  -combinator: |
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  [
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -combinator: |
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  [
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -combinator: |
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name: length
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name: percentage
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  ]
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name: flex
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  KEYWORD
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -value: min-content
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  KEYWORD
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -value: max-content
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  KEYWORD
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -value: auto
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  ]
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  METHOD
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name minmax
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  (
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -combinator:  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  [
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -combinator: |
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name: length
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name: percentage
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  KEYWORD
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -value: min-content
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  KEYWORD
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -value: max-content
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  KEYWORD
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -value: auto
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  ]
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  LITERAL
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -value: ,
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name: track-breadth
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  )
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  METHOD
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name fit-content
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  (
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  [
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -combinator: |
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name: length
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name: percentage
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  ]
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  )
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  ]
// .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  [
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  METHOD
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name repeat
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  (
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -combinator:  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  [
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name: positive-integer
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  ]
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  LITERAL
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -value: ,
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  [
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -combinator:  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name: line-names
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -multiplier: ?
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name: track-size
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  ]
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -multiplier: +
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name: line-names
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -multiplier: ?
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  )
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  ]
// .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  ]
// .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  ]
// .  .  .  .  .  .  .  .  .  -multiplier: +
// .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  -name: line-names
// .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  -multiplier: ?
// .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  ]
// .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  [
// .  .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  .  -combinator:  
// .  .  .  .  .  .  .  .  .  [
// .  .  .  .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  .  .  .  -combinator:  
// .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  -name: line-names
// .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  -multiplier: ?
// .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  [
// .  .  .  .  .  .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  .  .  .  .  .  -combinator: |
// .  .  .  .  .  .  .  .  .  .  .  .  .  [
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  -combinator: |
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  [
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name: length-percentage
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  ]
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  METHOD
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name minmax
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  (
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -combinator:  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name: fixed-breadth
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  LITERAL
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -value: ,
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name: track-breadth
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  )
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  METHOD
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name minmax
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  (
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -combinator:  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name: inflexible-breadth
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  LITERAL
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -value: ,
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name: fixed-breadth
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  )
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  ]
// .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  [
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  METHOD
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name repeat
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  (
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -combinator:  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  [
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name: positive-integer
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  ]
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  LITERAL
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -value: ,
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  [
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -combinator:  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name: line-names
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -multiplier: ?
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name: fixed-size
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  ]
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -multiplier: +
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name: line-names
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  -multiplier: ?
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  )
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  ]
// .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  ]
// .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  ]
// .  .  .  .  .  .  .  .  .  -multiplier: *
// .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  -name: line-names
// .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  -multiplier: ?
// .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  [
// .  .  .  .  .  .  .  .  .  .  METHOD
// .  .  .  .  .  .  .  .  .  .  -name repeat
// .  .  .  .  .  .  .  .  .  .  (
// .  .  .  .  .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  .  .  .  .  -combinator:  
// .  .  .  .  .  .  .  .  .  .  .  .  [
// .  .  .  .  .  .  .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  .  .  .  .  .  .  -combinator: |
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  KEYWORD
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  -value: auto-fill
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  KEYWORD
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  -value: auto-fit
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  ]
// .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  LITERAL
// .  .  .  .  .  .  .  .  .  .  .  .  -value: ,
// .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  [
// .  .  .  .  .  .  .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  .  .  .  .  .  .  -combinator:  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name: line-names
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  -multiplier: ?
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  -name: fixed-size
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  ]
// .  .  .  .  .  .  .  .  .  .  .  .  -multiplier: +
// .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  -name: line-names
// .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  -multiplier: ?
// .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  )
// .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  ]
// .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  [
// .  .  .  .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  .  .  .  -combinator:  
// .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  -name: line-names
// .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  -multiplier: ?
// .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  [
// .  .  .  .  .  .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  .  .  .  .  .  -combinator: |
// .  .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  .  -name: fixed-size
// .  .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  .  .  .  -name: fixed-repeat
// .  .  .  .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  .  ]
// .  .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  ]
// .  .  .  .  .  .  .  .  .  -multiplier: *
// .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  -name: line-names
// .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  -multiplier: ?
// .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  ]
// .  .  .  .  .  .  .  
// .  .  .  .  .  ]
// .  .  .  .  .  
// .  .  .  .  .  LITERAL
// .  .  .  .  .  -value: /
// .  .  .  .  .  
// .  .  .  .  .  [
// .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  -combinator: |
// .  .  .  .  .  .  .  KEYWORD
// .  .  .  .  .  .  .  -value: none
// .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  -name: track-list
// .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  -name: auto-track-list
// .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  
// .  .  .  .  .  ]
// .  .  .  .  .  
// .  .  .  ]
// .  .  .  
// .  .  .  COMPOSED
// .  .  .  -combinator:  
// .  .  .  .  [
// .  .  .  .  .  COMPOSED
// .  .  .  .  .  -combinator:  
// .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  -name: line-names
// .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  -multiplier: ?
// .  .  .  .  .  .  
// .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  -name: string
// .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  
// .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  -name: track-size
// .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  -multiplier: ?
// .  .  .  .  .  .  
// .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  -name: line-names
// .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  -multiplier: ?
// .  .  .  .  .  .  
// .  .  .  .  ]
// .  .  .  .  -multiplier: +
// .  .  .  .  
// .  .  .  .  [
// .  .  .  .  .  COMPOSED
// .  .  .  .  .  -combinator:  
// .  .  .  .  .  .  LITERAL
// .  .  .  .  .  .  -value: /
// .  .  .  .  .  .  
// .  .  .  .  .  .  [
// .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  -combinator:  
// .  .  .  .  .  .  .  .  [
// .  .  .  .  .  .  .  .  .  COMPOSED
// .  .  .  .  .  .  .  .  .  -combinator:  
// .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  -name: line-names
// .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  -multiplier: ?
// .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  .  .  -name: track-size
// .  .  .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  ]
// .  .  .  .  .  .  .  .  -multiplier: +
// .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  .  .  DATA TYPE
// .  .  .  .  .  .  .  .  -name: line-names
// .  .  .  .  .  .  .  .  -non-terminal: false
// .  .  .  .  .  .  .  .  -multiplier: ?
// .  .  .  .  .  .  .  .  
// .  .  .  .  .  .  ]
// .  .  .  .  .  .  
// .  .  .  .  ]
// .  .  .  .  -multiplier: ?
// .  .  .  .  
// .  ]
// .  
// .  COMPOSED
// .  -combinator:  
// .  .  DATA TYPE
// .  .  -name: grid-template-rows
// .  .  -non-terminal: true
// .  .  
// .  .  LITERAL
// .  .  -value: /
// .  .  
// .  .  [
// .  .  .  COMPOSED
// .  .  .  -combinator: &&
// .  .  .  .  KEYWORD
// .  .  .  .  -value: auto-flow
// .  .  .  .  
// .  .  .  .  KEYWORD
// .  .  .  .  -value: dense
// .  .  .  .  -multiplier: ?
// .  .  .  .  
// .  .  ]
// .  .  
// .  .  [
// .  .  .  DATA TYPE
// .  .  .  -name: track-size
// .  .  .  -non-terminal: false
// .  .  .  -multiplier: +
// .  .  .  
// .  .  ]
// .  .  -multiplier: ?
// .  .  
// .  COMPOSED
// .  -combinator:  
// .  .  [
// .  .  .  COMPOSED
// .  .  .  -combinator: &&
// .  .  .  .  KEYWORD
// .  .  .  .  -value: auto-flow
// .  .  .  .  
// .  .  .  .  KEYWORD
// .  .  .  .  -value: dense
// .  .  .  .  -multiplier: ?
// .  .  .  .  
// .  .  ]
// .  .  
// .  .  [
// .  .  .  DATA TYPE
// .  .  .  -name: track-size
// .  .  .  -non-terminal: false
// .  .  .  -multiplier: +
// .  .  .  
// .  .  ]
// .  .  -multiplier: ?
// .  .  
// .  .  LITERAL
// .  .  -value: /
// .  .  
// .  .  DATA TYPE
// .  .  -name: grid-template-columns
// .  .  -non-terminal: true
// .  .