@@ -51,6 +51,12 @@ use nom::{
5151 InputIter ,
5252 InputLength ,
5353 InputTake ,
54+ InputTakeAtPosition ,
55+ IResult ,
56+ Err ,
57+ Needed ,
58+ Context ,
59+ ErrorKind ,
5460 Offset ,
5561 Slice
5662} ;
@@ -825,32 +831,42 @@ pub struct Span<'a> {
825831 slice : Input < ' a >
826832}
827833
834+ impl < ' a > InputTakeAtPosition for Span < ' a > {
835+ type Item = InputElement ;
836+
837+ fn split_at_position < P > ( & self , predicate : P ) -> IResult < Self , Self , u32 >
838+ where
839+ P : Fn ( Self :: Item ) -> bool ,
840+ {
841+ match ( 0 ..self . slice . len ( ) ) . find ( |b| predicate ( self . slice [ * b] ) ) {
842+ Some ( i) => Ok ( ( self . slice ( i..) , self . slice ( ..i) ) ) ,
843+ None => Err ( Err :: Incomplete ( Needed :: Size ( 1 ) ) ) ,
844+ }
845+ }
846+
847+ fn split_at_position1 < P > ( & self , predicate : P , e : ErrorKind < u32 > ) -> IResult < Self , Self , u32 >
848+ where
849+ P : Fn ( Self :: Item ) -> bool ,
850+ {
851+ match ( 0 ..self . slice . len ( ) ) . find ( |b| predicate ( self . slice [ * b] ) ) {
852+ Some ( 0 ) => Err ( Err :: Error ( Context :: Code ( * self , e) ) ) ,
853+ Some ( i) => {
854+ Ok ( ( self . slice ( i..) , self . slice ( ..i) ) )
855+ } ,
856+ None => Err ( Err :: Incomplete ( Needed :: Size ( 1 ) ) ) ,
857+ }
858+ }
859+ }
860+
828861impl < ' a > InputTake for Span < ' a > {
829862 fn take ( & self , count : usize ) -> Self {
830- Span {
831- offset : self . offset ,
832- line : self . line ,
833- column : self . column ,
834- slice : self . slice . take ( count) ,
835- }
863+ self . slice ( ..count)
836864 }
837865
838866 fn take_split ( & self , count : usize ) -> ( Self , Self ) {
839- let ( left, right) = self . slice . take_split ( count) ;
840-
841867 (
842- Span {
843- offset : self . offset ,
844- line : self . line ,
845- column : self . column ,
846- slice : left,
847- } ,
848- Span {
849- offset : self . offset ,
850- line : self . line ,
851- column : self . column ,
852- slice : right,
853- } ,
868+ self . slice ( count..) ,
869+ self . slice ( ..count) ,
854870 )
855871 }
856872}
0 commit comments