Modul:Parallel pages sections
Kod för {{Parallella sidor}}
, kopierad från Engelska Wikisource 2021-10-12.
local p = {} --p stands for package
local getArgs = require('Module:Arguments').getArgs
--[=[
Convert the positional parameters into a list of pagenum/sec nums for transclusion
=]=]
function p.get_section_list( args )
local i = 1
local out = {}
while args[ i ] do
-- check for a "hoisted" section at the end
local parts = mw.text.split( args[ i ], ';' )
local page_num
local cont_section
local init_parts = mw.text.split( parts[ 1 ], '/' )
page_num = init_parts[ 1 ]
local first_sec
local last_sec
if #init_parts > 1 then
local range_parts = mw.text.split( init_parts[ 2 ], '-' )
if #range_parts == 1 then
first_sec = 1
last_sec = range_parts[ 1 ]
else
first_sec = range_parts[ 1 ]
last_sec = range_parts[ 2 ]
end
end
if first_sec and last_sec then
for sec_num = first_sec, last_sec do
table.insert( out, {
pagenums = { page_num },
secnum = tostring( sec_num )
} )
end
end
local cont_pages = {}
if #parts > 1 then
-- split off the section name
local cont_parts = mw.text.split( parts[ 2 ], '/' )
-- pages are comma-separated
cont_pages = mw.text.split( cont_parts[1], ',')
-- the section name is at the end
cont_section = cont_parts[2]
end
if #cont_pages > 0 then
-- also include the cont section on the first page
table.insert( cont_pages, 1, page_num )
table.insert( out, {
pagenums = cont_pages,
secnum = cont_section
} )
end
i = i + 1
end
return out
end
--[=[
Render a single section with the <pages> tag
]=]
function render_section(frame, index, pagenums, section)
return frame:callParserFunction{
name = '#tag:pages',
args = {
index=index,
include=table.concat( pagenums, ',' ),
onlysection=section,
header = 0
}
}
end
--[=[
Main entry point
]=]
function p.main(frame)
mw.logObject(getArgs)
local args = getArgs(frame)
local pref_l = args.prefix_l
local pref_r = args.prefix_r
local cont_section = args.cont_section or 'cont'
local secs = p.get_section_list( args, cont_section )
mw.logObject(secs)
local out = ''
for _, sec in pairs(secs) do
out = out .. frame:expandTemplate{
title='tt2',
args = {
[1] = render_section(frame, args.index, sec.pagenums, pref_l .. sec.secnum ),
[2] = render_section(frame, args.index, sec.pagenums, pref_r .. sec.secnum )
}
}
end
return out
end
return p