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

Content deleted Content added
ଟିକେ en:Module:Citation/CS1ରୁ ୧ ଗୋଟି ସଂସ୍କରଣ ଅଣାଗଲା
sync from sandbox;
୧ କ ଧାଡ଼ି:
 
local cs1 ={};
 
--[[--------------------------< F O R W A R D D E C L A R A T I O N S >--------------------------------------
Line ୧୩୩ ⟶ ୧୩୧:
the first character of the whole domain name including subdomains must be a letter or a digit
internationalized domain name (ascii characters with .xn-- ASCII Compatible Encoding (ACE) prefix xn-- in the tld) see https://tools.ietf.org/html/rfc3490
single-letter/digit second-level domains in the .org, .cash, and .cashtoday TLDs
q, x, and z SL domains in the .com TLD
i and q SL domains in the .net TLD
Line ୧୬୫ ⟶ ୧୬୩:
return true;
elseif domain:match ('%f[%a%d][%a%d]%.cash$') then -- one character/digit .cash hostname
return cs1true;
elseif domain:match ('%f[%a%d][%a%d]%.today') then -- one character/digit .today hostname
return true;
elseif domain:match ('%f[%a%d][%a%d]%.org$') then -- one character/digit .org hostname
୭୧୩ କ ଧାଡ଼ି:
Detects but ignores nowiki and math stripmarkers. Also detects other named stripmarkers (gallery, math, pre, ref)
and identifies them with a slightly different error message. See also coins_cleanup().
 
Detects but ignores the character pattern that results from the transclusion of {{'}} templates.
 
Output of this function is an error message that identifies the character or the Unicode group, or the stripmarker
Line ୧,୨୨୧ ⟶ ୧,୨୧୯:
--[[--------------------------< N A M E _ H A S _ E T A L >----------------------------------------------------
 
Evaluates the content of authorname andparameters (author, editor, name parametersetc) for variations on the theme of et al. If found,
the et al. is removed, a flag is set to true and the function returns the modified name and the flag.
 
This function never sets the flag to false but returns it's previous state because it may have been set by
previous passes through this function or by the parametersassociated |display-authors<names>=etal or |display-editors=etalparameter
 
]]
 
local function name_has_etal (name, etal, nocat, param)
 
if is_set (name) then -- name can be nil in which case just return
local patterns = cfg.et_al_patterns; --get patterns from configuration
local etal_pattern = "[;,]? *[\"']*%f[%a][Ee][Tt] *[Aa][Ll][%.\"']*$" -- variations on the 'et al' theme
local others_pattern = "[;,]? *%f[%a]and [Oo]thers"; -- and alternate to et al.
iffor name:match_, pattern in ipairs (etal_patternpatterns) then do -- variantsloop through all onof etthe al.patterns
name =if name:gsubmatch (etal_pattern, ''pattern); then -- if this 'et al' pattern is found, removein name
name = name:gsub (others_patternpattern, ''); -- ifremove found,the removeoffending text
etal = true; -- set flag (may have been set previously here or by |display-authors=etal)
if etal not nocat= thentrue; -- noset categorizationflag for(may have been set previously here or by |vauthorsdisplay-<names>=etal)
add_maint_catif ('etal');not nocat then -- andno add a category if notcategorization alreadyfor added|vauthors=
table.insert( z.message_tail, {set_error ('etal', {param})}); -- and set an error if not added
end
end
elseif name:match (others_pattern) then -- if not 'et al.', then 'and others'?
name = name:gsub (others_pattern, ''); -- if found, remove
etal = true; -- set flag (may have been set previously here or by |display-authors=etal)
if not nocat then -- no categorization for |vauthors=
add_maint_cat ('etal'); -- and add a category if not already added
end
end
end
 
return name, etal; --
end
Line ୧,୨୬୩ ⟶ ୧,୨୫୭:
local function name_has_ed_markup (name, list_name)
local _, pattern;
local patterns = { cfg.editor_markup_patterns; -- theseget patterns match annotations at end offrom nameconfiguration
'%f[%(%[][%(%[]%s*[Ee][Dd][Ss]?%.?%s*[%)%]]?$', -- (ed) or (eds): leading '(', case insensitive 'ed', optional 's', '.' and/or ')'
'[,%.%s]%f[e]eds?%.?$', -- ed or eds: without '('or ')'; case sensitive (ED could be initials Ed could be name)
'%f[%(%[][%(%[]%s*[Ee][Dd][Ii][Tt][Oo][Rr][Ss]?%.?%s*[%)%]]?$', -- (editor) or (editors): leading '(', case insensitive, optional '.' and/or ')'
'[,%.%s]%f[Ee][Ee][Dd][Ii][Tt][Oo][Rr][Ss]?%.?$', -- editor or editors: without '('or ')'; case insensitive
-- these patterns match annotations at beginning of name
'^eds?[%.,;]', -- ed. or eds.: lower case only, optional 's', requires '.'
'^[%(%[]%s*[Ee][Dd][Ss]?%.?%s*[%)%]]', -- (ed) or (eds): also sqare brackets, case insensitive, optional 's', '.'
'^[%(%[]?%s*[Ee][Dd][Ii][Tt][Oo][Rr][Ss]?%A', -- (editor or (editors: also sq brackets, case insensitive, optional brackets, 's'
'^[%(%[]?%s*[Ee][Dd][Ii][Tt][Ee][Dd]%A', -- (edited: also sq brackets, case insensitive, optional brackets
}
 
if is_set (name) then
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; -- selected parameter aliases used in error messaging
local err_msg_list_name = list_name:match ("(%w+)List") .. 's list'; -- modify AuthorList or EditorList for use in error messages if necessary
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 = select_one( args, cfg.aliases[list_name .. '-Link'], 'redundant_parameters', i );
mask = select_one( args, cfg.aliases[list_name .. '-Mask'], 'redundant_parameters', i );
 
last, etal = name_has_etal (last, etal, false, last_alias); -- find and remove variations on et al.
first, etal = name_has_etal (first, etal, false, first_alias); -- find and remove variations on et al.
last, first= name_checks (last, first, list_name); -- multiple names, extraneous annotation, etc checks
if first and not last then -- if there is a firstn without a matching lastn
table.insert( z.message_tail, { set_error( 'first_missing_last', {err_msg_list_namefirst_alias, ifirst_alias:gsub('first', 'last')}, true ) } ); -- add this error message
elseif not first and not last then -- if both firstn and lastn aren't found, are we done?
count = count + 1; -- number of times we haven't found last and first
Line ୧,୩୮୬ ⟶ ୧,୩୬୯:
n = n + 1; -- point to next location in the names table
if 1 == count then -- if the previous name was missing
table.insert( z.message_tail, { set_error( 'missing_name', {err_msg_list_namelist_name:match ("(%w+)List"):lower(), i-1}, true ) } ); -- add this error message
end
count = 0; -- reset the counter, we're looking for two consecutive missing names
Line ୧,୬୨୪ ⟶ ୧,୬୦୭:
 
local function is_pdf (url)
return url:match ('%.pdf$') or url:match ('%.PDF$') or
url:match ('%.pdf[%?#]') or url:match ('%.PDF[%?#]'); or
url:match ('%.PDF&#035') or url:match ('%.pdf&#035');
end
 
Line ୧,୬୫୨ ⟶ ୧,୬୩୭:
 
 
--[[--------------------------< G E T _ D I S P L A Y _ N A U T H O R S _M E D I T O R S >--------------------------------------------
 
Returns a number that defines the number of names displayed for author and editor name lists and a boolean flag
Line ୧,୬୭୫ ⟶ ୧,୬୬୦:
]]
 
local function get_display_authors_editorsget_display_names (max, count, list_name, etal)
if is_set (max) then
if 'etal' == max:lower():gsub("[ '%.]", '') then -- the :gsub() portion makes 'etal' from a variety of 'et al.' spellings and stylings
Line ୧,୬୮୩ ⟶ ୧,୬୬୮:
max = tonumber (max); -- make it a number
if max >= count then -- if |display-xxxxors= value greater than or equal to number of authors/editors
add_maint_cat ('disp_auth_eddisp_name', cfg.special_case_translation [list_name]);
end
else -- not a valid keyword or number
Line ୧,୭୮୪ ⟶ ୧,୭୬୯:
 
vparam, etal = name_has_etal (vparam, etal, true); -- find and remove variations on et al. do not categorize (do it here because et al. might have a period)
v_name_table = get_v_name_table (vparam, v_name_table, v_link_table); -- names are separated by commas
 
for i, v_name in ipairs(v_name_table) do
Line ୨,୨୧୬ ⟶ ୨,୨୦୧:
end
 
local translator_etal;
local t = {}; -- translators list from |translator-lastn= / translator-firstn= pairs
local Translators; -- assembled translators name list
t = extract_names (args, 'TranslatorList'); -- fetch translator list from |translatorn= / |translator-lastn=, -firstn=, -linkn=, -maskn=
 
local interviewer_etal;
local interviewers_list = {};
local Interviewers; -- used later
interviewers_list = extract_names (args, 'InterviewerList'); -- process preferred interviewers parameters
 
local contributor_etal;
local c = {}; -- contributors list from |contributor-lastn= / contributor-firstn= pairs
local Contributors; -- assembled contributors name list
Line ୨,୨୫୦ ⟶ ୨,୨୩୮:
NameListFormat = ''; -- anything else, set to empty string
end
 
if is_set (Others) then
if 0 == #a and 0 == #e then -- add maint cat when |others= has value and used without |author=, |editor=
add_maint_cat ('others');
end
end
 
local Year = A['Year'];
Line ୨,୪୦୮ ⟶ ୨,୪୦୨:
if not is_valid_parameter_value (DF, 'df', cfg.keywords['date-format']) then -- validate reformatting keyword
DF = ''; -- not valid, set to empty string
end
if not is_set (DF) then
DF = cfg.global_df;
end
 
Line ୨,୮୫୬ ⟶ ୨,୮୫୩:
 
do -- do editor name list first because the now unsupported coauthors used to modify control table
control.maximum , editor_etal = get_display_authors_editorsget_display_names (A['DisplayEditors'], #e, 'editors', editor_etal);
last_first_list, EditorCount = list_people(control, e, editor_etal);
 
if is_set (Editors) then
Editors, editor_etal = name_has_etal (Editors, editor_etal, false, 'editors'); -- find and remove variations on et al.
if editor_etal then
Editors = Editors .. ' ' .. cfg.messages['et al']; -- add et al. to editors parameter beause |display-editors=etal
Line ୨,୮୭୫ ⟶ ୨,୮୭୩:
end
do -- now do interviewers
control.maximum , interviewer_etal = get_display_names (A['DisplayInterviewers'], #interviewers_list; --, number'interviewers', of interviewerssinterviewer_etal);
Interviewers = list_people (control, interviewers_list, falseinterviewer_etal); -- et al not currently supported
end
do -- now do translators
control.maximum , translator_etal = get_display_names (A['DisplayTranslators'], #t; -- number of, 'translators', translator_etal);
Translators = list_people (control, t, falsetranslator_etal); -- et al not currently supported
end
do -- now do contributors
control.maximum , contributor_etal = get_display_names (A['DisplayContributors'], #c; -- number of, 'contributors', contributor_etal);
Contributors = list_people (control, c, falsecontributor_etal); -- et al not currently supported
-- control.maximum = #c; -- number of contributors
-- Contributors = list_people(control, c, false); -- et al not currently supported
end
do -- now do authors
control.maximum , author_etal = get_display_authors_editorsget_display_names (A['DisplayAuthors'], #a, 'authors', author_etal);
 
last_first_list = list_people(control, a, author_etal);
 
if is_set (Authors) then
Authors, author_etal = name_has_etal (Authors, author_etal, false, 'authors'); -- find and remove variations on et al.
if author_etal then
Authors = Authors .. ' ' .. cfg.messages['et al']; -- add et al. to authors parameter
୩,୩୫୧ କ ଧାଡ଼ି:
elseif 'episode' == config.CitationClass then -- special case for cite episode
tcommon = safe_join( {Title, TitleNote, TitleType, Series, Transcript, Language, Edition, Publisher}, sepc );
 
else -- all other CS1 templates
୩,୩୬୪ କ ଧାଡ଼ି:
end
local cs1 ={}idcommon;
local idcommon = safe_join( { ID_list, URL, Archived, AccessDate, Via, SubscriptionRequired, Lay, Quote }, sepc );
if 'audio-visual' == config.CitationClass or 'episode' == config.CitationClass then -- special case for cite AV media & cite episode position transcript
idcommon = safe_join( { ID_list, URL, Archived, Transcript, AccessDate, Via, SubscriptionRequired, Lay, Quote }, sepc );
else
local idcommon = safe_join( { ID_list, URL, Archived, AccessDate, Via, SubscriptionRequired, Lay, Quote }, sepc );
end
local text;
local pgtext = Position .. Sheet .. Sheets .. Page .. Pages .. At;
Line ୩,୩୯୦ ⟶ ୩,୩୯୬:
if (sepc ~= '.') then
in_text = in_text:lower() -- lowercase for cs2
end
else
if EditorCount <= 1 then
post_text = ", " .. cfg.messages['editor'];
else
post_text = ", " .. cfg.messages['editors'];
end
end
if EditorCount <= 1 then
post_text = " (" .. cfg.messages['editor'] .. ")"; -- be consistent with no-author, no-date case
else
post_text = ", (" .. cfg.messages['editoreditors'] .. ")";
end
Editors = terminate_name_list (in_text .. Editors .. post_text, sepc); -- terminate with 0 or 1 sepc and a space
end
Line ୩,୬୧୨ ⟶ ୩,୬୧୭:
]]
 
local function missing_pipe_check (parameter, value)
local capture;
value = value:gsub ('%b<>', ''); -- remove xml/html tags because attributes: class=, title=, etc
Line ୩,୬୧୮ ⟶ ୩,୬୨୩:
capture = value:match ('%s+(%a[%a%d]+)%s*=') or value:match ('^(%a[%a%d]+)%s*='); -- find and categorize parameters with possible missing pipes
if capture and validate (capture) then -- if the capture is a valid parameter name
add_maint_cattable.insert( z.message_tail, {set_error ('missing_pipe',parameter)});
end
end
Line ୩,୬୨୯ ⟶ ୩,୬୩୪:
]]
 
local function cs1.citation(frame)
Frame = frame; -- save a copy incase we need to display an error message in preview mode
local pframe = frame:getParent()
Line ୩,୭୪୫ ⟶ ୩,୭୫୦:
end
end
missing_pipe_check (k, v); -- do we think that there is a parameter that is missing a pipe?
-- TODO: is this the best place for this translation?
args[k] = v;
Line ୩,୭୬୧ ⟶ ୩,୭୬୬:
end
 
--[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------
return cs1;
]]
 
return {citation = citation};