diff options
-rw-r--r-- | tex/context/third/cyrillicnumbers/cyrillicnumbers.lua | 84 | ||||
-rw-r--r-- | tex/context/third/cyrillicnumbers/t-cyrillicnumbers.mkiv | 8 |
2 files changed, 65 insertions, 27 deletions
diff --git a/tex/context/third/cyrillicnumbers/cyrillicnumbers.lua b/tex/context/third/cyrillicnumbers/cyrillicnumbers.lua index 72ed5e4..62c634d 100644 --- a/tex/context/third/cyrillicnumbers/cyrillicnumbers.lua +++ b/tex/context/third/cyrillicnumbers/cyrillicnumbers.lua @@ -29,7 +29,7 @@ local iowrite = io.write local mathceil = math.ceil local mathfloor = math.floor local tableconcat = table.concat -local tablemaxn = table.maxn +--local tablemaxn = table.maxn local tableinsert = table.insert local utf8char = unicode.utf8.char local utf8len = unicode.utf8.len @@ -77,14 +77,9 @@ local cyrillic_100k = utf8char(0x488) -- combining hundred thousands sign local cyrillic_1m = utf8char(0x489) -- combining million sign local cyrillic_titlo = utf8char(0x483) -- combining titlo -cyrnum.last_synonyms = { - final = true, - last = true, - right = true, - rightmost = true, - ["false"] = true, -} - +--[[ldx-- +<p>Some string synonyms for user convenience.</p> +--ldx]]-- cyrnum.yes_synonyms = { yes = true, yeah = true, @@ -97,9 +92,28 @@ cyrnum.no_synonyms = { ["false"] = true, } +--[[ldx-- +<p><type>m</type> for rounded down middle position, <type>l</type> for final +position. Will default to initial position otherwise.</p> +--ldx]]-- +cyrnum.position_synonyms = { + final = "l", + last = "l", + right = "l", + rightmost = "l", + ["false"] = "l", + middle = "m", + center = "m", + ["true"] = "m", +} + +--[[ldx-- +<p>Digits above the thirds require special markers, some of which need to be +placed before, others after the determined character.</p> +--ldx]]-- local handle_plus1k = function (digit) local before, after - if digit == 7 then + if digit == 7 then after = cyrillic_1m elseif cyrnum.prefer100k and digit == 6 then after = cyrillic_100k @@ -116,9 +130,14 @@ end -- [4] = print this after character (e.g. million signs) -- } +--[[ldx-- +<p>The base list of digits denotes empty (zero) digits with "false" values +instead of characters. The function <type>digits_only</type> will extract only +the nonempty digit values, returning a list.</p> +--ldx]]-- local digits_only = function (list) local result = { } - for i=1, tablemaxn(list) do + for i=1, #list do local elm = list[i] if type(elm) == "string" then local before, after @@ -131,21 +150,37 @@ local digits_only = function (list) 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 +--[[ldx-- +<p>The different ways for drawing the <italic>titlo</italic> are stored inside +a table. Basically, the options are to use the titlos symbol that is provided +by the font or to draw the titlo in <l n="metapost"/>.</p> +--ldx]]-- +local lreverse = function(list)local r={}for i=#list,1,-1 do r[#r+1]=list[i]end return r end local start_titlo, stop_titlo = [[\cyrnumdrawtitlo{]], "}" local titlofuncs = { font = function (list) + local result, titlopos = { }, #list if cyrnum.titlolocation == "l" then - local result = lreverse(list) - result[#result+1] = cyrillic_titlo - return result + titlopos = 1 + elseif cyrnum.titlolocation == "m" then + titlopos = mathceil(#list/2) end - -- “middle” (“m”) or whatever - local pos = mathceil(tablemaxn(list)/2) - tableinsert(list, mathceil(tablemaxn(list)/2), cyrillic_titlo) - return lreverse(list) + for i=#list, 1, -1 do + local char, digit, before, after = list[i][1], list[i][2], list[i][3], list[i][4] + if before then + result[#result+1] = before + end + result[#result+1] = char + if after then + result[#result+1] = after + end + if i == titlopos then + result[#result+1] = cyrillic_titlo + end + end + return result end, mp = function (list) local result = { } @@ -155,9 +190,9 @@ local titlofuncs = { if titlotype == true then -- number titlostart = (#list >= titlospan) and titlospan or #list end - for i=tablemaxn(list), 1, -1 do - --local char, digit, before, after = list[i][1], list[i][2], list[i][ - local char, digit, before, after = unpack(list[i]) + for i=#list, 1, -1 do + local char, digit, before, after = list[i][1], list[i][2], list[i][3], list[i][4] + --local char, digit, before, after = unpack(list[i]) if i == titlostart then result[#result+1] = start_titlo end @@ -175,10 +210,13 @@ local titlofuncs = { no = function (x) return x end, } +--[[ldx-- +<p>Concatenation of the digit list has to take into account different conditions: whether the user requests the dot markers to be added, whether a titlo is requested etc.</p> +--ldx]]-- local concat_cyrillic_nums = function (list, upper) local result = "" local digits = digits_only(list) -- strip placeholders - local nlist, ndigits = tablemaxn(list), tablemaxn(digits) + local nlist, ndigits = #list, #digits dbg(list) --dbg(digits) local titlo = titlofuncs[cyrnum.placetitlo] diff --git a/tex/context/third/cyrillicnumbers/t-cyrillicnumbers.mkiv b/tex/context/third/cyrillicnumbers/t-cyrillicnumbers.mkiv index 600bee4..24e7b56 100644 --- a/tex/context/third/cyrillicnumbers/t-cyrillicnumbers.mkiv +++ b/tex/context/third/cyrillicnumbers/t-cyrillicnumbers.mkiv @@ -37,7 +37,7 @@ \s!parent=\v!cyrnum, setup=\v!list, style=\v!no, - type=module, + type=module, version=hg-tip, ] @@ -47,9 +47,9 @@ \startluacode local tc = thirddata.cyrnum tc.placetitlo = "\cyrnumparameter{\v!titlo}" - tc.titlolocation = tc.last_synonyms["\cyrnumparameter{\v!titlolocation}"] and "l" or "m" - tc.prefer100k = tc. yes_synonyms["\cyrnumparameter{\v!preferhundredk}"] or false - tc.drawdots = tc. yes_synonyms["\cyrnumparameter{\v!dots}"] or false + tc.titlolocation = tc.position_synonyms["\cyrnumparameter{\v!titlolocation}"] or "f" + tc.prefer100k = tc. yes_synonyms["\cyrnumparameter{\v!preferhundredk}"] or false + tc.drawdots = tc. yes_synonyms["\cyrnumparameter{\v!dots}"] or false tc.dotsymbol = "\cyrnumparameter{\v!dotsymbol}" local span = "\cyrnumparameter{\v!titlospan}" |