Pastey (std/text.e) - format function patch
- Posted by cargoan Jan 11, 2015
--- text.e-ori 2015-01-11 22:39:43.819905851 +0100
+++ text.e 2015-01-11 22:58:55.695413520 +0100
@@ -1439,7 +1439,9 @@
object envsym
object envvar
integer ep
-
+ integer pflag
+ integer count
+
if atom(arg_list) then
arg_list = {arg_list}
end if
@@ -1677,7 +1679,7 @@
elsif integer(arg_list[argn])
-- for consistent formatting, we need to test in case of 64-bit euphoria
- and arg_list[argn] <= 0x3fff_fff
+ and arg_list[argn] <= 0x3fff_ffff
and arg_list[argn] >= -0x4000_0000 then
if istext then
argtext = {and_bits(0xFFFF_FFFF, math:abs(arg_list[argn]))}
@@ -1687,12 +1689,17 @@
elsif binout = 1 then
argtext = stdseq:reverse( convert:int_to_bits(arg_list[argn], 32)) + '0'
- for ib = 1 to length(argtext) do
- if argtext[ib] = '1' then
- argtext = argtext[ib .. $]
- exit
+ if zfill != 0 and width > 0 then
+ if width > length(argtext) then
+ argtext = repeat('0', width - length(argtext)) & argtext
end if
- end for
+ else
+ count = 1
+ while count < length(argtext) and argtext[count] = '0' do
+ count += 1
+ end while
+ argtext = argtext[count .. $]
+ end if
elsif hexout = 0 then
argtext = sprintf("%d", arg_list[argn])
@@ -1847,8 +1854,8 @@
ep = match("e+0", argtext)
end while
end if
- currargv = arg_list[argn]
- end if
+ currargv = arg_list[argn]
+ end if
if length(argtext) > 0 then
@@ -1871,21 +1878,35 @@
if atom(currargv) then
if find('e', argtext) = 0 then
-- Only applies to non-scientific notation.
+ pflag = 0
+ if msign and currargv < 0 then
+ pflag = 1
+ end if
+
if decs != -1 then
pos = find('.', argtext)
if pos then
if decs = 0 then
argtext = argtext [1 .. pos-1 ]
else
- pos = length(argtext) - pos
+ pos = length(argtext) - pos - pflag
if pos > decs then
argtext = argtext[ 1 .. $ - pos + decs ]
elsif pos < decs then
- argtext = argtext & repeat('0', decs - pos)
+ argtext = argtext[ 1 .. $ - pflag ] & repeat('0', decs - pos)
+ if pflag then
+ argtext = argtext[1 .. $ - 1] & '.' & repeat('0', decs) & ')'
+ else
+ argtext = argtext & '.' & repeat('0', decs)
+ end if
end if
end if
elsif decs > 0 then
- argtext = argtext & '.' & repeat('0', decs)
+ if pflag then
+ argtext = argtext[1 .. $ - 1] & '.' & repeat('0', decs) & '9'
+ else
+ argtext = argtext & '.' & repeat('0', decs)
+ end if
end if
end if
1. Comment by cargoan Jan 11, 2015
two first lines should be changed from
--- text.e-ori 2015-01-11 22:39:43.819905851 +0100 +++ text.e 2015-01-11 22:58:55.695413520 +0100to
--- text.e 2015-01-11 22:39:43.819905851 +0100 +++ text.e-new 2015-01-11 22:58:55.695413520 +0100
for apply patch to text.e include file.


