Module:ParseVauthors

From Project Mailer
Jump to navigation Jump to search

local p = {}

function p.parse(frame) local args = frame:getParent().args -- This gets the arguments passed to the template that called #invoke, so we don't need to pass them all through to the module. See also Module:Arguments. local vauthors = args[1] or args.vauthors local authorTable local lastfirstTable local nauthors if vauthors then if string.find(vauthors, ';') or string.find(vauthors, '%.') then verror = true -- Vancouver author format should not contain semicolons or periods else verror = false end authorTable = mw.text.split(vauthors, "%s*,%s*") else authorTable = {} end local citeArgs = {} for k, v in pairs(args) do citeArgs[k] = v end citeArgs[1] = nil -- Erase vauthors from the citation arguments. citeArgs.vauthors = nil -- Erase vauthors from the citation arguments. nauthors = 0 for i, author in ipairs(authorTable) do if string.find(author, "%s") then lastfirstTable = {} lastfirstTable = mw.text.split(author, "%s") first = table.remove(lastfirstTable) last = table.concat(lastfirstTable, " ") citeArgs['first' .. i] = first citeArgs['last' .. i] = last nauthors = nauthors + 1 else citeArgs['first' .. i] = "" citeArgs['last' .. i] = author nauthors = nauthors + 1 end end

if citeArgs['name-list-format'] == nil then citeArgs['name-list-format'] = "vanc" -- change default settings of authorformat, etc. parameters so that Vancouver style author format is used end if citeArgs['display-authors'] == nil and citeArgs['displayauthors'] == nil and nauthors > 6 then citeArgs['display-authors'] = '6'

   end

if verror then

       errorArgs = {}
       errorArgs['1']='vauthors format'

return frame:expandTemplate{title = 'cite journal', args = citeArgs}, frame:expandTemplate{title = 'citation error', args = errorArgs} else return frame:expandTemplate{title = 'cite journal', args = citeArgs} end end

return p