@jesscss/css-parser 1.0.6-alpha.0 → 2.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/lib/advancedActionsParser.d.ts +60 -0
  2. package/lib/advancedActionsParser.js +203 -0
  3. package/lib/advancedActionsParser.js.map +1 -0
  4. package/lib/cssActionsParser.d.ts +155 -0
  5. package/lib/cssActionsParser.js +376 -0
  6. package/lib/cssActionsParser.js.map +1 -0
  7. package/lib/cssErrorMessageProvider.d.ts +14 -0
  8. package/lib/cssErrorMessageProvider.js +40 -0
  9. package/lib/cssErrorMessageProvider.js.map +1 -0
  10. package/lib/cssParser.d.ts +36 -103
  11. package/lib/cssParser.js +75 -58
  12. package/lib/cssParser.js.map +1 -0
  13. package/lib/cssTokens.d.ts +539 -5
  14. package/lib/cssTokens.js +488 -232
  15. package/lib/cssTokens.js.map +1 -0
  16. package/lib/index.d.ts +8 -16
  17. package/lib/index.js +9 -41
  18. package/lib/index.js.map +1 -0
  19. package/lib/productions.d.ts +273 -0
  20. package/lib/productions.js +3499 -0
  21. package/lib/productions.js.map +1 -0
  22. package/lib/test/ast-serialize.test.d.ts +1 -0
  23. package/lib/test/ast-serialize.test.js +157 -0
  24. package/lib/test/ast-serialize.test.js.map +1 -0
  25. package/lib/test/container.test.d.ts +1 -0
  26. package/lib/test/container.test.js +369 -0
  27. package/lib/test/container.test.js.map +1 -0
  28. package/lib/test/css-files.test.d.ts +1 -0
  29. package/lib/test/css-files.test.js +21 -0
  30. package/lib/test/css-files.test.js.map +1 -0
  31. package/lib/test/less-output.test.d.ts +1 -0
  32. package/lib/test/less-output.test.js +52 -0
  33. package/lib/test/less-output.test.js.map +1 -0
  34. package/lib/util/cst.d.ts +7 -2
  35. package/lib/util/cst.js +5 -9
  36. package/lib/util/cst.js.map +1 -0
  37. package/lib/util/index.d.ts +19 -13
  38. package/lib/util/index.js +98 -87
  39. package/lib/util/index.js.map +1 -0
  40. package/package.json +43 -20
  41. package/lib/productions/atRules.d.ts +0 -2
  42. package/lib/productions/atRules.js +0 -196
  43. package/lib/productions/blocks.d.ts +0 -2
  44. package/lib/productions/blocks.js +0 -181
  45. package/lib/productions/declarations.d.ts +0 -14
  46. package/lib/productions/declarations.js +0 -59
  47. package/lib/productions/root.d.ts +0 -2
  48. package/lib/productions/root.js +0 -49
  49. package/lib/productions/selectors.d.ts +0 -2
  50. package/lib/productions/selectors.js +0 -223
  51. package/lib/productions/values.d.ts +0 -2
  52. package/lib/productions/values.js +0 -114
package/lib/util/index.js CHANGED
@@ -1,108 +1,119 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
22
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
23
- };
24
- var __rest = (this && this.__rest) || function (s, e) {
25
- var t = {};
26
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
27
- t[p] = s[p];
28
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
29
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
30
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
31
- t[p[i]] = s[p[i]];
32
- }
33
- return t;
34
- };
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.createTokens = exports.LexerType = void 0;
37
- const chevrotain_1 = require("chevrotain");
1
+ import { Lexer, createToken } from 'chevrotain';
38
2
  // TODO: get rid of xRegExp dep
39
- const XRegExp = __importStar(require("xregexp"));
40
- __exportStar(require("./cst"), exports);
41
- var LexerType;
3
+ import XRegExp from 'xregexp';
4
+ export var LexerType;
42
5
  (function (LexerType) {
43
6
  LexerType[LexerType["NA"] = 0] = "NA";
44
7
  LexerType[LexerType["SKIPPED"] = 1] = "SKIPPED";
45
- })(LexerType = exports.LexerType || (exports.LexerType = {}));
8
+ })(LexerType || (LexerType = {}));
9
+ export function buildFragments(rawFragments) {
10
+ const fragments = {};
11
+ for (const fragment of rawFragments) {
12
+ fragments[fragment[0]] = XRegExp.build(fragment[1], fragments);
13
+ }
14
+ ;
15
+ return fragments;
16
+ }
17
+ ;
46
18
  /**
47
19
  * Builds proper tokens from a raw token definition.
48
20
  * This allows us to extend / modify tokens before creating them
49
21
  */
