localp={}
localdata=mw.loadData("Module:Editions/data")
functionp.main(f)
localargs=f
iff==mw.getCurrentFrame()then
args=f:getParent().args
end
localshort=(args.shortor"")~=""
localno_link=(args.nlor"")~=""
localno_italics=(args.noitalicsor"")~=""
locallinked_text=no_linkandfunction(_,text)
returntext
endorfunction(link_name,text)
iflink_name==textthen
return("[[%s]]"):format(text)
end
return("[[%s|%s]]"):format(link_name,text)
end
localremove_italics=no_italicsandfunction(text)
returntext:gsub("'","")
endorfunction(text)returntextend
localeditions={}
fori,arginipairs(args)do
arg=mw.text.trim(argor"")
ifarg~=""then
localedition_name=data.alias_map[arg:lower()]
ifedition_namethen
editions[i]=data.editions[edition_name]
else
-- Unknown edition rendered as "[[<args[i]> Edition]]"
editions[i]={
short=arg,
no_suffix=arg,
full=arg.." Edition",
link_name=arg.." Edition",
has_edition_suffix=true,
}
end
end
end
localresult={}
fori,editioninipairs(editions)do
ifshortthen
ifi~=1then
table.insert(result,(i==#editions)and" & "or", ")
end
table.insert(result,linked_text(edition.link_name,remove_italics(edition.short)))
else
localprev_was_edition=i>1andeditions[i-1].has_edition_suffix
localprev2_was_edition=i>2andeditions[i-2].has_edition_suffix
localnext_is_edition=i~=#editionsandeditions[i+1].has_edition_suffix
ifnotnext_is_editionandprev_was_editionandedition.has_edition_suffixthen
-- Insert an oxford comma if this is a list of more-than-2 editions
table.insert(result,prev2_was_editionand", and "or" and ")
elseifi>1then
ifi==#editionsthen
table.insert(result,i>2and", and "or" and ")
else
table.insert(result,", ")
end
end
ifedition.has_edition_suffixand(prev_was_editionornext_is_edition)then
table.insert(result,linked_text(edition.link_name,remove_italics(edition.no_suffix)))
ifnotnext_is_editionthen
table.insert(result," editions")
end
else
table.insert(result,linked_text(edition.link_name,remove_italics(edition.full)))
end
end
end
returntable.concat(result,"")
end
returnp