@@ -2588,23 +2588,37 @@ namespace Sass {
2588
2588
void Parser::css_error (const std::string& msg, const std::string& prefix, const std::string& middle)
2589
2589
{
2590
2590
int max_len = 18 ;
2591
+ const char * end = this ->end ;
2592
+ while (*end != 0 ) ++ end;
2591
2593
const char * pos = peek < optional_spaces >();
2592
2594
2593
- const char * last_pos (pos - 1 );
2595
+ const char * last_pos (pos);
2596
+ if (last_pos > source) {
2597
+ utf8::prior (last_pos, source);
2598
+ }
2594
2599
// backup position to last significant char
2595
- while ((!*last_pos || Prelexer::is_space (*last_pos)) && last_pos > source) -- last_pos;
2600
+ while (last_pos > source && last_pos < end) {
2601
+ if (!Prelexer::is_space (*last_pos)) break ;
2602
+ utf8::prior (last_pos, source);
2603
+ }
2596
2604
2597
2605
bool ellipsis_left = false ;
2598
- const char * pos_left (last_pos + 1 );
2599
- const char * end_left (last_pos + 1 );
2606
+ const char * pos_left (last_pos);
2607
+ const char * end_left (last_pos);
2608
+
2609
+ utf8::next (pos_left, end);
2610
+ utf8::next (end_left, end);
2600
2611
while (pos_left > source) {
2601
- if (end_left - pos_left >= max_len) {
2602
- ellipsis_left = *(pos_left-1 ) != ' \n ' &&
2603
- *(pos_left-1 ) != ' \r ' ;
2612
+ if (utf8::distance (pos_left, end_left) >= max_len) {
2613
+ utf8::prior (pos_left, source);
2614
+ ellipsis_left = *(pos_left) != ' \n ' &&
2615
+ *(pos_left) != ' \r ' ;
2616
+ utf8::next (pos_left, end);
2604
2617
break ;
2605
2618
}
2606
2619
2607
- const char * prev = pos_left - 1 ;
2620
+ const char * prev = pos_left;
2621
+ utf8::prior (prev, source);
2608
2622
if (*prev == ' \r ' ) break ;
2609
2623
if (*prev == ' \n ' ) break ;
2610
2624
pos_left = prev;
@@ -2616,15 +2630,15 @@ namespace Sass {
2616
2630
bool ellipsis_right = false ;
2617
2631
const char * end_right (pos);
2618
2632
const char * pos_right (pos);
2619
- while (* end_right != 0 ) {
2620
- if (end_right - pos_right > max_len) {
2633
+ while (end_right < end ) {
2634
+ if (utf8::distance ( pos_right, end_right) > max_len) {
2621
2635
ellipsis_left = *(pos_right) != ' \n ' &&
2622
2636
*(pos_right) != ' \r ' ;
2623
2637
break ;
2624
2638
}
2625
2639
if (*end_right == ' \r ' ) break ;
2626
2640
if (*end_right == ' \n ' ) break ;
2627
- ++ end_right;
2641
+ utf8::next ( end_right, end) ;
2628
2642
}
2629
2643
// if (*end_right == 0) end_right ++;
2630
2644
0 commit comments