diff --git a/lesscpy/lessc/parser.py b/lesscpy/lessc/parser.py
index 5e59e6e..820e21b 100644
--- a/lesscpy/lessc/parser.py
+++ b/lesscpy/lessc/parser.py
@@ -75,10 +75,10 @@ class LessParser(object):
@param string: Filename
@param int: Debuglevel
"""
+ if self.verbose: print('Compiling target: %s' % filename)
self.scope.push()
self.target = filename
self.result = self.parser.parse(filename, lexer=self.lex, debug=debuglevel)
-# [print(r) for r in self.result]
def scopemap(self):
""" Output scopemap.
diff --git a/lesscpy/lessc/scope.py b/lesscpy/lessc/scope.py
index 18d908d..b353113 100644
--- a/lesscpy/lessc/scope.py
+++ b/lesscpy/lessc/scope.py
@@ -11,7 +11,8 @@ class Scope(list):
"""
self.append({
'__variables__' : {},
- '__blocks__': {},
+ '__blocks__': [],
+ '__names__': [],
'__current__': None
})
@@ -30,7 +31,8 @@ class Scope(list):
def add_block(self, block):
"""
"""
- self[-1]['__blocks__'][block.name] = block
+ self[-1]['__blocks__'].append(block)
+ self[-1]['__names__'].append(block.name.strip())
def add_mixin(self, mixin):
"""
@@ -65,8 +67,10 @@ class Scope(list):
i = len(self)
while i >= 0:
i -= 1
- if name in self[i]['__blocks__']:
- return self[i]['__blocks__'][name]
+ if name in self[i]['__names__']:
+ for b in self[i]['__blocks__']:
+ if b.name.strip() == name:
+ return b
return False
def in_mixin(self):
@@ -80,5 +84,6 @@ class Scope(list):
"""
self._mixins.update(scope._mixins)
self[0]['__variables__'].update(scope[0]['__variables__'])
- self[0]['__blocks__'].update(scope[0]['__blocks__'])
+ self[0]['__blocks__'].extend(scope[0]['__blocks__'])
+ self[0]['__names__'].extend(scope[0]['__names__'])
\ No newline at end of file
diff --git a/lesscpy/scripts/compiler.py b/lesscpy/scripts/compiler.py
index d4b1fa3..2019c8e 100644
--- a/lesscpy/scripts/compiler.py
+++ b/lesscpy/scripts/compiler.py
@@ -111,7 +111,6 @@ def run():
scope = None
if args.include:
for u in args.include.split(','):
- if args.debug: print("compiling include: %s" % u)
p = parser.LessParser(
yacc_debug=False,
lex_optimize=True,
@@ -134,7 +133,6 @@ def run():
if args.dry_run:
print('Dry run, nothing done.')
else:
- if args.verbose: print("compiling target: %s" % args.target)
p = parser.LessParser(yacc_debug=(args.debug),
lex_optimize=True,
yacc_optimize=(not args.debug),
diff --git a/lesscpy/test/css/properties-uri.css b/lesscpy/test/css/properties-uri.css
new file mode 100644
index 0000000..949a468
--- /dev/null
+++ b/lesscpy/test/css/properties-uri.css
@@ -0,0 +1,20 @@
+#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);
+}
diff --git a/lesscpy/test/css/properties-uri.min.css b/lesscpy/test/css/properties-uri.min.css
new file mode 100644
index 0000000..bd9d5dd
--- /dev/null
+++ b/lesscpy/test/css/properties-uri.min.css
@@ -0,0 +1,6 @@
+#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);}
diff --git a/lesscpy/test/less/imports/circular.less b/lesscpy/test/less/imports/circular.less
new file mode 100644
index 0000000..92094f7
--- /dev/null
+++ b/lesscpy/test/less/imports/circular.less
@@ -0,0 +1 @@
+@import 'circular.less';
\ No newline at end of file
diff --git a/lesscpy/test/less/imports/import.less b/lesscpy/test/less/imports/import.less
new file mode 100644
index 0000000..4338bba
--- /dev/null
+++ b/lesscpy/test/less/imports/import.less
@@ -0,0 +1,5 @@
+@imported: 9px;
+
+.mixin {
+ color: red;
+}
\ No newline at end of file
diff --git a/lesscpy/test/less/imports/import_f.less b/lesscpy/test/less/imports/import_f.less
new file mode 100644
index 0000000..4325fc1
--- /dev/null
+++ b/lesscpy/test/less/imports/import_f.less
@@ -0,0 +1,6 @@
+/*
+
+*/
+.mixf (@var: 7px) {
+ width: @var;
+}
\ No newline at end of file
diff --git a/lesscpy/test/testissues.py b/lesscpy/test/testissues.py
new file mode 100644
index 0000000..2512ded
--- /dev/null
+++ b/lesscpy/test/testissues.py
@@ -0,0 +1,40 @@
+"""
+ lesscpy tests. Issues
+"""
+import unittest
+import os
+import glob
+import bootstrap
+
+from lesscpy.lessc import parser
+from lesscpy.lessc import formatter
+
+
+class TestCase(unittest.TestCase):
+ pass
+
+def create_test (pair):
+ def do_test_expected(self):
+ if os.path.exists(pair[1]):
+ p = parser.LessParser()
+ p.parse(filename=pair[0])
+ f = formatter.Formatter()
+ pout = f.format(p).split('\n')
+ i = 0
+ with open(pair[1]) as cssf:
+ for line in cssf.readlines():
+ self.assertEqual(line.rstrip(), pout[i], '%s: Line %d' % (pair[1], i+1))
+ i += 1
+ else: self.fail('%s not found' % pair[1])
+ return do_test_expected
+
+LESS = glob.glob( os.path.join('less/issues/', '*.less'))
+for less in LESS:
+ css = less.split('.')[0].split('/')[-1]
+ css = 'css/issues/' + css + '.css'
+ test_method = create_test((less, css))
+ test_method.__name__ = 'test_%s' % less.replace('./-', '_')
+ setattr(TestCase, test_method.__name__, test_method)
+
+if __name__=="__main__":
+ unittest.main()
\ No newline at end of file