summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/mkiv/strc-lev.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkiv/strc-lev.lua')
-rw-r--r--Master/texmf-dist/tex/context/base/mkiv/strc-lev.lua39
1 files changed, 29 insertions, 10 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkiv/strc-lev.lua b/Master/texmf-dist/tex/context/base/mkiv/strc-lev.lua
index d7ffd6af434..ec5dcf6f0a5 100644
--- a/Master/texmf-dist/tex/context/base/mkiv/strc-lev.lua
+++ b/Master/texmf-dist/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 {