summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEevee (Lexy Munroe) <eevee.git@veekun.com>2016-06-08 16:56:56 -0700
committerEevee (Lexy Munroe) <eevee.git@veekun.com>2016-06-08 16:56:56 -0700
commit466a68ce0278105828d41c36d2341e18aed89348 (patch)
tree94c64c4e9f010cb5c5e36280c216e33df2b2a594
parentafff3b44df67a20845559eb33e723039fa501afe (diff)
downloadpyscss-466a68ce0278105828d41c36d2341e18aed89348.tar.gz
Avoid stripping inline comments that are part of URLs. Fixes #350
-rw-r--r--scss/cssdefs.py2
-rw-r--r--scss/source.py6
-rw-r--r--scss/tests/files/bugs/base64url.css3
-rw-r--r--scss/tests/files/bugs/base64url.scss5
4 files changed, 15 insertions, 1 deletions
diff --git a/scss/cssdefs.py b/scss/cssdefs.py
index 46b6877..5d9b7eb 100644
--- a/scss/cssdefs.py
+++ b/scss/cssdefs.py
@@ -480,6 +480,8 @@ _collapse_properties_space_re = re.compile(r'([:#])\s*{')
_variable_re = re.compile('^\\$[-a-zA-Z0-9_]+$')
_strings_re = re.compile(r'([\'"]).*?\1')
+# TODO i know, this is clumsy and won't always work; it's better than nothing
+_urls_re = re.compile(r'url[(].*?[)]')
_has_placeholder_re = re.compile(r'(?<!\w)([a-z]\w*)?%')
_prop_split_re = re.compile(r'[:=]')
diff --git a/scss/source.py b/scss/source.py
index 462278d..bb1f1ec 100644
--- a/scss/source.py
+++ b/scss/source.py
@@ -13,7 +13,7 @@ import six
from scss.cssdefs import (
_ml_comment_re, _sl_comment_re,
_collapse_properties_space_re,
- _strings_re,
+ _strings_re, _urls_re,
)
from scss.cssdefs import determine_encoding
@@ -356,6 +356,10 @@ class SourceFile(object):
lambda m: _reverse_safe_strings_re.sub(
lambda n: _reverse_safe_strings[n.group(0)], m.group(0)),
codestr)
+ codestr = _urls_re.sub(
+ lambda m: _reverse_safe_strings_re.sub(
+ lambda n: _reverse_safe_strings[n.group(0)], m.group(0)),
+ codestr)
# removes multiple line comments
codestr = _ml_comment_re.sub('', codestr)
diff --git a/scss/tests/files/bugs/base64url.css b/scss/tests/files/bugs/base64url.css
new file mode 100644
index 0000000..846635e
--- /dev/null
+++ b/scss/tests/files/bugs/base64url.css
@@ -0,0 +1,3 @@
+.logo {
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAP0lEQVQIHWWMAQoAIAgDR/QJ/Ub//04+w7ZICBwcOg5FZi5iBB82AGzixEglJrd4TVK5XUJpskSTEvpdFzX9AB2pGziSQcvAAAAAAElFTkSuQmCC);
+}
diff --git a/scss/tests/files/bugs/base64url.scss b/scss/tests/files/bugs/base64url.scss
new file mode 100644
index 0000000..38c73a6
--- /dev/null
+++ b/scss/tests/files/bugs/base64url.scss
@@ -0,0 +1,5 @@
+// Two slashes inside a URL were being stripped as a comment, leaving bogus SCSS
+// https://github.com/Kronuz/pyScss/issues/350
+.logo {
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAP0lEQVQIHWWMAQoAIAgDR/QJ/Ub//04+w7ZICBwcOg5FZi5iBB82AGzixEglJrd4TVK5XUJpskSTEvpdFzX9AB2pGziSQcvAAAAAAElFTkSuQmCC);
+}