Module:Citation/CS1: Difference between revisions
From All Skies Encyclopaedia
| imported>Uncle G  (Fixed semicolon problem.) | imported>Uncle G   (Improved author processing.) | ||
| Line 89: | Line 89: | ||
|     local config = frame.args |     local config = frame.args | ||
|     local AuthorMask = args.authormask or args.authormask |     local AuthorMask = args.authormask or args.authormask | ||
|     local Surname1 = args.last or args.surname or args. |     local Surname1 = args.last or args.surname or args.author or args.last1 or args.surname1 or args.author1 | ||
|     local Surname2 = args.last2 or args.surname2 or args.author2 |     local Surname2 = args.last2 or args.surname2 or args.author2 | ||
|     local Surname3 = args.last3 or args.surname3 or args.author3 |     local Surname3 = args.last3 or args.surname3 or args.author3 | ||
| Line 132: | Line 132: | ||
|     local ISBN= args.isbn or args.ISBN |     local ISBN= args.isbn or args.ISBN | ||
|     local DOI= args.doi or args.DOI |     local DOI= args.doi or args.DOI | ||
|     local Authors = args.authors  | |||
|     if ( Chapter ~= nil ) then Chapter = " \"" .. Chapter .. "\"." else Chapter = "" end |     if ( Chapter ~= nil ) then Chapter = " \"" .. Chapter .. "\"." else Chapter = "" end | ||
|     if ( Title ~= nil ) then Title = " ''" .. Title .. "''." else Title = "" end |     if ( Title ~= nil ) then Title = " ''" .. Title .. "''." else Title = "" end | ||
|     if ( Publisher ~= nil ) then Publisher = " " .. Publisher .. "." else Publisher = "" end |     if ( Publisher ~= nil ) then Publisher = " " .. Publisher .. "." else Publisher = "" end | ||
|     if ( Authors == nil ) then         | |||
|         Authors = authorprefix(Surname1, Given1, Authorlink1, "") | |||
|         Authors = Authors .. authorprefix(Surname2, Given2, Authorlink2, "; ") | |||
|         Authors = Authors .. authorprefix(Surname3, Given3, Authorlink3, "; ") | |||
|         Authors = Authors .. authorprefix(Surname4, Given4, Authorlink4, "; ") | |||
|         Authors = Authors .. authorprefix(Surname5, Given5, Authorlink5, "; ") | |||
|         Authors = Authors .. authorprefix(Surname6, Given6, Authorlink6, "; ") | |||
|         Authors = Authors .. authorprefix(Surname7, Given7, Authorlink7, "; ") | |||
|         Authors = Authors .. authorprefix(Surname8, Given8, Authorlink8, "; ") | |||
|         Authors = Authors .. authorprefix(Surname9, Given9, Authorlink9, "; ") | |||
|     end | |||
|     local text = Authors .. "(" .. Date .. ")." .. Title .. Publisher | |||
|     if ( Language ~= nil ) then text = text .. " (in " .. Language .. ")" end |     if ( Language ~= nil ) then text = text .. " (in " .. Language .. ")" end | ||
|     if ( ISBN ~= nil ) then text = text .. " ISBN " .. ISBN end |     if ( ISBN ~= nil ) then text = text .. " ISBN " .. ISBN end | ||
Revision as of 18:47, 25 August 2012
<section begin=header />
|  | This Lua module is used on approximately 6,110,000 pages. To avoid major disruption and server load, any changes should be tested in the module's /sandbox or /testcases subpages, or in your own module sandbox. The tested changes can be added to this page in a single edit. Consider discussing changes on the talk page before implementing them. | 
|  | This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. | 
|  | This module can only be edited by administrators because it is transcluded onto one or more cascade-protected pages. | 
Lua error: bad argument #1 to "get" (not a valid title).<section end=header /> This module and associated sub-modules support the Citation Style 1 and Citation Style 2 citation templates. In general, it is not intended to be called directly, but is called by one of the core CS1 and CS2 templates. <section begin=module_components_table /> These files comprise the module support for CS1|2 citation templates:
<section end=module_components_table />
Other documentation:
- Module talk:Citation/CS1/Feature requests
- Module talk:Citation/CS1/COinS
- Module:Cs1 documentation support – a set of functions (some experimental) that extract information from the module suite for the purpose of documenting CS1|2
- Module:Citation/CS1/doc/Category list – lists of category names taken directly from Module:Citation/CS1/Configuration and Module:Citation/CS1/Configuration/sandbox
 
testcases
- Module:Citation/CS1/testcases (run)
- Module:Citation/CS1/testcases/errors (run) – error and maintenance messaging
- Module:Citation/CS1/testcases/dates (run) – date validation
- Module:Citation/CS1/testcases/identifiers (run) – identifiers
- Module:Citation/CS1/testcases/anchor (run) – CITEREF anchors
--require "mw.text"
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(frame, "[[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.author or args.last1 or args.surname1 or args.author1
    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 or args.encyclopedia
    local Chapter = args.chapter or args.article
    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
    local Authors = args.authors 
    if ( Chapter ~= nil ) then Chapter = " \"" .. Chapter .. "\"." else Chapter = "" end
    if ( Title ~= nil ) then Title = " ''" .. Title .. "''." else Title = "" end
    if ( Publisher ~= nil ) then Publisher = " " .. Publisher .. "." else Publisher = "" end
    if ( Authors == nil ) then        
        Authors = authorprefix(Surname1, Given1, Authorlink1, "")
        Authors = Authors .. authorprefix(Surname2, Given2, Authorlink2, "; ")
        Authors = Authors .. authorprefix(Surname3, Given3, Authorlink3, "; ")
        Authors = Authors .. authorprefix(Surname4, Given4, Authorlink4, "; ")
        Authors = Authors .. authorprefix(Surname5, Given5, Authorlink5, "; ")
        Authors = Authors .. authorprefix(Surname6, Given6, Authorlink6, "; ")
        Authors = Authors .. authorprefix(Surname7, Given7, Authorlink7, "; ")
        Authors = Authors .. authorprefix(Surname8, Given8, Authorlink8, "; ")
        Authors = Authors .. authorprefix(Surname9, Given9, Authorlink9, "; ")
    end
    local text = Authors .. "(" .. Date .. ")." .. Title .. Publisher
    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









