]> gitweb.factorcode.org Git - factor.git/blobdiff - extra/modern/slices/slices.factor
factor: trim some using lists
[factor.git] / extra / modern / slices / slices.factor
index a7d0c0a9379e8ebdaa999864762d8d7d68f00b8f..8d3d9da8d0b3f27b4b97efc634469738baddc1cc 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2016 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors assocs kernel math sequences sequences.deep
-sequences.extras combinators.extras strings unicode ;
+USING: accessors assocs combinators.extras kernel math sequences
+sequences.deep sequences.extras strings unicode ;
 IN: modern.slices
 
 : >strings ( seq -- str )
@@ -181,9 +181,9 @@ ERROR: expected-sequence-error expected actual ;
 ERROR: subseq-expected-but-got-eof n string expected ;
 
 :: slice-til-string ( n string search --  n' string payload end-string )
-    search string n subseq-start-from :> n'
+    n string search subseq-index-from :> n'
     n' [ n string search subseq-expected-but-got-eof ] unless
-    n' search length +  string
+    n' search length + string
     n n' string ?<slice>
     n' dup search length + string ?<slice> ;
 
@@ -203,4 +203,35 @@ ERROR: subseq-expected-but-got-eof n string expected ;
     ] unless ;
 
 : rewind-slice ( n string slice -- n' string )
-    2nip [ from>> ] [ seq>> ] bi ; inline
\ No newline at end of file
+    2nip [ from>> ] [ seq>> ] bi ; inline
+
+:: take-from? ( n seq subseq -- n'/f seq ? )
+    n seq subseq subseq-starts-at? [
+        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 ;