Module:Citation/CS1/Identifiers: Difference between revisions

synch from sandbox;
m>Trappist the monk
(Synch from sandbox;)
m>Trappist the monk
(synch from sandbox;)
Line 29: Line 29:
ext_link = mw.ustring.format ('[%s%s%s %s]', options.prefix, url_string, options.suffix or "", mw.text.nowiki(options.id));
ext_link = mw.ustring.format ('[%s%s%s %s]', options.prefix, url_string, options.suffix or "", mw.text.nowiki(options.id));
if is_set(options.access) then
if is_set(options.access) then
ext_link = substitute (cfg.presentation[options.access], ext_link); -- add the free-to-read / paywall lock
ext_link = substitute (cfg.presentation['access-signal'], {ext_link, cfg.presentation[options.access]}); -- add the free-to-read / paywall lock
end
end
return mw.ustring.format( '[[%s|%s]]%s%s', options.link, options.label, options.separator or " ", ext_link);
return mw.ustring.format( '[[%s|%s]]%s%s', options.link, options.label, options.separator or " ", ext_link);
-- return mw.ustring.format( '[[%s|%s]]%s[%s%s%s %s]',
-- options.link, options.label, options.separator or " ",
-- options.prefix, url_string, options.suffix or "",
-- mw.text.nowiki(options.id)
-- );
end
end


Line 335: Line 329:
return text .. class;
return text .. class;
end
end


--[[--------------------------< B I O R X I V >-----------------------------------------------------------------
--[[--------------------------< B I O R X I V >-----------------------------------------------------------------
Line 340: Line 335:
Format bioRxiv id and do simple error checking.  BiorXiv ids are exactly 6 digits.
Format bioRxiv id and do simple error checking.  BiorXiv ids are exactly 6 digits.
The bioRxiv id is the number following the last slash in the bioRxiv-issued DOI:
The bioRxiv id is the number following the last slash in the bioRxiv-issued DOI:
http://dx.doi.org/10.1101/078733 -> 078733
https://doi.org/10.1101/078733 -> 078733


]]
]]
Line 356: Line 351:
encode=handler.encode, access=handler.access}) .. err_cat;
encode=handler.encode, access=handler.access}) .. err_cat;
end
end


