Broken/Footnotes
local f = {}
f.args_default = {
bracket_left = "", bracket_right = "", bracket_year_left = "", bracket_year_right = "", postscript = "", page = "", pages = "", location = "", page_sep = ", str. ", pages_sep = ", str. ", ref = "", P1 = "", P2 = "", P3 = "", P4 = "", P5 = ""
}
local function trim(str)
if not str then return "" end
str = mw.text.trim(str)
return str:gsub("%.$", "")
end
local function core(args)
local result
if args.P5 ~= "" then
result = args.P1 .. " et al. " .. args.bracket_year_left .. args.P5 .. args.bracket_year_right
elseif args.P4 ~= "" then
result = args.P1 .. ", " .. args.P2 .. " i " .. args.P3 .. " " ..
args.bracket_year_left .. args.P4 .. args.bracket_year_right
elseif args.P3 ~= "" then
result = args.P1 .. " i " .. args.P2 .. " " ..
args.bracket_year_left .. args.P3 .. args.bracket_year_right
else
result = trim(args.P1 .. " " .. args.bracket_year_left .. args.P2 .. args.bracket_year_right)
end
-- REF handling
if args.ref ~= "none" then
if args.ref ~= "" then
result = "" .. result .. ""
else
local anchor = args.P1 .. args.P2 .. args.P3 .. args.P4 .. args.P5
result = "" .. result .. ""
end
end
-- pages
if args.page ~= "" then
result = result .. args.page_sep .. args.page
elseif args.pages ~= "" then
result = result .. args.pages_sep .. args.pages
end
-- location
if args.location ~= "" then
result = result .. ", " .. args.location
end
return args.bracket_left .. result .. args.bracket_right .. args.postscript
end
function f.harvard_core(frame)
local pframe = frame:getParent() local args = mw.clone(f.args_default)
args.bracket_left = pframe.args.BracketLeft or "" args.bracket_right = pframe.args.BracketRight or "" args.bracket_year_left = pframe.args.BracketYearLeft or "" args.bracket_year_right = pframe.args.BracketYearRight or "" args.postscript = (pframe.args.Postscript == "none") and "" or (pframe.args.Postscript or "")
args.page = pframe.args.Page or "" args.pages = pframe.args.Pages or "" args.location = pframe.args.Location or "" args.page_sep = pframe.args.PageSep or args.page_sep args.pages_sep = pframe.args.PagesSep or args.pages_sep args.ref = pframe.args.REF or ""
args.P1 = trim(pframe.args.P1) args.P2 = trim(pframe.args.P2) args.P3 = trim(pframe.args.P3) args.P4 = trim(pframe.args.P4) args.P5 = trim(pframe.args.P5)
return core(args)
end
function f.harvard_citation(frame)
local pframe = frame:getParent() local args = mw.clone(f.args_default)
args.bracket_left = "("
args.bracket_right = ")"
args.page = pframe.args.p or pframe.args.page or "" args.pages = pframe.args.pp or pframe.args.pages or "" args.location = pframe.args.loc or "" args.ref = pframe.args.ref or pframe.args.Ref or ""
args.P1 = trim(pframe.args[1]) args.P2 = trim(pframe.args[2]) args.P3 = trim(pframe.args[3]) args.P4 = trim(pframe.args[4]) args.P5 = trim(pframe.args[5])
return core(args)
end
function f.harvard_citation_no_bracket(frame)
local pframe = frame:getParent() local args = mw.clone(f.args_default)
args.page = pframe.args.p or pframe.args.page or "" args.pages = pframe.args.pp or pframe.args.pages or "" args.location = pframe.args.loc or "" args.ref = pframe.args.ref or pframe.args.Ref or ""
args.P1 = trim(pframe.args[1]) args.P2 = trim(pframe.args[2]) args.P3 = trim(pframe.args[3]) args.P4 = trim(pframe.args[4]) args.P5 = trim(pframe.args[5])
return core(args)
end
function f.sfn(frame)
local pframe = frame:getParent() local args = mw.clone(f.args_default)
-- override defaults with #invoke args
for k, v in pairs(frame.args) do
args[k] = v
end
args.postscript = (pframe.args.postscript == "none") and "" or (pframe.args.postscript or pframe.args.ps or ".") args.page = pframe.args.p or pframe.args.page or "" args.pages = pframe.args.pp or pframe.args.pages or "" args.location = pframe.args.loc or "" args.ref = pframe.args.ref or pframe.args.Ref or ""
args.P1 = trim(pframe.args[1]) args.P2 = trim(pframe.args[2]) args.P3 = trim(pframe.args[3]) args.P4 = trim(pframe.args[4]) args.P5 = trim(pframe.args[5])
local result = core(args)
local name = "FOOTNOTE" ..
args.P1 .. args.P2 .. args.P3 .. args.P4 .. args.P5 ..
args.page .. args.pages .. args.location
return frame:extensionTag{
name = "ref",
args = { name = name },
content = result
}
end
return f