Some simplification to printf, more to come.

db4
John Benediktsson 2008-09-20 21:46:35 -07:00
parent c7f0815553
commit 6d2a25efc3
1 changed files with 5 additions and 6 deletions

View File

@ -31,11 +31,10 @@ IN: printf
[ "." split1 ] dip [ CHAR: 0 pad-right ] [ head-slice ] bi "." swap 3append ; [ "." split1 ] dip [ CHAR: 0 pad-right ] [ head-slice ] bi "." swap 3append ;
: max-width ( string length -- string ) : max-width ( string length -- string )
[ dup length ] dip [ > ] keep swap [ head-slice >string ] [ drop ] if ; short head ;
: >exponential ( n -- base exp ) : >exponential ( n -- base exp )
[ 0 < ] keep abs [ 0 < ] keep abs 0
0
[ swap dup [ 10.0 >= ] keep 1.0 < or ] [ swap dup [ 10.0 >= ] keep 1.0 < or ]
[ dup 10.0 >= [ dup 10.0 >=
[ 10.0 / [ 1+ ] dip swap ] [ 10.0 / [ 1+ ] dip swap ]
@ -43,7 +42,7 @@ IN: printf
] [ swap ] while ] [ swap ] while
[ number>string ] dip [ number>string ] dip
dup abs number>string 2 CHAR: 0 pad-left dup abs number>string 2 CHAR: 0 pad-left
[ 0 < [ "-" ] [ "+" ] if ] dip append [ 0 < "-" "+" ? ] dip append
"e" prepend "e" prepend
rot [ [ "-" prepend ] dip ] when ; rot [ [ "-" prepend ] dip ] when ;
@ -53,11 +52,11 @@ zero = "0" => [[ CHAR: 0 ]]
char = "'" (.) => [[ second ]] char = "'" (.) => [[ second ]]
pad-char = (zero|char)? => [[ CHAR: \s or 1quotation ]] pad-char = (zero|char)? => [[ CHAR: \s or 1quotation ]]
pad-align = ("-")? => [[ [ [ pad-right ] ] [ [ pad-left ] ] if ]] pad-align = ("-")? => [[ [ pad-right ] [ pad-left ] ? ]]
pad-width = ([0-9])* => [[ >digits 1quotation ]] pad-width = ([0-9])* => [[ >digits 1quotation ]]
pad = pad-align pad-char pad-width => [[ reverse compose-all [ first ] keep swap 0 = [ drop [ ] ] when ]] pad = pad-align pad-char pad-width => [[ reverse compose-all [ first ] keep swap 0 = [ drop [ ] ] when ]]
sign = ("+")? => [[ [ [ dup CHAR: - swap index not [ "+" prepend ] when ] ] [ [ ] ] if ]] sign = ("+")? => [[ [ dup CHAR: - swap index not [ "+" prepend ] when ] [ ] ? ]]
width_ = "." ([0-9])* => [[ second >digits '[ _ max-width ] ]] width_ = "." ([0-9])* => [[ second >digits '[ _ max-width ] ]]
width = (width_)? => [[ [ ] or ]] width = (width_)? => [[ [ ] or ]]