@@ -537,4 +537,56 @@ impl Iterator for EscapeDefault {
537
537
EscapeDefaultState :: Done => ( 0 , Some ( 0 ) ) ,
538
538
}
539
539
}
540
+
541
+ fn count ( self ) -> usize {
542
+ match self . state {
543
+ EscapeDefaultState :: Char ( _) => 1 ,
544
+ EscapeDefaultState :: Unicode ( iter) => iter. count ( ) ,
545
+ EscapeDefaultState :: Done => 0 ,
546
+ EscapeDefaultState :: Backslash ( _) => 2 ,
547
+ }
548
+ }
549
+
550
+ fn nth ( & mut self , n : usize ) -> Option < char > {
551
+ let ch = match self . state {
552
+ EscapeDefaultState :: Backslash ( c) => c,
553
+ EscapeDefaultState :: Char ( c) => c,
554
+ EscapeDefaultState :: Done => return None ,
555
+ EscapeDefaultState :: Unicode ( ref mut i) => return iter. nth ( n) ,
556
+ } ;
557
+
558
+ let start = self . get_offset ( ) ;
559
+ let idx = start + n;
560
+
561
+ // Update state
562
+ self . state = match idx {
563
+ 0 => EscapeDefaultState :: Char ( c) ,
564
+ _ => EscapeDefaultState :: Done ,
565
+ } ;
566
+
567
+ match idx {
568
+ 0 => Some ( '\\' ) ,
569
+ 1 => Some ( c) ,
570
+ _ => None ,
571
+ }
572
+ }
573
+
574
+ fn last ( self ) -> Option < char > {
575
+ match self . state {
576
+ EscapeDefaultState :: Unicode ( iter) => iter. last ( ) ,
577
+ EscapeDefaultState :: Done => None ,
578
+ EscapeDefaultState :: Backslash ( c) | EscapeDefaultState :: Char ( c) => Some ( c) ,
579
+ }
580
+ }
581
+ }
582
+
583
+ impl EscapeDefault {
584
+ fn get_offset ( & self ) -> Option < usize > {
585
+ match self . state {
586
+ EscapeDefaultState :: Backslash ( c) => Some ( 0 ) ,
587
+ EscapeDefaultState :: Char ( c) => Some ( 1 ) ,
588
+ EscapeDefaultState :: Done => None ,
589
+ EscapeDefaultState :: Unicode ( ref mut iter) => None ,
590
+ }
591
+ }
540
592
}
0 commit comments