aboutsummaryrefslogtreecommitdiffstats
path: root/vanilla/node_modules/css-tree/lib/syntax/node/Url.js
diff options
context:
space:
mode:
Diffstat (limited to 'vanilla/node_modules/css-tree/lib/syntax/node/Url.js')
-rw-r--r--vanilla/node_modules/css-tree/lib/syntax/node/Url.js52
1 files changed, 52 insertions, 0 deletions
diff --git a/vanilla/node_modules/css-tree/lib/syntax/node/Url.js b/vanilla/node_modules/css-tree/lib/syntax/node/Url.js
new file mode 100644
index 0000000..ac52c9d
--- /dev/null
+++ b/vanilla/node_modules/css-tree/lib/syntax/node/Url.js
@@ -0,0 +1,52 @@
+import * as url from '../../utils/url.js';
+import * as string from '../../utils/string.js';
+import {
+ Function as FunctionToken,
+ String as StringToken,
+ Url,
+ RightParenthesis
+} from '../../tokenizer/index.js';
+
+export const name = 'Url';
+export const structure = {
+ value: String
+};
+
+// <url-token> | <function-token> <string> )
+export function parse() {
+ const start = this.tokenStart;
+ let value;
+
+ switch (this.tokenType) {
+ case Url:
+ value = url.decode(this.consume(Url));
+ break;
+
+ case FunctionToken:
+ if (!this.cmpStr(this.tokenStart, this.tokenEnd, 'url(')) {
+ this.error('Function name must be `url`');
+ }
+
+ this.eat(FunctionToken);
+ this.skipSC();
+ value = string.decode(this.consume(StringToken));
+ this.skipSC();
+ if (!this.eof) {
+ this.eat(RightParenthesis);
+ }
+ break;
+
+ default:
+ this.error('Url or Function is expected');
+ }
+
+ return {
+ type: 'Url',
+ loc: this.getLocation(start, this.tokenStart),
+ value
+ };
+}
+
+export function generate(node) {
+ this.token(Url, url.encode(node.value));
+}