summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/strc-lev.lua
diff options
context:
space:
mode:
authorContext Git Mirror Bot <phg42.2a@gmail.com>2016-04-25 14:10:48 +0200
committerContext Git Mirror Bot <phg42.2a@gmail.com>2016-04-25 14:10:48 +0200
commit4668b7323a6bc1b01e72418fb646b697d68bbcb7 (patch)
tree926785b550bed158e0489d209edbab366c6997c2 /tex/context/base/mkiv/strc-lev.lua
parent55666205c2c1a7287105e23f58e2047c1e0dbc5a (diff)
downloadcontext-4668b7323a6bc1b01e72418fb646b697d68bbcb7.tar.gz
2016-04-25 13:34:00
Diffstat (limited to 'tex/context/base/mkiv/strc-lev.lua')
-rw-r--r--tex/context/base/mkiv/strc-lev.lua39
1 files changed, 29 insertions, 10 deletions
diff --git a/tex/context/base/mkiv/strc-lev.lua b/tex/context/base/mkiv/strc-lev.lua
index d7ffd6af4..ec5dcf6f0 100644
--- a/tex/context/base/mkiv/strc-lev.lua
+++ b/tex/context/base/mkiv/strc-lev.lua
@@ -7,6 +7,7 @@ if not modules then modules = { } end modules ['strc-lev'] = {
}
local insert, remove = table.insert, table.remove
+local settings_to_array = utilities.parsers.settings_to_array
local context = context
local interfaces = interfaces
@@ -15,6 +16,7 @@ local sections = structures.sections
local implement = interfaces.implement
local v_default = interfaces.variables.default
+local v_auto = interfaces.variables.auto
sections.levels = sections.levels or { }
@@ -27,29 +29,46 @@ local f_two_colon = string.formatters["%s:%s"]
storage.register("structures/sections/levels", levels, "structures.sections.levels")
local function definesectionlevels(category,list)
- levels[category] = utilities.parsers.settings_to_array(list)
+ list = settings_to_array(list)
+ for i=1,#list do
+ list[i] = settings_to_array(list[i])
+ end
+ levels[category] = list
end
-local function startsectionlevel(category)
+local function startsectionlevel(n,category,current)
category = category ~= "" and category or v_default
- level = level + 1
local lc = levels[category]
+ for i=1,#lc do
+ local lcl = lc[i]
+ if (lcl[n] or lcl[1]) == current then
+ level = i
+ break
+ end
+ end
+ level = level + 1
if not lc or level > #lc then
context.nostarthead { f_two_colon(category,level) }
else
- context.dostarthead { lc[level] }
+ local lcl = lc[level]
+ if n > #lcl then
+ n = #lcl
+ end
+ context.dostarthead { lc[level][n] }
end
- insert(categories,category)
+ insert(categories,{ category, n })
end
local function stopsectionlevel()
- local category = remove(categories)
- if category then
+ local top = remove(categories)
+ if top then
+ local category = top[1]
+ local n = top[2]
local lc = levels[category]
if not lc or level > #lc then
context.nostophead { f_two_colon(category,level) }
else
- context.dostophead { lc[level] }
+ context.dostophead { lc[level][n] }
end
level = level - 1
else
@@ -60,13 +79,13 @@ end
implement {
name = "definesectionlevels",
actions = definesectionlevels,
- arguments = { "string", "string" }
+ arguments = { "string", "string" },
}
implement {
name = "startsectionlevel",
actions = startsectionlevel,
- arguments = "string"
+ arguments = { "integer", "string", "string" },
}
implement {