"ମଡ୍ୟୁଲ:Citation/CS1" ପୃଷ୍ଠାର ସଂସ୍କରଣ‌ଗୁଡ଼ିକ ମଧ୍ୟରେ ତଫାତ

Content deleted Content added
sync from sandbox;
sync from sandbox;
୫୩୪ କ ଧାଡ଼ି:
local lang=''; -- initialize to empty string
local name;
-- if script_value:match('^%l%l%s*:') then -- if first 3 non-space characters are script language prefix
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)%s*:%s*%S.*'); -- get the language prefix or nil if there is no script
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
Line ୫୪୫ ⟶ ୫୪୩:
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%l%s*:%s*', ''); -- strip prefix from script
script_value = script_value:gsub ('^%l+%s*:%s*', ''); -- strip prefix from script
-- is prefix one of these language codes?
Line ୬୧୭ ⟶ ୬୧୪:
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)
Line ୬୨୪ ⟶ ୬୨୨:
if is_set (str) then
ws_url = table.concat ({ -- build a wikisource url
'https://en.wikisource.org/wiki/'wikisource_prefix, -- prefix
str, -- article title
});
ws_label = str; -- label for the url
end
elseif 1 == wl_type then -- simple wikilink: [[Wikisource:ws article]]
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
'https://en.wikisource.org/wiki/'wikisource_prefix, -- prefix
str, -- article title
});
Line ୬୪୩ ⟶ ୬୪୧:
ws_label = D; -- get ws article name from display portion of interwiki link
ws_url = table.concat ({ -- build a wikisource url
'https://en.wikisource.org/wiki/'wikisource_prefix, -- prefix
str, -- article title without namespace from link portion of wikilink
});
Line ୬୫୧ ⟶ ୬୪୯:
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 anchorfragment marker
end
 
Line ୬୬୦ ⟶ ୬୫୮:
--[[--------------------------< F O R M A T _ P E R I O D I C A L >--------------------------------------------
 
Format the fourthree periodical parameters: |script-<periodical>=, |<periodical>=, and |trans-<periodical>= into a single Periodical meta-
parameter.
 
Line ୬୮୦ ⟶ ୬୭୮:
if is_set (periodical) then
periodical = periodical .. ' ' .. trans_periodical;
else -- here when transchaptertrans-periodical without chapterperiodical or script-chapterperiodical
periodical = trans_periodical;
periodical_error = ' ' .. set_error ('trans_missing_title', {'periodical'});
Line ୭୩୩ ⟶ ୭୩୧:
end
end
 
-- if is_set (chapterurl) then
-- chapter = external_link (chapterurl, chapter, chapter_url_source, access); -- adds bare_url_missing_title error if appropriate
-- end
 
return chapter .. chapter_error;
Line ୮୪୩ ⟶ ୮୩୭:
-- Empty strings, not nil;
if v == nil then
-- v = cfg.defaults[k] or '';
v = '';
origin[k] = '';
end
Line ୮୮୮ ⟶ ୮୮୩:
local function set_titletype (cite_class, title_type)
if is_set(title_type) then
 
if "none" == title_type then
if cfg.keywords_xlate[title_type] == 'none' then
title_type = ""; -- if |type=none then type parameter not displayed
end
Line ୯୨୬ ⟶ ୯୨୨:
str = str:gsub ('&[nm]dash;', {['&ndash;'] = '–', ['&mdash;'] = '—'}); -- replace &mdash; and &ndash; entities with their characters; semicolon mucks up the text.split
str = str:gsub ('&#45;', '-'); -- replace html numeric entity with hyphen character
str = str:gsub ('&nbsp;', ' '); -- replace &nbsp; entity with generic keyboard space character
local out = {};
Line ୧,୦୮୨ ⟶ ୧,୦୭୯:
if is_set (suffix) then
if not is_suffix (suffix) then
add_vanc_error ('cfg.err_msg_supl.suffix');
return false; -- not a name with an appropriate suffix
end
Line ୧,୦୮୮ ⟶ ୧,୦୮୫:
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;
Line ୧,୧୨୧ ⟶ ୧,୧୧୮:
return first; -- one or two initials and a valid suffix so nothing to do
else
add_vanc_error ('cfg.err_msg_supl.suffix'); -- one or two initials with invalid suffix so error message
return first; -- and return first unmolested
end
Line ୧,୧୨୯ ⟶ ୧,୧୨୬:
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
Line ୧,୨୦୮ ⟶ ୧,୨୦୪:
one = one .. namesep .. first;
end
if is_set(person.link) and person.link ~= control.page_name then
one = make_wikilink (person.link, one); -- link author/editor if this page is not the author's/editor's page
end
end
if is_set (person.link) then
table.insert( text, one )
one = make_wikilink (person.link, one); -- link author/editor
table.insert( text, sep_one )
end
table.insert (text, one)
table.insert (text, sep_one)
end
end
Line ୧,୨୪୧ ⟶ ୧,୨୩୭:
 
]]
 
