Module:Cite LSA
Jump to navigation
Jump to search
Documentation for this module may be created at Module:Cite LSA/doc
local p = {}
function p.cite(frame)
local pframe = frame:getParent()
local config = frame.args
local args = pframe.args
local authorfirst = {}
local authorlast = {}
local editorfirst = {}
local editorlast = {}
local title = args.title
local journal = args.journal
local chapter = args.chapter
local series = args.seriestitle or args.series
local year = args.year
local volume = args.volume
local edition = args.edition
local pages = args.pages
local publisher = args.publisher
local author = args.last
local url = args.url
local doi = args.doi
if doi ~= nil then
url='https://dx.doi.org/'..doi
end
local accessdate = args.accessdate
local editorlist = nil
local place = args.place
local citation = nil
argTable = {title,journal,chapter,series, year, volume, edition,pages,publisher,editors,place}
for k,v in pairs(args) do
if string.find(k, "first") ~= nil then
if string.find(k, "%d") ~= nil then
i,j = string.find(k, "%d")
num = string.sub(k,i,j)
num = tonumber(num)
else
num = 1
end
if string.find(k, "editor") ~= nil then
editorfirst[num] = v
else
authorfirst[num] = v
end
elseif string.find(k, "last") ~= nil then
if string.find(k, "%d") ~= nil then
i,j = string.find(k, "%d")
num = string.sub(k,i,j)
num = tonumber(num)
else
num = 1
end
if string.find(k, "editor") ~= nil then
editorlast[num] = v
else
authorlast[num] = v
end
end
end
if table.getn(authorlast) < 1 and publisher ~= nil then
authorlist="<span class=\"smallcaps\" style=\"font-variant:small-caps;\">" .. publisher .. "</span>. "
author=""
elseif table.getn(authorlast) > 0 then
alimit = table.getn(authorlast)
for i,v in ipairs(authorlast) do
if i == 1 then
authorlist = "<span class=\"smallcaps\" style=\"font-variant:small-caps;\">" .. authorlast[1] .. ", " .. authorfirst[1] .. "</span>"
elseif i > 1 and i <= alimit then
authorlist = authorlist .. "<span class=\"smallcaps\" style=\"font-variant:small-caps;\">" .. authorfirst[i] .. " " .. authorlast[i] .. "</span>"
end
if i+1 == alimit then
authorlist = authorlist .. ", and "
elseif alimit == 1 then
authorlist = authorlist .. ". "
elseif alimit > 2 and i ~= alimit then
authorlist = authorlist .. "; "
elseif i == alimit then
authorlist = authorlist .. ". "
end
end
end
if editorlast ~= {} then
editorlist = ""
elimit = table.getn(editorlast)
for i,v in ipairs(editorlast) do
editorlist = editorlist .. editorfirst[i] .. " " .. editorlast[i]
if i+1 == elimit and editorlist ~= " " then
editorlist = editorlist .. ", and "
elseif elimit > i and editorlist ~= " " then
editorlist = editorlist .. ", "
end
end
if editorlist == "" or editorlist == " " then
editorlist = ""
end
end
if author ~= nil then
authorlist = authorlist .. year .. ". "
elseif author == nil then
authorlist = "<span style=\"color:#F00\">Missing author name</span>" .. year .. ". "
end
if journal ~= nil then
if url ~= nil then
if accessdate ~= nil then
citation = authorlist .. "[" .. url .. " " .. title .. "]. \'\'" .. journal .. "\'\' " .. volume .. ". " .. pages .. ". Accessed " .. accessdate .. "."
else
citation = authorlist .. "[" .. url .. " " .. title .. "]. \'\'" .. journal .. "\'\' " .. volume .. ". " .. pages .. "."
end
else
citation = authorlist .. title .. ". \'\'" .. journal .. "\'\' " .. volume .. ". " .. pages .. ". "
end
elseif journal == nil then
if chapter ~= nil then
if url ~= nil then
citation = authorlist .. "[" .. url .. " " .. chapter .. "]."
else
citation = authorlist .. chapter .. ". "
end
if title ~= nil then
citation = citation .. "\'\'" .. title .. "\'\'"
if editorlist ~= nil and editorlist ~= "" then
citation = citation .. " ed. by " .. editorlist
end
if pages ~= nil then
citation = citation .. ", " .. pages .. ". "
else
citation = citation .. ". "
end
if edition ~= nil and volume ~= nil then
citation = citation .. edition .. ", " .. volume .. "; "
elseif edition ~= nil and volume == nil then
citation = citation .. edition .. "; "
elseif edition == nil and volume ~= nil then
citation = citation .. volume .. "; "
end
if series ~= nil then
citation = citation .. "(" .. series .. "). "
end
if place ~= nil and publisher ~= nil then
citation = citation .. place .. ": " .. publisher .. "."
elseif place ~= nil and publisher == nil then
citation = citation .. place .. "."
elseif place == nil and publisher ~= nil then
citation = citation .. publisher .. "."
end
if url ~= nil then
if accessdate ~= nil then
citation = citation .. " Accessed " .. accessdate .. ". "
end
end
end
else
if title ~= nil then
if url ~= nil then
citation = authorlist .. "\'\'[" .. url .. " " .. title .. "]\'\'"
else
citation = authorlist .. "\'\'" .. title .. "\'\'"
end
if editorlist ~= nil and editorlist ~= "" then
citation = citation .. ", ed. by " .. editorlist
end
if pages ~= nil then
citation = citation .. ", " .. pages .. ". "
else
citation = citation .. ". "
end
if edition ~= nil and volume ~= nil then
citation = citation .. edition .. ", " .. volume .. "; "
elseif edition ~= nil and volume == nil then
citation = citation .. edition .. "; "
elseif edition == nil and volume ~= nil then
citation = citation .. volume .. "; "
end
if series ~= nil then
citation = citation .. "(" .. series .. "). "
end
if place ~= nil and publisher ~= nil then
citation = citation .. place .. ": " .. publisher .. "."
elseif place ~= nil and publisher == nil then
citation = citation .. place .. "."
elseif place == nil and publisher ~= nil then
citation = citation .. publisher .. "."
end
if url ~= nil then
if accessdate ~= nil then
citation = citation .. " Accessed " .. accessdate .. "."
end
end
end
end
end
return citation
end
return p