diff --git a/lesscpy/lessc/parser.py b/lesscpy/lessc/parser.py index 29eac0c..5e59e6e 100644 --- a/lesscpy/lessc/parser.py +++ b/lesscpy/lessc/parser.py @@ -146,6 +146,7 @@ class LessParser(object): def p_statement_import(self, p): """ statement : css_import t_ws css_string ';' + | css_import t_ws css_string dom ';' """ if self.importlvl > 8: raise ImportError('Recrusive import level too deep > 8 (circular import ?)') @@ -167,7 +168,7 @@ class LessParser(object): except ImportError as e: self.handle_error(e, p) else: - p[0] = Statement(p) + p[0] = Statement(list(p)[1:]) p[0].parse(None) # @@ -308,12 +309,17 @@ class LessParser(object): """ p[0] = Property(list(p)[1:-1]) + def p_prop_open_ie_hack(self, p): + """ prop_open : oper_mul prop_open + """ + p[0] = (p[1][0], p[2][0]) + def p_prop_open(self, p): """ prop_open : property ':' | vendor_property ':' | word ':' """ - p[0] = p[1] + p[0] = (p[1][0], '') # # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -444,6 +450,8 @@ class LessParser(object): | property t_popen argument_list t_pclose | vendor_property t_popen argument_list t_pclose | less_open_format argument_list t_pclose + | '~' istring + | '~' css_string """ p[0] = Call(list(p)[1:]) diff --git a/lesscpy/plib/block.py b/lesscpy/plib/block.py index e0aabba..7dfaee3 100644 --- a/lesscpy/plib/block.py +++ b/lesscpy/plib/block.py @@ -9,17 +9,21 @@ class Block(Node): def parse(self, scope): """ """ - scope = copy.deepcopy(scope) ident, inner = self.tokens self.name = ident.parse(scope) if not inner: inner = [] self.parsed = [p.parse(scope) for p in inner if p and type(p) is not type(self)] - scope.current = self.name - self.inner = [p.parse(scope) - for p in inner - if p and type(p) is type(self)] + if not inner: + self.inner = [] + else: + self. inner = [p for p in inner + if p and type(p) is type(self)] + if self.inner: + scope = copy.deepcopy(scope) + scope.current = self.name + self.inner = [p.parse(scope) for p in self.inner] return self def format(self, fills): diff --git a/lesscpy/plib/property.py b/lesscpy/plib/property.py index 4075502..9318e63 100644 --- a/lesscpy/plib/property.py +++ b/lesscpy/plib/property.py @@ -12,7 +12,7 @@ class Property(Node): else: property, style = self.tokens self.important = False - self.property = property[0] + self.property = ''.join(property) self.parsed = [] if style: style = self.preprocess(style) diff --git a/lesscpy/plib/statement.py b/lesscpy/plib/statement.py index 0fe2d8f..b3825c6 100644 --- a/lesscpy/plib/statement.py +++ b/lesscpy/plib/statement.py @@ -1,5 +1,19 @@ """ """ from .node import Node +from lesscpy.lessc import utility + class Statement(Node): - pass \ No newline at end of file + def parse(self, scope): + """ + """ + self.parsed = list(utility.flatten(self.tokens)) + if self.parsed[0] == '@import': + if len(self.parsed) > 4: + # Media @import + self.parsed.insert(3, ' ') + + def format(self, fills): + """ + """ + return ''.join(self.parsed) + fills['eb'] \ No newline at end of file diff --git a/lesscpy/test/less/ie.less b/lesscpy/test/less/ie.less index e69de29..0205e2f 100644 --- a/lesscpy/test/less/ie.less +++ b/lesscpy/test/less/ie.less @@ -0,0 +1,26 @@ +@fat: 0; +@cloudhead: "#000000"; +// +// IE Filters +// +.nav { + filter: ~'progid:DXImageTransform.Microsoft.gradient(startColorstr="#333333", endColorstr="@{cloudhead}", GradientType=@{fat})'; +} +.nav1 { + filter: ~"progid:DXImageTransform.Microsoft.Alpha(opacity=@{fat})"; +} +.nav2 { + filter: ~'progid:DXImageTransform.Microsoft.gradient(startColorstr="#333333", endColorstr="@{cloudhead}", GradientType=@{fat})'; +} +// +// IE Hacks +// +body { + *zoom: 1px; +} +>body { + *zoom: 1px; +} +html * { + height: 12px; +} \ No newline at end of file diff --git a/lesscpy/test/less/imports.less b/lesscpy/test/less/imports.less index e69de29..baf734e 100644 --- a/lesscpy/test/less/imports.less +++ b/lesscpy/test/less/imports.less @@ -0,0 +1,21 @@ +/* + CSS imports +*/ +@import 'some.css.file.css'; +@import 'some/other.css.file.CSS'; +/* + CSS imports (media) +*/ +@import 'some.css' all; +@import "some.print.css" print; +/* + Less imports +*/ +@import './imports/import.less'; +@import './imports/import.less'; // redundant +@import './imports/import_f'; // No ext +.import { + .mixin; + .mixf(6px); + height: @imported; +} \ No newline at end of file diff --git a/lesscpy/test/less/properties-uri.less b/lesscpy/test/less/properties-uri.less index e69de29..9291e79 100644 --- a/lesscpy/test/less/properties-uri.less +++ b/lesscpy/test/less/properties-uri.less @@ -0,0 +1,23 @@ +/* + CSS url/uri +*/ +#data-uri { + background: url(data:image/png;charset=utf-8;base64, + kiVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD/ + k//+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4U + kg9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC); + background-image: url(data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9==); +} +#svg-data-uri { + background: transparent url('data:image/svg+xml, '); +} +.uri_test { + background-image: url(images/image.jpg); + background-image: url(../some/path); + background-image: url(./../some/path); + background-image: url(./images/image.jpg); + background-image: url(http://some/path/img.jpeg); + background-image: url(https://some.server.com:9696/path/img.jpeg); + behavior:url(border-radius.htc); + background-image: url(fonts.svg#MyGeometricModern); +} \ No newline at end of file