Modul:Citation: Perbedaan antara revisi
Konten dihapus Konten ditambahkan
k ←Suntingan Farras (bicara) dibatalkan ke versi terakhir oleh Iwan Novirion |
Migrasi templat ke modul menggunakan bahasa pemrograman Lua. |
||
Baris 1: | Baris 1: | ||
--------------------------------------------------------------------- |
|||
-- Module:Citation - Lua module for Citation auxiliary templates |
|||
--------------------------------------------------------------------- |
|||
-- For the {{citation}} formatting functions, see: Module:Citation/CS1 |
|||
-- (see NOTES at bottom) |
|||
--require "mw.text" |
--require "mw.text" |
||
local z = { |
local z = { |
||
wikitext = require("Module:Wikitext"), |
wikitext = require("Module:Wikitext"), |
||
extensiontags = { |
|||
mw = require("Module:Mw") |
|||
nowiki = true, |
|||
ref = true, |
|||
gallery = true, |
|||
pre = true, |
|||
source = true, |
|||
categorytree = true, |
|||
charinsert = true, |
|||
hiero = true, |
|||
imagemap = true, |
|||
inputbox = true, |
|||
math = true, |
|||
poem = true, |
|||
ref = true, |
|||
references = true, |
|||
syntaxhighlight = true, |
|||
timeline = true, |
|||
} |
|||
} |
} |
||
function trim( str ) |
|||
if str == nil then |
|||
return nil; |
|||
end |
|||
return str:match( "^%s*(.-)%s*$" ); |
|||
end |
|||
function hideinprint(content) |
function hideinprint(content) |
||
Baris 14: | Baris 43: | ||
end |
end |
||
-- This returns a string with HTML character entities for wikitext markup characters. |
|||
function nowiki(frame, content) |
|||
function wikiescape(text) |
|||
return z.mw.text.tag({name="nowiki",contents=content,params={}}, frame) |
|||
text = text:gsub( '[&\'%[%]{|}]', { |
|||
['&'] = '&', |
|||
["'"] = ''', |
|||
['['] = '[', |
|||
[']'] = ']', |
|||
['{'] = '{', |
|||
['|'] = '|', |
|||
['}'] = '}' } ); |
|||
return text; |
|||
end |
end |
||
function |
function createTag(t, frame) |
||
local |
local name = t.name or "!-- --" |
||
local content = t.contents or "" |
|||
local |
local attrs = {} |
||
if ( z.extensiontags[name] ) then |
|||
local t1 = hideinprint("[[" .. args.link .. "|" .. args.label .. "]]" .. sep .. "[" .. args.prefix .. z.mw.url.encode(args.id) .. args.suffix .. " " .. nowiki(frame, args.id) .. "]") |
|||
-- We have to preprocess these, so that they are properly turned into so-called "strip markers" in the generated wikitext. |
|||
return t0 .. t1 |
|||
if ( not frame ) then error ("Please supply an extra frame argument to the createTag() function.") end |
|||
local params = {} |
|||
for n,v in pairs(t.params) do |
|||
table.insert(params, "|" .. n .. "=" .. v) |
|||
end |
|||
return frame:preprocess("{{#tag:" .. name .. "|" .. content .. table.concat(params) .. "}}") |
|||
else |
|||
for n,v in pairs(t.params) do |
|||
if (v) then |
|||
table.insert(attrs, n .. "=\"" .. wikiescape(v) .. "\"") |
|||
else |
|||
table.insert(attrs, n) |
|||
end |
|||
end |
|||
if ("" == content) then |
|||
return "<" .. name .. " " .. table.concat(attrs, " ") .. "/>" |
|||
else |
|||
return "<" .. name .. " " .. table.concat(attrs, " ") .. ">" .. content .. "</" .. name .. ">" |
|||
end |
|||
end |
|||
end |
|||
--[[ |
|||
This is a clone of mw.text.nowiki. When the mw.text library is installed, |
|||
this can be replaced by a call to that library. ]] |
|||
function nowiki( s ) |
|||
-- string.gsub is safe here, because we're only caring about ASCII chars |
|||
s = string.gsub( s, '["&\'<=>%[%]{|}]', { |
|||
['"'] = '"', |
|||
['&'] = '&', |
|||
["'"] = ''', |
|||
['<'] = '<', |
|||
['='] = '=', |
|||
['>'] = '>', |
|||
['['] = '[', |
|||
[']'] = ']', |
|||
['{'] = '{', |
|||
['|'] = '|', |
|||
['}'] = '}', |
|||
} ) |
|||
s = string.sub( string.gsub( '\n' .. s, '\n[#*:;]', { |
|||
["\n#"] = "\n#", |
|||
["\n*"] = "\n*", |
|||
["\n:"] = "\n:", |
|||
["\n;"] = "\n;", |
|||
} ), 2 ) |
|||
s = string.gsub( s, '://', '://' ) |
|||
s = string.gsub( s, 'ISBN ', 'ISBN ' ) |
|||
s = string.gsub( s, 'RFC ', 'RFC ' ) |
|||
return s |
|||
end |
end |
||
function |
function externallinkid(args) |
||
local sep = args.separator or " " |
local sep = args.separator or " " |
||
args.suffix = args.suffix or "" |
args.suffix = args.suffix or "" |
||
local url_string = args.id |
|||
if args.encode == true or args.encode == nil then |
|||
url_string = mw.uri.encode( url_string ); |
|||
end |
|||
local t0 = onlyinprint(args.label .. sep .. args.id) |
local t0 = onlyinprint(args.label .. sep .. args.id) |
||
local t1 = hideinprint("[[" .. args.link .. "|" .. args.label .. "]]" .. sep .. " |
local t1 = hideinprint("[[" .. args.link .. "|" .. args.label .. "]]" .. sep .. "[" .. args.prefix .. url_string .. args.suffix .. " " .. nowiki(args.id) .. "]") |
||
return t0 .. t1 |
return t0 .. t1 |
||
end |
end |
||
function |
function doi(id, inactive, nocat) |
||
if ( nil == domain ) then |
|||
domain = "com" |
|||
elseif ( "jp" == domain or "uk" == domain ) then |
|||
domain = "co." .. domain |
|||
end |
|||
return externallinkid(frame, {link="Amazon Standard Identification Number",label="ASIN",prefix="//www.amazon."..domain.."/dp/",id=id}) |
|||
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 = "" |
local cat = "" |
||
local text; |
|||
if ( inactive ~= nil ) then |
if ( inactive ~= nil ) then |
||
text = "[[Digital object identifier|doi]]:" .. id; |
|||
cat = cat .. "[[Kategori:Halaman dengan DOI yang nonaktif sejak " .. selectyear(inactive) .. "]]" |
|||
inactive = " (inactive " .. inactive .. ")" |
inactive = " (inactive " .. inactive .. ")" |
||
cat = cat .. "[[Category:Pages with DOIs inactive since " .. z.wikitext.canonicalcleanuptime(inactive) .. "]]" |
|||
else |
else |
||
text = externallinkid({link="Digital object identifier",label="doi",prefix="https://doi.org/",id=id,separator=":"}) |
|||
inactive = "" |
inactive = "" |
||
end |
end |
||
if ( string.sub(id,1,3) ~= "10." ) then |
if ( string.sub(id,1,3) ~= "10." ) then |
||
cat = cat .. "[[ |
cat = cat .. "[[Kategori:Halaman dengan kesalahan DOI]]" .. '<span class="error"> Bad DOI (expected "10." prefix) in code number</span>' |
||
end |
end |
||
if ( nocat and nocat ~= "" ) then cat = "" end |
if ( nocat and nocat ~= "" ) then cat = "" end |
||
return text .. inactive .. cat |
return text .. inactive .. cat |
||
end |
|||
function url(frame, id) |
|||
local t0 = onlyinprint(id) |
|||
local t1 = hideinprint("[" .. id .. " " .. nowiki(frame, id) .. "]") |
|||
return t0 .. t1 |
|||
end |
end |
||
function |
function selectyear( str ) |
||
local |
local lang = mw.getContentLanguage(); |
||
local |
local good, result; |
||
good, result = pcall( lang.formatDate, lang, 'Y', str ) |
|||
local code = id:sub(-1,-1) |
|||
if |
if good then |
||
return result; |
|||
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 |
else |
||
return ''; |
|||
cat = cat .. "[[Category:Pages with OL errors]]" |
|||
end |
end |
||
local text = externallinkid(frame, {link="Open Library",label="OL",prefix=prefix,id=id}) |
|||
return text .. cat |
|||
end |
end |
||
function |
function anchorid(label, args) |
||
local |
local P1 = trim(args[1]) or "" |
||
local P2 = trim(args[2]) or "" |
|||
local P3 = trim(args[3]) or "" |
|||
table.insert(initials, string.sub(word,1,1)) -- Vancouver format does not include full stops. |
|||
local P4 = trim(args[4]) or "" |
|||
local P5 = trim(args[5]) or "" |
|||
local anchor = P1 .. P2 .. P3 .. P4 .. P5; |
|||
if anchor ~= '' then -- See bug description in Citation/CS1 |
|||
anchor = mw.uri.anchorEncode( anchor ); |
|||
end |
end |
||
return table.concat(initials) -- Vancouver format does not include spaces. |
|||
return label .. anchor |
|||
end |
end |
||
function |
function refid(label, args) |
||
local sep = control.sep |
|||
local namesep = control.namesep |
|||
local format = control.format |
|||
local maximum = control.maximum |
|||
local text = {} |
|||
for i,person in ipairs(people) do |
|||
if (person.last ~= nil) then |
|||
local mask = person.mask |
|||
local one |
|||
if ( maximum ~= nil and i == maximum + 1 ) then |
|||
one = "et al." |
|||
elseif ( maximum ~= nil and i > maximum + 1 ) then |
|||
break |
|||
elseif (mask ~= nil) then |
|||
local n = tonumber(mask) |
|||
if (n ~= nil) then |
|||
one = string.rep("—",n) |
|||
else |
|||
one = mask |
|||
end |
|||
else |
|||
one = person.last |
|||
local first = person.first |
|||
if (first ~= nil) then |
|||
if ( "vanc" == format ) then first = reducetoinitials(first) end |
|||
one = one .. namesep .. first |
|||
end |
|||
if (person.link ~= nil) then one = "[[" .. person.link .. "|" .. one .. "]]" end |
|||
end |
|||
table.insert(text, one) |
|||
end |
|||
end |
|||
local result = table.concat(text, sep) -- construct list |
|||
if ( "scap" == format ) then result= z.mw.text.tag({name="span", contents=result, params={class="smallcaps", style="font-variant:small-caps;"}}) end -- if necessary wrap result in <span> tag to format in Small Caps |
|||
return result |
|||
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 p = args.p or "" |
||
local pp = args.pp or "" |
local pp = args.pp or "" |
||
local loc = args.loc or "" |
local loc = args.loc or "" |
||
return anchorid(args) .. p .. pp .. loc |
return anchorid(label, args) .. p .. pp .. loc |
||
end |
end |
||
function name(args) |
function name(args) |
||
local P1 = args[1] or "" |
local P1 = trim(args[1]) or "" |
||
if ( args[5] ~= nil) then |
if ( args[5] ~= nil) then |
||
return P1 .. " et al." |
return P1 .. " et al." |
||
else |
else |
||
local P2 = args[2] or "" |
local P2 = trim(args[2]) or "" |
||
local P3 = args[3] or "" |
local P3 = trim(args[3]) or "" |
||
local P4 = args[4] or "" |
local P4 = trim(args[4]) or "" |
||
if ( args[4] ~= nil ) then |
if ( args[4] ~= nil ) then |
||
P4 = " " .. P4 |
P4 = " " .. P4 |
||
P3 = " |
P3 = " & " .. P3 |
||
P2 = ", " .. P2 |
P2 = ", " .. P2 |
||
elseif ( args[3] ~= nil ) then |
elseif ( args[3] ~= nil ) then |
||
P3 = " " .. P3 |
P3 = " " .. P3 |
||
P2 = " & " .. P2 |
P2 = " & " .. P2 |
||
elseif ( args[2] ~= nil ) then |
elseif ( args[2] ~= nil ) then |
||
P2 = " " .. P2 |
P2 = " " .. P2 |
||
Baris 167: | Baris 201: | ||
end |
end |
||
function crossref(frame, args) |
function crossref(frame, label, args) |
||
local config = frame.args -- the arguments passed BY the template, in the wikitext of the template itself |
local config = frame.args -- the arguments passed BY the template, in the wikitext of the template itself |
||
local LB = config.BracketLeft or "" |
local LB = config.BracketLeft or "" |
||
local RB = config.BracketRight or "" |
local RB = config.BracketRight or "" |
||
local anchor = args.ref or args.Ref or anchorid(args) |
local anchor = args.ref or args.Ref or anchorid( label, args) |
||
local text = name(args) |
local text = name(args) |
||
local loc = args.loc |
local loc = args.loc |
||
local |
local page |
||
local pages = args.pp or args.pages |
local pages = args.pp or args.pages |
||
if pages == nil or pages == '' then |
|||
page = args.p or args.page; |
|||
end |
|||
if nil == loc then loc = "" else loc = " " .. loc end |
if nil == loc then loc = "" else loc = " " .. loc end |
||
if ( page ~= nil ) then |
if ( page ~= nil ) then |
||
local pagesep = config.PageSep or ", p. |
local pagesep = config.PageSep or ", p. " |
||
loc = loc .. pagesep .. page |
loc = loc .. pagesep .. page |
||
end |
end |
||
if ( pages ~= nil ) then |
if ( pages ~= nil ) then |
||
local pagessep = config.PagesSep or ", pp. |
local pagessep = config.PagesSep or ", pp. " |
||
loc = loc .. pagessep .. pages |
loc = loc .. pagessep .. pages |
||
end |
end |
||
Baris 188: | Baris 225: | ||
local ps = args.Postscript or "" |
local ps = args.Postscript or "" |
||
return LB .. "[[" .. pagename .. "#" .. anchor .. "|" .. text .. "]]" .. loc .. RB .. ps |
return LB .. "[[" .. pagename .. "#" .. 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 ( last and "" < last ) then -- just in case someone passed in an empty parameter |
|||
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["author-link" .. i] or args["author" .. i .. "link"] or args["authorlink" .. i], |
|||
mask = args["author" .. i .. "-mask"] or args["author-mask" .. i] or args["author" .. i .. "mask"] or args["authormask" .. i] |
|||
} |
|||
else |
|||
return nil |
|||
end |
|||
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 ( last and "" < last ) then -- just in case someone passed in an empty parameter |
|||
return { |
|||
last = last, |
|||
first = args["editor" .. i .. "-first"] or args["editor-first" .. i] or args["EditorGiven" .. i], |
|||
link = args["editor" .. i .. "-link"] or args["editor-link" .. i] or args["editor" .. i .. "link"] or args["editorlink" .. i], |
|||
mask = args["editor" .. i .. "-mask"] or args["editor-mask" .. i] or args["editor" .. i .. "mask"] or args["editormask" .. i] |
|||
} |
|||
else |
|||
return nil |
|||
end |
|||
end |
|||
function citation0(frame, args) |
|||
local config = frame.args -- the arguments passed BY the template, in the wikitext of the template itself |
|||
local PPrefix = config.PPrefix or "p. " |
|||
local PPPrefix = config.PPPrefix or "pp. " |
|||
if ( nil ~= args.nopp ) then PPPrefix = "" PPrefix = "" end |
|||
-- Transfer unnumbered arguments to numbered arguments if necessary. |
|||
args["author1"] = args["author1"] or args["author"] |
|||
args["author1-last"] = args["author1-last"] or args["author-last"] or args["last"] |
|||
args["author1-first"] = args["author1-first"] or args["author-first"] or args ["first"] |
|||
args["author1-link"] = args["author1-link"] or args["author-link"] |
|||
args["author1-mask"] = args["author1-mask"] or args["author-mask"] |
|||
args["author1link"] = args["author1link"] or args["authorlink"] |
|||
args["editor1"] = args["editor1"] or args["editor"] |
|||
args["editor1-last"] = args["editor1-last"] or args["editor-last"] |
|||
args["editor1-first"] = args["editor1-first"] or args["editor-first"] |
|||
args["editor1-link"] = args["editor1-link"] or args["editor-link"] |
|||
args["editor1-mask"] = args["editor1-mask"] or args["editor-mask"] |
|||
args["editor1link"] = args["editor1link"] or args["editorlink"] |
|||
-- Pick out the relevant fields from the arguments. Different citation templates define different field names for the same underlying things. |
|||
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 |
|||
local Coauthors = args.coauthors or args.coauthor |
|||
local Others = args.others |
|||
local EditorMask = args.editormask or args["editor-mask"] |
|||
local EditorFormat = args["editor-format"] or args.editorformat |
|||
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 |
|||
local Year = args.year |
|||
local PublicationDate = args.publicationdate |
|||
local OrigYear = args.origyear |
|||
local Date = args.date |
|||
local LayDate = args.laydate |
|||
local Title = args.title or args.encyclopaedia or args.encyclopedia or args.dictionary |
|||
local BookTitle = args.booktitle |
|||
local Conference = args.conference |
|||
local TransTitle = args.trans_title |
|||
local TitleNote = args.department |
|||
local TitleLink = args.titlelink or args.episodelink |
|||
local Chapter = args.chapter or args.article or args.entry |
|||
local ChapterLink = args.chapterlink |
|||
local TransChapter = args["trans-chapter"] or args.trans_chapter |
|||
local TitleType = args.type |
|||
local ArchiveURL = args["archive-url"] or args.archiveurl |
|||
local URL = args.url |
|||
local ChapterURL = args["chapter-url"] or args.chapterurl |
|||
local ConferenceURL = args["conference-url"] or args.conferenceurl |
|||
local Periodical = args.journal or args.newspaper or args.magazine or args.work or args.periodical or args.encyclopedia or args.encyclopaedia |
|||
local Series = args.series or args.version |
|||
local Volume = args.volume |
|||
local Issue = args.issue or args.number |
|||
local Position = nil |
|||
local Page = args.page |
|||
local Pages = args.pages |
|||
local PP = args.pp |
|||
local At = args.at |
|||
local Edition = args.edition |
|||
local PublicationPlace = args["publication-place"] or args.publicationplace or args.place or args.location |
|||
local Location = PublicationPlace |
|||
local PublisherName = args.publisher |
|||
local SubscriptionRequired = args.subscription |
|||
local Via = args.via |
|||
local AccessDate = args["access-date"] or args.accessdate |
|||
local ArchiveDate = args["archive-date"] or args.archivedate |
|||
local Agency = args.agency |
|||
local DeadURL = args.deadurl |
|||
local Language = args.language or args["dalam bahasa"] |
|||
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_inactivedate or args.doi_brokendate or args.DoiBroken |
|||
local ID = args.id or args.ID |
|||
local ISBN = args.isbn13 or 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 |
|||
local Quote = args.quote or args.quotation |
|||
local PostScript = args.postscript |
|||
local LaySummary = args.laysummary |
|||
local LaySource = args.laysource |
|||
local Transcript = args.transcript |
|||
local TranscriptURL = args["transcript-url"] or args.transcripturl |
|||
-- At this point fields may be nil if they weren't specified in the template use. We can use that fact. |
|||
-- Account for the oddity that is {{cite conference}}, before generation of COinS data. |
|||
if ( BookTitle ) then |
|||
Chapter = Title |
|||
ChapterLink = TitleLink |
|||
TransChapter = TransTitle |
|||
Title = BookTitle |
|||
TitleLink = nil |
|||
TransTitle = nil |
|||
end |
|||
-- Account for the oddity that is {{cite episode}}, before generation of COinS data. |
|||
if config.CitationClass == "episode" then |
|||
local AirDate = args.airdate |
|||
local SeriesLink = args.serieslink |
|||
local Season = args.season |
|||
local SeriesNumber = args.seriesnumber or args.seriesno |
|||
local Network = args.network |
|||
local Station = args.station |
|||
local s = {} |
|||
if Issue ~= nil then table.insert(s, "episode " .. Issue) Issue = nil end |
|||
if Season ~= nil then table.insert(s, "season " .. Season) end |
|||
if SeriesNumber ~= nil then table.insert(s, "series " .. SeriesNumber) end |
|||
local n = {} |
|||
if Network ~= nil then table.insert(n, Network) end |
|||
if Station ~= nil then table.insert(n, Station) end |
|||
Date = Date or AirDate |
|||
Chapter = Title |
|||
ChapterLink = TitleLink |
|||
TransChapter = TransTitle |
|||
Title = Series |
|||
TitleLink = SeriesLink |
|||
TransTitle = nil |
|||
local Sep = args["series-separator"] or args["separator"] or ". " |
|||
Series = table.concat(s, Sep) |
|||
ID = table.concat(n, Sep) |
|||
end |
|||
-- These data form a COinS tag (see <http://ocoins.info/>) which allows automated tools to parse the citation information. |
|||
local OCinSdata = {} -- COinS metadata excluding id, bibcode, doi, etc. |
|||
local ctx_ver = "Z39.88-2004" |
|||
OCinSdata.rft_val_fmt = "info:ofi/fmt:kev:mtx:" |
|||
if ( nil ~= Periodical ) then |
|||
OCinSdata["rft.genre"] = "article" |
|||
OCinSdata["rft.jtitle"] = Periodical |
|||
if ( nil ~= Title ) then |
|||
OCinSdata["rft.atitle"] = Title |
|||
OCinSdata.rft_val_fmt "info:ofi/fmt:kev:mtx:journal" |
|||
end |
|||
end |
|||
if ( 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 |
|||
OCinSdata.rft_val_fmt "info:ofi/fmt:kev:mtx:book" |
|||
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 = {} -- COinS data only for id, bibcode, doi, pmid, etc. |
|||
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 = "ctx_ver=" .. ctx_ver -- such as "Z39.88-2004" |
|||
for name,value in pairs(OCinSids) do |
|||
OCinStitle = OCinStitle .. "&rft_id=" .. z.mw.url.encode(name .. "/" .. value) |
|||
end |
|||
for name,value in pairs(OCinSdata) do |
|||
OCinStitle = OCinStitle .. "&" .. name .. "=" .. z.mw.url.encode(value) |
|||
end |
|||
OCinStitle = OCinStitle .. "&rfr_id=info:sid/en.wikipedia.org:" |
|||
.. config.fullpagename -- end COinS data by page's non-encoded pagename |
|||
-- 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 |
|||
local AuthorNameSep = args["author-name-separator"] or args["name-separator"] or ", " |
|||
local AuthorSep = args["author-separator"] or args["separator"] or "; " |
|||
local AuthorFormat = args["author-format"] or args.authorformat |
|||
local AuthorMaximum = tonumber(args["display-authors"] or args.displayauthors) or 8 |
|||
local control = { sep = AuthorSep, namesep = AuthorNameSep, format = AuthorFormat, maximum = AuthorMaximum } |
|||
Authors = listpeople(control, a) |
|||
end |
|||
if ( Editors == nil ) then |
|||
local EditorNameSep = args["editor-name-separator"] or args["name-separator"] or ", " |
|||
local EditorSep = args["editor-separator"] or args["separator"] or "; " |
|||
local EditorFormat = args["editor-format"] or args.editorformat |
|||
local EditorMaximum = tonumber(args["display-editors"] or args.displayeditors) or 3 |
|||
local control = { sep = EdithorSep, namesep = EditorNameSep, format = EditorFormat, maximum = EditorMaximum } |
|||
Editors = listpeople(control, e) |
|||
end |
|||
if ( Date == nil ) then |
|||
-- there's something hinky with how this adds dashes to perfectly-good free-standing years |
|||
--[[ Date = Year |
|||
if ( Date ~= nil ) then |
|||
local Month = args.month |
|||
if ( Month == nil ) then |
|||
local Began = args.began |
|||
local Ended = args.ended |
|||
if Began ~= nil and Ended ~= nil then |
|||
Month = Began .. "–" .. Ended |
|||
else |
|||
Month = "–" |
|||
end |
|||
end |
|||
Date = Month .. " " .. Date |
|||
local Day = args.day |
|||
if ( Day ~= nil ) then Date = Day .. " " .. Date end |
|||
end |
|||
]] -- so let's use the original version for now |
|||
Date = Year |
|||
if ( Date ~= nil ) then |
|||
local Month = args.month |
|||
if ( Month ~= nil ) then |
|||
Date = Month .. " " .. Date |
|||
local Day = args.day |
|||
if ( Day ~= nil ) then Date = Day .. " " .. Date end |
|||
end |
|||
end |
|||
end |
|||
if ( PublicationDate == Date or PublicationDate == Year ) then PublicationDate = nil end |
|||
if ( ArchiveURL and "" < ArchiveURL ) then |
|||
local temp = URL |
|||
URL = ArchiveURL |
|||
end |
|||
if ( TransTitle and "" < TransTitle ) then TransTitle = " [" .. TransTitle .. "]." else TransTitle = "" end |
|||
if ( TransChapter and "" < TransChapter ) then TransChapter = " [" .. TransChapter .. "]." else TransChapter = "" end |
|||
if ( Chapter and "" < Chapter ) then |
|||
if ( ChapterLink and "" < ChapterLink ) then Chapter = "[[" .. ChapterLink .. "|" .. Chapter .. "]]" end |
|||
if ( Periodical and "" < Periodical ) then |
|||
Chapter = "<i>" .. Chapter .. "</i>" |
|||
else |
|||
Chapter = "\"" .. Chapter .. "\"" |
|||
end |
|||
Chapter = Chapter .. TransChapter |
|||
if ( ChapterLink == nil ) then |
|||
if ( ChapterURL and "" < ChapterURL ) then |
|||
Chapter = "[" .. ChapterURL .. " " .. Chapter .. "]" |
|||
elseif ( URL and "" < URL ) then |
|||
Chapter = "[" .. URL .. " " .. Chapter .. "]" |
|||
URL = nil |
|||
end |
|||
end |
|||
Chapter = Chapter .. ". " -- with end-space |
|||
else |
|||
Chapter = "" |
|||
end |
|||
if ( Title and "" < Title ) then |
|||
if ( TitleLink and "" < TitleLink ) then |
|||
Title = "[[" .. TitleLink .. "|" .. Title .. "]]" end |
|||
if ( Periodical and "" < Periodical ) then |
|||
Title = "\"" .. Title .. "\"" |
|||
elseif ( config.CitationClass == "web" |
|||
or config.CitationClass == "news" ) then |
|||
Title = "\"" .. Title .. "\"" |
|||
else |
|||
Title = "<i>" .. Title .. "</i>" |
|||
end |
|||
Title = Title .. TransTitle |
|||
if ( TitleLink == nil and URL and "" < URL ) then |
|||
Title = "[" .. URL .. " " .. Title .. "]" |
|||
URL = nil |
|||
end |
|||
Title = Title .. "." -- with end-dot |
|||
else |
|||
Title = "" |
|||
end |
|||
if ( Conference ~= nil ) then |
|||
if ( ConferenceURL ~= nil ) then |
|||
Conference = "[" .. ConferenceURL .. " " .. Conference .. "]" |
|||
end |
|||
Conference = " " .. Conference |
|||
else |
|||
Conference = "" |
|||
end |
|||
if ( nil ~= Position or nil ~= Page or nil ~= Pages ) then At = nil end |
|||
if ( nil == Position ) then |
|||
local Minutes = args.minutes |
|||
if ( nil ~= Minutes ) then |
|||
Position = " " .. Minutes .. " minutes in" |
|||
else |
|||
local Time = args.time |
|||
if ( nil ~= Time ) then |
|||
local TimeCaption = args.timecaption or "Event occurs at" |
|||
Position = " " .. TimeCaption .. " " .. Time |
|||
else |
|||
Position = "" |
|||
end |
|||
end |
|||
else |
|||
Position = " " .. Position |
|||
end |
|||
if ( nil == Page ) then |
|||
Page = "" |
|||
elseif ( Periodical ~= nil ) then |
|||
Page = ": " .. Page .. "." |
|||
else |
|||
Page = " " .. PPrefix .. Page .. "." |
|||
end |
|||
if ( nil == Pages ) then |
|||
Pages = "" |
|||
elseif ( Periodical ~= nil ) then |
|||
Pages = ": " .. Pages .. "." |
|||
else |
|||
if ( tonumber(Pages) ~= nil ) then |
|||
Pages = " " .. PPrefix .. Pages .. "." |
|||
else Pages = " " .. PPPrefix .. Pages .. "." |
|||
end |
|||
end |
|||
if ( At ~= nil ) then At = " " .. At .. "." |
|||
else At = "" end |
|||
if ( Coauthors ~= nil ) then |
|||
if ( Authors ~= nil ) then Coauthors = "; " .. Coauthors end |
|||
if ( Date == nil ) then Coauthors = Coauthors .. "." end |
|||
else Coauthors = "" end |
|||
if ( Others ~= nil ) then Others = " " .. Others .. "." else Others = "" end |
|||
if ( TitleType ~= nil ) then TitleType = " (" .. TitleType .. ")." else TitleType = "" end |
|||
if ( TitleNote ~= nil ) then TitleNote = " (" .. TitleNote .. ")." else TitleNote = "" end |
|||
if ( PublicationPlace ~= nil ) then PublicationPlace = PublicationPlace .. ": " else PublicationPlace = "" end |
|||
if ( Language ~= nil ) then Language = " (dalam bahasa " .. Language .. ")" else Language = "" end |
|||
if ( Edition ~= nil ) then Edition = " (" .. Edition .. " edition)" else Edition = "" end |
|||
if ( Volume ~= nil ) then Volume = " <b>" .. Volume .. "</b>" 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 ( Agency ~= nil ) then Agency = " " .. Agency .. "." else Agency = "" end |
|||
if ( Date ~= nil ) then Date = Date else Date = "" end |
|||
if ( Via ~= nil ) then Via = " — via " .. Via else Via = "" end |
|||
if ( AccessDate ~= nil ) then AccessDate = " Retrieved " .. AccessDate .. "." else AccessDate = "" end |
|||
if ( SubscriptionRequired ~= nil ) then |
|||
SubscriptionRequired = " " .. z.mw.text.tag({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, OL) 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 |
|||
if ( Quote ~= nil ) then |
|||
Quote = " \"" .. Quote .. "\"" |
|||
PostScript = "" |
|||
else |
|||
if ( PostScript ~= nil ) then PostScript = " " .. PostScript else PostScript = "" end |
|||
Quote = "" |
|||
end |
|||
local Archived |
|||
if ( nil ~= ArchiveURL ) then |
|||
if ( ArchiveDate ~= nil ) then ArchiveDate = " " .. ArchiveDate |
|||
else ArchiveDate = "" end |
|||
if ( "no" == DeadURL ) then |
|||
Archived = " [" .. ArchiveURL .. " Archived] from the original on" .. ArchiveDate .. "." |
|||
else |
|||
Archived = " Archived from [" .. args.url .. " the original] on" .. ArchiveDate .. "." |
|||
end |
|||
else |
|||
Archived = "" |
|||
end |
|||
local Lay |
|||
if ( nil ~= LaySummary ) then |
|||
if ( LayDate ~= nil ) then LayDate = " (" .. LayDate .. ")" else LayDate = "" end |
|||
if ( LaySource ~= nil ) then LaySource = " – <i>" .. LaySource .. "</i>" else LaySource = "" end |
|||
Lay = " [" .. LaySummary .. " lay summary]" .. LaySource .. LayDate |
|||
else |
|||
Lay = "" |
|||
end |
|||
if ( nil ~= Transcript ) then |
|||
if ( TranscriptURL ~= nil ) then Transcript = "[" .. TranscriptURL .. Transcript .. "]" end |
|||
else |
|||
Transcript = "" |
|||
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 |
|||
if (Location ~=nil) then Publisher= " (" .. Location .. ")." |
|||
else Publisher = "" end |
|||
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 = " <i>" .. Periodical .. "</i>." |
|||
else Periodical = "" end |
|||
-- Piece all bits together at last. At this point, all should be 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 .. Archived .. AccessDate .. Via .. SubscriptionRequired .. Lay .. Quote .. PostScript |
|||
local tcommon = Title .. TitleType .. TitleNote .. Format .. Edition .. Language .. Conference .. Periodical .. Series .. Volume .. Issue .. Position .. Page .. Pages .. At |
|||
-- DEBUG: tcommon = "/Title="..Title .. "/TitleType="..TitleType .. "/TitleNote="..TitleNote .. "/Format="..Format .. "/Edition="..Edition .. "/Language="..Language .. "/Conference="..Conference .. "/Periodical="..Periodical .. "/Series="..Series .. "/Volume="..Volume .. "/Issue="..Issue .. "/Position="..Position .. Page .. Pages .. At |
|||
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 .. Others .. Editors .. tcommon .. Publisher .. Agency .. idcommon |
|||
elseif ( "" ~= Editors) then |
|||
Editors = Editors .. " (eds.)" |
|||
if ( "" ~= Date ) then Date = " (" .. Date .. "). " |
|||
else Editors = Editors .. ". " end |
|||
text = Editors .. Date .. Chapter .. tcommon .. Publisher .. Agency .. idcommon |
|||
else |
|||
if ( "" ~= Date ) then Date = " " .. Date .. "." end |
|||
text = Chapter .. tcommon .. Publisher .. Agency .. Date .. idcommon |
|||
end |
|||
-- Now enclose the whole thing in a <span/> element |
|||
if ( Year == nil ) then Year = "" end |
|||
local args = { class="citation " .. (config.CitationClass or "") } |
|||
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 |
|||
args.id = id; |
|||
end |
|||
text = z.mw.text.tag({name="span", contents=text, params=args}) |
|||
local OCinS = z.mw.text.tag({name="span", contents=" ", params={class="Z3988",title=OCinStitle,style="display: none;"}}) |
|||
return text .. OCinS |
|||
end |
end |
||
Baris 735: | Baris 233: | ||
if ( page ~= nil ) then |
if ( page ~= nil ) then |
||
local contents = ":" .. page |
local contents = ":" .. page |
||
p = |
p = createTag({name="sup",contents=contents,params={class="reference",style="white-space:nowrap;"}}) |
||
end |
end |
||
return |
return createTag({name="ref",contents="",params={name=name,group=group}}, frame) .. p |
||
end |
end |
||
Baris 768: | Baris 266: | ||
params.style = params.style .. " " .. z.wikitext.columnwidthstyle(width) |
params.style = params.style .. " " .. z.wikitext.columnwidthstyle(width) |
||
end |
end |
||
local references = |
local references = createTag({name="references",contents=contents,params={group=group}}, frame) |
||
return |
return createTag({name="div",contents=references,params=params}) |
||
end |
end |
||
Baris 824: | Baris 322: | ||
local pframe = frame:getParent() |
local pframe = frame:getParent() |
||
local id = pframe.args.id or pframe.args[1] or "" |
local id = pframe.args.id or pframe.args[1] or "" |
||
return doi( |
return doi(id) |
||
end |
end |
||
Baris 831: | Baris 329: | ||
local pframe = frame:getParent() |
local pframe = frame:getParent() |
||
local Name = pframe.args[1] or "" |
local Name = pframe.args[1] or "" |
||
return hideinprint( |
return hideinprint("[[International Standard Serial Number|ISSN]] [https://www.worldcat.org/search?fq=x0:jrnl&q=n2:" .. Name .. " " .. Name .. "]") |
||
end |
end |
||
Baris 837: | Baris 335: | ||
function z.SFNID(frame) |
function z.SFNID(frame) |
||
local pframe = frame:getParent() |
local pframe = frame:getParent() |
||
return anchorid(pframe.args) |
return anchorid('FOOTNOTE', pframe.args) |
||
end |
end |
||
Baris 844: | Baris 342: | ||
local pframe = frame:getParent() |
local pframe = frame:getParent() |
||
return crossref(frame, pframe.args) |
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 |
end |
||
Baris 855: | Baris 347: | ||
function z.sfn(frame) |
function z.sfn(frame) |
||
local pframe = frame:getParent() |
local pframe = frame:getParent() |
||
pframe.args.Postscript = pframe.args.postscript or pframe.args.ps or "."; |
|||
local args = { name = refid(pframe.args) } |
|||
local content = crossref(frame, 'CITEREF', pframe.args) |
|||
return z.mw.text.tag({name = "ref", contents = content, params = args}, frame) |
|||
local args = { name = refid( 'FOOTNOTE', pframe.args) } |
|||
return createTag({name = "ref", contents = content, params = args}, frame) |
|||
end |
end |
||
Baris 891: | Baris 385: | ||
params.class="reference" |
params.class="reference" |
||
if ( args.noid == nil or args.noid == "" ) then params.id = "ref_" .. P1 .. P3 end |
if ( args.noid == nil or args.noid == "" ) then params.id = "ref_" .. P1 .. P3 end |
||
return |
return createTag({name="sup",contents=contents,params=params}) |
||
end |
end |
||
Baris 904: | Baris 398: | ||
local contents |
local contents |
||
if arrow ~= "" then |
if arrow ~= "" then |
||
local sup_arrow = |
local sup_arrow = createTag({name="sup",contents=arrow,params={}}) |
||
contents = "[[#ref_" .. id .. arrow .. "|<b>" .. sup_arrow .. "</b>]]" .. postscript |
contents = "[[#ref_" .. id .. arrow .. "|<b>" .. sup_arrow .. "</b>]]" .. postscript |
||
if "none" == arrow then arrow = "^" end -- Change this AFTER using it in the ID parameter and the contents. |
if "none" == arrow then arrow = "^" end -- Change this AFTER using it in the ID parameter and the contents. |
||
Baris 912: | Baris 406: | ||
local params = { class="citation wikicite" } |
local params = { class="citation wikicite" } |
||
if id ~= "" and ( args.noid == nil or args.noid == "" ) then |
if id ~= "" and ( args.noid == nil or args.noid == "" ) then |
||
params.id = |
params.id = mw.uri.anchorEncode("endnote_" .. id .. arrow) |
||
end |
end |
||
return |
return createTag({name="span",contents=contents,params=params}) |
||
end |
end |
||
Baris 946: | Baris 440: | ||
local config = frame.args -- the arguments passed BY the template, in the wikitext of the template itself |
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 args = pframe.args -- the arguments passed TO the template, in the wikitext that instantiates the template |
||
return |
return createTag({name="ref",contents=(args[1] or ""),params={name=args.name,group=config.default_group}}, frame) |
||
end |
end |
||
return z |
return z |
||
--------------------------------------------------------------------- |
|||
--NOTES |
|||
-- |
|||
-- NOTE A1: This Lua module was originally designed to handle a mix |
|||
-- of citation styles, crossing Vancouver style with Wikipedia's |
|||
-- local Citation Style 1 (CS1) from {Template:Citation/core}. |
|||
-- However, the conflicting positions of parameters, scattered |
|||
-- in twisted locations across this module, led to a separate |
|||
-- variation just to untangle the CS1 format of citations. |
|||
-- |
|||
-- NOTE D2: The placement of dots and other separators between the |
|||
-- displayed parameters has been a continual headache, to keep |
|||
-- coordinated with the data in parentheses "(data)". There |
|||
-- has been a need to pre-check for the existence of related |
|||
-- options, to keep from putting double-dots ".." in some cases. |
|||
-- In particular, the omission of the "title=" parameter has led |
|||
-- to several cases of a spurious dot ". ." because the original |
|||
-- design had treated the title as a mandatory parameter. |
|||
-- |
|||
------------------------------------------------------------------------ |
------------------------------------------------------------------------ |
||
--HISTORY: |
--HISTORY: |
||
Baris 958: | Baris 471: | ||
--19Oct2012 For pages, put   in "p. " etc. |
--19Oct2012 For pages, put   in "p. " etc. |
||
--19Oct2012 Enhanced "pages=" to detect lone page as "p." else "pp." prefix. |
--19Oct2012 Enhanced "pages=" to detect lone page as "p." else "pp." prefix. |
||
--19Oct2012 Fixed to show "." after Periodical name (work, newspaper |
--19Oct2012 Fixed to show "." after Periodical name (work, newspaper...). |
||
--19Oct2012 Fixed web-link to have spaces "[... Archived] from the original". |
--19Oct2012 Fixed web-link to have spaces "[... Archived] from the original". |
||
--19Oct2012 Fixed to show ";" between authors & coauthors. |
--19Oct2012 Fixed to show ";" between authors & coauthors. |
||
--19Oct2012 Fixed to omit "." after coauthors. |
--19Oct2012 Fixed to omit extra "." after coauthors. |
||
--20Oct2012 Fixed COinS data to not urlencode all, as "ctx_ver=Z39.88-2004" |
--20Oct2012 Fixed COinS data to not urlencode all, as "ctx_ver=Z39.88-2004" |
||
--20Oct2012 Fixed COinS to not end as "&" but use lead "&rft...=" form. |
--20Oct2012 Fixed COinS to not end as "&" but use lead "&rft...=" form. |
||
Baris 968: | Baris 481: | ||
--05Nov2012 Add a span wrapper even when there is no Ref parameter |
--05Nov2012 Add a span wrapper even when there is no Ref parameter |
||
--15Feb2013 Added Agency for "agency=xx". |
--15Feb2013 Added Agency for "agency=xx". |
||
--19Feb2013 Put NOTES comments to explain module operation. |
|||
--19Feb2013 Copied as Module:Citation/CS1 to alter to match wp:CS1 form. |
|||
--19Feb2013 Changed OrigYear to use [__] for CS1 style. |
|||
--19Feb2013 Fixed to not show duplicate Publisher/Agency. |
|||
--19Feb2013 Moved page-number parameters to after final date. |
|||
--19Feb2013 Fixed to not put double-dots after title again. |
|||
--20Feb2013 Changed to omit dot "." if already ends with dot. |
|||
--20Feb2013 If class "journal" shows Publisher after Periodical/Series. |
|||
--20Feb2013 Shifted Format to after Language, and Others after Volume. |
|||
--20Feb2013 Set AccessDate + <span class="reference-accessdate"> |
|||
--20Feb2013 Fixed url when deadurl=no. |
|||
--20Feb2013 Added sepc for separator character between parameters. |
|||
--20Feb2013 Put "OCLC" for "Online Computer Library Center". |
|||
--20Feb2013 Fix empty "authorlink=" as person.link ~= "". |
|||
--20Feb2013 Added space after AuthorSep & AuthorNameSep. |
|||
--21Feb2013 Added args.contributor (was missing parameter). |
|||
--21Feb2013 Fixed EditorSep (was misspelled "EdithorSep"). |
|||
--21Feb2013 Set OCinSdata.rft_val_fmt = "info:ofi/fmt:kev:mtx:book" |
|||
--21Feb2013 Checked to omit blank codes (asin= | doi= etc.). |
|||
--21Feb2013 Set enddot to end line if not config.CitationClass "citation". |
|||
--21Feb2013 Fixed to show "issn=x" as the ISSN code. |
|||
--21Feb2013 Fixed to show "id=x" after Zbl code. |
|||
--21Feb2013 Changed to omit double-dot before date when already dot. |
|||
--21Feb2013 Order config.CitationClass "citation": Volume, Issue, Publisher. |
|||
--21Feb2013 Put warning "Bad DOI (expected "10."..)" in DOI result. |
|||
--21Feb2013 Automatically unbolded volume+comma when > 4 long. |
|||
--21Feb2013 Changed to allow lowercase "asin-tld". |
|||
--22Feb2013 Fixed ref=harv to extract Year from Date. |
|||
--22Feb2013 Set Harvard refer. span id if config.CitationClass "citation". |
|||
--22Feb2013 Fixed config.CitationClass "citation" as span class="citation". |
|||
--22Feb2013 Capitalized "Archived/Retrieved" only when sepc is dot ".". |
|||
--23Feb2013 Fixed author editor for "in" or "In" and put space after sepc. |
|||
--23Feb2013 Changed to omit dot in "et al." when sepc is "." separator. |
|||
--23Feb2013 Fixed "author1-first" to also get args.given or args.given1. |
|||
--23Feb2013 Fixed args.article to set Title, after Periodical is Title. |
|||
--23Feb2013 Fixed to allow blank Title (such as "contribution=mytitle"). |
|||
--23Feb2013 Fixed double-dot ".." at end of Editors list |
|||
--26Feb2013 Moved "issue=" data to show before "page=". |
|||
--26Feb2013 Moved "type=" data to show after "format=". |
|||
--26Feb2013 For "pmc=" link, omitted suffix "/?tool=pmcentrez". |
|||
--27Feb2013 For coauthors, omitted extra separator after authors. |
|||
--27Feb2013 For date, allowed empty date to use month/day/year. |
|||
--27Feb2013 Fixed double-dot ".." at end of authors/coauthors list. |
|||
--27Feb2013 Reset editor suffix as ", ed." when date exists. |
|||
--27Feb2013 Removed duplicate display of "others=" data. |
|||
--27Feb2013 Removed parentheses "( )" around "department" TitleNote. |
|||
--05Mar2013 Moved Language to follow Periodical or Series. |
|||
--05Mar2013 Fixed Edition to follow Series or Volume. |
|||
--05Mar2013 Fixed class encyclopaedia to show article as quoted Chapter. |
|||
--05Mar2013 Fixed class encyclopaedia to show page as "pp." or "p.". |
|||
--07Mar2013 Changed class encyclopaedia to omit "( )" around publisher. |
|||
--07Mar2013 Fixed end double-dot by string.sub(idcommon,-1,-1) was "-1,1". |
|||
--13Mar2013 Removed enddot "." after "quote=" parameter. |
|||
--13Mar2013 Changed config.CitationClass "news" to use "p." page format. |
|||
--13Mar2013 Fixed missing "location=" when "web" or "encyclopaedia". |
|||
--14Mar2013 Fixed end double-dot after book/work title. |
|||
--14Mar2013 Fixed double-dot before "p." or "pp." page number. |
|||
--14Mar2013 Fixed config.CitationClass "book" to use p./pp. page. |
|||
-- |
-- |
||
--End |
--End |
Revisi per 9 April 2018 13.52
Pengembangan dukungan Lua untuk Gaya Rujukan 1 dan Gaya Rujukan 2 dimulai pada Module:Citation. Pengembangan tersebut ditinggalkan pada tahun 2013 saat pengembangan Modul:Citation/CS1 dimulai.
Meskipun modul ini tetap tidak digunakan, modul ini adalah halaman dasar dari beberapa subhalaman modul yang mengimplementasikan cs1 dan cs2. Isi modul ini diganti dengan pesan kesalahan.
---------------------------------------------------------------------
-- Module:Citation - Lua module for Citation auxiliary templates
---------------------------------------------------------------------
-- For the {{citation}} formatting functions, see: Module:Citation/CS1
-- (see NOTES at bottom)
--require "mw.text"
local z = {
wikitext = require("Module:Wikitext"),
extensiontags = {
nowiki = true,
ref = true,
gallery = true,
pre = true,
source = true,
categorytree = true,
charinsert = true,
hiero = true,
imagemap = true,
inputbox = true,
math = true,
poem = true,
ref = true,
references = true,
syntaxhighlight = true,
timeline = true,
}
}
function trim( str )
if str == nil then
return nil;
end
return str:match( "^%s*(.-)%s*$" );
end
function hideinprint(content)
return content
end
function onlyinprint(content)
return ""
end
-- This returns a string with HTML character entities for wikitext markup characters.
function wikiescape(text)
text = text:gsub( '[&\'%[%]{|}]', {
['&'] = '&',
["'"] = ''',
['['] = '[',
[']'] = ']',
['{'] = '{',
['|'] = '|',
['}'] = '}' } );
return text;
end
function createTag(t, frame)
local name = t.name or "!-- --"
local content = t.contents or ""
local attrs = {}
if ( z.extensiontags[name] ) then
-- We have to preprocess these, so that they are properly turned into so-called "strip markers" in the generated wikitext.
if ( not frame ) then error ("Please supply an extra frame argument to the createTag() function.") end
local params = {}
for n,v in pairs(t.params) do
table.insert(params, "|" .. n .. "=" .. v)
end
return frame:preprocess("{{#tag:" .. name .. "|" .. content .. table.concat(params) .. "}}")
else
for n,v in pairs(t.params) do
if (v) then
table.insert(attrs, n .. "=\"" .. wikiescape(v) .. "\"")
else
table.insert(attrs, n)
end
end
if ("" == content) then
return "<" .. name .. " " .. table.concat(attrs, " ") .. "/>"
else
return "<" .. name .. " " .. table.concat(attrs, " ") .. ">" .. content .. "</" .. name .. ">"
end
end
end
--[[
This is a clone of mw.text.nowiki. When the mw.text library is installed,
this can be replaced by a call to that library. ]]
function nowiki( s )
-- string.gsub is safe here, because we're only caring about ASCII chars
s = string.gsub( s, '["&\'<=>%[%]{|}]', {
['"'] = '"',
['&'] = '&',
["'"] = ''',
['<'] = '<',
['='] = '=',
['>'] = '>',
['['] = '[',
[']'] = ']',
['{'] = '{',
['|'] = '|',
['}'] = '}',
} )
s = string.sub( string.gsub( '\n' .. s, '\n[#*:;]', {
["\n#"] = "\n#",
["\n*"] = "\n*",
["\n:"] = "\n:",
["\n;"] = "\n;",
} ), 2 )
s = string.gsub( s, '://', '://' )
s = string.gsub( s, 'ISBN ', 'ISBN ' )
s = string.gsub( s, 'RFC ', 'RFC ' )
return s
end
function externallinkid(args)
local sep = args.separator or " "
args.suffix = args.suffix or ""
local url_string = args.id
if args.encode == true or args.encode == nil then
url_string = mw.uri.encode( url_string );
end
local t0 = onlyinprint(args.label .. sep .. args.id)
local t1 = hideinprint("[[" .. args.link .. "|" .. args.label .. "]]" .. sep .. "[" .. args.prefix .. url_string .. args.suffix .. " " .. nowiki(args.id) .. "]")
return t0 .. t1
end
function doi(id, inactive, nocat)
local cat = ""
local text;
if ( inactive ~= nil ) then
text = "[[Digital object identifier|doi]]:" .. id;
cat = cat .. "[[Kategori:Halaman dengan DOI yang nonaktif sejak " .. selectyear(inactive) .. "]]"
inactive = " (inactive " .. inactive .. ")"
else
text = externallinkid({link="Digital object identifier",label="doi",prefix="https://doi.org/",id=id,separator=":"})
inactive = ""
end
if ( string.sub(id,1,3) ~= "10." ) then
cat = cat .. "[[Kategori:Halaman dengan kesalahan DOI]]" .. '<span class="error"> Bad DOI (expected "10." prefix) in code number</span>'
end
if ( nocat and nocat ~= "" ) then cat = "" end
return text .. inactive .. cat
end
function selectyear( str )
local lang = mw.getContentLanguage();
local good, result;
good, result = pcall( lang.formatDate, lang, 'Y', str )
if good then
return result;
else
return '';
end
end
function anchorid(label, args)
local P1 = trim(args[1]) or ""
local P2 = trim(args[2]) or ""
local P3 = trim(args[3]) or ""
local P4 = trim(args[4]) or ""
local P5 = trim(args[5]) or ""
local anchor = P1 .. P2 .. P3 .. P4 .. P5;
if anchor ~= '' then -- See bug description in Citation/CS1
anchor = mw.uri.anchorEncode( anchor );
end
return label .. anchor
end
function refid(label, args)
local p = args.p or ""
local pp = args.pp or ""
local loc = args.loc or ""
return anchorid(label, args) .. p .. pp .. loc
end
function name(args)
local P1 = trim(args[1]) or ""
if ( args[5] ~= nil) then
return P1 .. " et al."
else
local P2 = trim(args[2]) or ""
local P3 = trim(args[3]) or ""
local P4 = trim(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, label, 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( label, args)
local text = name(args)
local loc = args.loc
local page
local pages = args.pp or args.pages
if pages == nil or pages == '' then
page = args.p or args.page;
end
if nil == loc then loc = "" else loc = " " .. loc end
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 pagename = args.pagename or ""
local ps = args.Postscript or ""
return LB .. "[[" .. pagename .. "#" .. anchor .. "|" .. text .. "]]" .. loc .. RB .. ps
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 = createTag({name="sup",contents=contents,params={class="reference",style="white-space:nowrap;"}})
end
return createTag({name="ref",contents="",params={name=name,group=group}}, frame) .. 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 = createTag({name="references",contents=contents,params={group=group}}, frame)
return createTag({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(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("[[International Standard Serial Number|ISSN]] [https://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('FOOTNOTE', 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 {{sfn}} to create the entire cross-reference.
function z.sfn(frame)
local pframe = frame:getParent()
pframe.args.Postscript = pframe.args.postscript or pframe.args.ps or ".";
local content = crossref(frame, 'CITEREF', pframe.args)
local args = { name = refid( 'FOOTNOTE', pframe.args) }
return createTag({name = "ref", contents = content, params = args}, frame)
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 createTag({name="sup",contents=contents,params=params})
end
-- This is used by template {{note label}}.
function z.notelabel(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 id = args[1] or ""
local arrow = args[3] or ""
local postscript = args[4] or ""
local contents
if arrow ~= "" then
local sup_arrow = createTag({name="sup",contents=arrow,params={}})
contents = "[[#ref_" .. id .. arrow .. "|<b>" .. sup_arrow .. "</b>]]" .. postscript
if "none" == arrow then arrow = "^" end -- Change this AFTER using it in the ID parameter and the contents.
else
contents = (args[2] or "") .. postscript
end
local params = { class="citation wikicite" }
if id ~= "" and ( args.noid == nil or args.noid == "" ) then
params.id = mw.uri.anchorEncode("endnote_" .. id .. arrow)
end
return createTag({name="span",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 createTag({name="ref",contents=(args[1] or ""),params={name=args.name,group=config.default_group}}, frame)
end
return z
---------------------------------------------------------------------
--NOTES
--
-- NOTE A1: This Lua module was originally designed to handle a mix
-- of citation styles, crossing Vancouver style with Wikipedia's
-- local Citation Style 1 (CS1) from {Template:Citation/core}.
-- However, the conflicting positions of parameters, scattered
-- in twisted locations across this module, led to a separate
-- variation just to untangle the CS1 format of citations.
--
-- NOTE D2: The placement of dots and other separators between the
-- displayed parameters has been a continual headache, to keep
-- coordinated with the data in parentheses "(data)". There
-- has been a need to pre-check for the existence of related
-- options, to keep from putting double-dots ".." in some cases.
-- In particular, the omission of the "title=" parameter has led
-- to several cases of a spurious dot ". ." because the original
-- design had treated the title as a mandatory parameter.
--
------------------------------------------------------------------------
--HISTORY:
--18Oct2012 Fixed lead-space in Chapter by omitting " ".
--18Oct2012 Fixed lead-space in Chapter/Title as end " " of Authors/Date/...
--19Oct2012 Put HISTORY comments to log major changes (not typos).
--19Oct2012 Fixed extra dot ".." in Title by omitting at end of "tcommon=...".
--19Oct2012 For pages, put   in "p. " etc.
--19Oct2012 Enhanced "pages=" to detect lone page as "p." else "pp." prefix.
--19Oct2012 Fixed to show "." after Periodical name (work, newspaper...).
--19Oct2012 Fixed web-link to have spaces "[... Archived] from the original".
--19Oct2012 Fixed to show ";" between authors & coauthors.
--19Oct2012 Fixed to omit extra "." after coauthors.
--20Oct2012 Fixed COinS data to not urlencode all, as "ctx_ver=Z39.88-2004"
--20Oct2012 Fixed COinS to not end as "&" but use lead "&rft...=" form.
--20Oct2012 Fixed COinS to not url.encode page's "rfr_id=..." pagename.
--20Oct2012 Fixed COinS data when "web" to default to rft.genre "book".
--05Nov2012 Add a span wrapper even when there is no Ref parameter
--15Feb2013 Added Agency for "agency=xx".
--19Feb2013 Put NOTES comments to explain module operation.
--19Feb2013 Copied as Module:Citation/CS1 to alter to match wp:CS1 form.
--19Feb2013 Changed OrigYear to use [__] for CS1 style.
--19Feb2013 Fixed to not show duplicate Publisher/Agency.
--19Feb2013 Moved page-number parameters to after final date.
--19Feb2013 Fixed to not put double-dots after title again.
--20Feb2013 Changed to omit dot "." if already ends with dot.
--20Feb2013 If class "journal" shows Publisher after Periodical/Series.
--20Feb2013 Shifted Format to after Language, and Others after Volume.
--20Feb2013 Set AccessDate + <span class="reference-accessdate">
--20Feb2013 Fixed url when deadurl=no.
--20Feb2013 Added sepc for separator character between parameters.
--20Feb2013 Put "OCLC" for "Online Computer Library Center".
--20Feb2013 Fix empty "authorlink=" as person.link ~= "".
--20Feb2013 Added space after AuthorSep & AuthorNameSep.
--21Feb2013 Added args.contributor (was missing parameter).
--21Feb2013 Fixed EditorSep (was misspelled "EdithorSep").
--21Feb2013 Set OCinSdata.rft_val_fmt = "info:ofi/fmt:kev:mtx:book"
--21Feb2013 Checked to omit blank codes (asin= | doi= etc.).
--21Feb2013 Set enddot to end line if not config.CitationClass "citation".
--21Feb2013 Fixed to show "issn=x" as the ISSN code.
--21Feb2013 Fixed to show "id=x" after Zbl code.
--21Feb2013 Changed to omit double-dot before date when already dot.
--21Feb2013 Order config.CitationClass "citation": Volume, Issue, Publisher.
--21Feb2013 Put warning "Bad DOI (expected "10."..)" in DOI result.
--21Feb2013 Automatically unbolded volume+comma when > 4 long.
--21Feb2013 Changed to allow lowercase "asin-tld".
--22Feb2013 Fixed ref=harv to extract Year from Date.
--22Feb2013 Set Harvard refer. span id if config.CitationClass "citation".
--22Feb2013 Fixed config.CitationClass "citation" as span class="citation".
--22Feb2013 Capitalized "Archived/Retrieved" only when sepc is dot ".".
--23Feb2013 Fixed author editor for "in" or "In" and put space after sepc.
--23Feb2013 Changed to omit dot in "et al." when sepc is "." separator.
--23Feb2013 Fixed "author1-first" to also get args.given or args.given1.
--23Feb2013 Fixed args.article to set Title, after Periodical is Title.
--23Feb2013 Fixed to allow blank Title (such as "contribution=mytitle").
--23Feb2013 Fixed double-dot ".." at end of Editors list
--26Feb2013 Moved "issue=" data to show before "page=".
--26Feb2013 Moved "type=" data to show after "format=".
--26Feb2013 For "pmc=" link, omitted suffix "/?tool=pmcentrez".
--27Feb2013 For coauthors, omitted extra separator after authors.
--27Feb2013 For date, allowed empty date to use month/day/year.
--27Feb2013 Fixed double-dot ".." at end of authors/coauthors list.
--27Feb2013 Reset editor suffix as ", ed." when date exists.
--27Feb2013 Removed duplicate display of "others=" data.
--27Feb2013 Removed parentheses "( )" around "department" TitleNote.
--05Mar2013 Moved Language to follow Periodical or Series.
--05Mar2013 Fixed Edition to follow Series or Volume.
--05Mar2013 Fixed class encyclopaedia to show article as quoted Chapter.
--05Mar2013 Fixed class encyclopaedia to show page as "pp." or "p.".
--07Mar2013 Changed class encyclopaedia to omit "( )" around publisher.
--07Mar2013 Fixed end double-dot by string.sub(idcommon,-1,-1) was "-1,1".
--13Mar2013 Removed enddot "." after "quote=" parameter.
--13Mar2013 Changed config.CitationClass "news" to use "p." page format.
--13Mar2013 Fixed missing "location=" when "web" or "encyclopaedia".
--14Mar2013 Fixed end double-dot after book/work title.
--14Mar2013 Fixed double-dot before "p." or "pp." page number.
--14Mar2013 Fixed config.CitationClass "book" to use p./pp. page.
--
--End