From a87765fc8ba61e73b88a10cafdf5711ffeb84117 Mon Sep 17 00:00:00 2001 From: Philipp Gesang Date: Sat, 3 Dec 2011 12:22:02 +0100 Subject: integrated titlos and dots --- .../third/cyrillicnumbers/cyrillicnumbers.lua | 123 ++++++++++++++++++--- 1 file changed, 108 insertions(+), 15 deletions(-) (limited to 'tex/context/third/cyrillicnumbers/cyrillicnumbers.lua') diff --git a/tex/context/third/cyrillicnumbers/cyrillicnumbers.lua b/tex/context/third/cyrillicnumbers/cyrillicnumbers.lua index d47c744..ab238ad 100644 --- a/tex/context/third/cyrillicnumbers/cyrillicnumbers.lua +++ b/tex/context/third/cyrillicnumbers/cyrillicnumbers.lua @@ -25,14 +25,46 @@ --- http://www.uni-giessen.de/partosch/eurotex99/berdnikov2.pdf --- +local iowrite = io.write +local mathceil = math.ceil local mathfloor = math.floor local tableconcat = table.concat +local tablemaxn = table.maxn +local tableinsert = table.insert local utf8char = unicode.utf8.char +local utf8len = unicode.utf8.len local utfupper = unicode.utf8.upper -thirddata = thirddata or { } +local cyrnum = { + placetitlo = "font", + titlolocation = "final", -- above final digit + titlospan = 3, -- only with mp + drawdots = true, + debug = false, +} -local cyrillic_placetitlo = true +thirddata = thirddata or { } +thirddata.cyrnum = cyrnum + +local dbgpfx = "[cyrnum]" +local dbg = function (...) + if cyrnum.debug then + local args = {...} + if type(args[1]) == "table" then args = args[1] end + iowrite(dbgpfx) + for i=1, #args do + local this = args[i] + local tthis = type(this) + iowrite" " + if tthis == "number" or tthis == "string" then + iowrite(this) + else + iowrite(tostring(this)) + end + end + iowrite"\n" + end +end local cyrillic_numerals = { { "а", "в", "г", "д", "е", "ѕ", "з", "и", "ѳ", }, @@ -44,22 +76,83 @@ local cyrillic_100k = utf8char(0x488) -- combining hundred thousands sign local cyrillic_1m = utf8char(0x489) -- combining million sign local cyrillic_titlo = utf8char(0x483) -- combining titlo -local concat_cyrillic_nums = function (chars, upper) - local result = "" - for i=#chars, 1, -1 do - local this = chars[i] - if this then - if upper then this = utfupper(this) end - if i > 3 then - result = result .. cyrillic_1k .. this - else - result = result .. this - end + +--local concat_cyrillic_nums = function (chars, upper) +-- dbg(chars) +-- local nchars, result = tablemaxn(chars), "" +-- --if cyrnum.placetitlo and cyrnum.titlomode == "fm" then -- above central char +-- -- dbg("char cnt", nchars) +-- -- dbg("insert pos", mathceil(nchars/2)) +-- -- tableinsert(chars, mathceil(nchars/2), cyrillic_titlo) +-- --end +-- for i=#chars, 1, -1 do +-- local this = chars[i] +-- if this then +-- if upper then this = utfupper(this) end +-- if i > 3 then +-- result = result .. cyrillic_1k .. this +-- else +-- result = result .. this +-- end +-- end +-- end +-- if cyrnum.placetitlo and cyrnum.titlomode == "fl" then -- take titlo from font, place it after / above last char +-- result = result .. cyrillic_titlo +-- end +-- return result +--end + +local digits_only = function (list) + local result = { } + for i=1, tablemaxn(list) do + local elm = list[i] + if type(elm) == "string" then + result[#result+1] = elm end end - if cyrillic_placetitlo then -- not all fonts do this well - result = result .. cyrillic_titlo + return result +end + +local lreverse = function(list)local r={}for i=tablemaxn(list),1,-1 do r[#r+1]=list[i]end return r end + +local start_titlo, stop_titlo = [[\cyrnumdrawtitlo{]], "}" + +local titlofuncs = { + font = function (list) + if cyrnum.titlolocation == "final" then + list[#list+1] = cyrillic_titlo + else -- “middle” or whatever + local pos = mathceil(tablemaxn(list)/2) + tableinsert(list, mathceil(tablemaxn(list)/2), cyrillic_titlo) + end + return lreverse(list) + end, + mp = function (list) + local result = { start_titlo } + for i=tablemaxn(list), 1, -1 do + result[#result+1] = list[i] + end + result[#result+1] = stop_titlo + return result + end, + no = function (x) return x end, +} + +local concat_cyrillic_nums = function (list, upper) + local result = "" + local digits = digits_only(list) -- strip placeholders + local nlist, ndigits = tablemaxn(list), tablemaxn(digits) + dbg(list) + dbg(digits) + local titlo = titlofuncs[cyrnum.placetitlo] + if titlo then + result = tableconcat(titlo(digits)) + if cyrnum.drawdots then + local sym = cyrnum.dotsymbol + result = sym .. result .. sym + end end + dbg(result) return result end -- cgit v1.2.3