local function anchor_id (namelist, year)
local names={}; -- a table for the one to four names and year
Line ୧,୨୮୪ ⟶ ୧,୨୮୧:
 
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
 
Line ୧,୨୯୨ ⟶ ୧,୩୦୭:
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 _, pattern;
local patterns = cfg.editor_markup_patterns; -- get patterns from configuration
 
Line ୧,୩୦୭ ⟶ ୧,୩୨୩:
end
end
return name; -- and done
end
 
Line ୧,୩୧୬ ⟶ ୧,୩୩୧:
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 count_, _count;
if is_set (name) then
_, count = name:gsub ('[;,]', ''); -- count the number of separator-like characters
Line ୧,୩୨୮ ⟶ ୧,୩୪୫:
end
end
return name; -- and done
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.
Line ୧,୩୪୩ ⟶ ୧,୩୬୦:
last = last:match ('^%(%((.*)%)%)$'); -- strip parens
else
last = name_has_mult_names (last, list_name); -- check for multiple names in the parameter (last only)
last = name_has_ed_markup (last, list_name); -- check for extraneous 'editor' annotation
name_is_numeric (last, list_name); -- check for names that are compsed of digits and punctuation
end
end
Line ୧,୩୫୧ ⟶ ୧,୩୬୯:
first = first:match ('^%(%((.*)%)%)$'); -- strip parens
else
first = name_has_ed_markup (first, list_name); -- check for extraneous 'editor' annotation
name_is_numeric (first, list_name); -- check for names that are compsed of digits and punctuation
end
end
Line ୧,୩୮୫ ⟶ ୧,୪୦୪:
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; -- selected parameter aliases used in error messaging
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 );
 
Line ୧,୪୦୪ ⟶ ୧,୪୨୩:
end
else -- we have last with or without a first
link_title_ok (link, list_name:match ("(%w+)List"):lower() .. '-link' .. ilink_alias, last, list_name:match ("(%w+)List"):lower() .. '-last' .. ilast_alias); -- check for improper wikimarkup
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)
Line ୧,୪୮୩ ⟶ ୧,୫୦୫:
 
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 bitbut code 'ara' is not.
 
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.
 
]]
Line ୧,୫୦୮ ⟶ ୧,୫୩୦:
end
else
iflang = lang:matchgsub ('^(%a%a%a?)%-.*', '%1') then ; -- strip any ietf-like tags from code; TODO: is there a need to support 3-char with tag?
lang = lang:match ('(%a%a)%-') -- keep only 639-1 code portion to lang; TODO: do something with 3166 alpha 2 country code?
end
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
Line ୧,୫୪୬ ⟶ ୧,୫୬୬:
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'], '1, code-1); -- and concatenate withall '<comma><space>'but separatorslast
name = name:gsubtable.concat ('{name, (language_list[^,code]+)$'}, cfg.messages['parameter-final-separator'] .. '%1'); -- replaceconcatenate last '<comma><space>' separator with '<comma><space>and<space>'final separator
end
if this_wiki_name == name then
Line ୧,୫୬୯ ⟶ ୧,୫୮୯:
 
local function set_cs1_style (ps)
if not is_set (ps) then -- unless explicitelyexplicitly set to something
ps = cfg.presentation['ps_cs1']; -- terminate the rendered citation
end
Line ୧,୬୩୧ ⟶ ୧,୬୫୧:
sep, ps, ref = get_settings_from_cite_class (ps, ref, cite_class); -- get settings based on the template's CitationClass
end
 
if 'none' == ps:lower() then -- if assigned value is 'none' then
if cfg.keywords_xlate[ps:lower()] == 'none' then -- if assigned value is 'none' then
ps = ''; -- set to empty string
end
Line ୧,୮୨୦ ⟶ ୧,୮୪୧:
elseif string.find(v_name, "%s") then
if v_name:find('[;%.]') then -- look for commonly occurring punctuation characters;
add_vanc_error ('cfg.err_msg_supl.punctuation');
end
local lastfirstTable = {}
Line ୧,୮୩୧ ⟶ ୧,୮୫୨:
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 ('cfg.err_msg_supl.name'); -- matches a space between two intiials
end
else
Line ୧,୮୪୩ ⟶ ୧,୮୬୪:
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 ('cfg.err_msg_supl.initials'); -- too many initials; mixed case initials (which may be ok Romanization); hyphenated initials
end
is_good_vanc_name (last, first); -- check first and last before restoring the suffix which may have a non-Latin digit
Line ୧,୮୮୩ ⟶ ୧,୯୦୪:
 
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=
Line ୨,୧୦୫ ⟶ ୨,୧୨୬:
return page, pages, at, coins_pages;
end
 
 
 
Line ୨,୧୫୦ ⟶ ୨,୧୭୦:
 
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 = 'cfg.err_msg_supl.save command';
url = url:gsub ('(//web%.archive%.org)/save/', '%1/*/', 1); -- for preview mode: modify ArchiveURL
elseif url:match('//liveweb%.archive%.org/') then
err_msg = 'cfg.err_msg_supl.liveweb';
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 = 'cfg.err_msg_supl.timestamp';
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 = 'cfg.err_msg_supl.path';
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 = 'cfg.err_msg_supl.flag';
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 = 'cfg.err_msg_supl.flag';
else
return url, date; -- return archiveURLArchiveURL and ArchiveDate
end
end
Line ୨,୧୭୫ ⟶ ୨,୧୯୫:
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 archiveURLArchiveURL and ArchiveDate
else
return url, date; -- preview mode so return archiveURLArchiveURL and ArchiveDate
end
end
Line ୨,୧୯୨ ⟶ ୨,୨୧୨:
 
local function place_check (param_val)
if not is_set (param_val) then -- parameter empty or omitted
return param_val; -- return that empty state
end
Line ୨,୨୮୦ ⟶ ୨,୩୦୦:
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=
Line ୨,୩୨୨ ⟶ ୨,୩୪୨:
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 Chapter = A['Chapter'];
local ScriptChapter = A['ScriptChapter'];
local ScriptChapterOrigin = A:ORIGIN ('ScriptChapter');
Line ୨,୩୪୭ ⟶ ୨,୩୬୭:
local ConferenceURL = A['ConferenceURL'];
local ConferenceURLorigin = A:ORIGIN('ConferenceURL'); -- get name of parameter that holds ConferenceURL
 
local Periodical = A['Periodical'];
-- 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
Line ୨,୩୫୭ ⟶ ୨,୩୭୯:
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');
Line ୨,୩୬୩ ⟶ ୨,୩୮୫:
-- 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', ['news'] = 'newspaper', ['web'] = 'website'}; -- for error message
local p = {['journal'] = 'journal', ['magazine'] = 'magazine'}; -- for error message
if p[config.CitationClass] then
Line ୨,୪୨୮ ⟶ ୨,୪୫୦:
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);
Line ୨,୪୯୪ ⟶ ୨,୫୩୦:
local sepc; -- separator between citation elements for CS1 a period, for CS2, a comma
local PostScript;
local Ref = A['Ref'];
if 'harv' == Ref then
sepc, PostScript, Ref = set_style (Mode:lower(), A['PostScript'], A['Ref'], config.CitationClass);
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
 
Line ୨,୫୧୦ ⟶ ୨,୫୫୨:
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
-- 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;
Line ୨,୫୨୯ ⟶ ୨,୫୭୦:
end
 
-- if not is_set(PublicationPlace) and is_set(Place) then -- both |publication-place= and |place= (|location=) allowed if different
-- PublicationPlace = Place; -- promote |place= (|location=) to |publication-place
-- end
--
if PublicationPlace == Place then Place = ''; end -- don't need both if they are the same
Line ୨,୫୪୮ ⟶ ୨,୫୮୫:
]]
 
local Encyclopedia = A['Encyclopedia'];
 
if ( config.CitationClass == "encyclopaedia" ) or ( config.CitationClass == "citation" and is_set (Encyclopedia)) then -- test code for citation
Line ୨,୫୫୯ ⟶ ୨,୫୯୬:
TransChapter = TransTitle;
ChapterURL = URL;
ChapterURLorigin = A:ORIGIN('URL')
 
ChapterUrlAccess = UrlAccess;
 
Line ୨,୫୯୨ ⟶ ୨,୬୩୧:
 
-- 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
Line ୨,୬୦୨ ⟶ ୨,୬୪୧:
if is_set(BookTitle) then
Chapter = Title;
-- ChapterLink = TitleLink; -- |chapterlink= is deprecated
ChapterURL = URL;
ChapterUrlAccess = UrlAccess;
Line ୨,୬୧୧ ⟶ ୨,୬୫୦:
Title = BookTitle;
Format = '';
-- TitleLink = '';
TransTitle = '';
URL = '';
Line ୨,୬୪୭ ⟶ ୨,୬୮୬:
-- 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 AirDate = A['AirDate'];
local SeriesLink = A['SeriesLink'];
 
Line ୨,୬୬୦ ⟶ ୨,୬୯୮:
ID = table.concat(n, sepc .. ' ');
if not is_set (Date) and is_set (AirDate) then -- promote airdate to date
Date = AirDate;
end
 
if 'episode' == config.CitationClass then -- handle the oddities that are strictly {{cite episode}}
local Season = A['Season'];
Line ୨,୬୮୦ ⟶ ୨,୭୧୪:
Chapter = Title; -- promote title parameters to chapter
ScriptChapter = ScriptTitle;
-- ScriptChapterOrigin = 'title';
ScriptChapterOrigin = A:ORIGIN('ScriptTitle');
ChapterLink = TitleLink; -- alias episodelink
Line ୨,୭୧୪ ⟶ ୨,୭୪୭:
-- 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, {'arxiv', 'biorxiv', 'citeseerx', 'ssrn'}whitelist.preprint_template_list) then
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
Line ୨,୮୦୯ ⟶ ୨,୮୪୨:
-- 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 date_name_xlate (date_parameters_list, false) then
-- modified = true;
-- end
 
if modified then -- if the date_parameters_list values were modified
Line ୨,୮୫୪ ⟶ ୨,୮୮୭:
end
 
if 'none'cfg.keywords_xlate[Title] == Title'none' and
in_array (config.CitationClass, {'journal', 'citation'}) and
(is_set (Periodical) or is_set (ScriptPeriodical)) and
Line ୨,୮୮୬ ⟶ ୨,୯୧୯:
coins_author = c; -- use that instead
end
 
-- this is the function call to COinS()
local OCinSoutput = COinS({
Line ୨,୯୦୩ ⟶ ୨,୯୩୬:
['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, -- any apostrophe markup already removed from PublisherName
['URL'] = first_set ({ChapterURL, URL}, 2),
['Authors'] = coins_author,
Line ୨,୯୧୧ ⟶ ୨,୯୪୪:
 
-- 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, {'arxiv', 'biorxiv', 'citeseerx', 'ssrn'}whitelist.preprint_template_list) then -- we have set rft.jtitle in COinS to arXiv, bioRxiv, CiteSeerX, or ssrn now unset so it isn't displayed
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 ));
if is_set (PublisherName) then
PublisherName = substitute (cfg.messages['newsgroup'], external_link( 'news:' .. PublisherName, PublisherName, PublisherName_origin, nil ));
end
end
 
