Sətir 1: |
Sətir 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 |
| | | |
| | | |
Sətir 180: |
Sətir 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) |
Sətir 240: |
Sətir 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; |
Sətir 251: |
Sətir 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 |
Sətir 290: |
Sətir 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 { |