More languages
More actions
No edit summary |
No edit summary |
||
| Line 10: | Line 10: | ||
while args['item' .. i] do | while args['item' .. i] do | ||
items[i] = args['item' .. i] | items[i] = args['item' .. i] | ||
levels[i] = tonumber(args['level' .. i]) or 2 | levels[i] = tonumber(args['level' .. i]) or 2 -- Default to level 2 | ||
i = i + 1 | i = i + 1 | ||
end | end | ||
if #items == 0 then | if #items == 0 then | ||
return '' | return '' | ||
end | end | ||
-- Find | -- Find minimum level | ||
local min_level = math.min(table.unpack(levels)) | local min_level = math.min(table.unpack(levels)) | ||
local list = {} | local list = {} | ||
local | local prev_level = 0 | ||
for idx = 1, #items do | for idx = 1, #items do | ||
local | local normalized_level = levels[idx] - min_level + 1 | ||
local item = items[idx] | local item = items[idx] | ||
-- | -- Add list line | ||
table.insert(list, string.rep('#', normalized_level) .. ' ' .. item .. '\n') | |||
prev_level = normalized_level | |||
end | end | ||
Revision as of 18:42, 12 August 2025
local p = {}
function p.main(frame)
local args = frame:getParent().args
local items = {}
local levels = {}
-- Collect all TOC items and their levels
local i = 1
while args['item' .. i] do
items[i] = args['item' .. i]
levels[i] = tonumber(args['level' .. i]) or 2 -- Default to level 2
i = i + 1
end
if #items == 0 then
return ''
end
-- Find minimum level
local min_level = math.min(table.unpack(levels))
local list = {}
local prev_level = 0
for idx = 1, #items do
local normalized_level = levels[idx] - min_level + 1
local item = items[idx]
-- Add list line
table.insert(list, string.rep('#', normalized_level) .. ' ' .. item .. '\n')
prev_level = normalized_level
end
return '<div class="book-toc">\n' .. table.concat(list) .. '</div>'
end
return p