aboutsummaryrefslogtreecommitdiffstats
path: root/vanilla/node_modules/css-tree/lib/syntax/scope
diff options
context:
space:
mode:
Diffstat (limited to 'vanilla/node_modules/css-tree/lib/syntax/scope')
-rw-r--r--vanilla/node_modules/css-tree/lib/syntax/scope/atrulePrelude.js5
-rw-r--r--vanilla/node_modules/css-tree/lib/syntax/scope/default.js85
-rw-r--r--vanilla/node_modules/css-tree/lib/syntax/scope/index.js3
-rw-r--r--vanilla/node_modules/css-tree/lib/syntax/scope/selector.js94
-rw-r--r--vanilla/node_modules/css-tree/lib/syntax/scope/value.js25
5 files changed, 212 insertions, 0 deletions
diff --git a/vanilla/node_modules/css-tree/lib/syntax/scope/atrulePrelude.js b/vanilla/node_modules/css-tree/lib/syntax/scope/atrulePrelude.js
new file mode 100644
index 0000000..c903555
--- /dev/null
+++ b/vanilla/node_modules/css-tree/lib/syntax/scope/atrulePrelude.js
@@ -0,0 +1,5 @@
+import getNode from './default.js';
+
+export default {
+ getNode
+};
diff --git a/vanilla/node_modules/css-tree/lib/syntax/scope/default.js b/vanilla/node_modules/css-tree/lib/syntax/scope/default.js
new file mode 100644
index 0000000..8f14035
--- /dev/null
+++ b/vanilla/node_modules/css-tree/lib/syntax/scope/default.js
@@ -0,0 +1,85 @@
+import {
+ Ident,
+ String as StringToken,
+ Number as NumberToken,
+ Function as FunctionToken,
+ Url,
+ Hash,
+ Dimension,
+ Percentage,
+ LeftParenthesis,
+ LeftSquareBracket,
+ Comma,
+ Delim
+} from '../../tokenizer/index.js';
+
+const NUMBERSIGN = 0x0023; // U+0023 NUMBER SIGN (#)
+const ASTERISK = 0x002A; // U+002A ASTERISK (*)
+const PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)
+const HYPHENMINUS = 0x002D; // U+002D HYPHEN-MINUS (-)
+const SOLIDUS = 0x002F; // U+002F SOLIDUS (/)
+const U = 0x0075; // U+0075 LATIN SMALL LETTER U (u)
+
+export default function defaultRecognizer(context) {
+ switch (this.tokenType) {
+ case Hash:
+ return this.Hash();
+
+ case Comma:
+ return this.Operator();
+
+ case LeftParenthesis:
+ return this.Parentheses(this.readSequence, context.recognizer);
+
+ case LeftSquareBracket:
+ return this.Brackets(this.readSequence, context.recognizer);
+
+ case StringToken:
+ return this.String();
+
+ case Dimension:
+ return this.Dimension();
+
+ case Percentage:
+ return this.Percentage();
+
+ case NumberToken:
+ return this.Number();
+
+ case FunctionToken:
+ return this.cmpStr(this.tokenStart, this.tokenEnd, 'url(')
+ ? this.Url()
+ : this.Function(this.readSequence, context.recognizer);
+
+ case Url:
+ return this.Url();
+
+ case Ident:
+ // check for unicode range, it should start with u+ or U+
+ if (this.cmpChar(this.tokenStart, U) &&
+ this.cmpChar(this.tokenStart + 1, PLUSSIGN)) {
+ return this.UnicodeRange();
+ } else {
+ return this.Identifier();
+ }
+
+ case Delim: {
+ const code = this.charCodeAt(this.tokenStart);
+
+ if (code === SOLIDUS ||
+ code === ASTERISK ||
+ code === PLUSSIGN ||
+ code === HYPHENMINUS) {
+ return this.Operator(); // TODO: replace with Delim
+ }
+
+ // TODO: produce a node with Delim node type
+
+ if (code === NUMBERSIGN) {
+ this.error('Hex or identifier is expected', this.tokenStart + 1);
+ }
+
+ break;
+ }
+ }
+};
diff --git a/vanilla/node_modules/css-tree/lib/syntax/scope/index.js b/vanilla/node_modules/css-tree/lib/syntax/scope/index.js
new file mode 100644
index 0000000..6dabbbe
--- /dev/null
+++ b/vanilla/node_modules/css-tree/lib/syntax/scope/index.js
@@ -0,0 +1,3 @@
+export { default as AtrulePrelude } from './atrulePrelude.js';
+export { default as Selector } from './selector.js';
+export { default as Value } from './value.js';
diff --git a/vanilla/node_modules/css-tree/lib/syntax/scope/selector.js b/vanilla/node_modules/css-tree/lib/syntax/scope/selector.js
new file mode 100644
index 0000000..a8efcd5
--- /dev/null
+++ b/vanilla/node_modules/css-tree/lib/syntax/scope/selector.js
@@ -0,0 +1,94 @@
+import {
+ Delim,
+ Ident,
+ Dimension,
+ Percentage,
+ Number as NumberToken,
+ Hash,
+ Colon,
+ LeftSquareBracket
+} from '../../tokenizer/index.js';
+
+const NUMBERSIGN = 0x0023; // U+0023 NUMBER SIGN (#)
+const AMPERSAND = 0x0026; // U+0026 AMPERSAND (&)
+const ASTERISK = 0x002A; // U+002A ASTERISK (*)
+const PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)
+const SOLIDUS = 0x002F; // U+002F SOLIDUS (/)
+const FULLSTOP = 0x002E; // U+002E FULL STOP (.)
+const GREATERTHANSIGN = 0x003E; // U+003E GREATER-THAN SIGN (>)
+const VERTICALLINE = 0x007C; // U+007C VERTICAL LINE (|)
+const TILDE = 0x007E; // U+007E TILDE (~)
+
+function onWhiteSpace(next, children) {
+ if (children.last !== null && children.last.type !== 'Combinator' &&
+ next !== null && next.type !== 'Combinator') {
+ children.push({ // FIXME: this.Combinator() should be used instead
+ type: 'Combinator',
+ loc: null,
+ name: ' '
+ });
+ }
+}
+
+function getNode() {
+ switch (this.tokenType) {
+ case LeftSquareBracket:
+ return this.AttributeSelector();
+
+ case Hash:
+ return this.IdSelector();
+
+ case Colon:
+ if (this.lookupType(1) === Colon) {
+ return this.PseudoElementSelector();
+ } else {
+ return this.PseudoClassSelector();
+ }
+
+ case Ident:
+ return this.TypeSelector();
+
+ case NumberToken:
+ case Percentage:
+ return this.Percentage();
+
+ case Dimension:
+ // throws when .123ident
+ if (this.charCodeAt(this.tokenStart) === FULLSTOP) {
+ this.error('Identifier is expected', this.tokenStart + 1);
+ }
+ break;
+
+ case Delim: {
+ const code = this.charCodeAt(this.tokenStart);
+
+ switch (code) {
+ case PLUSSIGN:
+ case GREATERTHANSIGN:
+ case TILDE:
+ case SOLIDUS: // /deep/
+ return this.Combinator();
+
+ case FULLSTOP:
+ return this.ClassSelector();
+
+ case ASTERISK:
+ case VERTICALLINE:
+ return this.TypeSelector();
+
+ case NUMBERSIGN:
+ return this.IdSelector();
+
+ case AMPERSAND:
+ return this.NestingSelector();
+ }
+
+ break;
+ }
+ }
+};
+
+export default {
+ onWhiteSpace,
+ getNode
+};
diff --git a/vanilla/node_modules/css-tree/lib/syntax/scope/value.js b/vanilla/node_modules/css-tree/lib/syntax/scope/value.js
new file mode 100644
index 0000000..dc94219
--- /dev/null
+++ b/vanilla/node_modules/css-tree/lib/syntax/scope/value.js
@@ -0,0 +1,25 @@
+import getNode from './default.js';
+import expressionFn from '../function/expression.js';
+import varFn from '../function/var.js';
+
+function isPlusMinusOperator(node) {
+ return (
+ node !== null &&
+ node.type === 'Operator' &&
+ (node.value[node.value.length - 1] === '-' || node.value[node.value.length - 1] === '+')
+ );
+}
+
+export default {
+ getNode,
+ onWhiteSpace(next, children) {
+ if (isPlusMinusOperator(next)) {
+ next.value = ' ' + next.value;
+ }
+ if (isPlusMinusOperator(children.last)) {
+ children.last.value += ' ';
+ }
+ },
+ 'expression': expressionFn,
+ 'var': varFn
+};