Module:PliMulti
Apparence
La documentation pour ce module peut être créée à Module:PliMulti/Documentation
-- =p.getPage("00:13;01:31;02:41;03:133;03/01:138;03/02: 287;03/03:313;04:337;05:375;06:473;07:519;08:539",520)
-- Traditions indiennes du Canada Nord-Ouest/08
local p = {}
local t = {} --nom de la sous-page:nopage du f-s
local ecarts = {} --table des changements d’écarts (nopage du livre:écart avec page du f-s)
local sep1 = ':'
local sep2 = ";"
local pageRoot
local ns
local pageNom
local pageObj
local pageIndex =''
--local test
--local data = mw.loadData( 'Module:PliMulti/Data' )
function p.compose(frame)
local args = frame.args
local szCode = ''
-- initSpace()
if args[1] == nil then
args = frame:getParent().args
end
local ecart = args['ecart'] --or '0'
if ecart and tonumber(ecart) == nil then
return 'L’argument ecart doit être numérique'
end
sep1 = args['sep1'] or ':'
sep2 = args['sep2'] or ';'
if args['ecarts'] ~= nil then
initSpace()
for i, v12 in ipairs( mw.text.split(args['ecarts'],sep2, true ) ) do
v = mw.text.split( v12, sep1, true )
table.insert(ecarts, { tonumber(v[1]), tonumber(v[2]) })
end
elseif ecart then
initSpace()
table.insert(ecarts, { 1, ecart })
else
loadData()
end
local parg = args['parg'] or '.'
local aParamSansNom = {}
local nNbreParamSansNom = 0
local szInfo = ''
local styleP
for i, v in ipairs(args) do
aParamSansNom[i] = mw.text.trim(v)
nNbreParamSansNom = nNbreParamSansNom + 1
szInfo = szInfo .. 'Paramètre ' .. i .. ' : ' .. aParamSansNom[i] .. '<br>\n'
if nNbreParamSansNom % 3 == 0 then
szInfo = szInfo .. '<br />\n'
end
end
if nNbreParamSansNom % 3 ~= 0 then
return '<span style="font-size:200%; color:red;">Prière de saisir 3 '
.. 'paramètres par ligne.</span><br />\n' .. szInfo
end
if ns == '' then
if args['index'] == nil then
-- pour fins de test
--p.index(frame)
--if t then return mw.dumpObject(t) end
else
for i, v12 in ipairs(mw.text.split(args['index'],sep2, true)) do
v = mw.text.split(v12,sep1, true)
table.insert(t, { v[1], tonumber(v[2]) })
end
end
end
if args['mode'] == 'table' then
if args['classe'] and args['classe'] ~= '' then
args['classe'] = args['classe'] .. ',no_erreurs_communes'
else
args['classe'] = 'no_erreurs_communes'
end
end
if args['classe'] and args['classe'] ~= '' then
szCode =szCode .. '<div class="' .. args['classe'] ..'">'
end
if args['mode'] == 'table' then
for n = 1, nNbreParamSansNom, 3 do
szCode = szCode .. '<div style="display:flex; ;" ><span style=' ..
'"padding-right:.3em;text-align-last:right;max-width:100% ">' .. aParamSansNom[n] .. '</span>'
szCode = szCode .. '<div style=" flex: 1; direction: rtl; ' ..
'overflow: hidden; white-space:nowrap; font-weight:bold; ' ..
'letter-spacing:.3em">.....................................' ..
'..........................................................' ..
'............................................................' ..
'</div> <div style="display:flex;padding-left:.3em;align-items: end; ">' ..
lienPage(aParamSansNom[n + 1])
szCode = szCode .. '</div></div>\n' .. aParamSansNom[n + 2]
end
else
szCode = szCode .. '<p>'
for n = 1, nNbreParamSansNom, 3 do
if n > 3 then
if aParamSansNom[n - 1] == parg or aParamSansNom[n - 1] == '' then
szCode = szCode .. '<p>'
end
end
szCode = szCode .. mw.ustring.gsub(aParamSansNom[n],'%s*\n%s*',' ') --.. ' '
szCode = szCode .. stylePage( lienPage(aParamSansNom[n + 1]), args['stylep'] )
szCode = szCode .. separator(aParamSansNom[n + 2], parg)
end
end
if args['classe'] and args['classe'] ~= '' then
szCode =szCode .. '</div>'
end
return szCode
--return mw.dumpObject(t)
end
function stylePage( page, style )
if style and style ~= '' then
page = '<span style="' .. style .. '">' .. page ..'</span>'
end
return page
end
function lienPage( s )
local wss = ''
local baseP = pageObj.baseText
if s == '' then return '' end
for i, noPagePrel in ipairs(mw.text.split(s,',', true)) do
noPagePrel = mw.text.trim(noPagePrel)
esp = mw.ustring.match(noPagePrel,'&....;') --si   modèle lié
noPage = mw.ustring.match(noPagePrel, (esp or '') .. '([%d]+)')
-- un no page doit être numérique
if tonumber(noPage) ~= nil then
if wss ~= '' then wss = wss .. ',' end
if not esp then wss = wss .. ' ' end
if ns == 'Page' then
lien = '[[Page:' .. baseP .. '/' ..
(noPage + getEcart(noPage)) .. '|' .. noPage .. ']]'
wss = wss .. mw.ustring.gsub(noPagePrel, noPage, lien, 1 )
elseif pageObj.subpageText == "Texte entier" then
lien = '[[' .. pageObj.text .. '#' .. noPage .. '|' .. noPage .. ']]'
wss = wss .. mw.ustring.gsub(noPagePrel, noPage, lien, 1 )
elseif ns == '' then
-- s’il n’y a pas de sommaire cherche le no de page dans pageRoot
lien = getPage(noPage + getEcart(noPage)) or ''
if lien ~= '' then
lien = '/' .. lien
end
lien = '[[' .. pageRoot .. lien .. '#'
.. noPage .. '|' .. noPage .. ']]'
wss = wss .. mw.ustring.gsub(noPagePrel , noPage, lien, 1 )
end
else -- la page finit par une virgule et la liste se poursuit à la pge suiv.
wss = wss .. ', ' .. (noPage or '')
end
end
return wss
end
function getPage(noPage)
for i, p1 in ipairs(t) do
if noPage and t[i + 1] then --and #t > i then # ne peut plus être utilisé avec mw.loadData
p2 = t[i + 1]
if noPage >= p1[2] and noPage < (p2[2] or 10000) then
return p1[1] or ''
end
else
return p1[1] or ''
end
end
end
function getEcart(noPage)
noPage = tonumber(noPage)
for i, p1 in ipairs(ecarts) do
if ecarts[i + 1] ~= nil then
p2 = ecarts[i + 1]
if p1[1] == nil then return 1000 end
if noPage >= p1[1] and noPage < p2[1] then
return p1[2] or ''
end
else
return p1[2] or ''
end
end
end
function separator(v, parg)
if v == parg or v == '' then
return v .. '</p>'
else
return v .. ' '
end
end
--=====================
function getEcarts() -- pour fins de test voir loadData()
if pageIndex == '' then initSpace() end
titre = mw.title.new(pageIndex)
textContent = titre:getContent(titre)
pagelist = mw.ustring.match( textContent, '<pagelist(.-)/>',1)
table.insert(ecarts,{ 1, 0 })
for paire in mw.ustring.gmatch(pagelist, '[0-9]+=[0-9]+') do
pages = mw.text.split(paire,'=', true)
table.insert(ecarts, { tonumber(pages[2]), (tonumber(pages[1]) - tonumber(pages[2])) })
end
end
function p.ecarts(frame) --pour fins de test
getEcarts()
return ecarts -- pagelist -- textContent --
end
function initSpace() --pour fins de test
pageObj = mw.title.getCurrentTitle()
pageNom = pageObj.text
ns = pageObj.nsText
if ns == 'Page' then
pageIndex = 'Livre:' .. pageObj.baseText
elseif ns == '' then
content = pageObj:getContent(pageObj)
pageIndex = 'Livre:' .. mw.ustring.match(content, 'index="(.-)"')
end
pageRoot = mw.title.new(pageIndex)
content = pageRoot:getContent(pageRoot)
pageRoot = mw.ustring.match( content, '|Titre=%[%[(.-)[|%]]',1)
--pageRoot = mw.ustring.gsub(pageRoot, '([%^%$%(%)%%%.%*%+%-%?])', '%%' .. '%1')
end
function p.index(frame) --pour fins de test
if pageIndex == '' then initSpace() end
local titre
local tdm
titre = mw.title.new(pageIndex)
textContent = titre:getContent(titre)
sommaire = mw.ustring.match( textContent, '|Sommaire=(.-)|Epigraphe=',1)
tdm = frame:preprocess(sommaire)
--ajouter % devant tout caractère magique dans le nom de la page
titre = mw.ustring.gsub(pageRoot, '([%^%$%(%)%%%.%*%+%-%?])', '%%' .. '%1')
index = ""
if ns == "Page" then
for chap, page, pageFS in mw.ustring.gmatch(tdm, '%[%[' .. titre .. '.-/(.-)|[^[]+%[%[.-/(.-)|(.-)%]%]') do --.-{{pli|(.-)|
index = index .. chap .. sep1 .. page .. ';'
table.insert(t, { chap, tonumber(page), pageFS })
--end
end
elseif ns == '' then
for chap, page in mw.ustring.gmatch(tdm, '%[%[' .. titre .. '.-/(.-)|.-([0-9]-)</span></span>') do --.-{{pli|(.-)|
index = index .. chap .. sep1 .. page .. sep1 .. page + p.getEcart(page) .. '; '
table.insert(t, { chap, page + p.getEcart(page), tonumber(page) })
end
end
end
function loadData()
local data = mw.loadData( 'Module:PliMulti/Data' )
t = data["t"] --nom de la sous-page:nopage du f-s
ecarts = data["ecarts"] --table des changements d’écarts (nopage du livre:écart avec page du f-s)
pageRoot = data["pageRoot"]
ns = data["ns"]
pageNom = data["pageNom"]
pageObj = mw.title.getCurrentTitle()
pageIndex = data["pageIndex"]
end
function p.test()
local t = {}
t[1] = "555"
t['test'] = 'test'
return mw.dumpObject(_deepCopy(t, false, already_seen))
end
return p