Module:Citation
![]() | This module depends on the following other modules: |
Implements {{citation}}.
--require "mw.text"
local z = {
wikitext = require "Module:Wikitext"
}
function hideinprint(frame, content)
return content
end
function onlyinprint(frame, content)
return ""
end
function nowiki(frame, content)
return z.wikitext.tag(frame, {name="nowiki",contents=content,params={}})
end
function externallinkid(frame, args)
local sep = args.separator or " "
args.suffix = args.suffix or ""
local t0 = onlyinprint(frame, args.label .. sep .. args.id)
local t1 = hideinprint(frame, "[[" .. args.link .. "|" .. args.label .. "]]" .. sep .. "[" .. args.prefix .. z.wikitext.urlencode(args.id) .. args.suffix .. " " .. nowiki(frame, args.id) .. "]")
return t0 .. t1
end
function internallinkid(frame, args)
local sep = args.separator or " "
args.suffix = args.suffix or ""
local t0 = onlyinprint(frame, args.label .. sep .. args.id)
local t1 = hideinprint(frame, "[[" .. args.link .. "|" .. args.label .. "]]" .. sep .. "[[" .. args.prefix .. args.id .. args.suffix .. "|" .. nowiki(frame, args.id) .. "]]")
return t0 .. t1
end
function amazon(frame, id, domain)
if ( nil == domain ) then
domain = "com"
elseif ( "jp" == domain or "uk" == domain ) then
domain = "co." .. domain
end
local text = externallinkid(frame, {link="Amazon Standard Identification Number",label="ASIN",prefix="//www.amazon."..domain.."/dp/",id=id})
if ( string.sub(id,1,3) ~= "10." ) then
text = text .. "[[Category:Pages with DOI errors]]"
end
return text
end
function doi(frame, id, broken, inactive, nocat)
local text = externallinkid(frame, {link="Digital object identifier",label="doi",prefix="http://dx.doi.org/",id=id,separator=":"})
local cat = ""
if ( inactive ~= nil ) then
inactive = " (inactive " .. inactive .. ")"
cat = cat .. "[[Category:Pages with DOIs inactive since " .. z.wikitext.canonicalcleanuptime(inactive) .. "]]"
else
inactive = ""
end
if ( string.sub(id,1,3) ~= "10." ) then
cat = cat .. "[[Category:Pages with DOI errors]]"
end
if ( nocat ~= nil and nocal ~= "" ) then cat = "" end
return text .. inactive .. cat
end
function url(frame, id)
local t0 = onlyinprint(frame, id)
local t1 = hideinprint(frame, "[" .. id .. " " .. nowiki(frame, id) .. "]")
return t0 .. t1
end
function openlibrary(frame, id)
local cat = ""
local prefix = ""
local code = string.sub(id,string.length(id),1)
if ( code == "A" ) then
prefix = "http://openlibrary.org/authors/OL"
elseif ( code == "M" ) then
prefix = "http://openlibrary.org/books/OL"
elseif ( code == "W" ) then
prefix = "http://openlibrary.org/works/OL"
else
prefix = "http://openlibrary.org/OL"
cat = cat .. "[[Category:Pages with OL errors]]"
end
local text = externallinkid(frame, {link="Open Library",label="OL",prefix=prefix,id=id})
return text .. cat
end
function listpeople(config, people)
local text = ""
local sep = config.AuthorSep or ";"
for i,person in ipairs(people) do
if (person.last ~= nil) then
local one = person.last
if (person.first ~= nil) then one = one .. ", " .. person.first end
if (person.link ~= nil) then one = "[[" .. person.link .. "|" .. one .. "]]" end
text = text .. one
if ( people[i + 1] ~= nil ) then text = text .. sep .. " " end
end
end
return text
end
function anchorid(args)
local P1 = args[1] or ""
local P2 = args[2] or ""
local P3 = args[3] or ""
local P4 = args[4] or ""
local P5 = args[5] or ""
return "CITEREF" .. P1 .. P2 .. P3 .. P4 .. P5
end
function refid(args)
local p = args.p or ""
local pp = args.pp or ""
local loc = args.loc or ""
return anchorid(args) .. p .. pp .. loc
end
function name(args)
local P1 = args[1] or ""
if ( args[5] ~= nil) then
return P1 .. " et al."
else
local P2 = args[2] or ""
local P3 = args[3] or ""
local P4 = args[4] or ""
if ( args[4] ~= nil ) then
P4 = " " .. P4
P3 = ", & " .. P3
P2 = ", " .. P2
elseif ( args[3] ~= nil ) then
P3 = " " .. P3
P2 = " & " .. P2
elseif ( args[2] ~= nil ) then
P2 = " " .. P2
end
return P1 .. P2 .. P3 .. P4
end
end
function crossref(frame, args)
local config = frame.args -- the arguments passed BY the template, in the wikitext of the template itself
local LB = config.BracketLeft or ""
local RB = config.BracketRight or ""
local anchor = args.ref or args.Ref or anchorid(args)
local text = name(args)
local loc = args.loc or ""
local page = args.p or args.page
local pages = args.pp or args.pages
if ( page ~= nil ) then
local pagesep = config.PageSep or ", p. "
loc = loc .. pagesep .. page
end
if ( pages ~= nil ) then
local pagessep = config.PagesSep or ", pp. "
loc = loc .. pagessep .. pages
end
local ps = args.Postscript or ""
return LB .. "[[#" .. anchor .. "|" .. text .. "]]" .. loc .. RB .. ps
end
function extractauthor(args, i)
local last = args["author" .. i .. "-last"] or args["author-last" .. i] or args["last" .. i] or args["surname" .. i] or args["Author" .. i] or args["author" .. i]
if ( nil == last ) then return nil end
return {
last = last,
first = args["author" .. i .. "-first"] or args["author-first" .. i] or args["first" .. i] or args["given" .. i],
link = args["author" .. i .. "link"] or args["authorlink" .. i]
}
end
function extracteditor(args, i)
local last = args["editor" .. i .. "-last"] or args["editor-last" .. i] or args["EditorSurname" .. i] or args["Editor" .. i] or args["editor" .. i]
if ( nil == last ) then return nil end
return {
last = last,
first = args["editor" .. i .. "-first"] or args["editor-first" .. i] or args["EditorGiven" .. i],
link = args["editor" .. i .. "link"] or args["editorlink" .. i]
}
end
function citation0(frame, args)
local config = frame.args -- the arguments passed BY the template, in the wikitext of the template itself
-- Pick out the relevant fields from the arguments. Different citation templates define different field names for the same underlying things.
local AuthorMask = args.authormask or args.authormask
local Authors = args.authors
local i
local a = {}
i = 1
while true do
a[i] = extractauthor(args, i)
if ( nil == a[i]) then break end
i = i + 1
end
if ( a[1] == nil ) then
local i = ""
a[1] = extractauthor(args, i)
end
local Coauthors = args.coauthors or args.coauthor
local Others = args.others
local Editors = args.editors
local e = {}
i = 1
while true do
e[i] = extracteditor(args, i)
if ( nil == e[i]) then break end
i = i + 1
end
if ( e[1] == nil ) then
local i = ""
e[1] = extracteditor(args, i)
end
local Year = args.year
local PublicationDate = args.publicationdate
local OrigYear = args.origyear
local Date = args.date
local Title = args.title or args.encyclopaedia or args.encyclopedia or args.dictionary
local TransTitle = args.trans_title
local Chapter = args.chapter or args.article or args.entry
local TransChapter = args.trans_chapter
local Type = args.type
local URL = args.archiveurl or args.url
local ChapterURL = args.chapterurl
local Periodical = args.journal or args.newspaper or args.magazine or args.work or args.periodical
local Series = args.series
local Volume = args.volume
local Issue = args.issue or args.number
local Page = args.page
local Pages = args.pages
local At = args.at
local Edition = args.edition
local PublicationPlace = args.publicationplace or args.place or args.location
local PublisherName = args.publisher
local SubscriptionRequired = args.subscription
local Via = args.via
local Accessed = args.accessdate
local Language = args.language
local Format = args.format
local Ref = args.ref or args.Ref
local ARXIV = args.arxiv or args.ARXIV
local ASIN = args.asin or args.ASIN
local ASINTLD = args["ASIN-TLD"]
local BIBCODE = args.bibcode or args.BIBCODE
local DOI = args.doi or args.DOI
local DoiBroken = args.doi_brokendate or args.DoiBroken
local ID = args.id or args.ID
local ISBN = args.isbn or args.ISBN
local ISSN = args.issn or args.ISSN
local JFM = args.jfm or args.JFM
local JSTOR = args.jstor or args.JSTOR
local LCCN = args.lccn or args.LCCN
local MR = args.mr or args.MR
local OCLC = args.oclc or args.OCLC
local OL = args.ol or args.OL
local OSTI = args.osti or args.OSTI
local PMC = args.pmc or args.PMC
local PMID = args.pmid or args.PMID
local RFC = args.rfc or args.RFC
local SSRN = args.ssrn or args.SSRN
local ZBL = args.zbl or args.ZBL
-- At this point fields may be nil if they weren't specified in the template use. We can use that fact.
-- These data form a COinS tag (see <http://ocoins.info/>) which allows automated tools to parse the citation information.
local OCinSdata = {}
OCinSdata.ctx_ver = "Z39.88-2004"
OCinSdata.rft_val_fmt = "info:ofi/fmt:kev:mtx:"
OCinSdata.rfr_id = "info:sid/en.wikipedia.org:" .. config.fullpagename
if ( nil ~= Periodical ) then
OCinSdata["rft.genre"] = "article"
OCinSdata["rft.jtitle"] = Periodical
if ( nil ~= Title ) then OCinSdata["rft.atitle"] = Title end
elseif ( nil ~= Chapter ) then
OCinSdata["rft.genre"] = "bookitem"
OCinSdata["rft.btitle"] = Chapter
if ( nil ~= Title ) then OCinSdata["rft.atitle"] = Title end
else
OCinSdata["rft.genre"] = "book"
if ( nil ~= Title ) then OCinSdata["rft.btitle"] = Title end
end
OCinSdata["rft.place"] = PublicationPlace
OCinSdata["rft.date"] = Date or Year or PublicationDate
OCinSdata["rft.series"] = Series
OCinSdata["rft.volume"] = Volume
OCinSdata["rft.issue"] = Issue
OCinSdata["rft.pages"] = Page or Pages or At
OCinSdata["rft.edition"] = Edition
OCinSdata["rft.pub"] = PublisherName
OCinSdata["rft.isbn"] = ISBN
OCinSdata["rft.issn"] = ISSN
OCinSdata["rft.jfm"] = JFM
OCinSdata["rft.jstor"] = JSTOR
OCinSdata["rft.lccn"] = LCCN
OCinSdata["rft.mr"] = MR
OCinSdata.rft_id = URL or ChapterURL
if ( nil ~= a[1] and nil ~= a[1].last) then
local last = a[1].last
local first = a[1].first
OCinSdata["rft.aulast"] = last
if ( nil ~= first ) then
OCinSdata["rft.aufirst"] = first
OCinSdata["rft.au"] = last .. (args.NameSep or ", ") .. first
else
OCinSdata["rft.au"] = last
end
end
local OCinSids = {}
OCinSids["info:arxiv"] = ARXIV
OCinSids["info:asin"] = ASIN
OCinSids["info:bibcode"] = BIBCODE
OCinSids["info:doi"] = DOI
OCinSids["info:oclcnum"] = OCLC
OCinSids["info:olnum"] = OL
OCinSids["info:osti"] = OSTI
OCinSids["info:pmc"] = PMC
OCinSids["info:pmid"] = PMID
OCinSids["info:rfc"] = RFC
OCinSids["info:ssrn"] = SSRN
OCinSids["info:zbl"] = ZBL
local OCinStitle = ""
for name,value in pairs(OCinSids) do
OCinStitle = OCinStitle .. "rft_id=" .. z.wikitext.urlencode(name .. "/" .. value) .. "&"
end
for name,value in pairs(OCinSdata) do
OCinStitle = OCinStitle .. z.wikitext.urlencode(name .. "=" .. value) .. "&"
end
-- Now perform various field substitutions.
-- We also add leading spaces and surrounding markup and punctuation to the various parts of the citation, but only when they are non-nil.
if ( Authors == nil ) then Authors = listpeople(config, a) end
if ( Editors == nil ) then Editors = listpeople(config, e) end
if ( Date == nil ) then
Date = Year
if ( Date ~= nil ) then
if ( args.month ~= nil ) then
Date = args.month .. " " .. Date
if ( args.day ~= nil ) then Date = args.day .. " " .. Date end
end
end
end
if ( PublicationDate == Date or PublicationDate == Year ) then PublicationDate = nil end
if ( Chapter ~= nil ) then
if ( Periodical ~= nil ) then
Chapter = "''" .. Chapter .. "''"
else
Chapter = "\"" .. Chapter .. "\""
end
if ( ChapterURL ~= nil ) then
Chapter = "[" .. ChapterURL .. " " .. Chapter .. "]"
elseif ( URL ~= nil ) then
Chapter = "[" .. URL .. " " .. Chapter .. "]"
URL = nil
end
Chapter = " " .. Chapter .. "."
else
Chapter = ""
end
if ( Title ~= nil ) then
if ( URL ~= nil ) then
Title = "[" .. URL .. " " .. Title .. "]"
URL = nil
end
if ( Periodical ~= nil ) then
Title = "\"" .. Title .. "\""
else
Title = "''" .. Title .. "''"
end
Title = " " .. Title .. "."
else
Title = ""
end
if ( nil == Page ) then
Page = ""
elseif ( Periodical ~= nil ) then
Page = " :" .. Page
elseif ( "y" == args.nopp ) then
Page = " " .. Page
else
Page = " p." .. Page
end
if ( nil == Pages ) then
Pages = ""
elseif ( Periodical ~= nil ) then
Pages = " :" .. Pages
elseif ( "y" == args.nopp ) then
Pages = " " .. Pages
else
Pages = " pp." .. Pages
end
if ( At ~= nil ) then At = " " .. At .. "." else At = "" end
if ( Coauthors ~= nil ) then Coauthors = " " .. Coauthors .. "." else Coauthors = "" end
if ( Others ~= nil ) then Others = " " .. Others .. "." else Others = "" end
if ( TransTitle ~= nil ) then TransTitle = " (" .. TransTitle .. ")." else TransTitle = "" end
if ( TransChapter ~= nil ) then TransChapter = " (" .. TransChapter .. ")." else TransChapter = "" end
if ( Type ~= nil ) then Type = " (" .. Type .. ")." else Type = "" end
if ( PublicationPlace ~= nil ) then PublicationPlace = PublicationPlace .. ": " else PublicationPlace = "" end
if ( Language ~= nil ) then Language = " (in " .. Language .. ")" else Language = "" end
if ( Edition ~= nil ) then Edition = " (" .. Edition .. " edition)" else Edition = "" end
if ( Volume ~= nil ) then Volume = " '''" .. Volume .. "'''" else Volume = "" end
if ( Issue ~= nil ) then Issue = " (" .. Issue .. ")" else Issue = "" end
if ( Series ~= nil ) then Series = " " .. Series .. "." else Series = "" end
if ( Format ~= nil ) then Format = " (" .. Format .. ")" else Format = "" end
if ( OrigYear ~= nil ) then OrigYear = " " .. OrigYear else OrigYear = "" end
if ( Date ~= nil ) then Date = " (" .. Date .. ")" else Date = "" end
if ( Via ~= nil ) then Via = " — via " .. Via else Via = "" end
if ( Accessed ~= nil ) then Accessed = " Accessed on " .. Accessed .. "." else Accessed = "" end
if ( SubscriptionRequired ~= nil ) then
SubscriptionRequired = " " .. z.wikitext.tag(frame, {name="span", contents="(subscription required)", params={style="font-size:0.95em; font-size: 90%; color: #555"}})
else
SubscriptionRequired = ""
end
if ( ARXIV ~= nil ) then ARXIV = " " .. externallinkid(frame, {label="arXiv",link="arXiv",prefix="http://arxiv.org/abs/",id=ARXIV,separator=":"}) else ARXIV = "" end
if ( ASIN ~= nil ) then ASIN = " " .. amazon(frame, ASIN, ASINTLD) else ASIN = "" end
if ( BIBCODE ~= nil ) then BIBCODE = " " .. externallinkid(frame, {label="Bibcode",link="Bibcode",prefix="http://adsabs.harvard.edu/abs/",id=BIBCODE,separator=":"}) else BIBCODE = "" end
if ( DOI ~= nil ) then DOI = " " .. doi(frame, DOI, DoiBroken) else DOI = "" end
if ( ID ~= nil ) then ID = " " .. ID else ID = "" end
if ( ISBN ~= nil ) then ISBN = " " .. internallinkid(frame, {label="ISBN",link="International Standard Book Number",prefix="Special:BookSources/",id=ISBN}) else ISBN = "" end
if ( ISSN ~= nil ) then ISSN = " " .. externallinkid(frame, {label="ISSN",link="International Standard Serial Number",prefix="//www.worldcat.org/issn/",id=ISSN}) else ISSN = "" end
if ( JFM ~= nil ) then JFM = " " .. externallinkid(frame, {label="JFM",link="Jahrbuch über die Fortschritte der Mathematik",prefix="http://www.zentralblatt-math.org/zmath/en/search/?format=complete&q=an:",id=JFM}) else JFM = "" end
if ( JSTOR ~= nil ) then JSTOR = " " .. externallinkid(frame, {label="JSTOR",link="JSTOR",prefix="http://www.jstor.org/stable/",id=JSTOR}) else JSTOR = "" end
if ( LCCN ~= nil ) then LCCN = " " .. externallinkid(frame, {label="LCCN",link="Library of Congress Control Number",prefix="http://lccn.loc.gov/",id=LCCN}) else LCCN = "" end
if ( MR ~= nil ) then MR = " " .. externallinkid(frame, {label="MR",link="Mathematical Reviews",prefix="http://www.ams.org/mathscinet-getitem?mr=",id=MR}) else MR = "" end
if ( OCLC ~= nil ) then OCLC = " " .. externallinkid(frame, {label="OCLC",link="Online Computer Library Center",prefix="//www.worldcat.org/oclc/",id=OCLC}) else OCLC = "" end
if ( OL ~= nil ) then OL = " " .. openlibrary(frame, id) else OL = "" end
if ( OSTI ~= nil ) then OSTI = " " .. externallinkid(frame, {label="OSTI",link="Office of Scientific and Technical Information",prefix="http://www.osti.gov/energycitations/product.biblio.jsp?osti_id=",id=OSTI}) else OSTI = "" end
if ( PMC ~= nil ) then PMC = " " .. externallinkid(frame, {label="PMC",link="PubMed Central",prefix="//www.ncbi.nlm.nih.gov/pmc/articles/PMC",suffix="/?tool=pmcentrez",id=PMC}) else PMC = "" end
if ( PMID ~= nil ) then PMID = " " .. externallinkid(frame, {label="PMID",link="PubMed Identifier",prefix="//www.ncbi.nlm.nih.gov/pubmed/",id=PMID}) else PMID = "" end
if ( RFC ~= nil ) then RFC = " " .. externallinkid(frame, {label="RFC",link="Request for Comments",prefix="//tools.ietf.org/html/rfc",id=RFC}) else RFC = "" end
if ( SSRN ~= nil ) then SSRN = " " .. externallinkid(frame, {label="SSRN",link="Social Science Research Network",prefix="http://ssrn.com/abstract=",id=SSRN}) else SSRN = "" end
if ( URL ~= nil ) then URL = " " .. url(frame, URL) else URL = "" end
if ( ZBL ~= nil ) then ZBL = " " .. externallinkid(frame, {label="ZBL",link="Zentralblatt MATH",prefix="http://www.zentralblatt-math.org/zmath/en/search/?format=complete&q=an:",id=ZBL}) else ZBL = "" end
local Publisher
if ( Periodical ~= nil ) then
if ( PublicationDate ~= nil ) then PublicationDate = " " .. PublicationDate else PublicationDate = "" end
if ( PublisherName ~= nil ) then Publisher = " (" .. PublicationPlace .. PublisherName .. PublicationDate .. ")." else Publisher = "" end
Edition = ""
else
if ( PublicationDate ~= nil ) then PublicationDate = " (published " .. PublicationDate .. ")" else PublicationDate = "" end
if ( PublisherName ~= nil ) then Publisher = " " .. PublicationPlace .. PublisherName .. PublicationDate .. "." else Publisher = "" end
end
-- Several of the above rely upon detecting this as nil, so do it last.
if ( Periodical ~= nil ) then Periodical = " " .. Periodical .. "." else Periodical = "" end
-- Piece all of the bits together at last. At this point, all of these should be guaranteed non-nil.
-- We build things this way because it is more efficient in LUA not to keep reassigning to the same string variable over and over.
local idcommon = ARXIV .. ASIN .. BIBCODE .. DOI .. ID .. ISBN .. JFM .. JSTOR .. LCCN .. MR .. OCLC .. OL .. OSTI .. PMC .. PMID .. RFC .. SSRN .. URL .. ZBL .. Accessed .. Via .. SubscriptionRequired
local tcommon = Title .. TransTitle .. Type .. Format .. Edition .. Language .. Periodical .. Series .. Volume .. Issue .. Page .. Pages
Date = Date .. OrigYear
local text
if ( "" ~= Authors ) then
if ( "" ~= Date ) then Date = Date .. "." else Authors = Authors .. "." end
if ( "" ~= Editors ) then Editors = " in " .. Editors .. "." end
text = Authors .. Coauthors .. Date .. Chapter .. TransChapter .. Others .. Editors .. tcommon .. Publisher .. idcommon
elseif ( "" ~= Editors) then
Editors = Editors .. " (eds.)"
if ( "" ~= Date ) then Date = Date .. "." else Editors = Editors .. "." end
text = Editors .. Date .. Chapter .. TransChapter .. tcommon .. Publisher .. idcommon
else
text = Chapter .. TransChapter .. tcommon .. Publisher .. Date .. idcommon
end
-- Now enclose the whole thing in a <span/> element if it is cross-linked from elsewhere.
if ( Year == nil ) then Year = "" end
if ( Ref ~= nil ) then
local id = Ref
if ( "harv" == Ref ) then
local names = {}
if ( "" ~= Authors ) then
for i,v in ipairs(a) do names[i] = v.last end
elseif ( "" ~= Editors ) then
for i,v in ipairs(e) do names[i] = v.last end
end
if ( names[1] == nil ) then
names[1] = Year
elseif ( names[2] == nil ) then
names[2] = Year
elseif ( names[3] == nil ) then
names[3] = Year
elseif ( names[4] == nil ) then
names[4] = Year
else
names[5] = Year
end
id = anchorid(names)
end
local args = { class="citation " .. (config.CitationClass or ""), id=id }
text = z.wikitext.tag(frame, {name="span", contents=text, params=args})
end
local OCinS = z.wikitext.tag(frame, {name="span", contents=" ", params={class="Z3988",title=OCinStitle,style="display: none;"}})
return text .. OCinS
end
function r0(frame, name, group, page)
if ( name == nil ) then return "" end
if ( group == nil ) then group = "" end
local p = ""
if ( page ~= nil ) then
local contents = ":" .. page
p = z.wikitext.tag(frame, {name="sup",contents=contents,params={class="reference",style="white-space:nowrap;"}})
end
return z.wikitext.tag(frame, {name="ref",contents="",params={name=name,group=group}}) .. p
end
function reflist0(frame, config, args)
local contents = args.refs or ""
local liststyle = args.liststyle
local count = args[1]
local width = args.colwidth
local group = args.group or config.default_group
if ( nil == tonumber(count) and nil == width ) then
width = count
count = nil
end
if ( nil == liststyle ) then
if ( "upper-alpha" == group or "lower-alpha" == group or "upper-roman" == group or "lower-roman" == group or "upper-greek" == group or "lower-greek" == group ) then
liststyle = group
else
liststyle = config.default_liststyle
end
end
local params = {}
params.class = "reflist"
params.style = z.wikitext.liststyle(liststyle)
if ( nil ~= count ) then
params.class = params.class .. " references-column-count references-column-count-" .. count
params.style = params.style .. " " .. z.wikitext.columncountstyle(count)
end
if ( nil ~= width ) then
params.class = params.class .. " references-column-width"
params.style = params.style .. " " .. z.wikitext.columnwidthstyle(width)
end
local references = z.wikitext.tag(frame, {name="references",contents=contents,params={group=group}})
return z.wikitext.tag(frame, {name="div",contents=references,params=params})
end
function refbegin0(frame, config, args)
local liststyle = args.liststyle
local indent = args.indent
local indentsize = args.indentsize
local count = args[1]
local width = args.colwidth
if ( nil == tonumber(count) and nil == width ) then
width = count
count = nil
end
if ( nil == liststyle ) then
if ( "upper-alpha" == group or "lower-alpha" == group or "upper-roman" == group or "lower-roman" == group or "upper-greek" == group or "lower-greek" == group ) then
liststyle = group
else
liststyle = config.default_liststyle
end
end
local params = {}
params.class = "refbegin"
params.style = z.wikitext.liststyle(liststyle)
if ( nil ~= count ) then
params.class = params.class .. " references-column-count references-column-count-" .. count
params.style = params.style .. " " .. z.wikitext.columncountstyle(count)
end
if ( nil ~= width ) then
params.class = params.class .. " references-column-width"
params.style = params.style .. " " .. z.wikitext.columnwidthstyle(width)
end
local dlopen
if ( nil ~= indent ) then
dlopen = z.wikitext.OpenHTMLTag({name="dl",params={style="text-indent: -" .. (indentsize or "3.2") .. "em;"}})
else
dlopen = ""
end
return z.wikitext.OpenHTMLTag({name="div",params=params}) .. dlopen
end
function refend0(frame, config, args)
local indent = args.indent
local dlclose
if ( nil ~= indent ) then
dlclose = "</dl>"
else
dlclose = ""
end
return dlclose .. "</div>"
end
-- This is used by {{doi}} to create DOI links in the style used in citations.
function z.doi(frame)
local pframe = frame:getParent()
local id = pframe.args.id or pframe.args[1] or ""
return doi(frame, id)
end
-- This is used by {{ISSN}} to create ISSN links in the style used in citations.
function z.ISSN(frame)
local pframe = frame:getParent()
local Name = pframe.args[1] or ""
return hideinprint(frame, "[[International Standard Serial Number|ISSN]] [http://www.worldcat.org/search?fq=x0:jrnl&q=n2:" .. Name .. " " .. Name .. "]")
end
-- This is used by templates such as {{SfnRef}} to create the (encoded) anchor name for a Harvard cross-reference hyperlink.
function z.SFNID(frame)
local pframe = frame:getParent()
return anchorid(pframe.args)
end
-- This is used by templates such as {{Harvard citation}} to create the Harvard cross-reference text.
function z.Harvard(frame)
local pframe = frame:getParent()
return crossref(frame, pframe.args)
end
-- This is used by templates such as {{cite book}} to create the actual citation text.
function z.citation(frame)
local pframe = frame:getParent()
return citation0(frame, pframe.args)
end
-- This is used by templates such as {{sfn}} to create the entire cross-reference.
function z.sfn(frame)
local pframe = frame:getParent()
local content = crossref(frame, pframe.args)
local args = { name = refid(pframe.args) }
-- return mw.text.tag{name = "ref", contents = content, params = args}
return z.wikitext.tag(frame, {name = "ref", contents = content, params = args})
end
-- This is used by template {{r}}.
function z.r(frame)
local pframe = frame:getParent()
local config = frame.args -- the arguments passed BY the template, in the wikitext of the template itself
local args = pframe.args -- the arguments passed TO the template, in the wikitext that instantiates the template
args.page1 = args.page1 or args.page
local text = ""
-- This would be shorter using ipairs(), but that doesn't work on an arguments table supplied to a template.
local index = 1
while args[index] ~= nil do
local arg = args[index]
local t = r0(frame, arg, args.group, args["page" .. index])
text = text .. t
index = index + 1
end
return text
end
-- This is used by template {{ref label}}.
function z.reflabel(frame)
local pframe = frame:getParent()
local config = frame.args -- the arguments passed BY the template, in the wikitext of the template itself
local args = pframe.args -- the arguments passed TO the template, in the wikitext that instantiates the template
local P1 = args[1] or ""
local P2 = args[2] or ""
local P3 = args[3] or ""
local id = nil
local contents = "[[#endnote_" .. P1 .. P3 .. "|[" .. P2 .. "]]]"
local params = {}
params.class="reference"
if ( args.noid == nil or args.noid == "" ) then params.id = "ref_" .. P1 .. P3 end
return z.wikitext.tag(frame, {name="sup",contents=contents,params=params})
end
-- This is used by templates {{reflist}} and {{notelist}}.
function z.reflist(frame)
local pframe = frame:getParent()
local config = frame.args -- the arguments passed BY the template, in the wikitext of the template itself
local args = pframe.args -- the arguments passed TO the template, in the wikitext that instantiates the template
return reflist0(frame, config, args)
end
-- This is used by template {{refbegin}}.
function z.refbegin(frame)
local pframe = frame:getParent()
local config = frame.args -- the arguments passed BY the template, in the wikitext of the template itself
local args = pframe.args -- the arguments passed TO the template, in the wikitext that instantiates the template
return refbegin0(frame, config, args)
end
-- This is used by template {{refend}}.
function z.refend(frame)
local pframe = frame:getParent()
local config = frame.args -- the arguments passed BY the template, in the wikitext of the template itself
local args = pframe.args -- the arguments passed TO the template, in the wikitext that instantiates the template
return refend0(frame, config, args)
end
-- This is used by template {{efn}}.
function z.efn(frame)
local pframe = frame:getParent()
local config = frame.args -- the arguments passed BY the template, in the wikitext of the template itself
local args = pframe.args -- the arguments passed TO the template, in the wikitext that instantiates the template
return z.wikitext.tag(frame, {name="ref",contents=(args[1] or ""),params={name=args.name,group=config.default_group}})
end
return z