From dddda0b0d3de80fbd1e95beeafeeff5a6a50fc16 Mon Sep 17 00:00:00 2001 From: Luke Page Date: Mon, 5 Nov 2012 20:30:49 +0000 Subject: [PATCH] Add support for unicode descriptors. Fixes #1107 --- lib/less/index.js | 2 +- lib/less/parser.js | 21 ++++++++++++++++----- lib/less/tree/unicode-descriptor.js | 13 +++++++++++++ test/css/css-3.css | 1 + test/less/css-3.less | 1 + 5 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 lib/less/tree/unicode-descriptor.js diff --git a/lib/less/index.js b/lib/less/index.js index 5d42513e..0f732618 100644 --- a/lib/less/index.js +++ b/lib/less/index.js @@ -89,7 +89,7 @@ var less = { 'call', 'url', 'alpha', 'import', 'mixin', 'comment', 'anonymous', 'value', 'javascript', 'assignment', 'condition', 'paren', - 'media', 'ratio' + 'media', 'ratio', 'unicode-descriptor' ].forEach(function (n) { require('./tree/' + n); }); diff --git a/lib/less/parser.js b/lib/less/parser.js index 9299c74e..c5a5a759 100644 --- a/lib/less/parser.js +++ b/lib/less/parser.js @@ -631,7 +631,8 @@ less.Parser = function Parser(env) { return $(this.entities.ratio) || $(this.entities.dimension) || $(this.entities.color) || - $(this.entities.quoted); + $(this.entities.quoted) || + $(this.entities.unicodeDescriptor); }, // Assignments are argument entities for calls. @@ -734,6 +735,19 @@ less.Parser = function Parser(env) { return new(tree.Ratio)(value[1]); } }, + + // + // A unicode descriptor, as is used in unicode-range + // + // U+0?? or U+00A1-00A9 + // + unicodeDescriptor: function () { + var ud; + + if (ud = $(/^U\+[0-9a-fA-F?]+(\-[0-9a-fA-F?]+)?/)) { + return new(tree.UnicodeDescriptor)(ud[0]); + } + }, // // JavaScript code to be evaluated @@ -962,7 +976,7 @@ less.Parser = function Parser(env) { // entity: function () { return $(this.entities.literal) || $(this.entities.variable) || $(this.entities.url) || - $(this.entities.call) || $(this.entities.keyword) || $(this.entities.javascript) || + $(this.entities.call) || $(this.entities.keyword) ||$(this.entities.javascript) || $(this.comment); }, @@ -1073,9 +1087,6 @@ less.Parser = function Parser(env) { if (elements.length > 0) { return new(tree.Selector)(elements) } }, - tag: function () { - return $(/^[A-Za-z][A-Za-z-]*[0-9]?/) || $('*'); - }, attribute: function () { var attr = '', key, val, op; diff --git a/lib/less/tree/unicode-descriptor.js b/lib/less/tree/unicode-descriptor.js new file mode 100644 index 00000000..79b6b237 --- /dev/null +++ b/lib/less/tree/unicode-descriptor.js @@ -0,0 +1,13 @@ +(function (tree) { + +tree.UnicodeDescriptor = function (value) { + this.value = value; +}; +tree.UnicodeDescriptor.prototype = { + toCSS: function (env) { + return this.value; + }, + eval: function () { return this } +}; + +})(require('../tree')); diff --git a/test/css/css-3.css b/test/css/css-3.css index 1f4da326..90740198 100644 --- a/test/css/css-3.css +++ b/test/css/css-3.css @@ -6,6 +6,7 @@ @font-face { font-family: Headline; src: local(Futura-Medium), url(fonts.svg#MyGeometricModern) format("svg"); + unicode-range: U+??????, U+0???, U+0-7F, U+A5; } .other { -moz-transform: translate(0, 11em) rotate(-90deg); diff --git a/test/less/css-3.less b/test/less/css-3.less index 0d72d184..96daf55b 100644 --- a/test/less/css-3.less +++ b/test/less/css-3.less @@ -8,6 +8,7 @@ font-family: Headline; src: local(Futura-Medium), url(fonts.svg#MyGeometricModern) format("svg"); + unicode-range: U+??????, U+0???, U+0-7F, U+A5; } .other { -moz-transform: translate(0, 11em) rotate(-90deg);