62 lines
1.8 KiB
JavaScript
62 lines
1.8 KiB
JavaScript
var endsWith = require('../../tokenizer').endsWith;
|
|
var TYPE = require('../../tokenizer').TYPE;
|
|
|
|
var WHITESPACE = TYPE.WhiteSpace;
|
|
var COMMENT = TYPE.Comment;
|
|
var FUNCTION = TYPE.Function;
|
|
var COLON = TYPE.Colon;
|
|
var SEMICOLON = TYPE.Semicolon;
|
|
var EXCLAMATIONMARK = TYPE.ExclamationMark;
|
|
|
|
// 'progid:' ws* 'DXImageTransform.Microsoft.' ident ws* '(' .* ')'
|
|
function checkProgid(scanner) {
|
|
var offset = 0;
|
|
|
|
for (var type; type = scanner.lookupType(offset); offset++) {
|
|
if (type !== WHITESPACE && type !== COMMENT) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (scanner.lookupValue(offset, 'alpha(') ||
|
|
scanner.lookupValue(offset, 'chroma(') ||
|
|
scanner.lookupValue(offset, 'dropshadow(')) {
|
|
if (scanner.lookupType(offset) !== FUNCTION) {
|
|
return false;
|
|
}
|
|
} else {
|
|
if (scanner.lookupValue(offset, 'progid') === false ||
|
|
scanner.lookupType(offset + 1) !== COLON) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
module.exports = {
|
|
name: 'Value',
|
|
structure: {
|
|
children: [[]]
|
|
},
|
|
parse: function(property) {
|
|
// special parser for filter property since it can contains non-standart syntax for old IE
|
|
if (property !== null && endsWith(property, 'filter') && checkProgid(this.scanner)) {
|
|
this.scanner.skipSC();
|
|
return this.Raw(this.scanner.currentToken, EXCLAMATIONMARK, SEMICOLON, false, false);
|
|
}
|
|
|
|
var start = this.scanner.tokenStart;
|
|
var children = this.readSequence(this.scope.Value);
|
|
|
|
return {
|
|
type: 'Value',
|
|
loc: this.getLocation(start, this.scanner.tokenStart),
|
|
children: children
|
|
};
|
|
},
|
|
generate: function(processChunk, node) {
|
|
this.each(processChunk, node);
|
|
}
|
|
};
|