mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-10-01 01:38:07 +08:00
These packages will be used to dynamically optimize SVG images during the build. R=jacktfranklin@chromium.org Bug: 1216402 Change-Id: I04e95aa7d79c9d67beaf8a7861182c52b16b7d0f Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2939992 Reviewed-by: Jack Franklin <jacktfranklin@chromium.org> Commit-Queue: Tim van der Lippe <tvanderlippe@chromium.org>
70 lines
2.0 KiB
JavaScript
70 lines
2.0 KiB
JavaScript
var isWhiteSpace = require('../../tokenizer').isWhiteSpace;
|
|
var cmpStr = require('../../tokenizer').cmpStr;
|
|
var TYPE = require('../../tokenizer').TYPE;
|
|
|
|
var FUNCTION = TYPE.Function;
|
|
var URL = TYPE.Url;
|
|
var RIGHTPARENTHESIS = TYPE.RightParenthesis;
|
|
|
|
// <url-token> | <function-token> <string> )
|
|
module.exports = {
|
|
name: 'Url',
|
|
structure: {
|
|
value: ['String', 'Raw']
|
|
},
|
|
parse: function() {
|
|
var start = this.scanner.tokenStart;
|
|
var value;
|
|
|
|
switch (this.scanner.tokenType) {
|
|
case URL:
|
|
var rawStart = start + 4;
|
|
var rawEnd = this.scanner.tokenEnd - 1;
|
|
|
|
while (rawStart < rawEnd && isWhiteSpace(this.scanner.source.charCodeAt(rawStart))) {
|
|
rawStart++;
|
|
}
|
|
|
|
while (rawStart < rawEnd && isWhiteSpace(this.scanner.source.charCodeAt(rawEnd - 1))) {
|
|
rawEnd--;
|
|
}
|
|
|
|
value = {
|
|
type: 'Raw',
|
|
loc: this.getLocation(rawStart, rawEnd),
|
|
value: this.scanner.source.substring(rawStart, rawEnd)
|
|
};
|
|
|
|
this.eat(URL);
|
|
break;
|
|
|
|
case FUNCTION:
|
|
if (!cmpStr(this.scanner.source, this.scanner.tokenStart, this.scanner.tokenEnd, 'url(')) {
|
|
this.error('Function name must be `url`');
|
|
}
|
|
|
|
this.eat(FUNCTION);
|
|
this.scanner.skipSC();
|
|
value = this.String();
|
|
this.scanner.skipSC();
|
|
this.eat(RIGHTPARENTHESIS);
|
|
break;
|
|
|
|
default:
|
|
this.error('Url or Function is expected');
|
|
}
|
|
|
|
return {
|
|
type: 'Url',
|
|
loc: this.getLocation(start, this.scanner.tokenStart),
|
|
value: value
|
|
};
|
|
},
|
|
generate: function(node) {
|
|
this.chunk('url');
|
|
this.chunk('(');
|
|
this.node(node.value);
|
|
this.chunk(')');
|
|
}
|
|
};
|