@@ -253,8 +253,7 @@ impl<'a> StrftimeItems<'a> {
253
253
/// const ITEMS: &[Item<'static>] = &[
254
254
/// Item::Numeric(Numeric::Year, Pad::Zero),
255
255
/// Item::Literal("-"),
256
- /// Item::Literal("%"),
257
- /// Item::Literal("Q"),
256
+ /// Item::Literal("%Q"),
258
257
/// ];
259
258
/// println!("{:?}", strftime_parser.clone().collect::<Vec<_>>());
260
259
/// assert!(strftime_parser.eq(ITEMS.iter().cloned()));
@@ -458,22 +457,14 @@ impl<'a> StrftimeItems<'a> {
458
457
}
459
458
} ;
460
459
461
- let mut error_len = 0 ;
462
- if self . lenient {
463
- error_len += 1 ;
464
- }
465
-
466
460
macro_rules! next {
467
461
( ) => {
468
462
match remainder. chars( ) . next( ) {
469
463
Some ( x) => {
470
464
remainder = & remainder[ x. len_utf8( ) ..] ;
471
- if self . lenient {
472
- error_len += x. len_utf8( ) ;
473
- }
474
465
x
475
466
}
476
- None => return Some ( self . error( original, & mut error_len , None ) ) , // premature end of string
467
+ None => return Some ( ( remainder , self . error( original, remainder ) ) ) , // premature end of string
477
468
}
478
469
} ;
479
470
}
@@ -489,7 +480,7 @@ impl<'a> StrftimeItems<'a> {
489
480
let is_alternate = spec == '#' ;
490
481
let spec = if pad_override. is_some ( ) || is_alternate { next ! ( ) } else { spec } ;
491
482
if is_alternate && !HAVE_ALTERNATES . contains ( spec) {
492
- return Some ( self . error ( original, & mut error_len , Some ( spec ) ) ) ;
483
+ return Some ( ( remainder , self . error ( original, remainder ) ) ) ;
493
484
}
494
485
495
486
macro_rules! queue {
@@ -600,71 +591,39 @@ impl<'a> StrftimeItems<'a> {
600
591
remainder = & remainder[ 1 ..] ;
601
592
fixed ( Fixed :: TimezoneOffsetColon )
602
593
} else {
603
- self . error ( original, & mut error_len , None ) . 1
594
+ self . error ( original, remainder )
604
595
}
605
596
}
606
597
'.' => match next ! ( ) {
607
598
'3' => match next ! ( ) {
608
599
'f' => fixed ( Fixed :: Nanosecond3 ) ,
609
- c => {
610
- let res = self . error ( original, & mut error_len, Some ( c) ) ;
611
- remainder = res. 0 ;
612
- res. 1
613
- }
600
+ _ => self . error ( original, remainder) ,
614
601
} ,
615
602
'6' => match next ! ( ) {
616
603
'f' => fixed ( Fixed :: Nanosecond6 ) ,
617
- c => {
618
- let res = self . error ( original, & mut error_len, Some ( c) ) ;
619
- remainder = res. 0 ;
620
- res. 1
621
- }
604
+ _ => self . error ( original, remainder) ,
622
605
} ,
623
606
'9' => match next ! ( ) {
624
607
'f' => fixed ( Fixed :: Nanosecond9 ) ,
625
- c => {
626
- let res = self . error ( original, & mut error_len, Some ( c) ) ;
627
- remainder = res. 0 ;
628
- res. 1
629
- }
608
+ _ => self . error ( original, remainder) ,
630
609
} ,
631
610
'f' => fixed ( Fixed :: Nanosecond ) ,
632
- c => {
633
- let res = self . error ( original, & mut error_len, Some ( c) ) ;
634
- remainder = res. 0 ;
635
- res. 1
636
- }
611
+ _ => self . error ( original, remainder) ,
637
612
} ,
638
613
'3' => match next ! ( ) {
639
614
'f' => internal_fixed ( Nanosecond3NoDot ) ,
640
- c => {
641
- let res = self . error ( original, & mut error_len, Some ( c) ) ;
642
- remainder = res. 0 ;
643
- res. 1
644
- }
615
+ _ => self . error ( original, remainder) ,
645
616
} ,
646
617
'6' => match next ! ( ) {
647
618
'f' => internal_fixed ( Nanosecond6NoDot ) ,
648
- c => {
649
- let res = self . error ( original, & mut error_len, Some ( c) ) ;
650
- remainder = res. 0 ;
651
- res. 1
652
- }
619
+ _ => self . error ( original, remainder) ,
653
620
} ,
654
621
'9' => match next ! ( ) {
655
622
'f' => internal_fixed ( Nanosecond9NoDot ) ,
656
- c => {
657
- let res = self . error ( original, & mut error_len, Some ( c) ) ;
658
- remainder = res. 0 ;
659
- res. 1
660
- }
623
+ _ => self . error ( original, remainder) ,
661
624
} ,
662
625
'%' => Literal ( "%" ) ,
663
- c => {
664
- let res = self . error ( original, & mut error_len, Some ( c) ) ;
665
- remainder = res. 0 ;
666
- res. 1
667
- }
626
+ _ => self . error ( original, remainder) ,
668
627
} ;
669
628
670
629
// Adjust `item` if we have any padding modifier.
@@ -675,27 +634,18 @@ impl<'a> StrftimeItems<'a> {
675
634
Item :: Numeric ( ref kind, _pad) if self . queue . is_empty ( ) => {
676
635
Some ( ( remainder, Item :: Numeric ( kind. clone ( ) , new_pad) ) )
677
636
}
678
- _ => Some ( self . error ( original, & mut error_len , None ) ) ,
637
+ _ => Some ( ( remainder , self . error ( original, remainder ) ) ) ,
679
638
}
680
639
} else {
681
640
Some ( ( remainder, item) )
682
641
}
683
642
}
684
643
685
- fn error < ' b > (
686
- & mut self ,
687
- original : & ' b str ,
688
- error_len : & mut usize ,
689
- ch : Option < char > ,
690
- ) -> ( & ' b str , Item < ' b > ) {
691
- if !self . lenient {
692
- return ( & original[ * error_len..] , Item :: Error ) ;
693
- }
694
-
695
- if let Some ( c) = ch {
696
- * error_len -= c. len_utf8 ( ) ;
644
+ fn error < ' b > ( & mut self , original : & ' b str , remainder : & ' b str ) -> Item < ' b > {
645
+ match self . lenient {
646
+ false => Item :: Error ,
647
+ true => Item :: Literal ( & original[ ..original. len ( ) - remainder. len ( ) ] ) ,
697
648
}
698
- ( & original[ * error_len..] , Item :: Literal ( & original[ ..* error_len] ) )
699
649
}
700
650
701
651
#[ cfg( feature = "unstable-locales" ) ]
0 commit comments