From 23b495f46b4d2e9264d54095f43774ef47d3a656 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Fri, 14 Jul 2017 21:22:10 +0200 Subject: 2017-07-14 19:41:00 --- tex/context/base/mkiv/util-str.lua | 39 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'tex/context/base/mkiv/util-str.lua') diff --git a/tex/context/base/mkiv/util-str.lua b/tex/context/base/mkiv/util-str.lua index cebbc6be2..6d8f198ab 100644 --- a/tex/context/base/mkiv/util-str.lua +++ b/tex/context/base/mkiv/util-str.lua @@ -423,6 +423,27 @@ end -- print(number.formatted(12345678,true)) -- print(number.formatted(1234.56,"!","?")) +local p = Cs( + P("-")^0 + * (P("0")^1/"")^0 + * (1-P("."))^0 + * (P(".") * P("0")^1 * P(-1)/"" + P(".")^0) + * P(1-P("0")^1*P(-1))^0 + ) + +function number.compactfloat(n,fmt) + if n == 0 then + return "0" + elseif n == 1 then + return "1" + end + n = lpegmatch(p,format(fmt or "%0.3f",n)) + if n == "." or n == "" or n == "-" then + return "0" + end + return n +end + local zero = P("0")^1 / "" local plus = P("+") / "" local minus = P("-") @@ -1183,3 +1204,21 @@ local pattern = Cs((newline / (os.newline or "\r") + 1)^0) function string.replacenewlines(str) return lpegmatch(pattern,str) end + +-- + +function strings.newcollector() + local result, r = { }, 0 + return + function(fmt,str,...) -- write + r = r + 1 + result[r] = str == nil and fmt or formatters[fmt](str,...) + end, + function(connector) -- flush + if result then + local str = concat(result,connector) + result, r = { }, 0 + return str + end + end +end -- cgit v1.2.3