en>Uncle G |
|
| (168 intermediate revisions by 20 users not shown) |
| Line 1: |
Line 1: |
| − | --require "mw.text"
| + | error('This module is retained for historical and structural reasons; consider using [[Module:Citation/CS1]].') |
| − | | |
| − | local p = {}
| |
| − | | |
| − | -- This can be removed when mw.text.tag appears.
| |
| − | function tag(frame, t)
| |
| − | local name = t.name or "!--"
| |
| − | local content = t.contents or ""
| |
| − | local params = ""
| |
| − | for n,v in pairs(t.params) do
| |
| − | params = params .. "|" .. n .. "=" .. v
| |
| − | end
| |
| − | return frame:preprocess("{{#tag:" .. name .. "|" .. content .. params .. "}}")
| |
| − | end
| |
| − | | |
| − | function hideinprint(frame, content)
| |
| − | return content
| |
| − | end
| |
| − | | |
| − | function doi(frame, id)
| |
| − | local text = hideinprint("[[Digital object identifier|doi]]:[http://dx.doi.org/{{urlencode:" .. id .. "}} " .. tag(frame, {name="nowiki",contents=id,params={}}) .. "]")
| |
| − | if ( string.sub(id,1,3) ~= "10." ) then
| |
| − | text = text .. "[[Category:Pages with DOI errors]]"
| |
| − | end
| |
| − | return frame:preprocess(text)
| |
| − | end
| |
| − | | |
| − | function authorprefix(Surname, Given, Authorlink, ampersand)
| |
| − | if (Surname == nil) then return "" end
| |
| − | local prefix = ampersand .. Surname
| |
| − | if (Given ~= nil) then prefix = prefix .. ", " .. Given end
| |
| − | if (Authorlink ~= nil) then prefix = "[[" .. Authorlink .. "|" .. prefix .. "]]" end
| |
| − | return prefix
| |
| − | 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 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
| |
| − | 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 citation0(frame, args)
| |
| − | local config = frame.args
| |
| − | local AuthorMask = args.authormask or args.authormask
| |
| − | local Surname1 = args.last or args.surname or args.last1 or args.surname1 or args.author1 or args.authors or args.author
| |
| − | local Surname2 = args.last2 or args.surname2 or args.author2
| |
| − | local Surname3 = args.last3 or args.surname3 or args.author3
| |
| − | local Surname4 = args.last4 or args.surname4 or args.author4
| |
| − | local Surname5 = args.last5 or args.surname5 or args.author5
| |
| − | local Surname6 = args.last6 or args.surname6 or args.author6
| |
| − | local Surname7 = args.last7 or args.surname7 or args.author7
| |
| − | local Surname8 = args.last8 or args.surname8 or args.author8
| |
| − | local Surname9 = args.last9 or args.surname9 or args.author9
| |
| − | local Given1 = args.first1 or args.given1 or args.first or args.given
| |
| − | local Given2 = args.first2 or args.given2
| |
| − | local Given3 = args.first3 or args.given3
| |
| − | local Given4 = args.first4 or args.given4
| |
| − | local Given5 = args.first5 or args.given5
| |
| − | local Given6 = args.first6 or args.given6
| |
| − | local Given7 = args.first7 or args.given7
| |
| − | local Given8 = args.first8 or args.given8
| |
| − | local Given9 = args.first9 or args.given9
| |
| − | local Authorlink1 = args.authorlink or args.author1link or args.authorlink1
| |
| − | local Authorlink2 = args.author2link or args.authorlink2
| |
| − | local Authorlink3 = args.author3link or args.authorlink3
| |
| − | local Authorlink4 = args.author4link or args.authorlink4
| |
| − | local Authorlink5 = args.author5link or args.authorlink5
| |
| − | local Authorlink6 = args.author6link or args.authorlink6
| |
| − | local Authorlink7 = args.author7link or args.authorlink7
| |
| − | local Authorlink8 = args.author8link or args.authorlink8
| |
| − | local Authorlink9 = args.author9link or args.authorlink9
| |
| − | local Coauthors = args.coauthor or args.coauthors
| |
| − | local Date = args.date or ((args.day or "") .. (args.month or "") .. (args.year or args.publicationdate or ""))
| |
| − | local Title = args.title
| |
| − | local URL = args.archiveurl or args.url
| |
| − | local Series = args.series
| |
| − | local Volume = args.volume
| |
| − | local Issue = args.issue or args.number
| |
| − | local Edition = args.edition
| |
| − | local Place = args.place or args.location
| |
| − | local PublicationPlace = args.publicationplace or args.place or args.location
| |
| − | local Publisher = args.publisher
| |
| − | local Language = args.language
| |
| − | local Format = args.format
| |
| − | local ISBN= args.isbn or args.ISBN
| |
| − | local DOI= args.doi or args.DOI
| |
| − | if ( Title ~= nil ) then Title = " ''" .. Title .. "''." else Title = "" end
| |
| − | if ( Publisher ~= nil ) then Publisher = " " .. Publisher .. "." else Publisher = "" end
| |
| − | local text = "(" .. Date .. ")." .. Title .. Publisher
| |
| − | text = authorprefix(Surname1, Given1, Authorlink1, "") .. text
| |
| − | text = authorprefix(Surname2, Given2, Authorlink2, "; ") .. text
| |
| − | text = authorprefix(Surname3, Given3, Authorlink3, "; ") .. text
| |
| − | text = authorprefix(Surname4, Given4, Authorlink4, "; ") .. text
| |
| − | text = authorprefix(Surname5, Given5, Authorlink5, "; ") .. text
| |
| − | text = authorprefix(Surname6, Given6, Authorlink6, "; ") .. text
| |
| − | text = authorprefix(Surname7, Given7, Authorlink7, "; ") .. text
| |
| − | text = authorprefix(Surname8, Given8, Authorlink8, "; ") .. text
| |
| − | text = authorprefix(Surname9, Given9, Authorlink9, "; ") .. text
| |
| − | if ( Language ~= nil ) then text = text .. " (in " .. Language .. ")" end
| |
| − | if ( ISBN ~= nil ) then text = text .. " ISBN " .. ISBN end
| |
| − | if ( DOI ~= nil ) then text = text .. " " .. doi(frame, DOI) end
| |
| − | return text
| |
| − | end
| |
| − | | |
| − | -- This is used by templates such as {{SfnRef}} to create the (encoded) anchor name for a Harvard cross-reference hyperlink.
| |
| − | function p.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 p.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 p.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 p.sfn(frame)
| |
| − | local pframe = frame:getParent()
| |
| − | local content = crossref(frame, pframe.args)
| |
| − | local args = { name = anchorid(pframe.args) }
| |
| − | -- return mw.text.tag{name = "ref", contents = content, params = args}
| |
| − | return tag(frame, {name = "ref", contents = content, params = args})
| |
| − | end
| |
| − | | |
| − | return p
| |