Module:Citation/CS1/COinS: Difference between revisions

    (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 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




    Line 180: Line 214:
    });
    });
    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', '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', '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 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 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 {