--[[--------------------------< N O R M A L I Z E _ L C C N >--------------------------------------------------
--[[--------------------------< N O R M A L I Z E _ L C C N >--------------------------------------------------
Line 521: Line 517:


local function pmc(id, embargo)
local function pmc(id, embargo)
local test_limit = 6000000; -- update this value as PMCs approach
local test_limit = 6000000; -- update this value as PMCs approach
local handler = cfg.id_handlers['PMC'];
local handler = cfg.id_handlers['PMC'];
local err_cat =  ''; -- presume that PMC is valid
local err_cat =  ''; -- presume that PMC is valid
local id_num;
local text;
local text;
id_num = id:match ('^[Pp][Mm][Cc](%d+)$');                                 -- identifier with pmc prefix
 
if is_set (id_num) then
add_maint_cat ('pmc_format');
else         -- plain number without pmc prefix
id_num = id:match ('^%d+$'); -- if here id is all digits
end


if id:match("[^%d]") then -- if PMC has anything but digits
if is_set (id_num) then -- id_num has a value so test it
err_cat = ' ' .. set_error( 'bad_pmc' ); -- set an error message
id_num = tonumber(id_num); -- convert id_num to a number for range testing
else -- PMC is only digits
if 1 > id_num or test_limit < id_num then -- if PMC is outside test limit boundaries
local id_num = tonumber(id); -- convert id to a number for range testing
err_cat = ' ' .. set_error( 'bad_pmc' ); -- set an error message
if 1 > id_num or test_limit < id_num then -- if PMC is outside test limit boundaries
else
err_cat = ' ' .. set_error( 'bad_pmc' ); -- set an error message
id = tostring (id_num); -- make sure id is a string
end
end
else -- when id format incorrect
err_cat = ' ' .. set_error( 'bad_pmc' ); -- set an error message
end
end
Line 539: Line 545:
text="[[" .. handler.link .. "|" .. handler.label .. "]]" .. handler.separator .. id .. err_cat; -- still embargoed so no external link
text="[[" .. handler.link .. "|" .. handler.label .. "]]" .. handler.separator .. id .. err_cat; -- still embargoed so no external link
else
else
text = external_link_id({link = handler.link, label = handler.label, -- no embargo date or embargo has expired, ok to link to article
text = external_link_id({link = handler.link, label = handler.label, -- no embargo date or embargo has expired, ok to link to article
prefix=handler.prefix,id=id,separator=handler.separator, encode=handler.encode, access=handler.access}) .. err_cat;
prefix=handler.prefix,id=id,separator=handler.separator, encode=handler.encode, access=handler.access}) .. err_cat;
end
end
Line 768: Line 774:
return text;
return text;
end
end


--[[--------------------------< C I T E S E E R X >------------------------------------------------------------
--[[--------------------------< C I T E S E E R X >------------------------------------------------------------
Line 773: Line 780:
CiteSeerX use their own notion of "doi" (not to be confused with the identifiers resolved via doi.org).
CiteSeerX use their own notion of "doi" (not to be confused with the identifiers resolved via doi.org).


The description of the structure of this identifier can be found at Help_talk:Citation_Style_1#CiteSeerX_id_structure
The description of the structure of this identifier can be found at Help_talk:Citation_Style_1/Archive_26#CiteSeerX_id_structure
]]
]]


Line 790: Line 797:
return text;
return text;
end
end
--[[--------------------------< S S R N >----------------------------------------------------------------------
Format an ssrn, do simple error checking
SSRNs are sequential numbers beginning at 100? and counting up.  This code checks the ssrn to see that it is
only digits and is greater than 99 and less than test_limit; the value in local variable test_limit will need
to be updated periodically as more SSRNs are issued.
]]
local function ssrn (id)
local test_limit = 3000000; -- update this value as SSRNs approach
local handler = cfg.id_handlers['SSRN'];
local err_cat =  ''; -- presume that SSRN is valid
local id_num;
local text;
id_num = id:match ('^%d+$'); -- id must be all digits
if is_set (id_num) then -- id_num has a value so test it
id_num = tonumber(id_num); -- convert id_num to a number for range testing
if 100 > id_num or test_limit < id_num then -- if SSRN is outside test limit boundaries
err_cat = ' ' .. set_error( 'bad_ssrn' ); -- set an error message
end
else -- when id format incorrect
err_cat = ' ' .. set_error( 'bad_ssrn' ); -- set an error message
end
text = external_link_id({link = handler.link, label = handler.label,
prefix=handler.prefix,id=id,separator=handler.separator, encode=handler.encode, access=handler.access}) .. err_cat;
return text;
end


--[[--------------------------< B U I L D _ I D _ L I S T >--------------------------------------------------------
--[[--------------------------< B U I L D _ I D _ L I S T >--------------------------------------------------------
Line 841: Line 884:
elseif k == 'OCLC' then
elseif k == 'OCLC' then
table.insert( new_list, {handler.label, oclc( v ) } );
table.insert( new_list, {handler.label, oclc( v ) } );
elseif k == 'SSRN' then
table.insert( new_list, {handler.label, ssrn( v ) } );
elseif k == 'ISMN' then
elseif k == 'ISMN' then
table.insert( new_list, {handler.label, ismn( v ) } );
table.insert( new_list, {handler.label, ismn( v ) } );
Line 851: Line 896:
local check;
local check;
local err_type = '';
local err_type = '';
-- if not check_isbn( v ) and not is_set(options.IgnoreISBN) then
-- ISBN = ISBN .. set_error( 'bad_isbn', {}, false, " ", "" );
-- end
check, err_type = check_isbn( v );
check, err_type = check_isbn( v );
if not check then
if not check then
Line 901: Line 943:
return id_list;
return id_list;
end
end


--[[--------------------------< E X T R A C T _ I D _ A C C E S S _ L E V E L S >--------------------------------------
--[[--------------------------< E X T R A C T _ I D _ A C C E S S _ L E V E L S >--------------------------------------
Line 954: Line 997:
z = utilities_page_ptr.z; -- table of tables in Module:Citation/CS1/Utilities
z = utilities_page_ptr.z; -- table of tables in Module:Citation/CS1/Utilities
end
end




Anonymous user