50
- const createTokens = (rawFragments, rawTokens) => {
51
- const fragments = {};
22
+ export function createLexerDefinition(rawFragments,
23
+ // eslint-disable-next-line @typescript-eslint/naming-convention
24
+ _rawTokens) {
25
+ const rawTokens = _rawTokens;
26
+ /**
27
+ * @todo - consider alternative approaches to eliminate XRegExp dependency
28
+ */
29
+ const fragments = buildFragments(rawFragments);
52
30
  const T = {};
53
- const tokens = [];
31
+ const lexer = {
32
+ modes: {
33
+ Default: []
34
+ },
35
+ defaultMode: 'Default'
36
+ };
54
37
  /** Build fragment replacements */
55
- rawFragments.forEach(fragment => {
56
- fragments[fragment[0]] = XRegExp.build(fragment[1], fragments);
57
- });
58
- rawTokens.forEach((rawToken) => {
59
- let { name, pattern, longer_alt, categories, group } = rawToken, rest = __rest(rawToken, ["name", "pattern", "longer_alt", "categories", "group"]);
60
- let regExpPattern;
61
- if (pattern !== LexerType.NA) {
62
- const category = !categories || categories[0];
63
- if (!category || (group !== LexerType.SKIPPED && category !== 'BlockMarker')) {
64
- if (categories) {
65
- categories.push('Value');
38
+ const entries = Object.entries(rawTokens.modes);
39
+ entries.forEach(([mode, modeTokens]) => {
40
+ modeTokens.forEach((rawToken) => {
41
+ const addToken = (token) => {
42
+ if (lexer.modes[mode] === undefined) {
43
+ lexer.modes[mode] = [token];
66
44
  }
67
45
  else {
68
- categories = ['Value'];
46
+ /** Build tokens from bottom to top */
47
+ lexer.modes[mode].unshift(token);
69
48
  }
70
- if (category !== 'Ident') {
71
- categories.push('NonIdent');
72
- }
73
- }
74
- if (pattern instanceof RegExp) {
75
- regExpPattern = pattern;
49
+ };
50
+ if (typeof rawToken === 'string') {
51
+ const token = lexer.modes.Default.find(token => token.name === rawToken);
52
+ addToken(token);
53
+ return;
76
54
  }
77
- else if (Array.isArray(pattern)) {
78
- regExpPattern = pattern[1].bind(XRegExp.build(pattern[0], fragments, 'y'));
55
+ let { name, pattern, longer_alt, categories, group, ...rest } = rawToken;
56
+ let regExpPattern;
57
+ if (pattern !== LexerType.NA) {
58
+ const isUnknownToken = name === 'Unknown';
59
+ if (!isUnknownToken && (!categories || (group !== LexerType.SKIPPED && !categories.includes('BlockMarker')))) {
60
+ if (!categories) {
61
+ categories = [];
62
+ }
63
+ else {
64
+ /** Any non-blockmarker that's not an Identifier */
65
+ if (!categories.includes('Ident')) {
66
+ categories.push('NonIdent');
67
+ }
68
+ }
69
+ categories.push('Value');
70
+ }
71
+ if (pattern instanceof RegExp) {
72
+ regExpPattern = pattern;
73
+ }
74
+ else if (Array.isArray(pattern)) {
75
+ regExpPattern = pattern[1].bind(XRegExp.build(pattern[0], fragments, 'yi'));
76
+ }
77
+ else {
78
+ regExpPattern = XRegExp.build(pattern, fragments, 'i');
79
+ }
79
80
  }
80
81
  else {
81
- regExpPattern = XRegExp.build(pattern, fragments);
82
- }
83
- }
84
- else {
85
- regExpPattern = chevrotain_1.Lexer.NA;
86
- }
87
- const longerAlt = longer_alt ? { longer_alt: T[longer_alt] } : {};
88
- const groupValue = group === LexerType.SKIPPED
89
- ? { group: chevrotain_1.Lexer.SKIPPED }
90
- : group ? { group: group } : {};
91
- const tokenCategories = categories
92
- ? {
93
- categories: categories.map(category => {
94
- return T[category];
95
- })
82
+ regExpPattern = Lexer.NA;
96
83
  }
97
- : {};
98
- const token = chevrotain_1.createToken(Object.assign(Object.assign(Object.assign(Object.assign({ name, pattern: regExpPattern }, longerAlt), groupValue), tokenCategories), rest));
99
- T[name] = token;
100
- /** Build tokens from bottom to top */
101
- tokens.unshift(token);
84
+ const longerAlt = longer_alt
85
+ ? {
86
+ longer_alt: Array.isArray(longer_alt)
87
+ ? longer_alt.map(val => T[val])
88
+ : T[longer_alt]
89
+ }
90
+ : {};
91
+ const groupValue = group === LexerType.SKIPPED
92
+ ? { group: Lexer.SKIPPED }
93
+ : group ? { group } : {};
94
+ const tokenCategories = categories
95
+ ? {
96
+ categories: categories.map((category) => {
97
+ return T[category];
98
+ })
99
+ }
100
+ : {};
101
+ const token = createToken({
102
+ name,
103
+ pattern: regExpPattern,
104
+ ...longerAlt,
105
+ ...groupValue,
106
+ ...tokenCategories,
107
+ ...rest
108
+ });
109
+ T[name] = token;
110
+ addToken(token);
111
+ });
102
112
  });
103
113
  return {
104
- tokens,
114
+ lexer,
105
115
  T
106
116
  };
107
- };
108
- exports.createTokens = createTokens;
117
+ }
118
+ ;
119
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -3,31 +3,54 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "1.0.6-alpha.0",
6
+ "version": "2.0.0-alpha.1",
7
7
  "description": "Jess CSS base parser",
8
- "main": "lib/index",
9
- "types": "lib/index",
8
+ "main": "lib/index.js",
9
+ "types": "lib/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "import": "./lib/index.js",
13
+ "types": "./lib/index.d.ts",
14
+ "source": "./src/index.ts"
15
+ },
16
+ "./*": {
17
+ "types": "./lib/*.d.ts",
18
+ "import": "./lib/*.js",
19
+ "source": "./src/*.ts"
20
+ },
21
+ "./package.json": "./package.json"
22
+ },
10
23
  "files": [
11
24
  "lib"
12
25
  ],
13
- "scripts": {
14
- "ci": "yarn build && yarn test",
15
- "prepublishOnly": "yarn build",
16
- "build": "yarn clean && yarn compile",
17
- "clean": "shx rm -rf ./lib tsconfig.tsbuildinfo",
18
- "compile": "tsc -b tsconfig.json",
19
- "dev": "tsc -b tsconfig.json -w",
20
- "test": "ts-mocha test/**/*.ts"
21
- },
22
- "author": "Matthew Dean",
23
- "license": "MIT",
24
26
  "dependencies": {
25
- "chevrotain": "^7.1.0",
26
- "xregexp": "^4.2.4"
27
+ "chevrotain": "^11.0.3",
28
+ "chevrotain-allstar": "~0.3.0",
29
+ "color-name": "~2.0.0",
30
+ "lodash-es": "~4.17.21",
31
+ "xregexp": "^5.1.1",
32
+ "@jesscss/core": "2.0.0-alpha.1"
27
33
  },
28
34
  "devDependencies": {
29
- "@less/test-data": "^4.1.0",
30
- "@types/xregexp": "^4.3.0"
35
+ "@types/color-name": "^1.1.1",
36
+ "@types/lodash-es": "~4.17.8",
37
+ "@types/xregexp": "^4.4.0",
38
+ "@jesscss/shared": "2.0.0-alpha.1"
31
39
  },
32
- "gitHead": "d83388cdd49e077b99590ac80def901b660037df"
33
- }
40
+ "author": "Matthew Dean <matthew-dean@users.noreply.github.com>",
41
+ "license": "MIT",
42
+ "bugs": {
43
+ "url": "https://github.com/jesscss/jess/issues"
44
+ },
45
+ "homepage": "https://github.com/jesscss/jess#readme",
46
+ "scripts": {
47
+ "ci": "pnpm build && pnpm test",
48
+ "build": "pnpm compile",
49
+ "compile": "tsc -p tsconfig.build.json",
50
+ "dev": "tsc -p tsconfig.build.json -w",
51
+ "test": "cross-env TEST=true vitest --watch=false",
52
+ "test:coverage": "cross-env TEST=true vitest --coverage",
53
+ "lint:fix": "eslint --fix '**/*.{js,ts}'",
54
+ "lint": "eslint '**/*.{js,ts}'"
55
+ }
56
+ }
@@ -1,2 +0,0 @@
1
- import type { CssParser } from '../cssParser';
2
- export default function (this: CssParser, $: CssParser): void;
@@ -1,196 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- function default_1($) {
4
- $.atRule = $.RULE('atRule', () => $.OR([
5
- { ALT: () => $.SUBRULE($.knownAtRule) },
6
- { ALT: () => $.SUBRULE($.unknownAtRule) }
7
- ]));
8
- $.knownAtRule = $.RULE('knownAtRule', () => $.OR([
9
- { ALT: () => $.SUBRULE($.atImport) },
10
- { ALT: () => $.SUBRULE($.atMedia) },
11
- { ALT: () => $.SUBRULE($.atSupports) },
12
- { ALT: () => $.SUBRULE($.atNested) },
13
- { ALT: () => $.SUBRULE($.atNonNested) }
14
- ]));
15
- $.atNested = $.RULE('atNested', () => ({
16
- name: 'atRule',
17
- children: [
18
- $.CONSUME($.T.AtNested),
19
- $.SUBRULE($.customPrelude),
20
- $.SUBRULE($.curlyBlock)
21
- ]
22
- }));
23
- $.atNonNested = $.RULE('atNonNested', () => ({
24
- name: 'atRule',
25
- children: [
26
- $.CONSUME($.T.AtNonNested),
27
- $.SUBRULE($.customPrelude),
28
- $.OPTION(() => $.CONSUME($.T.SemiColon))
29
- ]
30
- }));
31
- $.atImport = $.RULE('atImport', () => ({
32
- name: 'atRule',
33
- children: [
34
- $.CONSUME($.T.AtImport),
35
- {
36
- name: 'prelude',
37
- children: [
38
- $._(),
39
- $.OR([
40
- { ALT: () => $.CONSUME($.T.StringLiteral) },
41
- { ALT: () => $.CONSUME($.T.Uri) }
42
- ]),
43
- $._(1),
44
- /** @todo - add tests for media query post-import */
45
- $.OPTION(() => $.SUBRULE($.mediaQueryList))
46
- ]
47
- },
48
- $.OPTION2(() => $.CONSUME($.T.SemiColon))
49
- ]
50
- }));
51
- /**
52
- * @see https://developer.mozilla.org/en-US/docs/Web/CSS/@media
53
- */
54
- $.atMedia = $.RULE('atMedia', () => ({
55
- name: 'atRule',
56
- children: [
57
- $.CONSUME($.T.AtMedia),
58
- {
59
- name: 'prelude',
60
- children: [
61
- $._(),
62
- $.SUBRULE($.mediaQueryList)
63
- ]
64
- },
65
- $.SUBRULE($.curlyBlock)
66
- ]
67
- }));
68
- $.atSupports = $.RULE('atSupports', () => ({
69
- name: 'atRule',
70
- children: [
71
- $.CONSUME($.T.AtSupports),
72
- {
73
- name: 'prelude',
74
- children: [
75
- $._(),
76
- $.SUBRULE($.mediaCondition),
77
- $._(1)
78
- ]
79
- },
80
- $.SUBRULE($.curlyBlock)
81
- ]
82
- }));
83
- $.mediaQueryList = $.RULE('mediaQueryList', () => {
84
- const children = [
85
- $.SUBRULE($.mediaQuery),
86
- $._(1)
87
- ];
88
- $.MANY(() => {
89
- children.push($.CONSUME($.T.Comma), $._(2), $.SUBRULE2($.mediaQuery), $._(3));
90
- });
91
- return {
92
- name: 'mediaQueryList',
93
- children
94
- };
95
- });
96
- $.mediaQuery = $.RULE('mediaQuery', () => {
97
- return {
98
- name: 'mediaQuery',
99
- children: [
100
- $.OPTION(() => {
101
- $.CONSUME($.T.Only);
102
- $._();
103
- }),
104
- $.SUBRULE($.mediaCondition)
105
- ]
106
- };
107
- });
108
- $.mediaCondition = $.RULE('mediaCondition', () => ({
109
- name: 'mediaCondition',
110
- children: [
111
- $.OR([
112
- {
113
- ALT: () => ({
114
- name: 'mediaNot',
115
- children: [
116
- $.CONSUME($.T.Not),
117
- $._(),
118
- $.SUBRULE($.mediaFeature)
119
- ]
120
- })
121
- },
122
- { ALT: () => $.SUBRULE2($.mediaAnd) }
123
- ])
124
- ]
125
- }));
126
- $.mediaAnd = $.RULE('mediaAnd', () => {
127
- let expr = $.SUBRULE($.mediaFeature);
128
- $.MANY(() => {
129
- expr = {
130
- name: 'mediaAnd',
131
- children: [
132
- expr,
133
- {
134
- name: 'combinator',
135
- children: [
136
- $.OR([
137
- { ALT: () => $.CONSUME($.T.And) },
138
- { ALT: () => $.CONSUME($.T.Or) }
139
- ]),
140
- $._(1)
141
- ]
142
- },
143
- $.SUBRULE2($.mediaFeature, { ARGS: [true] })
144
- ]
145
- };
146
- });
147
- return expr;
148
- });
149
- $.mediaFeature = $.RULE('mediaFeature', (afterAnd) => ({
150
- name: 'mediaFeature',
151
- children: [
152
- $.OR([
153
- {
154
- GATE: () => !afterAnd,
155
- ALT: () => $.CONSUME($.T.PlainIdent)
156
- },
157
- {
158
- ALT: () => {
159
- return {
160
- name: 'block',
161
- children: [
162
- $.CONSUME($.T.LParen),
163
- /**
164
- * This generically parses expressions that are nested.
165
- * Would normally be either a nested media condition
166
- * (`not (screen)`) OR an expression like:
167
- * `(min-width: 640px)` or `(640px < width < 968px)`
168
- */
169
- $.SUBRULE($.expression),
170
- $.CONSUME($.T.RParen)
171
- ]
172
- };
173
- }
174
- }
175
- ]),
176
- $._()
177
- ]
178
- }));
179
- /**
180
- * Everything up to an (outer) ';' or '{' is the AtRule's prelude
181
- */
182
- $.unknownAtRule = $.RULE('unknownAtRule', () => ({
183
- name: 'atRule',
184
- children: [
185
- $.CONSUME($.T.AtKeyword),
186
- $.SUBRULE($.customPrelude),
187
- $.OR2([
188
- { ALT: () => $.SUBRULE($.curlyBlock) },
189
- {
190
- ALT: () => $.OPTION(() => $.CONSUME($.T.SemiColon))
191
- }
192
- ])
193
- ]
194
- }));
195
- }
196
- exports.default = default_1;
@@ -1,2 +0,0 @@
1
- import type { CssParser } from '../cssParser';
2
- export default function (this: CssParser, $: CssParser): void;
@@ -1,181 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- function default_1($) {
4
- /**
5
- * a rule like `.a { b: c; }`
6
- */
7
- $.qualifiedRule = $.RULE('qualifiedRule', () => ({
8
- name: 'qualifiedRule',
9
- children: [
10
- $.SUBRULE($.selectorList),
11
- $.SUBRULE($.curlyBlock)
12
- ]
13
- }));
14
- /**
15
- * Test for qualified rule start.
16
- *
17
- * To allow nesting, we want to test, as quickly as possible, if this
18
- * is intended to be a qualified rule
19
- */
20
- $.testQualifiedRule = $.RULE('testQualifiedRule', () => {
21
- $.OR({
22
- IGNORE_AMBIGUITIES: true,
23
- DEF: [
24
- { ALT: () => $.CONSUME($.T.DotName) },
25
- { ALT: () => $.CONSUME($.T.HashName) },
26
- { ALT: () => $.CONSUME($.T.Colon) },
27
- { ALT: () => $.CONSUME($.T.LSquare) },
28
- {
29
- ALT: () => {
30
- $.SUBRULE($.testQualifiedRuleExpression);
31
- $.CONSUME($.T.LCurly);
32
- }
33
- }
34
- ]
35
- });
36
- });
37
- $.testQualifiedRuleExpression = $.RULE('testQualifiedRuleExpression', () => {
38
- $.MANY(() => {
39
- $.OR([
40
- { ALT: () => $.CONSUME($.T.Value) },
41
- { ALT: () => $.CONSUME($.T.Comma) },
42
- { ALT: () => $.CONSUME($.T.Colon) },
43
- { ALT: () => $.CONSUME($.T.WS) },
44
- { ALT: () => {
45
- $.OR2([
46
- { ALT: () => $.CONSUME($.T.Function) },
47
- { ALT: () => $.CONSUME($.T.LParen) }
48
- ]);
49
- $.SUBRULE($.testQualifiedRuleExpression);
50
- $.CONSUME($.T.RParen);
51
- } },
52
- { ALT: () => {
53
- $.CONSUME($.T.LSquare);
54
- $.SUBRULE2($.testQualifiedRuleExpression);
55
- $.CONSUME($.T.RSquare);
56
- } }
57
- ]);
58
- });
59
- });
60
- /**
61
- * ON BLOCKS
62
- * ---------
63
- * Everything in `[]` or `()` we evaluate as raw expression lists,
64
- * or, rather, groups of expression lists (divided by semi-colons).
65
- *
66
- * The CSS spec suggests that `[]`, `()`, `{}` should be treated equally,
67
- * as generic blocks, so I'm not sure of this, but in the language
68
- * _so far_, there's some distinction between these block types.
69
- * AFAIK, `[]` is only used formally in CSS grid and with attribute
70
- * identifiers, and `()` is used for functions and at-rule expressions.
71
- *
72
- * It would be great if CSS formalized this distinction, but for now,
73
- * this seems safe.
74
- */
75
- $.block = $.RULE('block', () => $.OR([
76
- {
77
- ALT: () => ({
78
- name: 'function',
79
- children: [
80
- $.CONSUME($.T.Function),
81
- $.SUBRULE($.expressionList),
82
- $.CONSUME($.T.RParen)
83
- ]
84
- })
85
- },
86
- {
87
- ALT: () => ({
88
- name: 'block',
89
- children: [
90
- $.CONSUME($.T.LParen),
91
- $.SUBRULE2($.expressionList),
92
- $.CONSUME2($.T.RParen)
93
- ]
94
- })
95
- },
96
- {
97
- ALT: () => ({
98
- name: 'block',
99
- children: [
100
- $.CONSUME($.T.LSquare),
101
- $.SUBRULE3($.expressionList),
102
- $.CONSUME($.T.RSquare)
103
- ]
104
- })
105
- }
106
- ]));
107
- $.curlyBlock = $.RULE('curlyBlock', () => ({
108
- name: 'curlyBlock',
109
- children: [
110
- $.CONSUME($.T.LCurly),
111
- {
112
- name: 'rules',
113
- children: $.SUBRULE($.primary)
114
- },
115
- $.CONSUME($.T.RCurly)
116
- ]
117
- }));
118
- /**
119
- * Blocks assigned to custom properties
120
- */
121
- $.customBlock = $.RULE('customBlock', () => {
122
- return {
123
- name: 'block',
124
- children: $.OR([
125
- {
126
- ALT: () => [
127
- $.OR2([
128
- { ALT: () => $.CONSUME($.T.LParen) },
129
- { ALT: () => $.CONSUME($.T.Function) }
130
- ]),
131
- $.SUBRULE($.customValueOrSemi),
132
- $.CONSUME($.T.RParen)
133
- ]
134
- },
135
- {
136
- ALT: () => [
137
- $.CONSUME($.T.LSquare),
138
- $.SUBRULE2($.customValueOrSemi),
139
- $.CONSUME($.T.RSquare)
140
- ]
141
- },
142
- {
143
- ALT: () => [
144
- $.CONSUME($.T.LCurly),
145
- $.SUBRULE3($.customValueOrSemi),
146
- $.CONSUME($.T.RCurly)
147
- ]
148
- }
149
- ])
150
- };
151
- });
152
- /**
153
- * Blocks within at-rule preludes
154
- * (no outer curly blocks)
155
- */
156
- $.customPreludeBlock = $.RULE('customPreludeBlock', () => {
157
- return {
158
- name: 'block',
159
- children: $.OR([
160
- {
161
- ALT: () => [
162
- $.OR2([
163
- { ALT: () => $.CONSUME($.T.LParen) },
164
- { ALT: () => $.CONSUME($.T.Function) }
165
- ]),
166
- $.SUBRULE($.customValueOrSemi),
167
- $.CONSUME($.T.RParen)
168
- ]
169
- },
170
- {
171
- ALT: () => [
172
- $.CONSUME($.T.LSquare),
173
- $.SUBRULE2($.customValueOrSemi),
174
- $.CONSUME($.T.RSquare)
175
- ]
176
- }
177
- ])
178
- };
179
- });
180
- }
181
- exports.default = default_1;