]> gitweb.factorcode.org Git - factor.git/blobdiff - extra/math/text/english/english.factor
factor: trim using lists
[factor.git] / extra / math / text / english / english.factor
index 5a4d7ae0f900afe6967760002583f75ddcdf10e4..662e46ef75f86157b2bd1b4a21a6396ad2652d99 100644 (file)
@@ -1,7 +1,7 @@
-! Copyright (c) 2007, 2008 Aaron Schaefer.
+! Copyright (c) 2007, 2008, 2018 Aaron Schaefer.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: combinators.short-circuit grouping kernel math
-math.functions math.parser math.text.utils namespaces sequences
+USING: combinators combinators.short-circuit kernel math
+math.order math.parser math.text.utils namespaces sequences
 splitting ;
 IN: math.text.english
 
@@ -104,7 +104,7 @@ M: float number>text
         [ string>number number>text ]
         [ [ "negative " prepend ] when ] bi*
     ] [
-        [ CHAR: 0 - small-numbers ] { } map-as " " join
+        [ CHAR: 0 - small-numbers ] { } map-as join-words
     ] bi* " point " glue ;
 
 M: complex number>text
@@ -112,3 +112,25 @@ M: complex number>text
         [ 0 < " minus " " plus " ? ]
         [ abs number>text " i" append ] bi
     ] bi* 3append ;
+
+: ordinal-suffix ( n -- suffix )
+    abs dup 100 mod 11 13 between? [ drop "th" ] [
+        10 mod {
+            { 1 [ "st" ] }
+            { 2 [ "nd" ] }
+            { 3 [ "rd" ] }
+            [ drop "th" ]
+        } case
+    ] if ;
+
+: number-ap-style ( n -- str )
+    dup { [ integer? ] [ 0 9 between? ] } 1&&
+    [ number>text ] [ number>string ] if ;
+
+: ordinal-ap-style ( n -- str )
+    dup {
+        f "first" "second" "third" "fourth" "fifth" "sixth"
+        "seventh" "eighth" "ninth"
+    } ?nth [ nip ] [
+        [ number>string ] [ ordinal-suffix ] bi append
+    ] if* ;