Line 1: |
Line 1: |
− |
| |
| --[[--------------------------< 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 >-------------------------------------- |
| ]] | | ]] |
Line 180: |
Line 179: |
| This function does not work if it is fed month names for languages other than English. Wikimedia #time: parser | | This function does not work if it is fed month names for languages other than English. Wikimedia #time: parser |
| apparently doesn't understand non-English date month names. This function will always return false when the date | | apparently doesn't understand non-English date month names. This function will always return false when the date |
− | contains a non-English month name because good1 is false after the call to lang.formatDate(). To get around that | + | contains a non-English month name because good1 is false after the call to lang_object.formatDate(). To get |
− | call this function with YYYY-MM-DD format dates. | + | around that call this function with date parts and create a YYYY-MM-DD format date. |
| | | |
| ]=] | | ]=] |
| | | |
− | local function is_valid_biorxiv_date (biorxiv_date) | + | local function is_valid_biorxiv_date (y, m, d) |
| + | local biorxiv_date = table.concat ({y, m, d}, '-'); -- make ymd date |
| local good1, good2; | | local good1, good2; |
| local biorxiv_ts, tomorrow_ts; -- to hold Unix timestamps representing the dates | | local biorxiv_ts, tomorrow_ts; -- to hold Unix timestamps representing the dates |
Line 260: |
Line 260: |
| | | |
| Returns a normalized LCCN for lccn() to validate. There is no error checking (step 3.b.1) performed in this function. | | Returns a normalized LCCN for lccn() to validate. There is no error checking (step 3.b.1) performed in this function. |
| + | |
| ]] | | ]] |
| | | |
Line 311: |
Line 312: |
| <date code> and <version> are as defined for 0704-1412 | | <date code> and <version> are as defined for 0704-1412 |
| <number> is a five-digit number | | <number> is a five-digit number |
| + | |
| ]] | | ]] |
| | | |
Line 318: |
Line 320: |
| local handler = options.handler; | | local handler = options.handler; |
| local year, month, version; | | local year, month, version; |
− | local err_cat = false; -- assume no error message | + | local err_msg = false; -- assume no error message |
| local text; -- output text | | local text; -- output text |
| | | |
Line 327: |
Line 329: |
| if ((not (90 < year or 8 > year)) or (1 > month or 12 < month)) or -- if invalid year or invalid month | | if ((not (90 < year or 8 > year)) or (1 > month or 12 < month)) or -- if invalid year or invalid month |
| ((91 == year and 7 > month) or (7 == year and 3 < month)) then -- if years ok, are starting and ending months ok? | | ((91 == year and 7 > month) or (7 == year and 3 < month)) then -- if years ok, are starting and ending months ok? |
− | err_cat = true; -- flag for error message | + | err_msg = true; -- flag for error message |
| end | | end |
| | | |
Line 336: |
Line 338: |
| if ((7 > year) or (14 < year) or (1 > month or 12 < month)) or -- is year invalid or is month invalid? (doesn't test for future years) | | if ((7 > year) or (14 < year) or (1 > month or 12 < month)) or -- is year invalid or is month invalid? (doesn't test for future years) |
| ((7 == year) and (4 > month)) then -- when year is 07, is month invalid (before April)? | | ((7 == year) and (4 > month)) then -- when year is 07, is month invalid (before April)? |
− | err_cat = true; -- flag for error message | + | err_msg = true; -- flag for error message |
| end | | end |
| | | |
Line 344: |
Line 346: |
| month = tonumber (month); | | month = tonumber (month); |
| if ((15 > year) or (1 > month or 12 < month)) then -- is year invalid or is month invalid? (doesn't test for future years) | | if ((15 > year) or (1 > month or 12 < month)) then -- is year invalid or is month invalid? (doesn't test for future years) |
− | err_cat = true; -- flag for error message
| + | err_msg = true; -- flag for error message |
| end | | end |
| | | |
| else | | else |
− | err_cat = true; -- not a recognized format; flag for error message | + | err_msg = true; -- not a recognized format; flag for error message |
| end | | end |
| | | |
− | if err_cat then | + | if err_msg then |
| options.coins_list_t['ARXIV'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['ARXIV'] = nil; -- when error, unset so not included in COinS |
| end | | end |
| | | |
− | err_cat = err_cat and table.concat ({' ', set_message ('err_bad_arxiv')}) or ''; -- set error message if flag is true | + | local err_msg_t = {}; |
− | | + | if err_msg then |
| + | set_message ('err_bad_arxiv'); |
| + | end |
| + | |
| text = external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, | | text = external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, |
− | 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}); |
| | | |
| if is_set (class) then | | if is_set (class) then |
Line 364: |
Line 369: |
| text = table.concat ({text, ' [[//arxiv.org/archive/', class, ' ', class, ']]'}); -- external link within square brackets, not wikilink | | text = table.concat ({text, ' [[//arxiv.org/archive/', class, ' ', class, ']]'}); -- external link within square brackets, not wikilink |
| else | | else |
− | text = table.concat ({text, ' ', set_message ('err_class_ignored')}); | + | set_message ('err_class_ignored'); |
| end | | end |
| end | | end |
| | | |
− | return text; | + | return text; |
| end | | end |
| | | |
Line 395: |
Line 400: |
| local handler = options.handler; | | local handler = options.handler; |
| local err_type; | | local err_type; |
| + | local err_msg = ''; |
| local year; | | local year; |
| | | |
Line 420: |
Line 426: |
| | | |
| if is_set (err_type) then -- if there was an error detected | | if is_set (err_type) then -- if there was an error detected |
− | text = text .. ' ' .. set_message ('err_bad_bibcode', {err_type}); | + | set_message ('err_bad_bibcode', {err_type}); |
| options.coins_list_t['BIBCODE'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['BIBCODE'] = nil; -- when error, unset so not included in COinS |
| | | |
| end | | end |
| + | |
| return text; | | return text; |
| end | | end |
Line 446: |
Line 453: |
| local id = options.id; | | local id = options.id; |
| local handler = options.handler; | | local handler = options.handler; |
− | local err_cat = true; -- flag; assume that there will be an error | + | local err_msg = true; -- flag; assume that there will be an error |
| | | |
| local patterns = { | | local patterns = { |
Line 459: |
Line 466: |
| | | |
| if m then -- m is nil when id is the six-digit form | | if m then -- m is nil when id is the six-digit form |
− | if not is_valid_biorxiv_date (y .. '-' .. m .. '-' .. d) then -- validate the encoded date; TODO: don't ignore leap-year and actual month lengths ({{#time:}} is a poor date validator) | + | if not is_valid_biorxiv_date (y, m, d) then -- validate the encoded date; TODO: don't ignore leap-year and actual month lengths ({{#time:}} is a poor date validator) |
| break; -- date fail; break out early so we don't unset the error message | | break; -- date fail; break out early so we don't unset the error message |
| end | | end |
| end | | end |
− | err_cat = nil; -- we found a match so unset the error message | + | err_msg = nil; -- we found a match so unset the error message |
| break; -- and done | | break; -- and done |
| end | | end |
| end -- err_cat remains set here when no match | | end -- err_cat remains set here when no match |
| | | |
− | if err_cat then | + | if err_msg then |
| options.coins_list_t['BIORXIV'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['BIORXIV'] = nil; -- when error, unset so not included in COinS |
| + | set_message ('err_bad_biorxiv'); -- and set the error message |
| end | | end |
| | | |
| return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, | | return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, |
| prefix = handler.prefix, id = id, separator = handler.separator, | | prefix = handler.prefix, id = id, separator = handler.separator, |
− | encode = handler.encode, access = handler.access}) .. (err_cat and (' ' .. set_message ('err_bad_biorxiv')) or ''); | + | encode = handler.encode, access = handler.access}); |
| end | | end |
| | | |
Line 483: |
Line 491: |
| | | |
| The description of the structure of this identifier can be found at Help_talk:Citation_Style_1/Archive_26#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 489: |
Line 498: |
| local handler = options.handler; | | local handler = options.handler; |
| local matched; | | local matched; |
− |
| + | |
| local text = external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, | | local text = external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, |
| prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode, | | prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode, |
Line 496: |
Line 505: |
| matched = id:match ("^10%.1%.1%.[1-9]%d?%d?%d?%.[1-9]%d?%d?%d?$"); | | matched = id:match ("^10%.1%.1%.[1-9]%d?%d?%d?%.[1-9]%d?%d?%d?$"); |
| if not matched then | | if not matched then |
− | text = text .. ' ' .. set_message ('err_bad_citeseerx' ); | + | set_message ('err_bad_citeseerx' ); |
| options.coins_list_t['CITESEERX'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['CITESEERX'] = nil; -- when error, unset so not included in COinS |
| end | | end |
| + | |
| return text; | | return text; |
| end | | end |
Line 526: |
Line 536: |
| local ignore_invalid = options.accept; | | local ignore_invalid = options.accept; |
| local handler = options.handler; | | local handler = options.handler; |
− | local err_cat; | + | local err_flag; |
| | | |
| local text; | | local text; |
Line 555: |
Line 565: |
| end | | end |
| | | |
− | local registrant = id:match ('^10%.([^/]+)/[^%s–]-[^%.,]$'); -- registrant set when DOI has the proper basic form | + | local registrant = mw.ustring.match (id, '^10%.([^/]+)/[^%s–]-[^%.,]$'); -- registrant set when DOI has the proper basic form |
− |
| + | |
| local registrant_err_patterns = { -- these patterns are for code ranges that are not supported | | local registrant_err_patterns = { -- these patterns are for code ranges that are not supported |
| '^[^1-3]%d%d%d%d%.%d%d*$', -- 5 digits with subcode (0xxxx, 40000+); accepts: 10000–39999 | | '^[^1-3]%d%d%d%d%.%d%d*$', -- 5 digits with subcode (0xxxx, 40000+); accepts: 10000–39999 |
Line 572: |
Line 582: |
| for i, pattern in ipairs (registrant_err_patterns) do -- spin through error patterns | | for i, pattern in ipairs (registrant_err_patterns) do -- spin through error patterns |
| if registrant:match (pattern) then -- to validate registrant codes | | if registrant:match (pattern) then -- to validate registrant codes |
− | err_cat = ' ' .. set_message ('err_bad_doi'); -- when found, mark this DOI as bad | + | err_flag = set_message ('err_bad_doi'); -- when found, mark this DOI as bad |
| break; -- and done | | break; -- and done |
| end | | end |
| end | | end |
| else | | else |
− | err_cat = ' ' .. set_message ('err_bad_doi'); -- invalid directory or malformed | + | err_flag = set_message ('err_bad_doi'); -- invalid directory or malformed |
| end | | end |
| else | | else |
Line 583: |
Line 593: |
| end | | end |
| | | |
− | if err_cat then | + | if err_flag then |
| options.coins_list_t['DOI'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['DOI'] = nil; -- when error, unset so not included in COinS |
| end | | end |
Line 589: |
Line 599: |
| text = external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, | | text = external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, |
| prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode, access = access, | | prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode, access = access, |
− | auto_link = not (err_cat or is_set (inactive) or ignore_invalid) and 'doi' or nil -- do not auto-link when |doi-broken-date= has a value or when there is a DOI error or (to play it safe, after all, auto-linking is not essential) when invalid DOIs are ignored | + | auto_link = not (err_flag or is_set (inactive) or ignore_invalid) and 'doi' or nil -- do not auto-link when |doi-broken-date= has a value or when there is a DOI error or (to play it safe, after all, auto-linking is not essential) when invalid DOIs are ignored |
| }) .. (inactive or ''); | | }) .. (inactive or ''); |
| | | |
− | return text .. (err_cat and err_cat or ''); -- parentheses required | + | return text; |
| end | | end |
| | | |
Line 655: |
Line 665: |
| | | |
| if nil == id:match("^[^%s–]-/[^%s–]-[^%.,]$") then -- HDL must contain a forward slash, must not contain spaces, endashes, and must not end with period or comma | | if nil == id:match("^[^%s–]-/[^%s–]-[^%.,]$") then -- HDL must contain a forward slash, must not contain spaces, endashes, and must not end with period or comma |
− | text = text .. ' ' .. set_message ('err_bad_hdl' ); | + | set_message ('err_bad_hdl' ); |
| options.coins_list_t['HDL'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['HDL'] = nil; -- when error, unset so not included in COinS |
| end | | end |
| + | |
| return text; | | return text; |
| end | | end |
Line 681: |
Line 692: |
| if not check then -- and there is an error | | if not check then -- and there is an error |
| options.coins_list_t['ISBN'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['ISBN'] = nil; -- when error, unset so not included in COinS |
− | return ISBN .. set_message ('err_bad_isbn', {err_type}, false, ' '); -- display an error message | + | set_message ('err_bad_isbn', err_type); -- set an error message |
| + | return ISBN; -- return id text |
| end | | end |
| end | | end |
− | return ISBN; | + | return ISBN; -- return id text |
| end | | end |
| | | |
Line 743: |
Line 755: |
| local domain = options.ASINTLD; | | local domain = options.ASINTLD; |
| | | |
− | local err_cat = '' | + | local err_flag; |
| | | |
| if not id:match("^[%d%u][%d%u][%d%u][%d%u][%d%u][%d%u][%d%u][%d%u][%d%u][%d%u]$") then | | if not id:match("^[%d%u][%d%u][%d%u][%d%u][%d%u][%d%u][%d%u][%d%u][%d%u][%d%u]$") then |
− | err_cat = ' ' .. set_message ('err_bad_asin'); -- ASIN is not a mix of 10 uppercase alpha and numeric characters | + | err_flag = set_message ('err_bad_asin'); -- ASIN is not a mix of 10 uppercase alpha and numeric characters |
| else | | else |
| if id:match("^%d%d%d%d%d%d%d%d%d[%dX]$") then -- if 10-digit numeric (or 9 digits with terminal X) | | if id:match("^%d%d%d%d%d%d%d%d%d[%dX]$") then -- if 10-digit numeric (or 9 digits with terminal X) |
| if is_valid_isxn (id, 10) then -- see if ASIN value is or validates as ISBN-10 | | if is_valid_isxn (id, 10) then -- see if ASIN value is or validates as ISBN-10 |
| if not id:find ('^63[01]') then -- 630xxxxxxx and 631xxxxxxx are (apparently) not a valid isbn prefixes but are used by amazon as a numeric identifier | | if not id:find ('^63[01]') then -- 630xxxxxxx and 631xxxxxxx are (apparently) not a valid isbn prefixes but are used by amazon as a numeric identifier |
− | err_cat = ' ' .. set_message ('err_bad_asin'); -- ASIN has ISBN-10 form but begins with something other than 630/1 so probably an isbn | + | err_flag = set_message ('err_bad_asin'); -- ASIN has ISBN-10 form but begins with something other than 630/1 so probably an isbn |
| end | | end |
− | elseif not is_set (err_cat) then | + | elseif not is_set (err_flag) then |
− | err_cat = ' ' .. set_message ('err_bad_asin'); -- ASIN is not ISBN-10 | + | err_flag = set_message ('err_bad_asin'); -- ASIN is not ISBN-10 |
| end | | end |
| elseif not id:match("^%u[%d%u]+$") then | | elseif not id:match("^%u[%d%u]+$") then |
− | err_cat = ' ' .. set_message ('err_bad_asin'); -- asin doesn't begin with uppercase alpha | + | err_flag = set_message ('err_bad_asin'); -- asin doesn't begin with uppercase alpha |
| end | | end |
| end | | end |
Line 769: |
Line 781: |
| domain = "com." .. domain; | | domain = "com." .. domain; |
| elseif not in_array (domain, {'ae', 'ca', 'cn', 'de', 'es', 'fr', 'in', 'it', 'nl', 'pl', 'sa', 'se', 'co.jp', 'co.uk', 'com', 'com.au', 'com.br', 'com.mx', 'com.sg', 'com.tr'}) then -- Arabic Emirates, Canada, China, Germany, Spain, France, Indonesia, Italy, Netherlands, Poland, Saudi Arabia, Sweden (as of 2021-03 Austria (.at), Liechtenstein (.li) and Switzerland (.ch) still redirect to the German site (.de) with special settings, so don't maintain local ASINs for them) | | elseif not in_array (domain, {'ae', 'ca', 'cn', 'de', 'es', 'fr', 'in', 'it', 'nl', 'pl', 'sa', 'se', 'co.jp', 'co.uk', 'com', 'com.au', 'com.br', 'com.mx', 'com.sg', 'com.tr'}) then -- Arabic Emirates, Canada, China, Germany, Spain, France, Indonesia, Italy, Netherlands, Poland, Saudi Arabia, Sweden (as of 2021-03 Austria (.at), Liechtenstein (.li) and Switzerland (.ch) still redirect to the German site (.de) with special settings, so don't maintain local ASINs for them) |
− | err_cat = ' ' .. set_message ('err_bad_asin_tld'); -- unsupported asin-tld value
| + | err_flag = set_message ('err_bad_asin_tld'); -- unsupported asin-tld value |
| end | | end |
| local handler = options.handler; | | local handler = options.handler; |
| | | |
− | if not is_set (err_cat) then | + | if not is_set (err_flag) then |
− | options.coins_list_t['ASIN'] = handler.prefix .. domain .. "/dp/" .. id; -- experiment for asin coins | + | options.coins_list_t['ASIN'] = handler.prefix .. domain .. "/dp/" .. id; -- asin for coins |
| else | | else |
| options.coins_list_t['ASIN'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['ASIN'] = nil; -- when error, unset so not included in COinS |
Line 781: |
Line 793: |
| return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, | | return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, |
| prefix = handler.prefix .. domain .. "/dp/", | | prefix = handler.prefix .. domain .. "/dp/", |
− | id = id, encode = handler.encode, separator = handler.separator}) .. err_cat; | + | id = id, encode = handler.encode, separator = handler.separator}) |
| end | | end |
| | | |
Line 824: |
Line 836: |
| if false == valid_ismn then | | if false == valid_ismn then |
| options.coins_list_t['ISMN'] = nil; -- when error, unset so not included in COinS; not really necessary here because ismn not made part of COinS | | options.coins_list_t['ISMN'] = nil; -- when error, unset so not included in COinS; not really necessary here because ismn not made part of COinS |
− | text = text .. ' ' .. set_message ('err_bad_ismn' ) -- add an error message if the ISMN is invalid | + | set_message ('err_bad_ismn'); -- create an error message if the ISMN is invalid |
| end | | end |
| | | |
Line 877: |
Line 889: |
| if false == valid_issn then | | if false == valid_issn then |
| options.coins_list_t['ISSN'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['ISSN'] = nil; -- when error, unset so not included in COinS |
− | text = text .. ' ' .. set_message ('err_bad_issn', (options.hkey == 'EISSN') and 'e' or ''); -- add an error message if the ISSN is invalid | + | set_message ('err_bad_issn', (options.hkey == 'EISSN') and 'e' or ''); -- create an error message if the ISSN is invalid |
| end | | end |
| end | | end |
| | | |
− | return text | + | return text; |
| end | | end |
| | | |
Line 895: |
Line 907: |
| local handler = options.handler; | | local handler = options.handler; |
| local id_num; | | local id_num; |
− | local err_cat = '';
| + | |
− |
| |
| id_num = id:match ('^[Jj][Ff][Mm](.*)$'); -- identifier with jfm prefix; extract identifier | | id_num = id:match ('^[Jj][Ff][Mm](.*)$'); -- identifier with jfm prefix; extract identifier |
| | | |
Line 908: |
Line 919: |
| id = id_num; -- jfm matches pattern | | id = id_num; -- jfm matches pattern |
| else | | else |
− | err_cat = ' ' .. set_message ('err_bad_jfm' ); -- set an error message | + | set_message ('err_bad_jfm' ); -- set an error message |
| options.coins_list_t['JFM'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['JFM'] = nil; -- when error, unset so not included in COinS |
| end | | end |
| | | |
| return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, | | return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, |
− | prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode}) .. err_cat; | + | prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode}); |
| end | | end |
| | | |
Line 927: |
Line 938: |
| local access = options.access; | | local access = options.access; |
| local handler = options.handler; | | local handler = options.handler; |
− | local err_msg = '';
| |
| | | |
| if id:find ('[Jj][Ss][Tt][Oo][Rr]') or id:find ('^https?://') or id:find ('%s') then | | if id:find ('[Jj][Ss][Tt][Oo][Rr]') or id:find ('^https?://') or id:find ('%s') then |
− | err_msg = ' ' .. set_message ('err_bad_jstor'); -- set an error message | + | set_message ('err_bad_jstor'); -- set an error message |
| options.coins_list_t['JSTOR'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['JSTOR'] = nil; -- when error, unset so not included in COinS |
| end | | end |
| | | |
| return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, | | return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, |
− | prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode, access = access}) .. err_msg; | + | prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode, access = access}); |
| end | | end |
| | | |
Line 956: |
Line 966: |
| local lccn = options.id; | | local lccn = options.id; |
| local handler = options.handler; | | local handler = options.handler; |
− | local err_cat = ''; -- presume that LCCN is valid | + | local err_flag; -- presume that LCCN is valid |
| local id = lccn; -- local copy of the LCCN | | local id = lccn; -- local copy of the LCCN |
| | | |
Line 964: |
Line 974: |
| if 8 == len then | | if 8 == len then |
| if id:match("[^%d]") then -- if LCCN has anything but digits (nil if only digits) | | if id:match("[^%d]") then -- if LCCN has anything but digits (nil if only digits) |
− | err_cat = ' ' .. set_message ('err_bad_lccn'); -- set an error message | + | err_flag = set_message ('err_bad_lccn'); -- set an error message |
| end | | end |
| elseif 9 == len then -- LCCN should be adddddddd | | elseif 9 == len then -- LCCN should be adddddddd |
| if nil == id:match("%l%d%d%d%d%d%d%d%d") then -- does it match our pattern? | | if nil == id:match("%l%d%d%d%d%d%d%d%d") then -- does it match our pattern? |
− | err_cat = ' ' .. set_message ('err_bad_lccn'); -- set an error message | + | err_flag = set_message ('err_bad_lccn'); -- set an error message |
| end | | end |
| elseif 10 == len then -- LCCN should be aadddddddd or dddddddddd | | elseif 10 == len then -- LCCN should be aadddddddd or dddddddddd |
| if id:match("[^%d]") then -- if LCCN has anything but digits (nil if only digits) ... | | if id:match("[^%d]") then -- if LCCN has anything but digits (nil if only digits) ... |
| if nil == id:match("^%l%l%d%d%d%d%d%d%d%d") then -- ... see if it matches our pattern | | if nil == id:match("^%l%l%d%d%d%d%d%d%d%d") then -- ... see if it matches our pattern |
− | err_cat = ' ' .. set_message ('err_bad_lccn'); -- no match, set an error message | + | err_flag = set_message ('err_bad_lccn'); -- no match, set an error message |
| end | | end |
| end | | end |
| elseif 11 == len then -- LCCN should be aaadddddddd or adddddddddd | | elseif 11 == len then -- LCCN should be aaadddddddd or adddddddddd |
| if not (id:match("^%l%l%l%d%d%d%d%d%d%d%d") or id:match("^%l%d%d%d%d%d%d%d%d%d%d")) then -- see if it matches one of our patterns | | if not (id:match("^%l%l%l%d%d%d%d%d%d%d%d") or id:match("^%l%d%d%d%d%d%d%d%d%d%d")) then -- see if it matches one of our patterns |
− | err_cat = ' ' .. set_message ('err_bad_lccn'); -- no match, set an error message | + | err_flag = set_message ('err_bad_lccn'); -- no match, set an error message |
| end | | end |
| elseif 12 == len then -- LCCN should be aadddddddddd | | elseif 12 == len then -- LCCN should be aadddddddddd |
| if not id:match("^%l%l%d%d%d%d%d%d%d%d%d%d") then -- see if it matches our pattern | | if not id:match("^%l%l%d%d%d%d%d%d%d%d%d%d") then -- see if it matches our pattern |
− | err_cat = ' ' .. set_message ('err_bad_lccn'); -- no match, set an error message | + | err_flag = set_message ('err_bad_lccn'); -- no match, set an error message |
| end | | end |
| else | | else |
− | err_cat = ' ' .. set_message ('err_bad_lccn'); -- wrong length, set an error message | + | err_flag = set_message ('err_bad_lccn'); -- wrong length, set an error message |
| end | | end |
| | | |
− | if not is_set (err_cat) and nil ~= lccn:find ('%s') then | + | if not is_set (err_flag) and nil ~= lccn:find ('%s') then |
− | err_cat = ' ' .. set_message ('err_bad_lccn'); -- lccn contains a space, set an error message | + | err_flag = set_message ('err_bad_lccn'); -- lccn contains a space, set an error message |
| end | | end |
| | | |
− | if is_set (err_cat) then | + | if is_set (err_flag) then |
| options.coins_list_t['LCCN'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['LCCN'] = nil; -- when error, unset so not included in COinS |
| end | | end |
| | | |
| return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, | | return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, |
− | prefix = handler.prefix, id = lccn, separator = handler.separator, encode = handler.encode}) .. err_cat; | + | prefix = handler.prefix, id = lccn, separator = handler.separator, encode = handler.encode}); |
| end | | end |
| | | |
Line 1,012: |
Line 1,022: |
| local id_num; | | local id_num; |
| local id_len; | | local id_len; |
− | local err_cat = '';
| + | |
− |
| |
| id_num = id:match ('^[Mm][Rr](%d+)$'); -- identifier with mr prefix | | id_num = id:match ('^[Mm][Rr](%d+)$'); -- identifier with mr prefix |
| | | |
Line 1,026: |
Line 1,035: |
| id = string.rep ('0', 7-id_len) .. id_num; -- zero-fill leading digits | | id = string.rep ('0', 7-id_len) .. id_num; -- zero-fill leading digits |
| else | | else |
− | err_cat = ' ' .. set_message ('err_bad_mr'); -- set an error message | + | set_message ('err_bad_mr'); -- set an error message |
| options.coins_list_t['MR'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['MR'] = nil; -- when error, unset so not included in COinS |
| end | | end |
| | | |
| return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, | | return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, |
− | prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode}) .. err_cat; | + | prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode}); |
| end | | end |
| | | |
Line 1,046: |
Line 1,055: |
| local handler = options.handler; | | local handler = options.handler; |
| local number; | | local number; |
− | local err_msg = ''; -- empty string for concatenation
| + | |
− |
| |
| if id:match('^ocm%d%d%d%d%d%d%d%d$') then -- ocm prefix and 8 digits; 001 field (12 characters) | | if id:match('^ocm%d%d%d%d%d%d%d%d$') then -- ocm prefix and 8 digits; 001 field (12 characters) |
| number = id:match('ocm(%d+)'); -- get the number | | number = id:match('ocm(%d+)'); -- get the number |
Line 1,069: |
Line 1,077: |
| id = number; -- exclude prefix, if any, from external link | | id = number; -- exclude prefix, if any, from external link |
| else | | else |
− | err_msg = ' ' .. set_message ('err_bad_oclc') -- add an error message if the id is malformed | + | set_message ('err_bad_oclc') -- add an error message if the id is malformed |
| options.coins_list_t['OCLC'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['OCLC'] = nil; -- when error, unset so not included in COinS |
| end | | end |
| | | |
− | local text = external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, | + | return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, |
− | prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode}) .. err_msg; | + | prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode}); |
− | | |
− | return text;
| |
| end | | end |
| | | |
Line 1,091: |
Line 1,097: |
| local handler = options.handler; | | local handler = options.handler; |
| local ident, code = id:gsub('^OL', ''):match("^(%d+([AMW]))$"); -- strip optional OL prefix followed immediately by digits followed by 'A', 'M', or 'W'; | | local ident, code = id:gsub('^OL', ''):match("^(%d+([AMW]))$"); -- strip optional OL prefix followed immediately by digits followed by 'A', 'M', or 'W'; |
− | local error_msg = ''; | + | local err_flag; |
| local prefix = { -- these are appended to the handler.prefix according to code | | local prefix = { -- these are appended to the handler.prefix according to code |
| ['A']='authors/OL', | | ['A']='authors/OL', |
Line 1,102: |
Line 1,108: |
| code = 'X'; -- no code or id completely invalid | | code = 'X'; -- no code or id completely invalid |
| ident = id; -- copy id to ident so that we display the flawed identifier | | ident = id; -- copy id to ident so that we display the flawed identifier |
− | error_msg = ' ' .. set_message ('err_bad_ol'); | + | err_flag = set_message ('err_bad_ol'); |
| end | | end |
| | | |
− | if not is_set (error_msg) then | + | if not is_set (err_flag) then |
| options.coins_list_t['OL'] = handler.prefix .. prefix[code] .. ident; -- experiment for ol coins | | options.coins_list_t['OL'] = handler.prefix .. prefix[code] .. ident; -- experiment for ol coins |
| else | | else |
Line 1,114: |
Line 1,120: |
| prefix = handler.prefix .. prefix[code], | | prefix = handler.prefix .. prefix[code], |
| id = ident, separator = handler.separator, encode = handler.encode, | | id = ident, separator = handler.separator, encode = handler.encode, |
− | access = access}) .. error_msg; | + | access = access}); |
| end | | end |
| | | |
Line 1,132: |
Line 1,138: |
| local access = options.access; | | local access = options.access; |
| local handler = options.handler; | | local handler = options.handler; |
− | local err_cat = ''; -- presume that OSTI is valid
| + | |
− |
| |
| if id:match("[^%d]") then -- if OSTI has anything but digits | | if id:match("[^%d]") then -- if OSTI has anything but digits |
− | err_cat = ' ' .. set_message ('err_bad_osti'); -- set an error message | + | set_message ('err_bad_osti'); -- set an error message |
| options.coins_list_t['OSTI'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['OSTI'] = nil; -- when error, unset so not included in COinS |
| else -- OSTI is only digits | | else -- OSTI is only digits |
| local id_num = tonumber (id); -- convert id to a number for range testing | | local id_num = tonumber (id); -- convert id to a number for range testing |
| if 1018 > id_num or handler.id_limit < id_num then -- if OSTI is outside test limit boundaries | | if 1018 > id_num or handler.id_limit < id_num then -- if OSTI is outside test limit boundaries |
− | err_cat = ' ' .. set_message ('err_bad_osti'); -- set an error message | + | set_message ('err_bad_osti'); -- set an error message |
| options.coins_list_t['OSTI'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['OSTI'] = nil; -- when error, unset so not included in COinS |
| end | | end |
Line 1,146: |
Line 1,151: |
| | | |
| return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, | | return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, |
− | prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode, access = access}) .. err_cat; | + | prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode, access = access}); |
| end | | end |
| | | |
Line 1,171: |
Line 1,176: |
| local embargo = options.Embargo; -- TODO: lowercase? | | local embargo = options.Embargo; -- TODO: lowercase? |
| local handler = options.handler; | | local handler = options.handler; |
− | local err_cat; | + | local err_flag; |
| local id_num; | | local id_num; |
| local text; | | local text; |
Line 1,186: |
Line 1,191: |
| id_num = tonumber (id_num); -- convert id_num to a number for range testing | | id_num = tonumber (id_num); -- convert id_num to a number for range testing |
| if 1 > id_num or handler.id_limit < id_num then -- if PMC is outside test limit boundaries | | if 1 > id_num or handler.id_limit < id_num then -- if PMC is outside test limit boundaries |
− | err_cat = ' ' .. set_message ('err_bad_pmc'); -- set an error message | + | err_flag = set_message ('err_bad_pmc'); -- set an error message |
| else | | else |
| id = tostring (id_num); -- make sure id is a string | | id = tostring (id_num); -- make sure id is a string |
| end | | end |
| else -- when id format incorrect | | else -- when id format incorrect |
− | err_cat = ' ' .. set_message ('err_bad_pmc'); -- set an error message | + | err_flag = set_message ('err_bad_pmc'); -- set an error message |
| end | | end |
| | | |
Line 1,200: |
Line 1,205: |
| handler.separator, | | handler.separator, |
| id, | | id, |
− | (err_cat and err_cat or '') -- parens required
| |
| }); | | }); |
| else | | else |
| text = external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, -- no embargo date or embargo has expired, ok to link to article | | text = external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, -- 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, | | prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode, access = handler.access, |
− | auto_link = not err_cat and 'pmc' or nil -- do not auto-link when PMC has error | + | auto_link = not err_flag and 'pmc' or nil -- do not auto-link when PMC has error |
− | }) .. (err_cat and err_cat or ''); -- parentheses required | + | }); |
| end | | end |
| | | |
− | if err_cat then | + | if err_flag then |
| options.coins_list_t['PMC'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['PMC'] = nil; -- when error, unset so not included in COinS |
| end | | end |
Line 1,228: |
Line 1,232: |
| local id = options.id; | | local id = options.id; |
| local handler = options.handler; | | local handler = options.handler; |
− | local err_cat = ''; -- presume that PMID is valid
| + | |
− |
| |
| if id:match("[^%d]") then -- if PMID has anything but digits | | if id:match("[^%d]") then -- if PMID has anything but digits |
− | err_cat = ' ' .. set_message ('err_bad_pmid'); -- set an error message | + | set_message ('err_bad_pmid'); -- set an error message |
| options.coins_list_t['PMID'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['PMID'] = nil; -- when error, unset so not included in COinS |
| else -- PMID is only digits | | else -- PMID is only digits |
| local id_num = tonumber (id); -- convert id to a number for range testing | | local id_num = tonumber (id); -- convert id to a number for range testing |
| if 1 > id_num or handler.id_limit < id_num then -- if PMID is outside test limit boundaries | | if 1 > id_num or handler.id_limit < id_num then -- if PMID is outside test limit boundaries |
− | err_cat = ' ' .. set_message ('err_bad_pmid'); -- set an error message | + | set_message ('err_bad_pmid'); -- set an error message |
| options.coins_list_t['PMID'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['PMID'] = nil; -- when error, unset so not included in COinS |
| end | | end |
Line 1,242: |
Line 1,245: |
| | | |
| return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, | | return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, |
− | prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode}) .. err_cat; | + | prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode}); |
| end | | end |
| | | |
Line 1,259: |
Line 1,262: |
| local id = options.id; | | local id = options.id; |
| local handler = options.handler; | | local handler = options.handler; |
− | local err_cat = ''; -- presume that RFC is valid
| + | |
− |
| |
| if id:match("[^%d]") then -- if RFC has anything but digits | | if id:match("[^%d]") then -- if RFC has anything but digits |
− | err_cat = ' ' .. set_message ('err_bad_rfc'); -- set an error message | + | set_message ('err_bad_rfc'); -- set an error message |
| options.coins_list_t['RFC'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['RFC'] = nil; -- when error, unset so not included in COinS |
| else -- RFC is only digits | | else -- RFC is only digits |
| local id_num = tonumber (id); -- convert id to a number for range testing | | local id_num = tonumber (id); -- convert id to a number for range testing |
| if 1 > id_num or handler.id_limit < id_num then -- if RFC is outside test limit boundaries | | if 1 > id_num or handler.id_limit < id_num then -- if RFC is outside test limit boundaries |
− | err_cat = ' ' .. set_message ('err_bad_rfc'); -- set an error message | + | set_message ('err_bad_rfc'); -- set an error message |
| options.coins_list_t['RFC'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['RFC'] = nil; -- when error, unset so not included in COinS |
| end | | end |
Line 1,273: |
Line 1,275: |
| | | |
| return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, | | return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, |
− | 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}); |
| end | | end |
| | | |
Line 1,291: |
Line 1,293: |
| local access = options.access; | | local access = options.access; |
| local handler = options.handler; | | local handler = options.handler; |
− | local err_cat = ''; -- presume that S2CID is valid
| |
| local id_num; | | local id_num; |
| local text; | | local text; |
Line 1,300: |
Line 1,301: |
| id_num = tonumber (id_num); -- convert id_num to a number for range testing | | id_num = tonumber (id_num); -- convert id_num to a number for range testing |
| if handler.id_limit < id_num then -- if S2CID is outside test limit boundaries | | if handler.id_limit < id_num then -- if S2CID is outside test limit boundaries |
− | err_cat = ' ' .. set_message ('err_bad_s2cid'); -- set an error message | + | set_message ('err_bad_s2cid'); -- set an error message |
| options.coins_list_t['S2CID'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['S2CID'] = nil; -- when error, unset so not included in COinS |
| end | | end |
− |
| |
| else -- when id format incorrect | | else -- when id format incorrect |
− | err_cat = ' ' .. set_message ('err_bad_s2cid'); -- set an error message | + | set_message ('err_bad_s2cid'); -- set an error message |
| options.coins_list_t['S2CID'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['S2CID'] = nil; -- when error, unset so not included in COinS |
| end | | end |
| | | |
| text = external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, | | text = external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, |
− | prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode, access = access}) .. err_cat; | + | prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode, access = access}); |
| | | |
| return text; | | return text; |
Line 1,329: |
Line 1,329: |
| local ignore_invalid = options.accept; | | local ignore_invalid = options.accept; |
| local handler = options.handler; | | local handler = options.handler; |
− | local function return_result (check, err_type) -- local function to handle the various returns | + | local function return_result (check, err_type) -- local function to handle the various returns |
| local SBN = internal_link_id ({link = handler.link, label = handler.label, redirect = handler.redirect, | | local SBN = internal_link_id ({link = handler.link, label = handler.label, redirect = handler.redirect, |
| prefix = handler.prefix, id = id, separator = handler.separator}); | | prefix = handler.prefix, id = id, separator = handler.separator}); |
− | if not ignore_invalid then -- if not ignoring SBN errors | + | if not ignore_invalid then -- if not ignoring SBN errors |
| if not check then | | if not check then |
| options.coins_list_t['SBN'] = nil; -- when error, unset so not included in COinS; not really necessary here because sbn not made part of COinS | | options.coins_list_t['SBN'] = nil; -- when error, unset so not included in COinS; not really necessary here because sbn not made part of COinS |
− | return SBN .. set_message ('err_bad_sbn', {err_type}, false, ' '); -- display an error message | + | set_message ('err_bad_sbn', {err_type}); -- display an error message |
| + | return SBN; |
| end | | end |
| else | | else |
Line 1,374: |
Line 1,375: |
| local id = options.id; | | local id = options.id; |
| local handler = options.handler; | | local handler = options.handler; |
− | local err_cat = ''; -- presume that SSRN is valid
| |
| local id_num; | | local id_num; |
| local text; | | local text; |
Line 1,383: |
Line 1,383: |
| id_num = tonumber (id_num); -- convert id_num to a number for range testing | | id_num = tonumber (id_num); -- convert id_num to a number for range testing |
| if 100 > id_num or handler.id_limit < id_num then -- if SSRN is outside test limit boundaries | | if 100 > id_num or handler.id_limit < id_num then -- if SSRN is outside test limit boundaries |
− | err_cat = ' ' .. set_message ('err_bad_ssrn'); -- set an error message | + | set_message ('err_bad_ssrn'); -- set an error message |
| options.coins_list_t['SSRN'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['SSRN'] = nil; -- when error, unset so not included in COinS |
| end | | end |
| else -- when id format incorrect | | else -- when id format incorrect |
− | err_cat = ' ' .. set_message ('err_bad_ssrn'); -- set an error message | + | set_message ('err_bad_ssrn'); -- set an error message |
| options.coins_list_t['SSRN'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['SSRN'] = nil; -- when error, unset so not included in COinS |
| end | | end |
| | | |
| text = external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, | | text = external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, |
− | 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 = options.access}); |
| | | |
| return text; | | return text; |
Line 1,413: |
Line 1,413: |
| | | |
| if not id:match('^.+@.+$') or not id:match('^[^<].*[^>]$') then -- doesn't have '@' or has one or first or last character is '< or '>' | | if not id:match('^.+@.+$') or not id:match('^[^<].*[^>]$') then -- doesn't have '@' or has one or first or last character is '< or '>' |
− | text = text .. ' ' .. set_message ('err_bad_usenet_id') -- add an error message if the message id is invalid | + | set_message ('err_bad_usenet_id') -- add an error message if the message id is invalid |
| options.coins_list_t['USENETID'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['USENETID'] = nil; -- when error, unset so not included in COinS |
| end | | end |
| | | |
− | return text | + | return text; |
| end | | end |
| | | |
Line 1,434: |
Line 1,434: |
| local id = options.id; | | local id = options.id; |
| local handler = options.handler; | | local handler = options.handler; |
− | local err_cat = '';
| + | |
− |
| |
| if id:match('^%d%d%d%d%d%d%d%d$') then -- is this identifier using temporary format? | | if id:match('^%d%d%d%d%d%d%d%d$') then -- is this identifier using temporary format? |
| set_message ('maint_zbl'); -- yes, add maint cat | | set_message ('maint_zbl'); -- yes, add maint cat |
| elseif not id:match('^%d?%d?%d?%d%.%d%d%d%d%d$') then -- not temporary, is it normal format? | | elseif not id:match('^%d?%d?%d?%d%.%d%d%d%d%d$') then -- not temporary, is it normal format? |
− | err_cat = ' ' .. set_message ('err_bad_zbl'); -- no, set an error message | + | set_message ('err_bad_zbl'); -- no, set an error message |
| options.coins_list_t['ZBL'] = nil; -- when error, unset so not included in COinS | | options.coins_list_t['ZBL'] = nil; -- when error, unset so not included in COinS |
| end | | end |
| | | |
| return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, | | return external_link_id ({link = handler.link, label = handler.label, q = handler.q, redirect = handler.redirect, |
− | prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode}) .. err_cat; | + | prefix = handler.prefix, id = id, separator = handler.separator, encode = handler.encode}); |
| end | | end |
| | | |
Line 1,487: |
Line 1,486: |
| if is_set (access_level) then | | if is_set (access_level) then |
| if not in_array (access_level, cfg.keywords_lists['id-access']) then -- exact match required | | if not in_array (access_level, cfg.keywords_lists['id-access']) then -- exact match required |
− | table.insert (z.message_tail, { set_message ('err_invalid_param_val', {access_param, access_level}, true) } ); | + | set_message ('err_invalid_param_val', {access_param, access_level}); |
| access_level = nil; -- invalid so unset | | access_level = nil; -- invalid so unset |
| end | | end |
| if not is_set (id_list[k]) then -- identifier access-level must have a matching identifier | | if not is_set (id_list[k]) then -- identifier access-level must have a matching identifier |
− | table.insert (z.message_tail, { set_message ('err_param_access_requires_param', {k:lower()}, true) } ); -- parameter name is uppercase in cfg.id_handlers (k); lowercase for error message | + | set_message ('err_param_access_requires_param', {k:lower()}); -- parameter name is uppercase in cfg.id_handlers (k); lowercase for error message |
| end | | end |
| id_accesses_list[k] = cfg.keywords_xlate[access_level]; -- get translated keyword | | id_accesses_list[k] = cfg.keywords_xlate[access_level]; -- get translated keyword |
Line 1,555: |
Line 1,554: |
| options_t.handler = cfg.id_handlers[hkey]; | | options_t.handler = cfg.id_handlers[hkey]; |
| options_t.coins_list_t = ID_list_coins_t; -- pointer to ID_list_coins_t; for |asin= and |ol=; also to keep erroneous values out of the citation's metadata | | options_t.coins_list_t = ID_list_coins_t; -- pointer to ID_list_coins_t; for |asin= and |ol=; also to keep erroneous values out of the citation's metadata |
| + | options_t.coins_list_t[hkey] = v; -- id value without accept-as-written markup for metadata |
| | | |
| + | if options_t.handler.access and not in_array (options_t.handler.access, cfg.keywords_lists['id-access']) then |
| + | error (cfg.messages['unknown_ID_access'] .. options_t.handler.access); -- here when handler access key set to a value not listed in list of allowed id access keywords |
| + | end |
| + | |
| if func_map[hkey] then | | if func_map[hkey] then |
− | table.insert (ID_list_t, {hkey, func_map[hkey] (options_t)}); -- call the function and add the results to the output sequence table | + | local id_text = func_map[hkey] (options_t); -- call the function to get identifier text and any error message |
| + | table.insert (ID_list_t, {hkey, id_text}); -- add identifier text to the output sequence table |
| else | | else |
− | error (cfg.messages['unknown_ID_key'] .. ' ' .. hkey); -- here when func_map doesn't have a function for hkey | + | error (cfg.messages['unknown_ID_key'] .. hkey); -- here when func_map doesn't have a function for hkey |
| end | | end |
| end | | end |
Line 1,594: |
Line 1,599: |
| for _, v in ipairs (ID_support_t) do | | for _, v in ipairs (ID_support_t) do |
| if is_set (v[1]) and not ID_list_coins_t[v[2]] then -- when support parameter has a value but matching identifier parameter is missing or empty | | if is_set (v[1]) and not ID_list_coins_t[v[2]] then -- when support parameter has a value but matching identifier parameter is missing or empty |
− | table.insert (z.message_tail, {set_message (v[3], (v[4]))}); -- emit the appropriate error message | + | set_message (v[3], (v[4])); -- emit the appropriate error message |
| end | | end |
| end | | end |
Line 1,608: |
Line 1,613: |
| ]] | | ]] |
| | | |
− | local function identifier_lists_get (args, options_t, ID_support_t) | + | local function identifier_lists_get (args_t, options_t, ID_support_t) |
− | local ID_list_coins_t = extract_ids (args); -- get a table of identifiers and their values for use locally and for use in COinS | + | local ID_list_coins_t = extract_ids (args_t); -- get a table of identifiers and their values for use locally and for use in COinS |
| options_check (ID_list_coins_t, ID_support_t); -- ID support parameters must have matching identifier parameters | | options_check (ID_list_coins_t, ID_support_t); -- ID support parameters must have matching identifier parameters |
− | local ID_access_levels_t = extract_id_access_levels (args, ID_list_coins_t); -- get a table of identifier access levels | + | local ID_access_levels_t = extract_id_access_levels (args_t, ID_list_coins_t); -- get a table of identifier access levels |
| local ID_list_t = build_id_list (ID_list_coins_t, options_t, ID_access_levels_t); -- get a sequence table of rendered identifier strings | | local ID_list_t = build_id_list (ID_list_coins_t, options_t, ID_access_levels_t); -- get a sequence table of rendered identifier strings |
| | | |
Line 1,645: |
Line 1,650: |
| auto_link_urls = auto_link_urls, -- table of identifier URLs to be used when auto-linking |title= | | auto_link_urls = auto_link_urls, -- table of identifier URLs to be used when auto-linking |title= |
| | | |
− | identifier_lists_get = identifier_lists_get, -- experiment to replace individual calls to build_id_list, extract_ids, extract_id_access_levels | + | identifier_lists_get = identifier_lists_get, -- experiment to replace individual calls to build_id_list(), extract_ids, extract_id_access_levels |
| is_embargoed = is_embargoed; | | is_embargoed = is_embargoed; |
| set_selected_modules = set_selected_modules; | | set_selected_modules = set_selected_modules; |
| } | | } |