ascii: adding >words, >title, and capitalize.

db4
John Benediktsson 2013-03-31 16:09:37 -07:00
parent 042d86846e
commit 9ce20403f7
3 changed files with 22 additions and 3 deletions

View File

@ -57,6 +57,18 @@ HELP: >upper
{ $values { "str" "a string" } { "upper" "a string" } } { $values { "str" "a string" } { "upper" "a string" } }
{ $description "Converts an ASCII string to upper case." } ; { $description "Converts an ASCII string to upper case." } ;
HELP: >title
{ $values { "str" "a string" } { "title" "a string" } }
{ $description "Converts a string to title case." } ;
HELP: >words
{ $values { "str" "a string" } { "words" "an array of slices" } }
{ $description "Divides the string up into words." } ;
HELP: capitalize
{ $values { "str" "a string" } { "str'" "a string" } }
{ $description "Capitalize all the words in a string." } ;
ARTICLE: "ascii" "ASCII" ARTICLE: "ascii" "ASCII"
"The " { $vocab-link "ascii" } " vocabulary implements support for the legacy ASCII character set. Most applications should use " { $link "unicode" } " instead." "The " { $vocab-link "ascii" } " vocabulary implements support for the legacy ASCII character set. Most applications should use " { $link "unicode" } " instead."
$nl $nl
@ -77,6 +89,7 @@ $nl
ch>upper ch>upper
>lower >lower
>upper >upper
>title
} ; } ;
ABOUT: "ascii" ABOUT: "ascii"

View File

@ -1,4 +1,4 @@
USING: ascii tools.test sequences kernel math ; USING: ascii tools.test sequences kernel math strings ;
IN: ascii.tests IN: ascii.tests
[ t ] [ CHAR: a letter? ] unit-test [ t ] [ CHAR: a letter? ] unit-test
@ -17,3 +17,6 @@ IN: ascii.tests
[ "HELLO HOW ARE YOU?" ] [ "hellO hOw arE YOU?" >upper ] unit-test [ "HELLO HOW ARE YOU?" ] [ "hellO hOw arE YOU?" >upper ] unit-test
[ "i'm good thx bai" ] [ "I'm Good THX bai" >lower ] unit-test [ "i'm good thx bai" ] [ "I'm Good THX bai" >lower ] unit-test
[ "Hello How Are You?" ] [ "hEllo how ARE yOU?" >title ] unit-test
[ { " " "Hello" " " "World" } ] [ " Hello World" >words [ >string ] map ] unit-test

View File

@ -1,7 +1,7 @@
! Copyright (C) 2005, 2009 Slava Pestov. ! Copyright (C) 2005, 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: kernel math math.order sequences strings USING: combinators.short-circuit hints kernel math math.order
combinators.short-circuit hints ; sequences splitting strings ;
IN: ascii IN: ascii
: ascii? ( ch -- ? ) 0 127 between? ; inline : ascii? ( ch -- ? ) 0 127 between? ; inline
@ -18,6 +18,9 @@ IN: ascii
: >lower ( str -- lower ) [ ch>lower ] map ; : >lower ( str -- lower ) [ ch>lower ] map ;
: ch>upper ( ch -- upper ) dup letter? [ 0x20 - ] when ; inline : ch>upper ( ch -- upper ) dup letter? [ 0x20 - ] when ; inline
: >upper ( str -- upper ) [ ch>upper ] map ; : >upper ( str -- upper ) [ ch>upper ] map ;
: >words ( str -- words ) [ blank? ] split*-when-slice ;
: capitalize ( str -- str' ) unclip [ >lower ] [ ch>upper ] bi* prefix ;
: >title ( str -- title ) >words [ capitalize ] map concat ;
HINTS: >lower string ; HINTS: >lower string ;
HINTS: >upper string ; HINTS: >upper string ;