"ମଡ୍ୟୁଲ:Citation/CS1" ପୃଷ୍ଠାର ସଂସ୍କରଣଗୁଡ଼ିକ ମଧ୍ୟରେ ତଫାତ
Content deleted Content added
interim fix to kern_quotes(); see discussion; |
synch from sandbox; |
||
୫ କ ଧାଡ଼ି:
]]
local dates, year_date_check, reformat_dates, date_hyphen_to_dash, -- functions in Module:Citation/CS1/Date_validation
date_name_xlate
local is_set, in_array, substitute, error_comment, set_error, select_one, -- functions in Module:Citation/CS1/Utilities
add_maint_cat, wrap_style, safe_for_italics,
local z ={}; -- tables in Module:Citation/CS1/Utilities
Line ୫୪ ⟶ ୫୫:
end
end
--[[--------------------------< A D D _ P R O P _ C A T >--------------------------------------------------------
Adds a category to z.properties_cats using names from the configuration file with additional text if any.
foreign_lang_source and foreign_lang_source_2 keys have a language code appended to them so that multiple languages
may be categorized but multiples of the same language are not categorized.
added_prop_cats is a table declared in page scope variables above
Line ୬୬ ⟶ ୭୧:
if not added_prop_cats [key] then
added_prop_cats [key] = true; -- note that we've added this category
key = key:gsub ('(foreign_lang_source_?2?)%a%a%a?', '%1'); -- strip lang code from keyname
table.insert( z.properties_cats, substitute (cfg.prop_cats [key], arguments)); -- make name then add to table
end
end
--[[--------------------------< A D D _ V A N C _ E R R O R >----------------------------------------------------
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
q, x, and z SL domains in the .com TLD
i and q SL domains in the .net TLD
Line ୧୫୩ ⟶ ୧୬୦:
elseif domain:match ('%f[%a%d][%a%d][%a%d%-]+[%a%d]%.xn%-%-[%a%d]+$') then -- internationalized domain name with ACE prefix
return true;
elseif domain:match ('%f[%a%d][%a%d]%.
return true;
elseif domain:match ('%f[%a%d][%a%d]%.org$') then -- one character/digit .org hostname
return true;
elseif domain:match ('%f[%a][qxz]%.com$') then -- assigned one character .com hostname (x.com times out 2015-12-10)
Line ୨୪୯ ⟶ ୨୫୮:
return not is_url (scheme, domain); -- return true if value DOES NOT appear to be a valid url
end
--[[--------------------------< L I N K _ T I T L E _ O K >---------------------------------------------------
Line ୩୭୬ ⟶ ୩୮୬:
['\n'] = ' ' } );
end
--[[--------------------------< E X T E R N A L _ L I N K >----------------------------------------------------
Line ୪୦୮ ⟶ ୪୧୯:
if is_set (access) then -- access level (subscription, registration, limited)
label = safe_for_url (label); -- replace square brackets and newlines
base_url = table.concat ( -- assemble external link with access signal
{
'<span class="plainlinks">[', -- opening css and url markup
URL, -- the url
' ', -- the required space
label,
'<span style="padding-left:0.15em">', -- signal spacing css
cfg.presentation[access], -- the appropriate icon
'
});
else
Line ୪୬୨ ⟶ ୪୫୭:
end
--[=[-------------------------< K E R N _ Q U O T E S >--------------------------------------------------------
Apply kerning to open the space between the quote mark provided by the Module and a leading or trailing quote
mark contained in a |title= or |chapter= parameter's value.
This function will positive kern either single or double quotes:
"'Unkerned title with leading and trailing single quote marks'"
Line ୪୭୦ ⟶ ୪୬୮:
Double single quotes (italic or bold wikimarkup) are not kerned.
Replaces unicode quotemarks
quote marks regardless of the need for kerning. Unicode quote marks are not replaced in simple [[D]] wikilinks.
Call this function for chapter titles, for website titles, etc; not for book titles.
]=]
local function kern_quotes (str)
local cap='';
local cap2='';
local wl_type, label, link;
wl_type, label, link = is_wikilink (str); -- wl_type is: 0, no wl (text in label variable); 1, [[D]]; 2, [[L|D]]
if mw.ustring.match (str, '%[%[[\"“”\'‘’].+[\"“”\'‘’]%]%]') then -- leading and trailing quote marks
str = substitute (cfg.presentation['kern-
elseif mw.ustring.match (str, '%[%[[\"“”\'‘’].+%]%]') then -- leading quote marks
str = substitute (cfg.presentation['kern-wl-left'], str);
elseif mw.ustring.match (str, '%[%[.+[\"“”\'‘’]%]%]') then -- trailing quote marks
str = substitute (cfg.presentation['kern-wl-right'], str);
end
else -- plain text or [[L|D]]; text in label variable
label= mw.ustring.gsub (label, '[“”]', '\"'); -- replace “” (U+201C & U+201D) with " (typewriter double quote mark)
label= mw.ustring.gsub (label, '[‘’]', '\''); -- replace ‘’ (U+2018 & U+2019) with ' (typewriter single quote mark)
cap, cap2 = mw.ustring.match (label, "^([\"\'])([^\'].+)"); -- match leading double or single quote but not doubled single quotes (italic markup)
if is_set (cap) then
label = substitute (cfg.presentation['kern-left'], {cap, cap2});
end
cap, cap2 = mw.ustring.match (label, "^(.+[^\'])([\"\'])$") -- match trailing double or single quote but not doubled single quotes (italic markup)
if is_set (cap) then
label = substitute (cfg.presentation['kern-right'], {cap, cap2});
end
if 2 == wl_type then
str = make_wikilink (link, label); -- reassemble the wikilink
else
str = label;
end
end
return str;
end
--[[--------------------------< F O R M A T _ S C R I P T _ V A L U E >----------------------------------------
Line ୫୪୭ ⟶ ୫୬୭:
return script_value;
end
--[[--------------------------< S C R I P T _ C O N C A T E N A T E >------------------------------------------
Line ୫୯୪ ⟶ ୬୧୫:
]]
local function format_chapter_title (scriptchapter, chapter, transchapter, chapterurl, chapter_url_source, no_quotes, access)
local chapter_error = '';
Line ୬୦୧ ⟶ ୬୨୨:
else
if false == no_quotes then
chapter = kern_quotes (chapter);
chapter = wrap_style ('quoted-title', chapter);
end
Line ୬୧୯ ⟶ ୬୪୦:
if is_set (chapterurl) then
chapter = external_link (chapterurl, chapter, chapter_url_source,
end
return chapter .. chapter_error;
end
--[[--------------------------< H A S _ I N V I S I B L E _ C H A R S >----------------------------------------
Line ୬୫୯ ⟶ ୬୮୧:
local pattern=cfg.invisible_chars[i][2] -- the pattern used to find it
position, dummy, capture = mw.ustring.find (v, pattern) -- see if the parameter value contains characters that match the pattern
if position and (char == 'zero width joiner') then -- if we found a zero width joiner character
if mw.ustring.find (v, cfg.indic_script) then -- its ok if one of the indic scripts
position = nil; -- unset position
end
end
if position then
Line ୭୩୦ ⟶ ୭୫୮:
});
end
--[[--------------------------< V A L I D A T E >--------------------------------------------------------------
Line ୭୪୨ ⟶ ୭୭୧:
]]
local function validate( name, cite_class )
local name = tostring( name );
local state;
if in_array (cite_class, {'arxiv', 'biorxiv', 'citeseerx'}) then
state = whitelist.limited_basic_arguments[ name ];
if true == state then return true; end -- valid actively supported parameter
Line ୮୨୬ ⟶ ୮୫୪:
return date;
end
--[[--------------------------< S E T _ T I T L E T Y P E >----------------------------------------------------
Line ୯୦୯ ⟶ ୯୩୮:
elseif end_chr == "]" then -- if it might be wikimarkup
if str:sub(-3,-1) == duplicate_char .. "]]" then -- if last three chars of str are sepc]] wikilink
trim = true;
elseif str:sub(-3,-1) == duplicate_char .. '"]' then -- if last three chars of str are sepc"] quoted external link
trim = true;
elseif str:sub(-2,-1) == duplicate_char .. "]" then -- if last two chars of str are sepc] external link
Line ୯୫୧ ⟶ ୯୮୨:
return false;
end
--[[--------------------------< I S _ G O O D _ V A N C _ N A M E >--------------------------------------------
Line ୯୯୭ ⟶ ୧,୦୨୯:
return true;
end
--[[--------------------------< R E D U C E _ T O _ I N I T I A L S >------------------------------------------
Line ୧,୦୫୫ ⟶ ୧,୦୮୮:
return table.concat(initials) -- Vancouver format does not include spaces.
end
--[[--------------------------< L I S T _ P E O P L E >-------------------------------------------------------
Line ୧,୦୭୩ ⟶ ୧,୧୦୭:
sep = ','; -- name-list separator between authors is a comma
namesep = ' '; -- last/first separator is a space
else
sep = ';' -- name-list separator between authors is a semicolon
Line ୧,୧୦୪ ⟶ ୧,୧୩୫:
local first = person.first
if is_set(first) then
if
one = one:gsub ('%.', ''); -- remove periods from surnames (http://www.ncbi.nlm.nih.gov/books/NBK7271/box/A35029/)
first = reduce_to_initials(first) -- attempt to convert first name(s) to initials
end
end
one = one .. namesep .. first;
end
if is_set(person.link) and person.link ~= control.page_name then
one =
end
end
Line ୧,୧୩୨ ⟶ ୧,୧୫୫:
if count > 0 then
if count > 1 and is_set(lastauthoramp) and not etal then
text[#text-2] = " & "; -- replace last separator with ampersand text
end
text[#text] = nil; -- erase the last separator
Line ୧,୧୪୮ ⟶ ୧,୧୬୭:
return result, count
end
--[[--------------------------< A N C H O R _ I D >------------------------------------------------------------
Line ୧,୨୨୭ ⟶ ୧,୨୪୭:
'^[%(%[]?%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
}
Line ୧,୩୪୯ ⟶ ୧,୩୬୮:
return names, etal; -- all done, return our list of names
end
--[[--------------------------< G E T _ I S O 6 3 9 _ C O D E >------------------------------------------------
Line ୧,୪୪୦ ⟶ ୧,୪୬୦:
if this_wiki_code ~= code then -- when the language is not the same as this wiki's language
if 2 == code:len() then -- and is a two-character code
add_prop_cat ('foreign_lang_source' .. code, {name, code}) -- categorize it
else -- or is a recognized language (but has a three-character code)
add_prop_cat ('foreign_lang_source_2' .. code, {code}) -- categorize it differently TODO: support mutliple three-character code categories per cs1|2 template
end
end
Line ୧,୪୬୮ ⟶ ୧,୪୮୮:
]]
end
--[[--------------------------< S E T _ C S 1 _ S T Y L E >----------------------------------------------------
Line ୧,୪୮୧ ⟶ ୧,୫୦୨:
return '.', ps; -- separator is a full stop
end
--[[--------------------------< S E T _ C S 2 _ S T Y L E >----------------------------------------------------
Line ୧,୪୯୭ ⟶ ୧,୫୧୯:
return ',', ps, ref; -- separator is a comma
end
--[[--------------------------< G E T _ S E T T I N G S _ F R O M _ C I T E _ C L A S S >----------------------
Line ୧,୫୧୫ ⟶ ୧,୫୩୮:
return sep, ps, ref -- return them all
end
--[[--------------------------< S E T _ S T Y L E >------------------------------------------------------------
Line ୧,୫୨୮ ⟶ ୧,୫୫୨:
sep, ps, ref = set_cs2_style (ps, ref);
elseif 'cs1' == mode then -- if this template is to be rendered in CS1 (cite xxx) style
sep, ps = set_cs1_style (ps);
else -- anything but cs1 or cs2
Line ୧,୫୪୦ ⟶ ୧,୫୬୨:
return sep, ps, ref
end
--[=[-------------------------< I S _ P D F >------------------------------------------------------------------
Line ୧,୫୪୬ ⟶ ୧,୫୬୯:
applying the pdf icon to external links.
returns true if file extension is one of the recognized
]=]
local function is_pdf (url)
return url:match ('%.pdf$') or url:match ('%.PDF$') or url:match ('%.pdf[%?#]
end
--[[--------------------------< S T Y L E _ F O R M A T >------------------------------------------------------
Line ୧,୫୬୫ ⟶ ୧,୫୮୯:
local function style_format (format, url, fmt_param, url_param)
if is_set (format) then
format = wrap_style ('format', format); -- add leading space,
if not is_set (url) then
format = format .. set_error( 'format_missing_url', {fmt_param, url_param} ); -- add an error message
Line ୧,୫୭୬ ⟶ ୧,୬୦୦:
return format;
end
--[[--------------------------< G E T _ D I S P L A Y _ A U T H O R S _ E D I T O R S >------------------------
Line ୧,୬୧୮ ⟶ ୧,୬୪୩:
return max, etal;
end
--[[--------------------------< E X T R A _ T E X T _ I N _ P A G E _ C H E C K >------------------------------
Line ୧,୬୩୧ ⟶ ୧,୬୫୭:
local function extra_text_in_page_check (page)
local good_pattern = '^P[^%.Pp]'; -- ok to begin with uppercase P: P7 (pg 7 of section P) but not p123 (page 123) TODO: add Gg for PG or Pg?
local bad_pattern = '^[Pp]?[Pp]%.?[ %d]';
Line ୧,୬୩୯ ⟶ ୧,୬୬୩:
add_maint_cat ('extra_text');
end
end
--[=[-------------------------< G E T _ V _ N A M E _ T A B L E >----------------------------------------------
split apart a |vauthors= or |veditors= parameter. This function allows for corporate names, wrapped in doubled
parentheses to also have commas; in the old version of the code, the doubled parnetheses were included in the
rendered citation and in the metadata. Individual author names may be wikilinked
|vauthors=Jones AB, [[E. B. White|White EB]], ((Black, Brown, and Co.))
]=]
local function get_v_name_table (vparam, output_table, output_link_table)
local name_table = mw.text.split(vparam, "%s*,%s*"); -- names are separated by commas
local wl_type, label, link; -- wl_type not used here; just a place holder
local i = 1;
Line ୧,୬୭୩ ⟶ ୧,୬୯୪:
end
table.insert (output_table, name); -- and add corporate name to the output table
table.insert (output_link_table, ''); -- no wikilink
else
table.insert (output_table, label); -- add this name
if 1 == wl_type then
table.insert (output_link_table, label); -- simple wikilink [[D]]
else
table.insert (output_link_table, link); -- no wikilink or [[L|D]]; add this link if there is one, else empty string
end
end
i = i+1;
Line ୧,୬୮୦ ⟶ ୧,୭୦୮:
return output_table;
end
--[[--------------------------< P A R S E _ V A U T H O R S _ V E D I T O R S >--------------------------------
Line ୧,୬୯୯ ⟶ ୧,୭୨୮:
local names = {}; -- table of names assembled from |vauthors=, |author-maskn=, |author-linkn=
local v_name_table = {};
local v_link_table = {}; -- when name is wikilinked, targets go in this table
local etal = false; -- return value set to true when we find some form of et al. vauthors parameter
local last, first, link, mask, suffix;
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
end
link = select_one( args, cfg.aliases[list_name .. '-Link'], 'redundant_parameters', i ) or v_link_table[i];
mask = select_one( args, cfg.aliases[list_name .. '-Mask'], 'redundant_parameters', i );
names[i] = {last = last, first = first, link = link, mask = mask, corporate=corporate}; -- add this assembled name to our names list
Line ୧,୮୧୧ ⟶ ୧,୮୩୮:
This function is used to validate a parameter's assigned value for those parameters that have only a limited number
of allowable values (yes, y, true, no, etc). When the parameter value has not been assigned a value (missing or empty
in the source template) the function
true; else, emits an error message and returns false.
]]
local function is_valid_parameter_value (value, name, possible
if not is_set (value) then
return true; -- an empty parameter is ok
Line ୧,୮୬୨ ⟶ ୧,୮୮୨:
]]
local function format_volume_issue (volume, issue, cite_class, origin, sepc, lower
if not is_set (volume) and not is_set (issue) then
return '';
end
if 'magazine' == cite_class or (in_array (cite_class, {'citation', 'map'}) and 'magazine' == origin) then
if is_set (volume) and is_set (issue) then
Line ୧,୯୦୨ ⟶ ୧,୯୧୧:
return vol;
end
Line ୧,୯୩୩ ⟶ ୧,୯୨୩:
]]
local function format_pages_sheets (page, pages, sheet, sheets, cite_class, origin, sepc, nopp, lower
if 'map' == cite_class then -- only cite map supports sheet(s) as in-source locators
if is_set (sheet) then
Line ୧,୯୫୨ ⟶ ୧,୯୪୨:
local is_journal = 'journal' == cite_class or (in_array (cite_class, {'citation', 'map'}) and 'journal' == origin);
if is_set (page) then
if is_journal then
Line ୨,୦୯୬ ⟶ ୨,୦୮୨:
-- define different field names for the same underlying things.
-- set default parameter values defined by |mode= parameter.
local Mode = A['Mode'];
if not is_valid_parameter_value (Mode, 'mode', cfg.keywords['mode']
Mode = '';
end
Line ୨,୧୪୮ ⟶ ୨,୧୩୪:
local Translators; -- assembled translators name list
t = extract_names (args, 'TranslatorList'); -- fetch translator list from |translatorn= / |translator-lastn=, -firstn=, -linkn=, -maskn=
local interviewers_list = {};
Line ୨,୨୩୬ ⟶ ୨,୨୨୧:
local Pages;
local At;
if in_array (config.CitationClass, cfg.templates_using_volume) then
Volume = A['Volume'];
Line ୨,୨୬୧ ⟶ ୨,୨୪୫:
RegistrationRequired=nil;
end
local SubscriptionRequired = A['SubscriptionRequired'];
if not is_valid_parameter_value (SubscriptionRequired, 'subscription', cfg.keywords ['yes_true_y']) then
SubscriptionRequired=nil;
end
local UrlAccess = A['UrlAccess'];
if not is_valid_parameter_value (UrlAccess, 'url-access', cfg.keywords ['url-access']) then
Line ୨,୨୮୩ ⟶ ୨,୨୬୯:
end
local ChapterUrlAccess = A['ChapterUrlAccess'];
if not is_valid_parameter_value (ChapterUrlAccess, 'chapter-url-access', cfg.keywords ['url-access']) then -- same as url-access
ChapterUrlAccess = nil;
end
if not is_set(ChapterURL) and is_set(ChapterUrlAccess) then
ChapterUrlAccess = nil;
table.insert( z.message_tail, { set_error( 'param_access_requires_param', {'chapter-url'}, true ) } );
end
local Via = A['Via'];
Line ୨,୩୧୮ ⟶ ୨,୩୧୨:
LastAuthorAmp = nil; -- set to empty string
end
local no_tracking_cats = A['NoTracking'];
if not is_valid_parameter_value (no_tracking_cats, 'no-tracking', cfg.keywords ['yes_true_y']) then
Line ୨,୩୨୬ ⟶ ୨,୩୧୮:
end
--local variables that are not cs1 parameters
local use_lowercase; -- controls capitalization of certain static text
local this_page = mw.title.getCurrentTitle(); -- also used for COinS and for language
Line ୨,୩୪୩ ⟶ ୨,୩୩୫:
use_lowercase = ( sepc == ',' ); -- used to control capitalization for certain static text
--check this page to see if it is in one of the namespaces that cs1 is not supposed to add to the error categories
if not is_set (no_tracking_cats) then -- ignore if we are already not going to categorize this page
if in_array (this_page.nsText, cfg.uncategorized_namespaces) then
Line ୨,୩୫୬ ⟶ ୨,୩୪୮:
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
Line ୨,୩୭୯ ⟶ ୨,୩୭୧:
end
-- both |publication-place= and |place= (|location=) allowed if different
if not is_set(PublicationPlace) and is_set(Place) then
PublicationPlace = Place; -- promote |place= (|location=) to |publication-place
Line ୨,୩୮୬ ⟶ ୨,୩୭୮:
if PublicationPlace == Place then Place = ''; end -- don't need both if they are the same
--[[
Parameter remapping for cite encyclopedia:
When the citation has these parameters:
All other combinations of |encyclopedia, |title, and |article are not modified
]]
local Encyclopedia = A['Encyclopedia'];
Line ୨,୪୧୦ ⟶ ୨,୪୦୨:
TransChapter = TransTitle;
ChapterURL = URL;
ChapterUrlAccess = UrlAccess;
if not is_set (ChapterURL) and is_set (TitleLink) then
Chapter =
end
Title = Periodical;
Line ୨,୪୨୯ ⟶ ୨,୪୨୩:
end
-- Special case for cite techreport.
if (config.CitationClass == "techreport") then -- special case for cite techreport
if is_set(A['Number']) then -- cite techreport uses 'number', which other citations alias to 'issue'
Line ୨,୪୪୦ ⟶ ୨,୪୩୪:
end
-- special case for cite mailing list
if (config.CitationClass == "mailinglist") then
Periodical = A ['MailingList'];
Line ୨,୪୪୭ ⟶ ୨,୪୪୧:
end
-- Account for the oddity that is {{cite conference}}, before generation of COinS data.
if 'conference' == config.CitationClass then
if is_set(BookTitle) then
Line ୨,୪୫୩ ⟶ ୨,୪୪୭:
-- ChapterLink = TitleLink; -- |chapterlink= is deprecated
ChapterURL = URL;
ChapterUrlAccess = UrlAccess;
ChapterURLorigin = URLorigin;
URLorigin = '';
Line ୨,୪୬୭ ⟶ ୨,୪୬୨:
end
-- cite map oddities
local Cartography = "";
local Scale = "";
Line ୨,୪୭୫ ⟶ ୨,୪୭୦:
Chapter = A['Map'];
ChapterURL = A['MapURL'];
ChapterUrlAccess = UrlAccess;
TransChapter = A['TransMap'];
ChapterURLorigin = A:ORIGIN('MapURL');
Line ୨,୪୮୯ ⟶ ୨,୪୮୫:
end
-- 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'];
Line ୨,୫୨୭ ⟶ ୨,୫୨୩:
TransChapter = TransTitle;
ChapterURL = URL;
ChapterUrlAccess = UrlAccess;
ChapterURLorigin = A:ORIGIN('URL');
Line ୨,୫୩୪ ⟶ ୨,୫୩୧:
if is_set (ChapterLink) and not is_set (ChapterURL) then -- link but not URL
Chapter =
elseif is_set (ChapterLink) and is_set (ChapterURL) then -- if both are set, URL links episode;
Series =
end
URL = ''; -- unset
Line ୨,୫୪୬ ⟶ ୨,୫୪୩:
Chapter = A['Episode']; -- TODO: make |episode= available to cite episode someday?
if is_set (Series) and is_set (SeriesLink) then
Series =
end
Series = wrap_style ('italic-title', Series); -- series is italicized
end
end
-- end of {{cite episode}} stuff
-- Account for the oddities that are {{cite arxiv}}, {{cite biorxiv}}, {{cite citeseerx}}, before generation of COinS data.
do
if in_array (config.CitationClass, {'arxiv', 'biorxiv', 'citeseerx'}) then
Line ୨,୫୬୩ ⟶ ୨,୫୬୦:
Periodical = 'arXiv'; -- set to arXiv for COinS; after that, must be set to empty string
end
if 'biorxiv' == config.CitationClass then
Periodical = 'bioRxiv'; -- set to bioRxiv for COinS; after that, must be set to empty string
end
if 'citeseerx' == config.CitationClass then
Periodical = 'CiteSeerX'; -- set to CiteSeerX for COinS; after that, must be set to empty string
Line ୨,୫୭୨ ⟶ ୨,୫୭୧:
end
-- handle type parameter for those CS1 citations that have default values
if in_array(config.CitationClass, {"AV-media-notes", "interview", "mailinglist", "map", "podcast", "pressrelease", "report", "techreport", "thesis"}) then
TitleType = set_titletype (config.CitationClass, TitleType);
Line ୨,୫୮୫ ⟶ ୨,୫୮୪:
end
-- legacy: promote PublicationDate to Date if neither Date nor Year are set.
if not is_set (Date) then
Date = Year; -- promote Year to Date
Line ୨,୫୯୭ ⟶ ୨,୫୯୬:
if PublicationDate == Date then PublicationDate = ''; end -- if PublicationDate is same as Date, don't display in rendered citation
--[[
Go test all of the date-holding parameters for valid MOS:DATE format and make sure that dates are real dates. This must be done before we do COinS because here is where
we get the date used in the metadata.
Date validation supporting code is in Module:Citation/CS1/Date_validation
]]
do -- create defined block to contain local variables error_message, date_parameters_list, mismatch
local error_message = '';
Line ୨,୬୨୫ ⟶ ୨,୬୨୪:
if not is_set(error_message) then -- error free dates only
local modified = false; -- flag
if is_set (DF) then -- if we need to reformat dates
modified = reformat_dates (date_parameters_list, DF, false); -- reformat to DF format, use long month names if appropriate
end
if true == date_hyphen_to_dash (date_parameters_list) then
modified = true;
add_maint_cat ('date_format'); -- hyphens were converted so add maint category
end
-- for those wikis that can and want to have English date names translated to the local language,
-- uncomment these three lines. Not supported by en.wiki (for obvious reasons)
-- if date_name_xlate (date_parameters_list) then
-- modified = true;
-- end
if modified then -- if the date_parameters_list values were modified
AccessDate = date_parameters_list['access-date']; -- overwrite date holding parameters with modified values
Line ୨,୬୪୭ ⟶ ୨,୬୫୩:
end -- end of do
-- Account for the oddity that is {{cite journal}} with |pmc= set and |url= not set. Do this after date check but before COInS.
-- Here we unset Embargo if PMC not embargoed (|embargo= not set in the citation) or if the embargo time has expired. Otherwise, holds embargo date
Embargo = is_embargoed (Embargo);
if config.CitationClass == "journal" and not is_set(URL) and is_set(ID_list['PMC']) then
Line ୨,୬୬୩ ⟶ ୨,୬୬୯:
end
-- At this point fields may be nil if they weren't specified in the template use. We can use that fact.
-- Test if citation has no title
if not is_set(Title) and
Line ୨,୭୨୮ ⟶ ୨,୭୩୪:
}, config.CitationClass);
-- Account for the oddities that are {{cite arxiv}}, {{cite biorxiv}}, and {{cite citeseerx}} AFTER generation of COinS data.
if in_array (config.CitationClass, {'arxiv', 'biorxiv', 'citeseerx'}) then -- we have set rft.jtitle in COinS to arXiv, bioRxiv, or CiteSeerX 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 then
if is_set (PublisherName) then
Line ୨,୮୦୯ ⟶ ୨,୮୧୪:
end
-- apply |[xx-]format= styling; at the end, these parameters hold correctly styled format annotation,
-- an error message if the associated url is not set, or an empty string for concatenation
ArchiveFormat = style_format (ArchiveFormat, ArchiveURL, 'archive-format', 'archive-url');
ConferenceFormat = style_format (ConferenceFormat, ConferenceURL, 'conference-format', 'conference-url');
Line ୨,୮୧୭ ⟶ ୨,୮୨୨:
TranscriptFormat = style_format (TranscriptFormat, TranscriptURL, 'transcript-format', 'transcripturl');
-- special case for chapter format so no error message or cat when chapter not supported
if not (in_array(config.CitationClass, {'web', 'news', 'journal', 'magazine', 'pressrelease', 'podcast', 'newsgroup', 'arxiv', 'biorxiv', 'citeseerx'}) or
('citation' == config.CitationClass and is_set (Periodical) and not is_set (Encyclopedia))) then
Line ୨,୮୯୨ ⟶ ୨,୮୯୭:
end
Chapter = format_chapter_title (ScriptChapter, Chapter, TransChapter, ChapterURL, ChapterURLorigin, no_quotes, ChapterUrlAccess); -- Contribution is also in Chapter
if is_set (Chapter) then
Chapter = Chapter .. ChapterFormat ;
Line ୨,୯୦୫ ⟶ ୨,୯୧୦:
-- Format main title.
Title = mw.ustring.gsub(Title, '%'..sepc..'$', ''); -- remove any trailing separator character
if is_set(TitleLink) and is_set(Title) then
Title =
end
Line ୨,୯୩୮ ⟶ ୨,୯୪୪:
Title = external_link( URL, Title, URLorigin, UrlAccess ) .. TransTitle .. TransError .. Format;
URL = ''; -- unset these because no longer needed
Format = "";
Line ୨,୯୫୫ ⟶ ୨,୯୪୯:
Title = Title .. TransTitle .. TransError;
end
else
Title = TransTitle .. TransError;
end
Line ୨,୯୯୬ ⟶ ୨,୯୯୨:
end
Page, Pages, Sheet, Sheets = format_pages_sheets (Page, Pages, Sheet, Sheets, config.CitationClass, Periodical_origin, sepc, NoPP, use_lowercase
At = is_set(At) and (sepc .. " " .. At) or "";
Line ୩,୦୨୯ ⟶ ୩,୦୨୫:
if is_set (Translators) then
Others = sepc .. ' ' .. wrap_msg ('translated', Translators, use_lowercase) .. Others;
end
if is_set (Interviewers) then
Line ୩,୦୪୪ ⟶ ୩,୦୩୬:
add_maint_cat ('extra_text', 'edition');
end
Edition = " " .. wrap_msg ('edition', Edition);
else
Edition = '';
Line ୩,୦୫୪ ⟶ ୩,୦୪୨:
Series = is_set(Series) and (sepc .. " " .. Series) or "";
OrigYear = is_set(OrigYear) and (" [" .. OrigYear .. "]") or ""; -- TODO: presentation
Agency = is_set(Agency) and (sepc .. " " .. Agency) or "";
Volume = format_volume_issue (Volume, Issue, config.CitationClass, Periodical_origin, sepc, use_lowercase
------------------------------------ totally unrelated data
Line ୩,୦୬୮ ⟶ ୩,୦୫୩:
end
--[[
Subscription implies paywall; Registration does not. If both are used in a citation, the subscription required link
note is displayed. There are no error messages for this condition.
]]
if is_set (SubscriptionRequired) then
SubscriptionRequired = sepc .. " " .. cfg.messages['subscription']; -- subscription required message
Line ୩,୦୮୫ ⟶ ୩,୦୭୦:
AccessDate = nowrap_date (AccessDate); -- wrap in nowrap span if date in appropriate format
if (sepc ~= ".") then retrv_text = retrv_text:lower() end -- if mode is cs2, lower case
AccessDate = substitute (cfg.presentation['accessdate'], {sepc, AccessDate}); -- allow editors to hide accessdates
end
Line ୩,୨୦୬ ⟶ ୩,୧୮୮:
end
--[[
Handle the oddity that is cite speech. This code overrides whatever may be the value assigned to TitleNote (through |department=) and forces it to be " (Speech)" so that
the annotation directly follows the |title= parameter value in the citation rather than the |event= parameter value (if provided).
]]
if "speech" == config.CitationClass then -- cite speech only
TitleNote = " (Speech)"; -- annotate the citation
Line ୩,୨୨୮ ⟶ ୩,୨୧୦:
if in_array(config.CitationClass, {"journal","citation"}) and is_set(Periodical) then
if is_set(Others) then Others = Others .. sepc .. " " end
tcommon = safe_join( {Others, Title, TitleNote, Conference, Periodical, Format, TitleType, Series, Language, Edition, Publisher, Agency, Volume}, sepc );
elseif in_array(config.CitationClass, {"book","citation"}) and not is_set(Periodical) then -- special cases for book cites
if is_set (Contributors) then -- when we are citing foreword, preface, introduction, etc
tcommon = safe_join( {Title, TitleNote}, sepc ); -- author and other stuff will come after this and before tcommon2
tcommon2 = safe_join( {Conference, Periodical, Format, TitleType, Series, Language, Volume, Others, Edition, Publisher, Agency}, sepc );
else
tcommon = safe_join( {Title, TitleNote, Conference, Periodical, Format, TitleType, Series, Language, Volume, Others, Edition, Publisher, Agency}, sepc );
Line ୩,୨୫୯ ⟶ ୩,୨୩୦:
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
Line ୩,୨୮୩ ⟶ ୩,୨୪୭:
if is_set(Date) then
if is_set (Authors) or is_set (Editors) then -- date follows authors or editors when authors not set
Date = " (" .. Date ..")" .. OrigYear .. sepc .. " "; -- in paranetheses
else -- neither of authors and editors set
Line ୩,୩୦୦ ⟶ ୩,୨୫୮:
end
if is_set(Authors) then
if (not is_set (Date)
Authors = terminate_name_list (Authors, sepc); -- when no date, terminate with 0 or 1 sepc and a space
end
Line ୩,୩୦୬ ⟶ ୩,୨୬୪:
local in_text = " ";
local post_text = "";
if is_set(Chapter) and 0 == #c
in_text = in_text .. cfg.messages['in'] .. " "
if (sepc ~= '.') then
in_text = in_text:lower() end
else
if EditorCount <= 1 then
Line ୩,୩୨୮ ⟶ ୩,୨୮୨:
if (sepc ~= '.') then by_text = by_text:lower() end -- lowercase for cs2
Authors = by_text .. Authors; -- author follows title so tweak it here
if is_set (Editors) and is_set (Date
Authors = terminate_name_list (Authors, sepc); -- terminate with 0 or 1 sepc and a space
end
if (not is_set (Date)
Contributors = terminate_name_list (Contributors, sepc); -- terminate with 0 or 1 sepc and a space
end
text = safe_join( {Contributors, Date, Chapter, tcommon, Authors, Place, Editors, tcommon2, pgtext, idcommon }, sepc );
else
text = safe_join( {Authors, Date, Chapter, Place, Editors, tcommon, pgtext, idcommon }, sepc );
Line ୩,୩୫୯ ⟶ ୩,୩୦୬:
end
end
text = safe_join( {Editors, Date, Chapter, Place, tcommon, pgtext, idcommon}, sepc );
else
if in_array(config.CitationClass, {"journal","citation"}) and is_set(Periodical) then
Line ୩,୪୨୭ ⟶ ୩,୩୬୦:
end
local render = {}; -- here we collect the final bits for concatenation into the rendered citation
if is_set(options.id) then -- here we wrap the rendered citation in <cite ...>...</cite> tags
else
end
if #z.message_tail ~= 0 then
table.insert (render, ' ');
for i,v in ipairs( z.message_tail ) do
if is_set(v[1]) then
if i == #z.message_tail then
else
end
end
Line ୩,୪୪୯ ⟶ ୩,୩୮୪:
if #z.maintenance_cats ~= 0 then
for _, v in ipairs( z.maintenance_cats ) do -- append maintenance categories
table.insert (render, v);
table.insert (render, ' (');
table.insert (render, make_wikilink (':Category:' .. v, 'link'));
table.insert (render, ') ');
end
table.insert (render, '</span>');
end
Line ୩,୪୫୯ ⟶ ୩,୩୯୭:
if in_array(no_tracking_cats, {"", "no", "false", "n"}) then
for _, v in ipairs( z.error_categories ) do
end
for _, v in ipairs( z.maintenance_cats ) do -- append maintenance categories
end
for _, v in ipairs( z.properties_cats ) do -- append
end
end
return
end
Line ୩,୫୦୩ ⟶ ୩,୪୪୧:
utilities.set_selected_modules (cfg); -- so that functions in Utilities can see the cfg tables
identifiers.set_selected_modules (cfg, utilities); -- so that functions in Identifiers can see the selected cfg tables and selected Utilities module
validation.set_selected_modules (cfg, utilities);
metadata.set_selected_modules (cfg, utilities); -- so that functions in COinS can see the selected cfg tables and selected Utilities module
Line ୩,୫୧୦ ⟶ ୩,୪୪୮:
reformat_dates = validation.reformat_dates;
date_hyphen_to_dash = validation.date_hyphen_to_dash;
date_name_xlate = validation.date_name_xlate;
is_set = utilities.is_set; -- imported functions from Module:Citation/CS1/Utilities
in_array = utilities.in_array;
Line ୩,୫୨୦ ⟶ ୩,୪୫୯:
wrap_style = utilities.wrap_style;
safe_for_italics = utilities.safe_for_italics;
make_wikilink = utilities.make_wikilink;
z = utilities.z; -- table of error and category tables in Module:Citation/CS1/Utilities
|