@@ -154,6 +154,21 @@ namespace Sass
154
154
155
155
}
156
156
157
+ static size_t findFirstCharacter (std::string& sass, size_t pos)
158
+ {
159
+ return sass.find_first_not_of (SASS2SCSS_FIND_WHITESPACE, pos);
160
+ }
161
+
162
+ static size_t findLastCharacter (std::string& sass, size_t pos)
163
+ {
164
+ return sass.find_last_not_of (SASS2SCSS_FIND_WHITESPACE, pos);
165
+ }
166
+
167
+ static bool isUrl (std::string& sass, size_t pos)
168
+ {
169
+ return sass[pos] == ' u' && sass[pos+1 ] == ' r' && sass[pos+2 ] == ' l' && sass[pos+3 ] == ' (' ;
170
+ }
171
+
157
172
// check if there is some char data
158
173
// will ignore everything in comments
159
174
static bool hasCharData (std::string& sass)
@@ -587,6 +602,7 @@ namespace Sass
587
602
sass.substr (pos_left, 5 ) == " @warn" ||
588
603
sass.substr (pos_left, 6 ) == " @debug" ||
589
604
sass.substr (pos_left, 6 ) == " @error" ||
605
+ sass.substr (pos_left, 6 ) == " @value" ||
590
606
sass.substr (pos_left, 8 ) == " @charset" ||
591
607
sass.substr (pos_left, 10 ) == " @namespace"
592
608
) { sass = indent + sass.substr (pos_left); }
@@ -606,23 +622,38 @@ namespace Sass
606
622
{
607
623
// get positions for the actual import url
608
624
size_t pos_import = sass.find_first_of (SASS2SCSS_FIND_WHITESPACE, pos_left + 7 );
609
- size_t pos_quote = sass.find_first_not_of (SASS2SCSS_FIND_WHITESPACE, pos_import);
610
- // leave proper urls untouched
611
- if (sass.substr (pos_quote, 4 ) != " url(" )
612
- {
613
- // check if the url appears to be already quoted
614
- if (sass.substr (pos_quote, 1 ) != " \" " && sass.substr (pos_quote, 1 ) != " \' " )
615
- {
616
- // get position of the last char on the line
617
- size_t pos_end = sass.find_last_not_of (SASS2SCSS_FIND_WHITESPACE);
618
- // assertion check for valid result
619
- if (pos_end != std::string::npos)
620
- {
621
- // add quotes around the full line after the import statement
622
- sass = sass.substr (0 , pos_quote) + " \" " + sass.substr (pos_quote, pos_end - pos_quote + 1 ) + " \" " ;
625
+ size_t pos = sass.find_first_not_of (SASS2SCSS_FIND_WHITESPACE, pos_import);
626
+ size_t start = pos;
627
+ bool in_dqstr = false ;
628
+ bool in_sqstr = false ;
629
+ bool is_escaped = false ;
630
+ do {
631
+ if (is_escaped) {
632
+ is_escaped = false ;
633
+ }
634
+ else if (sass[pos] == ' \\ ' ) {
635
+ is_escaped = true ;
636
+ }
637
+ else if (sass[pos] == ' "' ) {
638
+ if (!in_sqstr) in_dqstr = ! in_dqstr;
639
+ }
640
+ else if (sass[pos] == ' \' ' ) {
641
+ if (!in_dqstr) in_sqstr = ! in_sqstr;
642
+ }
643
+ else if (in_dqstr || in_sqstr) {
644
+ // skip over quoted stuff
645
+ }
646
+ else if (sass[pos] == ' ,' || sass[pos] == 0 ) {
647
+ if (sass[start] != ' "' && sass[start] != ' \' ' && !isUrl (sass, start)) {
648
+ size_t end = findLastCharacter (sass, pos - 1 ) + 1 ;
649
+ sass = sass.replace (end, 0 , " \" " );
650
+ sass = sass.replace (start, 0 , " \" " );
651
+ pos += 2 ;
623
652
}
653
+ start = findFirstCharacter (sass, pos + 1 );
624
654
}
625
655
}
656
+ while (sass[pos++] != 0 );
626
657
627
658
}
628
659
else if (
0 commit comments