446
edits
(sync from sandbox;) |
m (31 revisions imported from templatewiki:Module:Citation/CS1/COinS) |
||
Line 1: | Line 1: | ||
local coins = {}; | |||
--[[--------------------------< F O R W A R D D E C L A R A T I O N S >-------------------------------------- | --[[--------------------------< F O R W A R D D E C L A R A T I O N S >-------------------------------------- | ||
]] | ]] | ||
local is_set, in_array, remove_wiki_link; -- functions in Module:Citation/CS1/Utilities | |||
local cfg; -- table of configuration tables that are defined in Module:Citation/CS1/Configuration | |||
local | --[[--------------------------< S T R I P _ A P O S T R O P H E _ M A R K U P >-------------------------------- | ||
Strip wiki italic and bold markup from argument so that it doesn't contaminate COinS metadata. | |||
This function strips common patterns of apostrophe markup. We presume that editors who have taken the time to | |||
markup a title have, as a result, provided valid markup. When they don't, some single apostrophes are left behind. | |||
]] | |||
local function strip_apostrophe_markup (argument) | |||
if not is_set (argument) then return argument; end | |||
if argument:find ( "''", 1, true ) == nil then -- Is there at least one double apostrophe? If not, exit. | |||
return argument; | |||
end | |||
while true do | |||
if argument:find ( "'''''", 1, true ) then -- bold italic (5) | |||
argument=argument:gsub("%'%'%'%'%'", ""); -- remove all instances of it | |||
elseif argument:find ( "''''", 1, true ) then -- italic start and end without content (4) | |||
argument=argument:gsub("%'%'%'%'", ""); | |||
elseif argument:find ( "'''", 1, true ) then -- bold (3) | |||
argument=argument:gsub("%'%'%'", ""); | |||
elseif argument:find ( "''", 1, true ) then -- italic (2) | |||
argument=argument:gsub("%'%'", ""); | |||
else | |||
break; | |||
end | |||
end | |||
return argument; -- done | |||
end | |||
Line 180: | Line 214: | ||
}); | }); | ||
if in_array (class, {'arxiv', 'biorxiv', 'citeseerx | if in_array (class, {'arxiv', 'biorxiv', 'citeseerx', 'journal', 'news', 'magazine'}) or (in_array (class, {'conference', 'interview', 'map', 'press release', 'web'}) and is_set(data.Periodical)) or | ||
('citation' == class and is_set(data.Periodical) and not is_set (data.Encyclopedia)) then | ('citation' == class and is_set(data.Periodical) and not is_set (data.Encyclopedia)) then | ||
OCinSoutput.rft_val_fmt = "info:ofi/fmt:kev:mtx:journal"; -- journal metadata identifier | OCinSoutput.rft_val_fmt = "info:ofi/fmt:kev:mtx:journal"; -- journal metadata identifier | ||
if in_array (class, {'arxiv', 'biorxiv', 'citeseerx | if in_array (class, {'arxiv', 'biorxiv', 'citeseerx'}) then -- set genre according to the type of citation template we are rendering | ||
OCinSoutput["rft.genre"] = "preprint"; -- cite arxiv, cite biorxiv, cite citeseerx | OCinSoutput["rft.genre"] = "preprint"; -- cite arxiv, cite biorxiv, cite citeseerx | ||
elseif 'conference' == class then | elseif 'conference' == class then | ||
OCinSoutput["rft.genre"] = "conference"; -- cite conference (when Periodical set) | OCinSoutput["rft.genre"] = "conference"; -- cite conference (when Periodical set) | ||
Line 240: | Line 274: | ||
for k, v in pairs( data.ID_list ) do -- what to do about these? For now assume that they are common to all? | for k, v in pairs( data.ID_list ) do -- what to do about these? For now assume that they are common to all? | ||
-- if k == 'ISBN' then v = clean_isbn( v ) end | |||
if k == 'ISBN' then v = v:gsub( "[^-0-9X]", "" ); end | if k == 'ISBN' then v = v:gsub( "[^-0-9X]", "" ); end | ||
local id = cfg.id_handlers[k].COinS; | local id = cfg.id_handlers[k].COinS; | ||
Line 251: | Line 286: | ||
end | end | ||
--[[ | |||
for k, v in pairs( data.ID_list ) do -- what to do about these? For now assume that they are common to all? | |||
local id, value = cfg.id_handlers[k].COinS; | |||
if k == 'ISBN' then value = clean_isbn( v ); else value = v; end | |||
if string.sub( id or "", 1, 4 ) == 'info' then | |||
OCinSoutput["rft_id"] = table.concat{ id, "/", v }; | |||
else | |||
OCinSoutput[ id ] = value; | |||
end | |||
end | |||
]] | |||
local last, first; | local last, first; | ||
for k, v in ipairs( data.Authors ) do | for k, v in ipairs( data.Authors ) do | ||
Line 290: | Line 336: | ||
cfg = cfg_table_ptr; | cfg = cfg_table_ptr; | ||
is_set = utilities_page_ptr.is_set; -- import functions from | is_set = utilities_page_ptr.is_set; -- import functions from select Module:Citation/CS1/Utilities module | ||
in_array = utilities_page_ptr.in_array; | in_array = utilities_page_ptr.in_array; | ||
remove_wiki_link = utilities_page_ptr.remove_wiki_link; | remove_wiki_link = utilities_page_ptr.remove_wiki_link; | ||
end | end | ||
return { | return { |