Module:Sandbox/Peter coxhead/Refgen
--[[
The module has functions which generate references using various
"cite taxonomic-database" templates, such as {{Cite POWO}},
using standardized parameters:
* taxon – required
* auth[ority] – optional
* id – required
* cs1 or cs2 – if omitted, cs1 is assumed
The invocations of the functions should be substituted.
In a cs1 citation, if the authority ends with a . then a second is added,
because otherwise the citation generating code separates the . from the
authority.
]]
require('strict')
local p = {}
local l = {} -- separate out local functions
--[[ Trim leading and trailing spaces, always returning a string. ]]
function l.trim(str)
str = mw.text.trim(str)
if str == nil then str = "" end
return str
end
--[[ Ensure double .. is present if the mode is cs1 and the auth(ority) ends with .
Deals with "bug" in citation templates. ]]
function p.authchk(frame)
local auth = frame.args[1] or ""
local mode = frame.args[2] or "cs1"
return l.authchk(auth, mode)
end
function l.authchk(auth, mode)
if mode == "cs1" then
if mw.ustring.sub(auth, -2) == ".." then -- no action
elseif mw.ustring.sub(auth, -1) == "." then
auth = auth .. "."
end
elseif mode == "cs2" and mw.ustring.sub(auth, -2) == ".." then
auth = mw.ustring.sub(auth, 1, mw.ustring.len(auth)-1)
end
return auth
end
--[[ Check arguments and generate a reference to the appropriate database given by "db". ]]
function l.refgen(db, frame)
local taxon = frame.args[1] or ""
if taxon == "" then return " ***ERROR: TAXON not supplied! " end
taxon = mw.text.trim(taxon)
local auth = frame.args[2] or ""
auth = mw.text.trim(auth)
local id = frame.args[3] or ""
if id == "" then return " ***ERROR: ID not supplied! " end
id = mw.text.trim(id)
local mode = frame.args[4] or "cs1"
mode = mw.text.trim(mode)
auth = l.authchk(auth, mode)
if db == "GCDsp" then return l.GCDsp(taxon, auth, id, mode)
elseif db == "IPNI" then return l.IPNI(taxon, auth, id, mode)
elseif db == "POWO" then return l.POWO(taxon, auth, id, mode)
else return "***ERROR in l.refgen()"
end
end
--[[ Generate reference to the Global Compositae Database for a species. ]]
function p.GCDsp(frame)
return l.refgen("GCDsp", frame)
end
function l.GCDsp(taxon, auth, id, mode)
--Example output: <ref name=GCD_1076597>{{Cite GCD|title=''Teixeiranthus'' R.M.King & H.Rob..|id=1076597|access-date=2023-05-17|mode=cs1}}</ref>
local res = "<ref name=GCD_" .. id .. ">{{Cite GCD|title=''" .. taxon .. "'' " .. auth
res = res .. "|id=" .. id .. "|access-date=" .. os.date("%F") .. "|mode=" .. mode .. "}}</ref>"
return res
end
--[[ Generate reference to IPNI. ]]
function p.IPNI(frame)
return l.refgen("IPNI", frame)
end
function l.IPNI(taxon, auth, id, mode)
--Example output: <ref name=IPNI_ID>{{IPNI |mode=cs1 |taxon=TAXON |authority=AUTH |id=ID |access-date=2023-05-20}}</ref>
local res = "<ref name=IPNI_" .. id .. ">{{IPNI|taxon=''" .. taxon .. "'' |authority=" .. auth
res = res .. "|id=" .. id .. "|access-date=" .. os.date("%F") .. "|mode=" .. mode .. "}}</ref>"
return res
end
--[[ Generate reference to PoWO. ]]
function p.POWO(frame)
return l.refgen("POWO", frame)
end
function l.POWO(taxon, auth, id, mode)
--Example output: <ref name=POWO_ID>{{Cite POWO|title=''Jacobaea lycopifolia'' (Desf. ex Poir.) Greuter & B.Nord.|id=77086130-1|access-date=2023-05-20}}</ref>
local res = "<ref name=POWO_" .. id .. ">{{Cite POWO|title=''" .. taxon .. "'' " .. auth
res = res .. "|id=" .. id .. "|access-date=" .. os.date("%F") .. "|mode=" .. mode .. "}}</ref>"
return res
end
return p
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.