From 43c3e8238103f6cabaa619c0866232a7d0f3054b Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Wed, 3 Apr 2013 08:55:48 -0700 Subject: [PATCH] sequence.extras: adding ?trim-head and ?trim-tail. --- extra/sequences/extras/extras-tests.factor | 5 +++++ extra/sequences/extras/extras.factor | 14 +++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/extra/sequences/extras/extras-tests.factor b/extra/sequences/extras/extras-tests.factor index 199e56d090..c8f794c3b0 100644 --- a/extra/sequences/extras/extras-tests.factor +++ b/extra/sequences/extras/extras-tests.factor @@ -77,6 +77,11 @@ IN: sequences.extras.tests { t } [ "ABC" dup [ blank? ] ?trim [ identity-hashcode ] same? ] unit-test { "ABC" } [ " ABC " [ blank? ] ?trim ] unit-test +{ t } [ "ABC" dup [ blank? ] ?trim-head [ identity-hashcode ] same? ] unit-test +{ t } [ "ABC" dup [ blank? ] ?trim-tail [ identity-hashcode ] same? ] unit-test +{ "ABC " } [ " ABC " [ blank? ] ?trim-head ] unit-test +{ " ABC" } [ " ABC " [ blank? ] ?trim-tail ] unit-test + { "" } [ "" "" "" unsurround ] unit-test { "" } [ " " " " " " unsurround ] unit-test { "foo.com" } [ "http://foo.com" "http://" "/" unsurround ] unit-test diff --git a/extra/sequences/extras/extras.factor b/extra/sequences/extras/extras.factor index 31a0bbeebd..803c0e5bd9 100644 --- a/extra/sequences/extras/extras.factor +++ b/extra/sequences/extras/extras.factor @@ -242,12 +242,24 @@ PRIVATE> : trim-as ( ... seq quot: ( ... elt -- ... ? ) exemplar -- ... newseq ) [ trim-slice ] [ like ] bi* ; inline -: ?trim ( ... seq quot: ( ... elt -- ... ? ) -- ... seq/newseq ) +: ?trim ( seq quot: ( elt -- ? ) -- seq/newseq ) over empty? [ drop ] [ over [ first-unsafe ] [ last-unsafe ] bi pick bi@ or [ trim ] [ drop ] if ] if ; inline +: ?trim-head ( seq quot: ( elt -- ? ) -- seq/newseq ) + over empty? [ drop ] [ + over first-unsafe over call + [ trim-head ] [ drop ] if + ] if ; inline + +: ?trim-tail ( seq quot: ( elt -- ? ) -- seq/newseq ) + over empty? [ drop ] [ + over last-unsafe over call + [ trim-tail ] [ drop ] if + ] if ; inline + : unsurround ( newseq seq2 seq3 -- seq1 ) [ ?head drop ] [ ?tail drop ] bi* ;