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 = 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); | ||
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: | ||
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; | 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 = ''; | local err_cat = ''; -- presume that PMC is valid | ||
local id_num; | |||
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 | 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 1 > id_num or test_limit < id_num then -- if PMC is outside test limit boundaries | |||
err_cat = ' ' .. set_error( 'bad_pmc' ); -- set an error message | |||
if 1 > id_num or test_limit < id_num then | else | ||
err_cat = ' ' .. set_error( 'bad_pmc' ); | 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, | 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 = ''; | ||
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 | ||