local p = local mArguments = require('Module:Arguments')local TableTools = require('Module:TableTools')
local function stripToNil(text) -- If text is a non-empty string, return its trimmed content. -- Otherwise, return nothing (text is an empty string or is not a string). if type(text)
local function getDoiArgs(args) -- Return a list of |doiN=xxx parameter values, omitting blanks and skipped N's. -- LATER Should expand this to work with each exported function. local indices = for k, v in pairs(args) do if stripToNil(v) and type(k)
local SearcherSearcher = Searcher.__index = Searcher
function p.selected(frame) local n = mArguments.getArgs(frame,) local note = n.note local wantSource = --local abbrev = local abbrev = local source if wantSource[mw.title.getCurrentTitle.fullText] then source = n.source or 'Unknown' source = abbrev[source] or source end local sourcenote if note and source then sourcenote = string.format(' (%s) [%s]', source, note) elseif source then sourcenote = string.format(' (%s)', source) elseif note then sourcenote = string.format(' [%s]', note) else sourcenote = end local listDoi, nrDoi =, 0 local function addDoi(doi, i) if doi then nrDoi = nrDoi + 1 if i and listDoi[i] then table.insert(listDoi, i, doi) else listDoi[nrDoi] = doi end end end local rows = for i, v in ipairs(TableTools.compressSparseArray(n)) do if i
1 then doi = n.doi or n.doi1 else doi = n['doi' .. i] end addDoi(doi, i) end local search = Searcher.new for i = 1, nrDoi do local doi = listDoi[i] table.insert(rows, '**' .. search:link(doi) ) end rows[1] = table.concat(rows[1], ' / ') return table.concat(rows, '\n')end
function p.doilist(frame) local doiList = getDoiArgs(frame:getParent.args) if not doiList[1] then return end local search = Searcher.new for i, doi in ipairs(doiList) do doiList[i] = search:link(doi) end return " |
" .. table.concat(doiList, ' · ') .. -- middot is double bold ""endfunction p.exclude(frame) local n = mArguments.getArgs(frame,) local length = TableTools.length(n) local text = string.format('*', n[1] or ) n[1] = nil for _, v in ipairs(TableTools.compressSparseArray(n)) do if length > 1 then text = text .. string.format(" ≠ ", v) end end return textend
function p.pattern(frame) local rows = for i, v in ipairs(frame:getParent.args) do v = mw.text.trim(v) if v
1 then rows[i] = string.format('*%s', v) else rows[i] = string.format("\n**%s
", v :gsub("%.%*", "
return p