Jump to content

Module:Citation/CS1/COinS: Difference between revisions

m
33 revisions imported from templatewiki:Module:Citation/CS1/COinS
m (correupted → corrupted)
m (33 revisions imported from templatewiki:Module:Citation/CS1/COinS)
 
(14 intermediate revisions by 5 users not shown)
--[[
History of changes since last sync: 2015-12-12
 
]]
 
local coins = {};
 
 
--[[--------------------------< 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, strip_apostrophe_markup; -- functions in Module:Citation/CS1/Utilities
 
local cfg; -- table of configuration tables that are defined in Module:Citation/CS1/Configuration
 
 
--[[--------------------------< 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
 
 
 
local function coins_replace_math_stripmarker (value)
local stripmarker = cfg.stripmarkers['\127UNIQ%-%-math%-[%a%d']+%-QINU\127'; -- math stripmarker pattern
local rendering = value:match (stripmarker); -- is there a math stripmarker
 
Cleanup parameter values for the metadata by removing or replacing invisible characters and certain html entities.
 
2015-12-10: there is a bug in mw.text.unstripNoWiki (). It replacedreplaces math stripmarkers with the appropriate content
when it shouldn't. See https://phabricator.wikimedia.org/T121085 and Wikipedia_talk:Lua#stripmarkers_and_mw.text.unstripNoWiki.28.29
 
local function coins_cleanup (value)
local replaced = true; -- default state to get the do loop running
 
while replaced do -- loop until all math stripmarkers replaced
replaced, value = coins_replace_math_stripmarker (value); -- replace math stripmarker with text representation of the equation
end
 
value = value:gsub (cfg.stripmarkers['\127UNIQ%-%-math%-[%a%d]+%-QINU\127'], "MATH RENDER ERROR"); -- one or more couldn't be replaced; insert vague error message
value = mw.text.unstripNoWiki (value); -- replace nowiki stripmarkers with their content
value = value:gsub ('<span class="nowrap" style="padding%-left:0%.1em;">&#39;(s?)</span>', "'s%1"); -- replace {{'s}} templateor {{'s}} with simple apostrophe or apostrophe-s
value = value:gsub ('&zwj;\226\128\138\039\226\128\139', "'"); -- replace {{'}} with simple apostrophe
value = value:gsub ('\226\128\138\039\226\128\139', "'"); -- replace {{'}} with simple apostrophe (as of 2015-12-11)
value = value:gsub ('&nbsp;', ' '); -- replace &nbsp; entity with plain space
value = value:gsub ('\226\128\138', ' '); -- replace hair space with plain space
if not mw.ustring.find (value, cfg.indic_script) then -- don't remove zero width joiner characters from indic script
value = value:gsub ('&zwj;', ''); -- remove &zwj; entities
value = value:gsub ('[\226\128\141\226\128\139]&zwj;', ''); -- remove zero-width joiner, zero-width&zwj; spaceentities
value = value:mw.ustring.gsub (value, '[\194226\173128\009141\010226\013128\139\194\173]', ' '); -- replaceremove softzero-width hyphenjoiner, horizontalzero-width tabspace, linesoft feed, carriage return with plain spacehyphen
end
value = value:gsub ('[\009\010\013]', ' '); -- replace horizontal tab, line feed, carriage return with plain space
return value;
end
});
if in_array (class, {'arxiv', 'biorxiv', 'citeseerx', 'ssrn', '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
OCinSoutput.rft_val_fmt = "info:ofi/fmt:kev:mtx:journal"; -- journal metadata identifier
if in_array (class, {'arxiv', =='biorxiv', class'citeseerx', 'ssrn'}) then -- set genre according to the type of citation template we are rendering
OCinSoutput["rft.genre"] = "preprint"; -- cite arxiv, cite biorxiv, cite citeseerx, cite ssrn
elseif 'conference' == class then
OCinSoutput["rft.genre"] = "conference"; -- cite conference (when Periodical set)
elseif 'conference' == class then -- cite conference when Periodical not set
OCinSoutput["rft.genre"] = "conference";
OCinSoutput["rft.atitle"] = data.Chapter; -- conference paper as chapter in proceedings (book)
elseif in_array (class, {'book', 'citation', 'encyclopaedia', 'interview', 'map'}) then
if is_set (data.Chapter) then
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
local id = cfg.id_handlers[k].COinS;
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;
for k, v in ipairs( data.Authors ) do
-- sort with version string always first, and combine.
--table.sort( OCinSoutput );
table.insert( OCinSoutput, 1, "ctx_ver=" .. ctx_ver ); -- such as "Z39.88-2004"
return table.concat(OCinSoutput, "&");
cfg = cfg_table_ptr;
 
is_set = utilities_page_ptr.is_set; -- import functions from selectselected Module:Citation/CS1/Utilities module
in_array = utilities_page_ptr.in_array;
remove_wiki_link = utilities_page_ptr.remove_wiki_link;
strip_apostrophe_markup = utilities_page_ptr.strip_apostrophe_markup;
end
 
 
--[[--------------------------< SE T R I P _ AX P O SR T RE OD P H EF _U MN AC RT KI UO PN S >------------------------------------------
]]
 
return {
Cookies help us deliver our services. By using our services, you agree to our use of cookies.