Support for support/viewport/page directives. Fixes #847 and fixes #366

This commit is contained in:
Luke Page
2012-08-08 22:55:36 +01:00
parent 5d49ca000e
commit b96e307bd5
5 changed files with 236 additions and 12 deletions

View File

@@ -1158,23 +1158,65 @@ less.Parser = function Parser(env) {
// @charset "utf-8";
//
directive: function () {
var name, value, rules, types, e, nodes;
var name, value, rules, identifier, e, nodes, nonVendorSpecificName,
hasBlock, hasIdentifier;
if (input.charAt(i) !== '@') return;
if (value = $(this['import']) || $(this.media)) {
return value;
} else if (name = $(/^@page|@keyframes/) || $(/^@(?:-webkit-|-khtml-|-moz-|-o-|-ms-)[a-z0-9-]+/)) {
types = ($(/^[^{]+/) || '').trim();
}
name = $(/^@[a-z-]+/);
nonVendorSpecificName = name;
if (name.charAt(1) == '-' && name.indexOf('-', 2) > 0) {
nonVendorSpecificName = "@" + name.slice(name.indexOf('-', 2) + 1);
}
switch(nonVendorSpecificName) {
case "@font-face":
hasBlock = true;
break;
case "@viewport":
case "@top-left":
case "@top-left-corner":
case "@top-center":
case "@top-right":
case "@top-right-corner":
case "@bottom-left":
case "@bottom-left-corner":
case "@bottom-center":
case "@bottom-right":
case "@bottom-right-corner":
case "@left-top":
case "@left-middle":
case "@left-bottom":
case "@right-top":
case "@right-middle":
case "@right-bottom":
hasBlock = true;
break;
case "@page":
case "@document":
case "@supports":
case "@keyframes":
hasBlock = true;
hasIdentifier = true;
break;
}
if (hasIdentifier) {
name += " " + ($(/^[^{]+/) || '').trim();
}
if (hasBlock)
{
if (rules = $(this.block)) {
return new(tree.Directive)(name + " " + types, rules);
return new(tree.Directive)(name, rules);
}
} else if (name = $(/^@[a-z-]+/)) {
if (name === '@font-face') {
if (rules = $(this.block)) {
return new(tree.Directive)(name, rules);
}
} else if ((value = $(this.entity)) && $(';')) {
} else {
if ((value = $(this.entity)) && $(';')) {
return new(tree.Directive)(name, value);
}
}