diff options
author | Eevee (Lexy Munroe) <eevee.git@veekun.com> | 2016-06-08 16:56:56 -0700 |
---|---|---|
committer | Eevee (Lexy Munroe) <eevee.git@veekun.com> | 2016-06-08 16:56:56 -0700 |
commit | 466a68ce0278105828d41c36d2341e18aed89348 (patch) | |
tree | 94c64c4e9f010cb5c5e36280c216e33df2b2a594 | |
parent | afff3b44df67a20845559eb33e723039fa501afe (diff) | |
download | pyscss-466a68ce0278105828d41c36d2341e18aed89348.tar.gz |
Avoid stripping inline comments that are part of URLs. Fixes #350
-rw-r--r-- | scss/cssdefs.py | 2 | ||||
-rw-r--r-- | scss/source.py | 6 | ||||
-rw-r--r-- | scss/tests/files/bugs/base64url.css | 3 | ||||
-rw-r--r-- | scss/tests/files/bugs/base64url.scss | 5 |
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); +} |