diff --git a/packages/less/src/less/parser/parser.js b/packages/less/src/less/parser/parser.js index 59aa2eef4..3147025e9 100644 --- a/packages/less/src/less/parser/parser.js +++ b/packages/less/src/less/parser/parser.js @@ -1448,8 +1448,18 @@ const Parser = function Parser(context, imports, fileInfo, currentIndex) { // let cif; - if (!(key = entities.variableCurly())) { - key = expect(/^(?:[_A-Za-z0-9-*]*\|)?(?:[_A-Za-z0-9-]|\\.)+/); + let keys; + while((key = entities.variableCurly()) || (key = parserInput.$re(/^(?:[_A-Za-z0-9-*]*\|)?(?:[_A-Za-z0-9-]|\\.)+/))){ + if(keys){ + keys.push(key); + }else{ + keys = [key]; + } + key = null + } + + if(keys.length == 0){ + error('unexpected token'); } op = parserInput.$re(/^[|~*$^]?=/); @@ -1462,7 +1472,7 @@ const Parser = function Parser(context, imports, fileInfo, currentIndex) { expectChar(']'); - return new(tree.Attribute)(key, op, val, cif); + return new(tree.Attribute)(keys, op, val, cif); }, // diff --git a/packages/less/src/less/tree/attribute.js b/packages/less/src/less/tree/attribute.js index e716d13d8..942562f30 100644 --- a/packages/less/src/less/tree/attribute.js +++ b/packages/less/src/less/tree/attribute.js @@ -11,8 +11,12 @@ Attribute.prototype = Object.assign(new Node(), { type: 'Attribute', eval(context) { + let key = []; + for(let i=0;i