! Copyright (C) 2008, 2010 Slava Pestov, Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
-USING: accessors arrays calendar calendar.english combinators
+USING: accessors calendar calendar.english combinators
formatting grouping io io.streams.string kernel make math
-math.order math.parser math.parser.private math.ranges present
+math.order math.parser math.parser.private ranges present
quotations sequences splitting strings words ;
IN: calendar.format
[ number>string ] [ month-name ] bi* swap " " glue 20 center. ;
: days-header. ( -- )
- day-abbreviations2 " " join print ;
+ day-abbreviations2 join-words print ;
: days. ( year month -- )
- [ 1 zeller-congruence dup [ " " write ] times ]
- [ (days-in-month) ] 2bi [1,b] [
+ [ 1 (day-of-week) dup [ " " write ] times ]
+ [ (days-in-month) ] 2bi [1..b] [
[ day. ] [ + 7 mod zero? [ nl ] [ bl ] if ] bi
] with each nl ;
PRIVATE>
-GENERIC: month. ( obj -- )
-
-M: array month.
- first2 [ month-header. ] [ days-header. days. ] 2bi ;
-
-M: timestamp month.
- [ year>> ] [ month>> ] bi 2array month. ;
+: month. ( timestamp -- )
+ [ year>> ] [ month>> ] bi
+ [ month-header. ] [ days-header. days. ] 2bi ;
GENERIC: year. ( obj -- )
M: integer year.
- dup number>string 64 center. nl 12 [1,b] [
+ dup number>string 64 center. nl 12 [1..b] [
[
[ month-name 20 center. ]
[ days-header. days. nl nl ] bi
- ] with-string-writer string-lines
+ ] with-string-writer split-lines
] with map 3 <groups>
[ first3 [ "%-20s %-20s %-20s\n" printf ] 3each ] each ;
[ hh:mm:ss ] with-string-writer ;
: timestamp>ymdhms ( timestamp -- str )
- [ >gmt YYYY-MM-DD " " hh:mm:ss ] with-string-writer ;
+ [ >gmt { YYYY-MM-DD " " hh:mm:ss } formatted ] with-string-writer ;
: write-gmt-offset-hhmm ( gmt-offset -- )
[ hour>> dup 0 < "-" "+" ? write abs write-00 ] [ mm ] bi ;
: write-rfc1036 ( timestamp -- )
{
- DAY ", " DD "-" MONTH "-" YYYY " " hh ":" mm ":" ss " "
+ DAY ", " DD "-" MONTH "-" YYYY " " hh:mm:ss " "
[ gmt-offset>> write-gmt-offset ]
} formatted ;
: write-rfc2822 ( timestamp -- )
{
- DAY ", " D " " MONTH " " YYYY " " hh ":" mm ":" ss " "
+ DAY ", " D " " MONTH " " YYYY " " hh:mm:ss " "
[ gmt-offset>> write-gmt-offset ]
} formatted ;
: write-rfc3339 ( timestamp -- )
{
- YYYY "-" MM "-" DD "T" hh ":" mm ":" ss.SSSSSS
+ YYYY-MM-DD "T" hh:mm:ss.SSSSSS
[ gmt-offset>> write-gmt-offset-z ]
} formatted ;
: write-iso8601 ( timestamp -- )
{
- YYYY "-" MM "-" DD "T" hh ":" mm ":" ss.SSSSSS
+ YYYY-MM-DD "T" hh:mm:ss.SSSSSS
[ gmt-offset>> write-gmt-offset-hh:mm ]
} formatted ;
: write-ctime ( timestamp -- )
{
- DAY " " MONTH " " DD " " hh ":" mm ":" ss " " YYYY
+ DAY " " MONTH " " DD " " hh:mm:ss " " YYYY
} formatted ;
: timestamp>ctime-string ( timestamp -- str )
: timestamp>git-string ( timestamp -- str )
[
{
- DAY " " MONTH " " D " " hh ":" mm ":" ss " " YYYY " "
+ DAY " " MONTH " " D " " hh:mm:ss " " YYYY " "
[ gmt-offset>> write-gmt-offset-hhmm ]
} formatted
] with-string-writer ;
>gmt timestamp>rfc1036 ;
: write-timestamp ( timestamp -- )
- { DAY ", " D " " MONTH " " YYYY " " hh ":" mm ":" ss } formatted ;
+ { DAY ", " D " " MONTH " " YYYY " " hh:mm:ss } formatted ;
: timestamp>string ( timestamp -- str )
[ write-timestamp ] with-string-writer ;
[ duration>minutes >integer 60 mod pad-00 ] bi ":" glue ;
: duration>hms ( duration -- str )
- [ duration>hm ] [ second>> >integer 60 mod pad-00 ] bi ":" glue ;
+ [ duration>hm ]
+ [ duration>seconds >integer 60 mod pad-00 ] bi ":" glue ;
: duration>human-readable ( duration -- string )
[
[ first [ /mod ] [ dup ] if* ] [ second ] bi swap
dup 0 > [ number>string prepend , ] [ 2drop ] if
] each drop
- ] { } make [ "0s" ] [ reverse " " join ] if-empty ;
+ ] { } make [ "0s" ] [ reverse join-words ] if-empty ;
M: real elapsed-time
>integer elapsed-time ;