Editing Module:Citation/CS1/COinS

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.

Latest revision Your text
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, strip_apostrophe_markup; -- functions in Module:Citation/CS1/Utilities
+
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 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
   
   
Line 143: Line 178:
 
value = value:gsub ('&nbsp;', ' '); -- replace &nbsp; entity with plain space
 
value = value:gsub ('&nbsp;', ' '); -- replace &nbsp; entity with plain space
 
value = value:gsub ('\226\128\138', ' '); -- replace hair space with plain space
 
value = value:gsub ('\226\128\138', ' '); -- replace hair space with plain space
  +
value = value:gsub ('&zwj;', ''); -- remove &zwj; entities
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\194\173]', '') -- remove zero-width joiner, zero-width space, soft hyphen
value = mw.ustring.gsub (value, '[\226\128\141\226\128\139\194\173]', ''); -- remove zero-width joiner, zero-width space, soft hyphen
 
end
 
 
value = value:gsub ('[\009\010\013]', ' '); -- replace horizontal tab, line feed, carriage return with plain space
 
value = value:gsub ('[\009\010\013]', ' '); -- replace horizontal tab, line feed, carriage return with plain space
 
return value;
 
return value;
Line 180: Line 213:
 
});
 
});
 
 
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
+
if in_array (class, {'arxiv', 'biorxiv', 'citeseerx', 'journal', 'news'}) 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', 'ssrn'}) then -- set genre according to the type of citation template we are rendering
+
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, cite ssrn
+
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 273:
 
 
 
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 285:
 
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 275: Line 320:
 
 
 
-- sort with version string always first, and combine.
 
-- sort with version string always first, and combine.
--table.sort( OCinSoutput );
+
table.sort( OCinSoutput );
 
table.insert( OCinSoutput, 1, "ctx_ver=" .. ctx_ver ); -- such as "Z39.88-2004"
 
table.insert( OCinSoutput, 1, "ctx_ver=" .. ctx_ver ); -- such as "Z39.88-2004"
 
return table.concat(OCinSoutput, "&");
 
return table.concat(OCinSoutput, "&");
Line 290: Line 335:
 
cfg = cfg_table_ptr;
 
cfg = cfg_table_ptr;
   
is_set = utilities_page_ptr.is_set; -- import functions from selected Module:Citation/CS1/Utilities module
+
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;
strip_apostrophe_markup = utilities_page_ptr.strip_apostrophe_markup;
 
 
end
 
end
   
   
--[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------
 
]]
 
   
 
return {
 
return {
Please note that all contributions to Climate Change AI Wiki are considered to be released under the Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) (see Climate Change AI Wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!
Cancel Editing help (opens in new window)

Template used on this page: