Module:Citation/CS1: திருத்தங்களுக்கு இடையிலான வேறுபாடு
உள்ளடக்கம் நீக்கப்பட்டது உள்ளடக்கம் சேர்க்கப்பட்டது
sync from sandbox; |
sync from sandbox; |
||
வரிசை 534:
local lang=''; -- initialize to empty string
local name;
if script_value:match('^%l%l%l?%s*:') then -- if first 3 or 4 non-space characters are script language prefix
lang = script_value:match('^(%l%l%l?)%s*:%s*%S.*'); -- get the language prefix or nil if there is no script
if not is_set (lang) then
வரி 545 ⟶ 543:
name = cfg.lang_code_remap[lang] or mw.language.fetchLanguageName( lang, cfg.this_wiki_code ); -- get language name so that we can use it to categorize
if is_set (name) then -- is prefix a proper ISO 639-1 language code?
script_value = script_value:gsub ('^%l+%s*:%s*', ''); -- strip prefix from script
-- is prefix one of these language codes?
வரி 617 ⟶ 614:
local wl_type, D, L;
local ws_url, ws_label;
local wikisource_prefix = table.concat ({'https://', cfg.this_wiki_code, '.wikisource.org/wiki/'});
wl_type, D, L = is_wikilink (str); -- wl_type is 0 (not a wikilink), 1 (simple wikilink), 2 (complex wikilink)
வரி 624 ⟶ 622:
if is_set (str) then
ws_url = table.concat ({ -- build a wikisource url
str, -- article title
});
ws_label = str; -- label for the url
end
elseif 1 == wl_type then
str = D:match ('^[Ww]ikisource:(.+)') or D:match ('^[Ss]:(.+)'); -- article title from interwiki link with long-form or short-form namespace
if is_set (str) then
ws_url = table.concat ({ -- build a wikisource url
str, -- article title
});
வரி 643 ⟶ 641:
ws_label = D; -- get ws article name from display portion of interwiki link
ws_url = table.concat ({ -- build a wikisource url
str, -- article title without namespace from link portion of wikilink
});
வரி 651 ⟶ 649:
if ws_url then
ws_url = mw.uri.encode (ws_url, 'WIKI'); -- make a usable url
ws_url = ws_url:gsub ('%%23', '#'); -- undo percent encoding of
end
வரி 660 ⟶ 658:
--[[--------------------------< F O R M A T _ P E R I O D I C A L >--------------------------------------------
Format the
parameter.
வரி 680 ⟶ 678:
if is_set (periodical) then
periodical = periodical .. ' ' .. trans_periodical;
else -- here when
periodical = trans_periodical;
periodical_error = ' ' .. set_error ('trans_missing_title', {'periodical'});
வரி 733 ⟶ 731:
end
end
return chapter .. chapter_error;
வரி 843 ⟶ 837:
-- Empty strings, not nil;
if v == nil then
-- v = cfg.defaults[k] or '';
v = '';
origin[k] = '';
end
வரி 888 ⟶ 883:
local function set_titletype (cite_class, title_type)
if is_set(title_type) then
if cfg.keywords_xlate[title_type] == 'none' then
title_type = ""; -- if |type=none then type parameter not displayed
end
வரி 926 ⟶ 922:
str = str:gsub ('&[nm]dash;', {['–'] = '–', ['—'] = '—'}); -- replace — and – entities with their characters; semicolon mucks up the text.split
str = str:gsub ('-', '-'); -- replace html numeric entity with hyphen character
str = str:gsub (' ', ' '); -- replace entity with generic keyboard space character
local out = {};
வரி 1,082 ⟶ 1,079:
if is_set (suffix) then
if not is_suffix (suffix) then
add_vanc_error (
return false; -- not a name with an appropriate suffix
end
வரி 1,088 ⟶ 1,085:
if nil == mw.ustring.find (last, "^[A-Za-z\195\128-\195\150\195\152-\195\182\195\184-\198\191\199\132-\201\143%-%s%']*$") or
nil == mw.ustring.find (first, "^[A-Za-z\195\128-\195\150\195\152-\195\182\195\184-\198\191\199\132-\201\143%-%s%'%.]*$") then
add_vanc_error (cfg.err_msg_supl['non-Latin character']);
return false; -- not a string of latin characters; Vancouver requires Romanization
end;
வரி 1,121 ⟶ 1,118:
return first; -- one or two initials and a valid suffix so nothing to do
else
add_vanc_error (
return first; -- and return first unmolested
end
வரி 1,129 ⟶ 1,126:
end
end -- if here then name has 3 or more uppercase letters so treat them as a word
local initials, names = {}, {}; -- tables to hold name parts and initials
வரி 1,208 ⟶ 1,204:
one = one .. namesep .. first;
end
end
if is_set (person.link) then
one = make_wikilink (person.link, one); -- link author/editor
end
table.insert (text, one)
table.insert (text, sep_one)
end
end
வரி 1,241 ⟶ 1,237:
]]
local function anchor_id (namelist, year)
local names={}; -- a table for the one to four names and year
வரி 1,284 ⟶ 1,281:
return name, etal; --
end
--[[--------------------------< N A M E _ I S _ N U M E R I C >------------------------------------------------
Add maint cat when name parameter value does not contain letters. Does not catch mixed alphanumeric names so
|last=A. Green (1922-1987) does not get caught in the current version of this test but |first=(1888) is caught.
returns nothing
]]
local function name_is_numeric (name, list_name)
if is_set (name) then
if mw.ustring.match (name, '^[%A]+$') then -- when name does not contain any letters
add_maint_cat ('numeric_names', cfg.special_case_translation [list_name]); -- add a maint cat for this template
end
end
end
வரி 1,292 ⟶ 1,307:
These annotation do not belong in author parameters and are redundant in editor parameters. If found, the function
adds the editor markup maintenance category.
returns nothing
]]
local function name_has_ed_markup (name, list_name)
local patterns = cfg.editor_markup_patterns; -- get patterns from configuration
வரி 1,307 ⟶ 1,323:
end
end
end
வரி 1,316 ⟶ 1,331:
indicated if there is more than one comma and or semicolon. If found, the function adds the multiple name
(author or editor) maintenance category.
returns nothing
]]
local function name_has_mult_names (name, list_name)
local
if is_set (name) then
_, count = name:gsub ('[;,]', ''); -- count the number of separator-like characters
வரி 1,328 ⟶ 1,345:
end
end
end
--[[--------------------------< N A M E _ C H E C K S >--------------------------------------------------------
This function calls various name checking functions used to validate the content of the various name-holding
parameters.
வரி 1,343 ⟶ 1,360:
last = last:match ('^%(%((.*)%)%)$'); -- strip parens
else
name_is_numeric (last, list_name); -- check for names that are compsed of digits and punctuation
end
end
வரி 1,351 ⟶ 1,369:
first = first:match ('^%(%((.*)%)%)$'); -- strip parens
else
name_is_numeric (first, list_name); -- check for names that are compsed of digits and punctuation
end
end
வரி 1,385 ⟶ 1,404:
local etal=false; -- return value set to true when we find some form of et al. in an author parameter
local last_alias, first_alias, link_alias;
while true do
last, last_alias = select_one( args, cfg.aliases[list_name .. '-Last'], 'redundant_parameters', i ); -- search through args for name components beginning at 1
first, first_alias = select_one( args, cfg.aliases[list_name .. '-First'], 'redundant_parameters', i );
link, link_alias = select_one( args, cfg.aliases[list_name .. '-Link'], 'redundant_parameters', i );
mask = select_one( args, cfg.aliases[list_name .. '-Mask'], 'redundant_parameters', i );
வரி 1,404 ⟶ 1,423:
end
else -- we have last with or without a first
link_title_ok (link,
if first then
link_title_ok (link, link_alias, first, first_alias); -- check for improper wikimarkup
end
names[n] = {last = last, first = first, link = link, mask = mask, corporate=false}; -- add this name to our names list (corporate for |vauthors= only)
வரி 1,483 ⟶ 1,505:
Languages that are the same as the local wiki are not categorized. MediaWiki does not recognize three-character
equivalents of two-character codes: code 'ar' is recognized
This function supports multiple languages in the form |language=nb, French, th where the language names or codes are
separated from each other by commas with optional space characters.
]]
வரி 1,508 ⟶ 1,530:
end
else
if 2 == lang:len() or 3 == lang:len() then -- if two-or three-character code
name = mw.language.fetchLanguageName (lang:lower(), cfg.this_wiki_code); -- get language name if |language= is a proper code
வரி 1,546 ⟶ 1,566:
name = table.concat (language_list, cfg.messages['parameter-pair-separator']) -- insert '<space>and<space>' between two language names
elseif 2 < code then
name = table.concat (language_list, cfg.messages['parameter-separator'],
name =
end
if this_wiki_name == name then
வரி 1,569 ⟶ 1,589:
local function set_cs1_style (ps)
if not is_set (ps) then -- unless
ps = cfg.presentation['ps_cs1']; -- terminate the rendered citation
end
வரி 1,631 ⟶ 1,651:
sep, ps, ref = get_settings_from_cite_class (ps, ref, cite_class); -- get settings based on the template's CitationClass
end
if cfg.keywords_xlate[ps:lower()] == 'none' then -- if assigned value is 'none' then
ps = ''; -- set to empty string
end
வரி 1,820 ⟶ 1,841:
elseif string.find(v_name, "%s") then
if v_name:find('[;%.]') then -- look for commonly occurring punctuation characters;
add_vanc_error (
end
local lastfirstTable = {}
வரி 1,831 ⟶ 1,852:
last = table.concat(lastfirstTable, " ") -- returns a string that is the concatenation of all other names that are not initials
if mw.ustring.match (last, '%a+%s+%u+%s+%a+') then
add_vanc_error (cfg.err_msg_supl['missing comma']); -- matches last II last; the case when a comma is missing
end
if mw.ustring.match (v_name, ' %u %u$') then -- this test is in the wrong place TODO: move or replace with a more appropriate test
add_vanc_error (
end
else
வரி 1,843 ⟶ 1,864:
if is_set (first) then
if not mw.ustring.match (first, "^%u?%u$") then -- first shall contain one or two upper-case letters, nothing else
add_vanc_error (
end
is_good_vanc_name (last, first); -- check first and last before restoring the suffix which may have a non-Latin digit
வரி 1,883 ⟶ 1,904:
local function select_author_editor_source (vxxxxors, xxxxors, args, list_name)
local lastfirst = false;
if select_one( args, cfg.aliases[list_name .. '-Last'], 'none', 1 ) or -- do this twice incase we have a |first1= without a |last1=; this ...
select_one( args, cfg.aliases[list_name .. '-First'], 'none', 1 ) or -- ... also catches the case where |first= is used with |vauthors=
வரி 2,105 ⟶ 2,126:
return page, pages, at, coins_pages;
end
வரி 2,150 ⟶ 2,170:
if url:match('//web%.archive%.org/save/') then -- if a save command url, we don't want to allow saving of the target page
err_msg =
url = url:gsub ('(//web%.archive%.org)/save/', '%1/*/', 1); -- for preview mode: modify ArchiveURL
elseif url:match('//liveweb%.archive%.org/') then
err_msg =
else
path, timestamp, flag = url:match('//web%.archive%.org/([^%d]*)(%d+)([^/]*)/'); -- split out some of the url parts for evaluation
if not is_set(timestamp) or 14 ~= timestamp:len() then -- path and flag optional, must have 14-digit timestamp here
err_msg =
if '*' ~= flag then
url=url:gsub ('(//web%.archive%.org/[^%d]*%d?%d?%d?%d?%d?%d?)[^/]*', '%1*', 1) -- for preview, modify ts to be yearmo* max (0-6 digits plus splat)
end
elseif is_set(path) and 'web/' ~= path then -- older archive urls do not have the extra 'web/' path element
err_msg =
elseif is_set (flag) and not is_set (path) then -- flag not allowed with the old form url (without the 'web/' path element)
err_msg =
elseif is_set (flag) and not flag:match ('%a%a_') then -- flag if present must be two alpha characters and underscore (requires 'web/' path element)
err_msg =
else
return url, date; -- return
end
end
வரி 2,175 ⟶ 2,195:
table.insert( z.message_tail, { set_error( 'archive_url', {err_msg}, true ) } ); -- add error message and
if is_set (Frame:preprocess('{{REVISIONID}}')) then
return '', ''; -- return empty strings for
else
return url, date; -- preview mode so return
end
end
வரி 2,192 ⟶ 2,212:
local function place_check (param_val)
if not is_set (param_val) then
return param_val; -- return that empty state
end
வரி 2,280 ⟶ 2,300:
local c = {}; -- contributors list from |contributor-lastn= / contributor-firstn= pairs
local Contributors; -- assembled contributors name list
local Contribution = A['Contribution']; -- TODO: move to after chapter use if A:ORIGIN ('Chapter') ... to set Contribution; this to remove duplicate in aliases list
if in_array(config.CitationClass, {"book","citation"}) and not is_set(A['Periodical']) then -- |contributor= and |contribution= only supported in book cites
c = extract_names (args, 'ContributorList'); -- fetch contributor list from |contributorn= / |contributor-lastn=, -firstn=, -linkn=, -maskn=
வரி 2,322 ⟶ 2,342:
link_title_ok (TitleLink, A:ORIGIN ('TitleLink'), Title, 'title'); -- check for wikimarkup in |title-link= or wikimarkup in |title= when |title-link= is set
local Chapter = A['Chapter']; -- TODO: insert test, assignment, and then unset Chapter when |section= in cite map; test is at c. line 3220
local ScriptChapter = A['ScriptChapter'];
local ScriptChapterOrigin = A:ORIGIN ('ScriptChapter');
வரி 2,347 ⟶ 2,367:
local ConferenceURL = A['ConferenceURL'];
local ConferenceURLorigin = A:ORIGIN('ConferenceURL'); -- get name of parameter that holds ConferenceURL
-- TODO: mailinglist should be removed from Periodical alias list; Periodical should be assigned value from |mailinglist= here wh
local Periodical = A['Periodical']; -- cite mailinglist or citation and |mailinglist=; error check for duplicate work params (Periodical already set)
local Periodical_origin = '';
if is_set (Periodical) then
வரி 2,357 ⟶ 2,379:
end
end
-- TODO: mailinglist assignment here? iff Periodical not set; err msg else; see TODO c. line 2607
local ScriptPeriodical = A['ScriptPeriodical'];
local ScriptPeriodical_origin = A:ORIGIN('ScriptPeriodical');
வரி 2,363 ⟶ 2,385:
-- Wikipedia:Administrators%27_noticeboard#Is_there_a_semi-automated_tool_that_could_fix_these_annoying_"Cite_Web"_errors?
if not (is_set (Periodical) or is_set (ScriptPeriodical)) then -- 'periodical' templates require periodical parameter
--
local p = {['journal'] = 'journal', ['magazine'] = 'magazine'}; -- for error message
if p[config.CitationClass] then
வரி 2,428 ⟶ 2,450:
end
end
local Newsgroup = A['Newsgroup']; -- TODO: strip apostrophe markup?
local Newsgroup_origin = A:ORIGIN('Newsgroup');
if 'newsgroup' == config.CitationClass then
if is_set (PublisherName) then -- general use parmeter |publisher= not allowed in cite newsgroup
local error_text = set_error ('parameter_ignored', {PublisherName_origin}, true);
if is_set (error_text) then
table.insert( z.message_tail, {error_text, error_state} );
end
end
PublisherName = nil; -- ensure that this parameter is unset for the time being; will be used again after COinS
end
local UrlAccess = is_valid_parameter_value (A['UrlAccess'], A:ORIGIN('UrlAccess'), cfg.keywords_lists['url-access'], nil);
வரி 2,494 ⟶ 2,530:
local sepc; -- separator between citation elements for CS1 a period, for CS2, a comma
local PostScript;
local Ref = A['Ref'];
if 'harv' == Ref then
add_maint_cat ('ref_harv'); -- add maint cat to identify templates that have this now-extraneous param value
elseif not is_set (Ref) then
Ref = 'harv'; -- set as default when not set externally
end
sepc, PostScript, Ref = set_style (Mode:lower(), A['PostScript'], Ref, config.CitationClass);
use_lowercase = ( sepc == ',' ); -- used to control capitalization for certain static text
வரி 2,510 ⟶ 2,552:
end
end
-- check for extra |page=, |pages= or |at= parameters. (also sheet and sheets while we're at it)
select_one (args, {'page', 'p', 'pp', 'pages', 'at', 'sheet', 'sheets'}, 'redundant_parameters'); -- this is a dummy call simply to get the error message and category
local coins_pages;
வரி 2,529 ⟶ 2,570:
end
if PublicationPlace == Place then Place = ''; end -- don't need both if they are the same
வரி 2,548 ⟶ 2,585:
]]
local Encyclopedia = A['Encyclopedia'];
if ( config.CitationClass == "encyclopaedia" ) or ( config.CitationClass == "citation" and is_set (Encyclopedia)) then -- test code for citation
வரி 2,559 ⟶ 2,596:
TransChapter = TransTitle;
ChapterURL = URL;
ChapterURLorigin = A:ORIGIN('URL')
ChapterUrlAccess = UrlAccess;
வரி 2,592 ⟶ 2,631:
-- special case for cite mailing list
if (config.CitationClass == "mailinglist") then -- TODO: move this to Periodical assignment; see TODOs at c. line 2360
Periodical = A ['MailingList'];
elseif 'mailinglist' == Periodical_origin then
வரி 2,602 ⟶ 2,641:
if is_set(BookTitle) then
Chapter = Title;
--
ChapterURL = URL;
ChapterUrlAccess = UrlAccess;
வரி 2,611 ⟶ 2,650:
Title = BookTitle;
Format = '';
--
TransTitle = '';
URL = '';
வரி 2,647 ⟶ 2,686:
-- Account for the oddities that are {{cite episode}} and {{cite serial}}, before generation of COinS data.
if 'episode' == config.CitationClass or 'serial' == config.CitationClass then
local SeriesLink = A['SeriesLink'];
வரி 2,660 ⟶ 2,698:
ID = table.concat(n, sepc .. ' ');
if 'episode' == config.CitationClass then -- handle the oddities that are strictly {{cite episode}}
local Season = A['Season'];
வரி 2,680 ⟶ 2,714:
Chapter = Title; -- promote title parameters to chapter
ScriptChapter = ScriptTitle;
ScriptChapterOrigin = A:ORIGIN('ScriptTitle');
ChapterLink = TitleLink; -- alias episodelink
வரி 2,714 ⟶ 2,747:
-- Account for the oddities that are {{cite arxiv}}, {{cite biorxiv}}, {{cite citeseerx}}, {{cite ssrn}}, before generation of COinS data.
do
if in_array (config.CitationClass,
if not is_set (ID_list[config.CitationClass:upper()]) then -- |arxiv= or |eprint= required for cite arxiv; |biorxiv= & |citeseerx= required for their templates
table.insert( z.message_tail, { set_error( config.CitationClass .. '_missing', {}, true ) } ); -- add error message
வரி 2,809 ⟶ 2,842:
-- uncomment these three lines. Not supported by en.wiki (for obvious reasons)
-- set date_name_xlate() second argument to true to translate English digits to local digits (will translate ymd dates)
--
--
--
if modified then -- if the date_parameters_list values were modified
வரி 2,854 ⟶ 2,887:
end
if
in_array (config.CitationClass, {'journal', 'citation'}) and
(is_set (Periodical) or is_set (ScriptPeriodical)) and
வரி 2,886 ⟶ 2,919:
coins_author = c; -- use that instead
end
-- this is the function call to COinS()
local OCinSoutput = COinS({
வரி 2,903 ⟶ 2,936:
['Pages'] = coins_pages or get_coins_pages (first_set ({Sheet, Sheets, Page, Pages, At}, 5)), -- pages stripped of external links
['Edition'] = Edition,
['PublisherName'] = PublisherName or Newsgroup,
['URL'] = first_set ({ChapterURL, URL}, 2),
['Authors'] = coins_author,
வரி 2,911 ⟶ 2,944:
-- Account for the oddities that are {{cite arxiv}}, {{cite biorxiv}}, {{cite citeseerx}}, and {{cite ssrn}} AFTER generation of COinS data.
if in_array (config.CitationClass,
Periodical = ''; -- periodical not allowed in these templates; if article has been published, use cite journal
end
-- special case for cite newsgroup. Do this after COinS because we are modifying Publishername to include some static text
if 'newsgroup' == config.CitationClass and is_set (Newsgroup) then
PublisherName = substitute (cfg.messages['newsgroup'], external_link( 'news:' .. Newsgroup, Newsgroup, Newsgroup_origin, nil ));
end
வரி 2,932 ⟶ 2,963:
maximum = nil, -- as if display-authors or display-editors not set
lastauthoramp = LastAuthorAmp,
mode = Mode
};
வரி 2,944 ⟶ 2,974:
if editor_etal then
Editors = Editors .. ' ' .. cfg.messages['et al']; -- add et al. to editors parameter beause |display-editors=etal
end
EditorCount = 2; -- we don't know but assume |editors= is multiple names; spoof to display (eds.) annotation
else
Editors = last_first_list; -- either an author name list or an empty string
வரி 3,088 ⟶ 3,116:
end
-- Format main title. TODO: add support for non-English versions of 'Archived copy' when used on other-language wikis
if is_set (ArchiveURL) and
(mw.ustring.match (mw.ustring.lower(Title), cfg.special_case_translation.archived_copy.en) or -- if title is 'Archived copy' (place holder added by bots that can't find proper title)
mw.ustring.match (mw.ustring.lower(Title), cfg.special_case_translation.archived_copy['local'])) then -- local-wiki's form
add_maint_cat ('archived_copy'); -- add maintenance category before we modify the content of Title
end
வரி 3,103 ⟶ 3,133:
end
end
if in_array(config.CitationClass, {'web', 'news', 'journal', 'magazine', 'pressrelease', 'podcast', 'newsgroup', 'mailinglist', 'interview', 'arxiv', 'biorxiv', 'citeseerx', 'ssrn'}) or
('citation' == config.CitationClass and (is_set (Periodical) or is_set (ScriptPeriodical)) and not is_set (Encyclopedia)) or
வரி 3,129 ⟶ 3,159:
end
if is_set (Title) then -- TODO: is this the right place to be making wikisource urls?
if not is_set (TitleLink) and is_set (URL) then
Title = external_link (URL, Title, URLorigin, UrlAccess) .. TransTitle .. TransError .. Format;
வரி 3,145 ⟶ 3,175:
end
else
local ws_url, ws_label; -- Title has italic or quote markup by the time we get here which causes is_wikilink() to return 0 (not a wikilink)
ws_url, ws_label, L = wikisource_url_make (Title:gsub('[\'"](.-)[\'"]', '%1'));
if ws_url then
Title = Title:gsub ('%b[]', ws_label); -- replace interwiki link with ws_label to retain markup
வரி 3,203 ⟶ 3,233:
At = is_set(At) and (sepc .. " " .. At) or "";
Position = is_set(Position) and (sepc .. " " .. Position) or "";
if config.CitationClass == 'map' then -- TODO copy this line and
local Section = A['Section']; -- TODO move this line to c. line 2337 so that separate Sections in aliases{} not required? then unset Chapter?
local Sections = A['Sections'];
local Inset = A['Inset'];
வரி 3,530 ⟶ 3,560:
end
if is_set(Ref) and 'none' ~= cfg.keywords_xlate[Ref:lower()
local id = Ref
if ('harv' == Ref ) then
வரி 3,594 ⟶ 3,624:
end
if not no_tracking_cats then
for _, v in ipairs( z.error_categories ) do
வரி 3,626 ⟶ 3,654:
local name = tostring (name);
local state;
local function state_test (state, name) -- local function to do testing of state values
if true == state then return true; end -- valid actively supported parameter
if false == state then
வரி 3,634 ⟶ 3,660:
return true;
end
return nil;
end
if name:find ('#') then -- # is a cs1|2 reserved character so parameters with # not permitted
return nil;
end
if in_array (cite_class, whitelist.preprint_template_list ) then -- limited parameter sets allowed for these templates
state = whitelist.limited_basic_arguments[name];
if true == state_test (state, name) then return true; end
state = whitelist.preprint_arguments[cite_class][name]; -- look in the parameter-list for the template identified by cite_class
if true == state_test (state, name) then return true; end
-- limited enumerated parameters list
name = name:gsub("%d+", "#" ); -- replace digit(s) with # (last25 becomes last#) (mw.ustring because non-Western 'local' digits)
state = whitelist.limited_numbered_arguments[name];
if true == state_test (state, name) then return true; end
return false; -- not supported because not found or name is set to nil
end -- end limited parameter-set templates
if in_array (cite_class, whitelist.unique_param_template_list) then -- experiment for template-specific parameters for templates that accept parameters from the basic argument list
state = whitelist.unique_arguments[cite_class][name]; -- look in the template-specific parameter-lists for the template identified by cite_class
if true == state_test (state, name) then return true; end
end -- if here, fall into general validation
state = whitelist.basic_arguments[name]; -- all other templates; all normal parameters allowed
if true == state_test (state, name) then return true; end
-- all enumerated parameters allowed
name = name:gsub("%d+", "#" ); -- replace digit(s) with # (last25 becomes last#) (mw.ustring because non-Western 'local' digits)
state = whitelist.numbered_arguments[name];
if true == state_test (state, name) then return true; end
return false; -- not supported because not found or name is set to nil
end
| |||