@@ -605,6 +605,9 @@ extend Tokenizer {
605
605
len -= 1;
606
606
607
607
mut ch := self.text[start + 1..self.pos].clone();
608
+ if self.prefs.is_fmt {
609
+ return ch;
610
+ }
608
611
if len != 1 {
609
612
// the string inside the backticks is longer than one character
610
613
// but we might only have one rune... attempt to decode escapes
@@ -625,7 +628,7 @@ extend Tokenizer {
625
628
}
626
629
}
627
630
ch = if escaped_hex {
628
- decode_h_escapes(ch, 0, escapes_pos)
631
+ self. decode_h_escapes(ch, 0, escapes_pos)
629
632
} else {
630
633
decode_o_escapes(ch, 0, escapes_pos)
631
634
};
@@ -712,10 +715,9 @@ extend Tokenizer {
712
715
self.error(r"`\u` incomplete unicode character value", pos);
713
716
}
714
717
u_escapes_pos.push(self.pos - 1);
715
- }
716
- // unknown escape sequence
717
- if c !in [b'x', b'u', b'e', b'n', b'r', b't', b'v', b'a', b'f', b'b',
718
- b'\\', b'@', b'?', b'{', b'}', b'\'', b'"'] and !c.is_digit() {
718
+ } else if c !in [b'x', b'u', b'e', b'n', b'r', b't', b'v', b'a', b'f', b'b',
719
+ b'\\', b'@', b'?', b'{', b'}', b'\'', b'"', b'$'] and !c.is_digit() {
720
+ // unknown escape sequence
719
721
self.pos -= 1;
720
722
self.error(
721
723
"unknown escape sequence `{}`".fmt(c.to_ascii()),
@@ -732,35 +734,37 @@ extend Tokenizer {
732
734
mut lit := "";
733
735
if start <= self.pos {
734
736
lit = self.text[start + 1..self.pos].clone();
735
- mut segment_idx: uint := 0;
736
- mut str_segments := @vec(string);
737
- if u_escapes_pos.len + h_escapes_pos.len > 0 {
738
- mut all_pos := @vec(uint, u_escapes_pos.len + h_escapes_pos.len);
739
- for pos1 in u_escapes_pos {
740
- all_pos.push(pos1);
741
- }
742
- for pos1 in h_escapes_pos {
743
- all_pos.push(pos1);
744
- }
745
- for pos1 in all_pos {
746
- str_segments.push(lit[segment_idx..(pos1 - start)]);
747
- segment_idx = pos1 - start;
748
- if pos1 in u_escapes_pos {
749
- (end_idx, segment) := decode_u_escape_single(lit, segment_idx);
750
- str_segments.push(segment);
751
- segment_idx = end_idx;
737
+ if !self.prefs.is_fmt {
738
+ mut segment_idx: uint := 0;
739
+ mut str_segments := @vec(string);
740
+ if u_escapes_pos.len + h_escapes_pos.len > 0 {
741
+ mut all_pos := @vec(uint, u_escapes_pos.len + h_escapes_pos.len);
742
+ for pos1 in u_escapes_pos {
743
+ all_pos.push(pos1);
752
744
}
753
- if pos1 in h_escapes_pos {
754
- (end_idx, segment) := decode_h_escape_single(lit, segment_idx);
755
- str_segments.push(segment);
756
- segment_idx = end_idx;
745
+ for pos1 in h_escapes_pos {
746
+ all_pos.push(pos1);
747
+ }
748
+ for pos1 in all_pos {
749
+ str_segments.push(lit[segment_idx..(pos1 - start)]);
750
+ segment_idx = pos1 - start;
751
+ if pos1 in u_escapes_pos {
752
+ (end_idx, segment) := decode_u_escape_single(lit, segment_idx);
753
+ str_segments.push(segment);
754
+ segment_idx = end_idx;
755
+ }
756
+ if pos1 in h_escapes_pos {
757
+ (end_idx, segment) := self.decode_h_escape_single(lit, segment_idx);
758
+ str_segments.push(segment);
759
+ segment_idx = end_idx;
760
+ }
757
761
}
758
762
}
763
+ if segment_idx < lit.len {
764
+ str_segments.push(lit[segment_idx..]);
765
+ }
766
+ lit = utils.join(str_segments, "");
759
767
}
760
- if segment_idx < lit.len {
761
- str_segments.push(lit[segment_idx..]);
762
- }
763
- lit = utils.join(str_segments, "");
764
768
if n_cr_chars > 0 {
765
769
lit = lit.replace("\r", "");
766
770
}
0 commit comments