Line ୨,୯୩୨ ⟶ ୨,୯୬୩:
maximum = nil, -- as if display-authors or display-editors not set
lastauthoramp = LastAuthorAmp,
page_name = this_page.text, -- get current page name so that we don't wikilink to it via editorlinkn
mode = Mode
};
Line ୨,୯୪୪ ⟶ ୨,୯୭୪:
if editor_etal then
Editors = Editors .. ' ' .. cfg.messages['et al']; -- add et al. to editors parameter beause |display-editors=etal
EditorCount = 2; -- with et al., |editors= is multiple names; spoof to display (eds.) annotation
else
EditorCount = 2; -- we don't know but assume |editors= is multiple names; spoof to display (eds.) annotation
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
Line ୩,୦୮୮ ⟶ ୩,୧୧୬:
end
 
-- Format main title. TODO: add support for non-English versions of 'Archived copy' when used on other-language wikis
-- Format main title.
if is_set (ArchiveURL) and
(mw.ustring.match (mw.ustring.lower(Title), cfg.special_case_translation['.archived_copy'].en) thenor -- 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
add_maint_cat ('archived_copy'); -- add maintenance category before we modify the content of Title
end
 
Line ୩,୧୦୩ ⟶ ୩,୧୩୩:
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
Line ୩,୧୨୯ ⟶ ୩,୧୫୯:
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;
Line ୩,୧୪୫ ⟶ ୩,୧୭୫:
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)
local ws_url, ws_label;
ws_url, ws_label, L = wikisource_url_make (Title:gsub('[\'"](.-)[\'"]', '%1')); -- make ws url from |title= interwiki link (strip italic or quote markup); link portion L becomes tool tip label
if ws_url then
Title = Title:gsub ('%b[]', ws_label); -- replace interwiki link with ws_label to retain markup
Line ୩,୨୦୩ ⟶ ୩,୨୩୩:
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'];
Line ୩,୫୩୦ ⟶ ୩,୫୬୦:
end
if is_set(Ref) and 'none' ~= cfg.keywords_xlate[Ref:lower() ~= "none"] then -- set reference anchor if appropriate
local id = Ref
if ('harv' == Ref ) then
Line ୩,୫୯୪ ⟶ ୩,୬୨୪:
end
-- no_tracking_cats = no_tracking_cats:lower();
-- if in_array(no_tracking_cats, {"", "no", "false", "n"}) then
if not no_tracking_cats then
for _, v in ipairs( z.error_categories ) do
Line ୩,୬୨୬ ⟶ ୩,୬୫୪:
local name = tostring (name);
local state;
local function state_test (state, name) -- local function to do testing of state values
if in_array (cite_class, {'arxiv', 'biorxiv', 'citeseerx', 'ssrn'}) then -- limited parameter sets allowed for these templates
state = whitelist.limited_basic_arguments[name];
if true == state then return true; end -- valid actively supported parameter
if false == state then
Line ୩,୬୩୪ ⟶ ୩,୬୬୦:
return true;
end
return nil;
end
 
if name:find ('#') then -- # is a cs1|2 reserved character so parameters with # not permitted
state = whitelist[cite_class .. '_basic_arguments'][name]; -- look in the parameter-list for the template identified by cite_class
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
 
if true == state then return true; end -- valid actively supported parameter
if false == state then
deprecated_parameter (name); -- parameter is deprecated but still supported
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 -- valid actively supported parameter
if false == state then
deprecated_parameter (name); -- parameter is deprecated but still supported
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
 
if true == state then return true; end -- valid actively supported parameter
if false == state then
deprecated_parameter (name); -- parameter is deprecated but still supported
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
 
if true == state then return true; end -- valid actively supported parameter
if false == state then
deprecated_parameter (name); -- parameter is deprecated but still supported
return true;
end
return false; -- not supported because not found or name is set to nil
end