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