] unless ;
: rewind-slice ( n string slice -- n' string )
- 2nip [ from>> ] [ seq>> ] bi ; inline
- pick [
- length swap [ - ] dip
- ] [
- [ nip ] dip [ [ length ] bi@ - ] keepd
- ] if ; inline
++ 2nip [ from>> ] [ seq>> ] bi ; inline
+
+ :: take-from? ( n seq subseq -- n'/f seq ? )
+ subseq seq n pick length (subseq-start-from) 2nip [
+ n subseq length +
+ seq
+ t
+ ] [
+ n seq f
+ ] if ;
+
+ : check-slice? ( from to seq -- from to seq ? )
+ pick 0 < [
+ f
+ ] [
+ 2dup length > [
+ f
+ ] [
+ t
+ ] if
+ ] if ; inline
+
+ :: take-from-insensitive? ( n seq str -- n'/f seq ? )
+ n str length over + seq check-slice? [
+ subseq str [ >lower ] bi@ sequence= [
+ n str length + seq t
+ ] [
+ n seq f
+ ] if
+ ] [
+ 3drop n seq f
+ ] if ;