@@ -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,6 +831,51 @@ 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 ( ( Span {
843+ offset : self . offset ,
844+ line : self . line ,
845+ column : self . column ,
846+ slice : & self . slice [ i..] ,
847+ } , Span {
848+ offset : self . offset ,
849+ line : self . line ,
850+ column : self . column ,
851+ slice : & self . slice [ ..i] ,
852+ } ) ) ,
853+ None => Err ( Err :: Incomplete ( Needed :: Size ( 1 ) ) ) ,
854+ }
855+ }
856+
857+ fn split_at_position1 < P > ( & self , predicate : P , e : ErrorKind < u32 > ) -> IResult < Self , Self , u32 >
858+ where
859+ P : Fn ( Self :: Item ) -> bool ,
860+ {
861+ match ( 0 ..self . slice . len ( ) ) . find ( |b| predicate ( self . slice [ * b] ) ) {
862+ Some ( 0 ) => Err ( Err :: Error ( Context :: Code ( * self , e) ) ) ,
863+ Some ( i) => Ok ( ( Span {
864+ offset : self . offset ,
865+ line : self . line ,
866+ column : self . column ,
867+ slice : & self . slice [ i..] ,
868+ } , Span {
869+ offset : self . offset ,
870+ line : self . line ,
871+ column : self . column ,
872+ slice : & self . slice [ ..i] ,
873+ } ) ) ,
874+ None => Err ( Err :: Incomplete ( Needed :: Size ( 1 ) ) ) ,
875+ }
876+ }
877+ }
878+
828879impl < ' a > InputTake for Span < ' a > {
829880 fn take ( & self , count : usize ) -> Self {
830881 Span {
0 commit comments