         [ "f" format-float-fast ]
         [ [ ".0" ?tail drop ] [ drop ] if-zero ] bi
     ] [ format-decimal-simple ] if ;
-
-ERROR: unknown-printf-directive ;
 
 EBNF: parse-printf [=[
 

fmt-f     = digits "f"           => [[ first '[ _ format-decimal ] ]]
fmt-x     = "x"                  => [[ [ >integer >hex ] ]]
fmt-X     = "X"                  => [[ [ >integer >hex >upper ] ]]
unknown   = (.)*                 => [[ unknown-printf-directive ]]

strings_  = fmt-c|fmt-C|fmt-s|fmt-S|fmt-u
strings   = pad width strings_   => [[ <reversed> compose-all ]]

fmt-y     = "y"                  => [[ [ year>> 100 mod pad-00 ] ]]
fmt-Y     = "Y"                  => [[ [ year>> number>string ] ]]
fmt-Z     = "Z"                  => [[ [ "Not yet implemented" throw ] ]]
unknown   = (.)*                 => [[ "" like unknown-format-directive ]]

formats_  = fmt-%|fmt-a|fmt-A|fmt-b|fmt-B|fmt-c|fmt-d|fmt-H|fmt-I|
            fmt-j|fmt-m|fmt-M|fmt-p|fmt-S|fmt-U|fmt-w|fmt-W|fmt-x|
