Module:Citation/CS1/Configuration: Difference between revisions

sync from sandbox;
(Guard against getContent() returning nil (e.g. previewing a new citation against a new article in VE))
(sync from sandbox;)
Line 9: Line 9:
local uncategorized_namespaces = { 'User', 'Talk', 'User_talk', 'Wikipedia_talk', 'File_talk', 'Template_talk', 'Help_talk', 'Category_talk', 'Portal_talk', 'Book_talk', 'Draft_talk', 'Education_Program_talk', 'Module_talk', 'MediaWiki_talk' };
local uncategorized_namespaces = { 'User', 'Talk', 'User_talk', 'Wikipedia_talk', 'File_talk', 'Template_talk', 'Help_talk', 'Category_talk', 'Portal_talk', 'Book_talk', 'Draft_talk', 'Education_Program_talk', 'Module_talk', 'MediaWiki_talk' };


local uncategorized_subpages = {'/[Ss]andbox', '/[Tt]estcases'}; -- list of Lua patterns found in page names of pages we should not categorize
local uncategorized_subpages = {'/[Ss]andbox', '/[Tt]estcases'}; -- list of Lua patterns found in page names of pages we should not categorize




Line 23: Line 23:


local messages = {
local messages = {
['agency'] = '$1 $2', -- $1 is sepc, $2 is agency
['archived-dead'] = 'Archived from $1 on $2',
['archived-dead'] = 'Archived from $1 on $2',
['archived-not-dead'] = '$1 from the original on $2',
['archived-live'] = '$1 from the original on $2',
['archived-missing'] = 'Archived from the original$1 on $2',
['archived-missing'] = 'Archived from the original$1 on $2',
['archived'] = 'Archived',
['archived'] = 'Archived',
Line 41: Line 42:
['newsgroup'] = '[[Usenet newsgroup|Newsgroup]]: $1',
['newsgroup'] = '[[Usenet newsgroup|Newsgroup]]: $1',
['original'] = 'the original',
['original'] = 'the original',
['origyear'] = ' [$1]',
['published'] = ' (published $1)',
['published'] = ' (published $1)',
['retrieved'] = 'Retrieved $1',
['retrieved'] = 'Retrieved $1',
Line 46: Line 48:
['section'] = '§ $1',
['section'] = '§ $1',
['sections'] = '§§ $1',
['sections'] = '§§ $1',
['series'] = 'Series $1',
['series'] = '$1 $2', -- $1 is sepc, $2 is series
['seriesnum'] = 'Series $1',
['translated'] = 'Translated by $1',
['translated'] = 'Translated by $1',
['type'] = ' ($1)', -- for titletype
['type'] = ' ($1)', -- for titletype
Line 97: Line 100:




--[[--------------------------< E T _ A L _ P A T T E R N S >--------------------------------------------------
--[=[-------------------------< E T _ A L _ P A T T E R N S >--------------------------------------------------


This table provides Lua patterns for the phrase "et al" and variants in name text
This table provides Lua patterns for the phrase "et al" and variants in name text
(author, editor, etc.). The main module uses these to identify and emit the 'etal' message.
(author, editor, etc.). The main module uses these to identify and emit the 'etal' message.


]]
TODO: detect wikilinked et al.:  [[et al]].
 
]=]


local et_al_patterns = {
local et_al_patterns = {
"[;,]? *[\"']*%f[%a][Ee][Tt]%.? *[Aa][Ll][%.\"']*$", -- variations on the 'et al' theme
"[;,]? *[\"']*%f[%a][Ee][Tt]%.? *[Aa][Ll][%.\"']*$", -- variations on the 'et al' theme
"[;,]? *[\"']*%f[%a][Ee][Tt]%.? *[Aa][Ll][Ii][Aa][%.\"']*$", -- variations on the 'et alia' theme
"[;,]? *[\"']*%f[%a][Ee][Tt]%.? *[Aa][Ll][Ii][Aa][%.\"']*$", -- variations on the 'et alia' theme
"[;,]? *%f[%a]and [Oo]thers", -- and alternate to et al.
"[;,]? *%f[%a]and [Oo]thers", -- and alternate to et al.
}
}
Line 235: Line 240:
['Contribution'] = 'contribution', -- introduction, foreword, afterword, etc; required when |contributor= set
['Contribution'] = 'contribution', -- introduction, foreword, afterword, etc; required when |contributor= set
['Date'] = 'date',
['Date'] = 'date',
['DeadURL'] = {'dead-url', 'deadurl'},
['Degree'] = 'degree',
['Degree'] = 'degree',
['DF'] = 'df',
['DF'] = 'df',
Line 265: Line 269:
['MapFormat'] = 'map-format', -- cite map only
['MapFormat'] = 'map-format', -- cite map only
['MapURL'] = {'mapurl', 'map-url'}, -- cite map only
['MapURL'] = {'mapurl', 'map-url'}, -- cite map only
['MapUrlAccess'] = 'map-url-access', -- cite map only
['MessageID'] = 'message-id',
['MessageID'] = 'message-id',
['Minutes'] = 'minutes',
['Minutes'] = 'minutes',
Line 278: Line 283:
['Page'] = {'p', 'page'},
['Page'] = {'p', 'page'},
['Pages'] = {'pp', 'pages'},
['Pages'] = {'pp', 'pages'},
['Periodical'] = {'journal', 'newspaper', 'magazine', 'work',
['Periodical'] = {'journal', 'magazine', 'newspaper', 'periodical', 'website', 'work',
'website', 'periodical', 'encyclopedia', 'encyclopaedia', 'dictionary', 'mailinglist'},
'encyclopedia', 'encyclopaedia', 'dictionary', 'mailinglist'}, -- these masquerade as periodicals but aren't TODO: find a better way to handle these?
['Place'] = {'place', 'location'},
['Place'] = {'place', 'location'},
['PostScript'] = 'postscript',
['PostScript'] = 'postscript',
['PublicationDate'] = {'publicationdate', 'publication-date'},
['PublicationDate'] = {'publicationdate', 'publication-date'},
['PublicationPlace'] = {'publication-place', 'publicationplace'},
['PublicationPlace'] = {'publication-place', 'publicationplace'},
['PublisherName'] = {'publisher', 'distributor', 'institution', 'newsgroup'},
['PublisherName'] = {'publisher', 'institution', 'newsgroup'},
['Quote'] = {'quote', 'quotation'},
['Quote'] = {'quote', 'quotation'},
['Ref'] = 'ref',
['Ref'] = 'ref',
['RegistrationRequired'] = 'registration',
['RegistrationRequired'] = 'registration',
['Scale'] = 'scale',
['Scale'] = 'scale',
['ScriptChapter'] = 'script-chapter',
['ScriptChapter'] = {'script-chapter', 'script-contribution', 'script-entry', 'script-article', 'script-section'},
['ScriptPeriodical'] = {'script-journal', 'script-magazine', 'script-newspaper', 'script-periodical', 'script-website', 'script-work'},
['ScriptTitle'] = 'script-title',
['ScriptTitle'] = 'script-title',
['Section'] = 'section',
['Section'] = 'section',
Line 308: Line 314:
['TitleNote'] = 'department',
['TitleNote'] = 'department',
['TitleType'] = {'type', 'medium'},
['TitleType'] = {'type', 'medium'},
['TransChapter'] = 'trans-chapter',
['TransChapter'] = {'trans-article', 'trans-chapter', 'trans-contribution', 'trans-entry', 'trans-section'},
['TransMap'] = 'trans-map', -- cite map only
['Transcript'] = 'transcript',
['Transcript'] = 'transcript',
['TranscriptFormat'] = 'transcript-format',
['TranscriptFormat'] = 'transcript-format',
['TranscriptURL'] = {'transcript-url', 'transcripturl'},
['TranscriptURL'] = {'transcript-url', 'transcripturl'},
['TransMap'] = 'trans-map', -- cite map only
['TransPeriodical'] = {'trans-journal', 'trans-magazine', 'trans-newspaper', 'trans-periodical', 'trans-website', 'trans-work'},
['TransTitle'] = 'trans-title',
['TransTitle'] = 'trans-title',
['URL'] = {'url', 'URL'},
['URL'] = {'url', 'URL'},
['UrlAccess'] = {'url-access'},
['UrlAccess'] = {'url-access'},
['UrlStatus'] = {'url-status', 'dead-url', 'deadurl'}, -- TODO: remove 'dead-url', 'deadurl'
['Vauthors'] = 'vauthors',
['Vauthors'] = 'vauthors',
['Veditors'] = 'veditors',
['Veditors'] = 'veditors',
Line 347: Line 355:
['TranslatorList-Mask'] = {'translator-mask#', 'translator#-mask'},
['TranslatorList-Mask'] = {'translator-mask#', 'translator#-mask'},
}
}
--[[--------------------------< P U N C T _ S K I P >----------------------------------------------------------
builds a table of parameter names that the extraneous terminal punctuation check should not check.
]]
local punct_skip = {};
local meta_params = { -- table of aliases[] keys (meta parameters); each key has a table of parameter names for a value
'BookTitle', 'Chapter', 'ScriptChapter', 'ScriptTitle', 'Title', 'TransChapter', 'Transcript', 'TransMap', 'TransTitle', -- title-holding parameters
'PostScript', 'Quote', -- miscellaneous
'ArchiveURL', 'ChapterURL', 'ConferenceURL', 'LayURL', 'MapURL', 'TranscriptURL', 'URL', -- url-holding parameters
}
for _, meta_param in ipairs (meta_params) do -- for each meta parameter key
local params = aliases[meta_param]; -- get the parameter or the table of parameters associated with the meta parameter name
if 'string' == type (params) then
punct_skip[params] = 1; -- just a single parameter
else
for _, param in ipairs (params) do -- get the parameter name
punct_skip[param] = 1; -- add the parameter name to the skip table
end
end
end




Line 383: Line 417:


local defaults = {
local defaults = {
['DeadURL'] = 'yes',
['UrlStatus'] = 'dead',
}
}


Line 424: Line 458:
}
}


for name, i in pairs (date_names['local'].long) do -- this table is ['name'] = i
for name, i in pairs (date_names['local'].long) do -- this table is ['name'] = i
date_names['inv_local_l'][i] = name; -- invert to get [i] = 'name' for conversions from ymd
date_names['inv_local_l'][i] = name; -- invert to get [i] = 'name' for conversions from ymd
end
end
 
for name, i in pairs (date_names['local'].short) do -- this table is ['name'] = i
date_names['inv_local_s'][i] = name; -- invert to get [i] = 'name' for conversions from ymd
end


for name, i in pairs (date_names['local'].short) do -- this table is ['name'] = i
for ld, ed in pairs (date_names.local_digits) do -- make a digit translation table for simple date translation from en to local language using local_digits table
date_names['inv_local_s'][i] = name; -- invert to get [i] = 'name' for conversions from ymd
date_names.xlate_digits [ed] = ld; -- en digit becomes index with local digit as the value
end
end


for ld, ed in pairs (date_names.local_digits) do -- make a digit translation table for simple date translation from en to local language using local_digits table
local df_template_patterns = { -- table of redirects to {{Use dmy dates}} and {{Use mdy dates}}
date_names.xlate_digits [ed] = ld; -- en digit becomes index with local digit as the value
'{{ *[Uu]se (dmy) dates *[|}]', -- 915k -- sorted by approximate transclusion count
end
'{{ *[Uu]se *(mdy) *dates *[|}]', -- 161k
'{{ *[Uu]se (DMY) dates *[|}]', -- 2929
local df_template_patterns = { -- table of redirects to {{Use dmy dates}} and {{Use mdy dates}}
'{{ *[Uu]se *(dmy) *[|}]', -- 250 + 34
'{{ *[Uu]se (dmy) dates *[|}]', -- 915k -- sorted by approximate transclusion count
'{{ *([Dd]my) *[|}]', -- 272
'{{ *[Uu]se *(mdy) *dates *[|}]', -- 161k
'{{ *[Uu]se (MDY) dates *[|}]', -- 173
'{{ *[Uu]se (DMY) dates *[|}]', -- 2929
'{{ *[Uu]se *(mdy) *[|}]', -- 59 + 12
'{{ *[Uu]se *(dmy) *[|}]', -- 250 + 34
'{{ *([Mm]dy) *[|}]', -- 9
'{{ *([Dd]my) *[|}]', -- 272
'{{ *[Uu]se (MDY) *[|}]', -- 3
'{{ *[Uu]se (MDY) dates *[|}]', -- 173
'{{ *([Dd]MY) *[|}]', -- 2
'{{ *[Uu]se *(mdy) *[|}]', -- 59 + 12
'{{ *([Mm]DY) *[|}]', -- 0
'{{ *([Mm]dy) *[|}]', -- 9
-- '{{ *[Uu]se(mdy) *[|}]',
'{{ *[Uu]se (MDY) *[|}]', -- 3
-- '{{ *[Uu]se(mdy)dates *[|}]',
'{{ *([Dd]MY) *[|}]', -- 2
-- '{{ *[Uu]se(dmy) *[|}]',
'{{ *([Mm]DY) *[|}]', -- 0
}
-- '{{ *[Uu]se(mdy) *[|}]',
-- '{{ *[Uu]se(mdy)dates *[|}]',
-- '{{ *[Uu]se(dmy) *[|}]',
}


local function get_date_format ()
local function get_date_format ()
local content = mw.title.getCurrentTitle():getContent() or ''; -- get the content of the article
local content = mw.title.getCurrentTitle():getContent() or ''; -- get the content of the article or ''; new pages edited w/ve do not have 'content' until saved; ve does not preview; phab:T221625
for _, pattern in ipairs (df_template_patterns) do -- loop through the patterns looking for {{Use dmy dates}} or {{Use mdy dates}} or any of their redirects
for _, pattern in ipairs (df_template_patterns) do -- loop through the patterns looking for {{Use dmy dates}} or {{Use mdy dates}} or any of their redirects
local start, _, match = content:find(pattern); -- match is the three letters indicating desired date format
local start, _, match = content:find(pattern); -- match is the three letters indicating desired date format
if match then
if match then
content = content:match ('%b{}', start); -- get the whole template
content = content:match ('%b{}', start); -- get the whole template
if content:match ('| *cs1%-dates *= *[lsy][sy]?') then -- look for |cs1-dates=publication date length access-/archive-date length
if content:match ('| *cs1%-dates *= *[lsy][sy]?') then -- look for |cs1-dates=publication date length access-/archive-date length
return match:lower() .. '-' .. content:match ('| *cs1%-dates *= *([lsy][sy]?)');
return match:lower() .. '-' .. content:match ('| *cs1%-dates *= *([lsy][sy]?)');
else
else
return match:lower() .. '-all'; -- no |cs1-style= k/v pair; return value appropriate for use in |df=
return match:lower() .. '-all'; -- no |cs1-dates= k/v pair; return value appropriate for use in |df=
end
end
end
end
end
end
end
local global_df = get_date_format ();
end
 
local global_df = get_date_format ();




Line 491: Line 526:
local keywords = {
local keywords = {
['yes_true_y'] = {'yes', 'true', 'y'}, -- ignore-isbn-error, last-author-amp, no-tracking, nopp, registration, subscription
['yes_true_y'] = {'yes', 'true', 'y'}, -- ignore-isbn-error, last-author-amp, no-tracking, nopp, registration, subscription
-- ['deadurl'] = {'yes', 'true', 'y', 'no', 'unfit', 'usurped', 'unfit no archive', 'usurped no archive'}, -- hidden 2016-04-10; see Help_talk:Citation_Style_1#Recycled_urls
['deadurl'] = {'yes', 'true', 'y', 'no', 'unfit', 'usurped', 'bot: unknown'},
['deadurl'] = {'yes', 'true', 'y', 'no', 'unfit', 'usurped', 'bot: unknown'},
['mode'] = {'cs1', 'cs2', 'mla'},
['mode'] = {'cs1', 'cs2'},
['name-list-format'] = {'vanc'},
['name-list-format'] = {'vanc'},
['contribution'] = {'afterword', 'foreword', 'introduction', 'preface'}, -- generic contribution titles that are rendered unquoted in the 'chapter' position
['contribution'] = {'afterword', 'foreword', 'introduction', 'preface'}, -- generic contribution titles that are rendered unquoted in the 'chapter' position
['date-format'] = {'dmy', 'dmy-all', 'mdy', 'mdy-all', 'ymd', 'ymd-all'},
['date-format'] = {'dmy', 'dmy-all', 'mdy', 'mdy-all', 'ymd', 'ymd-all'},
-- ['date-format'] = {'dmy', 'dmy-all', 'mdy', 'mdy-all', 'ymd', 'ymd-all', 'yMd', 'yMd-all'}, -- not supported at en.wiki
-- ['date-format'] = {'dmy', 'dmy-all', 'mdy', 'mdy-all', 'ymd', 'ymd-all', 'yMd', 'yMd-all'}, -- not supported at en.wiki
['url-access'] = {'subscription', 'limited', 'registration'},   -- access level of a URL (subscription required, limited access, free registration required), free to read by default
['url-access'] = {'subscription', 'limited', 'registration'}, -- access level of a URL (subscription required, limited access, registration required); free to read by default
    ['id-access'] = {'free'},                                         -- access level of an identifier (free to read), subscription required (or no full text) by default
['url-status'] = {'dead', 'live', 'unfit', 'usurped', 'bot: unknown'}, -- replacement for |dead-url=
['id-access'] = {'free'}, -- access level of an identifier (free to read); not free-to-read  by default
}
}


Line 583: Line 618:
'he', 'hi', 'hy', 'ja', 'ka', 'kk', 'km', 'kn', 'ko', 'ku',
'he', 'hi', 'hy', 'ja', 'ka', 'kk', 'km', 'kn', 'ko', 'ku',
'mk', 'ml', 'mn', 'mr', 'my', 'ne', 'ps', 'ru', 'sd', 'si',
'mk', 'ml', 'mn', 'mr', 'my', 'ne', 'ps', 'ru', 'sd', 'si',
'sr', 'ta', 'tg', 'th', 'uk', 'ug', 'ur', 'uz', 'yi', 'zh'
'sr', 'ta', 'tg', 'th', 'ug', 'uk', 'ur', 'uz', 'yi', 'zh'
};
};


Line 593: Line 628:
]]
]]


local lang_code_remap = { -- used for |language= and |script-title= / |script-chapter=
local lang_code_remap = { -- used for |language= and |script-title= / |script-chapter=
['als'] = 'Tosk Albanian', -- MediaWiki returns Alemannisch  
['als'] = 'Tosk Albanian', -- MediaWiki returns Alemannisch  
['bh'] = 'Bihari', -- MediaWiki uses 'bh' as a subdomain name for Bhojpuri wWikipedia: bh.wikipedia.org
['bh'] = 'Bihari', -- MediaWiki uses 'bh' as a subdomain name for Bhojpuri wWikipedia: bh.wikipedia.org
['bn'] = 'Bengali', -- MediaWiki returns Bangla
['bn'] = 'Bengali', -- MediaWiki returns Bangla
['ca-valencia'] = 'Valencian', -- IETF variant of Catalan
['ca-valencia'] = 'Valencian', -- IETF variant of Catalan
['crh'] = 'Crimean Tatar', -- synonymous with Crimean Turkish (return value from {{#language:crh|en}})
['crh'] = 'Crimean Tatar', -- synonymous with Crimean Turkish (return value from {{#language:crh|en}})
}
}


local lang_name_remap = { -- used for |language=
local lang_name_remap = { -- used for |language=
['alemannisch'] = {'Swiss German', 'gsw'}, -- not an ISO or IANA language name; MediaWiki uses 'als' as a subdomain name for Alemannic Wikipedia: als.wikipedia.org
['alemannisch'] = {'Swiss German', 'gsw'}, -- not an ISO or IANA language name; MediaWiki uses 'als' as a subdomain name for Alemannic Wikipedia: als.wikipedia.org
['bangla'] = {'Bengali', 'bn'}, -- MediaWiki returns Bangla (the endonym) but we want Bengali (the exonym); here we remap
['bangla'] = {'Bengali', 'bn'}, -- MediaWiki returns Bangla (the endonym) but we want Bengali (the exonym); here we remap
['bengali'] = {'Bengali', 'bn'}, -- MediaWiki doesn't use exonym so here we provide correct language name and 639-1 code
['bengali'] = {'Bengali', 'bn'}, -- MediaWiki doesn't use exonym so here we provide correct language name and 639-1 code
['bihari'] = {'Bihari', 'bh'}, -- MediaWiki replaces 'Bihari' with 'Bhojpuri' so 'Bihari' cannot be found
['bihari'] = {'Bihari', 'bh'}, -- MediaWiki replaces 'Bihari' with 'Bhojpuri' so 'Bihari' cannot be found
['bhojpuri'] = {'Bhojpuri', 'bho'}, -- MediaWiki uses 'bh' as a subdomain name for Bhojpuri Wikipedia: bh.wikipedia.org
['bhojpuri'] = {'Bhojpuri', 'bho'}, -- MediaWiki uses 'bh' as a subdomain name for Bhojpuri Wikipedia: bh.wikipedia.org
['crimean tatar'] = {'Crimean Tatar', 'crh'}, -- MediaWiki uses 'crh' as a subdomain name for Crimean Tatar Wikipedia: crh.wikipedia.org
['crimean tatar'] = {'Crimean Tatar', 'crh'}, -- MediaWiki uses 'crh' as a subdomain name for Crimean Tatar Wikipedia: crh.wikipedia.org
['tosk albanian'] = {'Tosk Albanian', 'als'}, -- MediaWiki replaces 'Tosk Albanian' with 'Alemannisch' so 'Tosk Albanian' cannot be found
['tosk albanian'] = {'Tosk Albanian', 'als'}, -- MediaWiki replaces 'Tosk Albanian' with 'Alemannisch' so 'Tosk Albanian' cannot be found
['valencian'] = {'Valencian', 'ca'}, -- variant of Catalan; categorizes as Catalan
['valencian'] = {'Valencian', 'ca'}, -- variant of Catalan; categorizes as Catalan
}
}




Line 621: Line 656:
local maint_cats = {
local maint_cats = {
['ASIN'] = 'CS1 maint: ASIN uses ISBN',
['ASIN'] = 'CS1 maint: ASIN uses ISBN',
['archived_copy'] = 'CS1 maint: Archived copy as title',
['archived_copy'] = 'CS1 maint: archived copy as title',
['authors'] = 'CS1 maint: Uses authors parameter',
['authors'] = 'CS1 maint: uses authors parameter',
['bot:_unknown'] = 'CS1 maint: BOT: original-url status unknown',
['bot:_unknown'] = 'CS1 maint: BOT: original-url status unknown',
['date_format'] = 'CS1 maint: Date format',
['date_format'] = 'CS1 maint: date format',
['date_year'] = 'CS1 maint: Date and year',
['date_year'] = 'CS1 maint: date and year',
['disp_name'] = 'CS1 maint: display-$1', -- $1 is authors, contributors, editors, interviewers, translators; gets value from special_case_translation table
['disp_name'] = 'CS1 maint: display-$1', -- $1 is authors, contributors, editors, interviewers, translators; gets value from special_case_translation table
['editors'] = 'CS1 maint: Uses editors parameter',
['editors'] = 'CS1 maint: uses editors parameter',
['embargo'] = 'CS1 maint: PMC embargo expired',
['embargo'] = 'CS1 maint: PMC embargo expired',
['english'] = 'CS1 maint: English language specified',
['extra_punct'] = 'CS1 maint: extra punctuation',
['extra_text'] = 'CS1 maint: Extra text',
['extra_text'] = 'CS1 maint: extra text',
['extra_text_names'] = 'CS1 maint: Extra text: $1', -- $1 is <name>s list; gets value from special_case_translation table
['extra_text_names'] = 'CS1 maint: extra text: $1', -- $1 is <name>s list; gets value from special_case_translation table
['ignore_isbn_err'] = 'CS1 maint: Ignored ISBN errors',
['ignore_isbn_err'] = 'CS1 maint: ignored ISBN errors',
['mult_names'] = 'CS1 maint: Multiple names: $1', -- $1 is <name>s list; gets value from special_case_translation table
['mult_names'] = 'CS1 maint: multiple names: $1', -- $1 is <name>s list; gets value from special_case_translation table
['others'] = 'CS1 maint: others',
['others'] = 'CS1 maint: others',
['pmc_format'] = 'CS1 maint: PMC format',
['pmc_format'] = 'CS1 maint: PMC format',
['unfit'] = 'CS1 maint: Unfit url',
['unfit'] = 'CS1 maint: unfit url',
['unknown_lang'] = 'CS1 maint: Unrecognized language',
['unknown_lang'] = 'CS1 maint: unrecognized language',
['untitled'] = 'CS1 maint: Untitled periodical',
['untitled'] = 'CS1 maint: untitled periodical',
['zbl'] = 'CS1 maint: ZBL',
}
}


Line 650: Line 686:
local prop_cats = {
local prop_cats = {
['foreign_lang_source'] = 'CS1 $1-language sources ($2)', -- |language= categories; $1 is language name, $2 is ISO639-1 code
['foreign_lang_source'] = 'CS1 $1-language sources ($2)', -- |language= categories; $1 is language name, $2 is ISO639-1 code
['foreign_lang_source_2'] = 'CS1 foreign language sources (ISO 639-2)|$1', -- |language= category; a cat for ISO639-2 languages; $1 is the ISO 639-2 code
['foreign_lang_source_2'] = 'CS1 foreign language sources (ISO 639-2)|$1', -- |language= category; a cat for ISO639-2 languages; $1 is the ISO 639-2 code used as a sort key
['script'] = 'CS1 uses foreign language script', -- when language specified by |script-title=xx: doesn't have its own category
['script'] = 'CS1 uses foreign language script', -- when language specified by |script-title=xx: doesn't have its own category
['script_with_name'] = 'CS1 uses $1-language script ($2)', -- |script-title=xx: has matching category; $1 is language name, $2 is ISO639-1 code
['script_with_name'] = 'CS1 uses $1-language script ($2)', -- |script-title=xx: has matching category; $1 is language name, $2 is ISO639-1 code
Line 693: Line 729:
anchor = 'accessdate_missing_url',
anchor = 'accessdate_missing_url',
category = 'Pages using citations with accessdate and no URL',
category = 'Pages using citations with accessdate and no URL',
hidden = false
},
apostrophe_markup = {
message = 'Italic or bold markup not allowed in: <code class="cs1-code">&#124;$1=</code>',
anchor = 'apostrophe_markup',
category = 'CS1 errors: markup',
hidden = false
hidden = false
  },
  },
Line 921: Line 963:
anchor = 'deprecated_params',
anchor = 'deprecated_params',
category = 'CS1 errors: deprecated parameters',
category = 'CS1 errors: deprecated parameters',
hidden = false
},
doibroken_missing_doi = {
message = '<code class="cs1-code">&#124;$1=</code> requires <code class="cs1-code">&#124;doi=</code>',
anchor = 'doibroken_missing_doi',
category = 'CS1 errors: DOI',
hidden = false
hidden = false
},
},
Line 932: Line 980:
message = 'Explicit use of et al. in: <code class="cs1-code">&#124;$1=</code>',
message = 'Explicit use of et al. in: <code class="cs1-code">&#124;$1=</code>',
anchor = 'explicit_et_al',
anchor = 'explicit_et_al',
category = 'CS1 errors: Explicit use of et al.',
category = 'CS1 errors: explicit use of et al.',
hidden = false
hidden = false
},
},
Line 963: Line 1,011:
anchor = 'missing_name',
anchor = 'missing_name',
category = 'CS1 errors: missing name', -- author, contributor, editor, interviewer, translator
category = 'CS1 errors: missing name', -- author, contributor, editor, interviewer, translator
hidden = false
},
missing_periodical = {
message = 'Cite $1 requires <code class="cs1-code">&#124;$2=</code>', -- $1 is cs1 template name; $2 is canonical periodical parameter name for cite $1
anchor = 'missing_periodical',
category = 'CS1 errors: missing periodical',
hidden = false
hidden = false
},
},
Line 968: Line 1,022:
message = 'Missing pipe in: <code class="cs1-code">&#124;$1=</code>',
message = 'Missing pipe in: <code class="cs1-code">&#124;$1=</code>',
anchor = 'missing_pipe',
anchor = 'missing_pipe',
category = 'CS1 errors: Missing pipe',
category = 'CS1 errors: missing pipe',
hidden = false
hidden = false
},
},
Line 999: Line 1,053:
anchor = 'redundant_parameters',
anchor = 'redundant_parameters',
category = 'Pages with citations having redundant parameters',
category = 'Pages with citations having redundant parameters',
hidden = false
},
script_parameter = {
message = 'Invalid <code class="cs1-code">&#124;$1=</code>: $2',
anchor = 'script_parameter',
category = 'CS1 errors: script parameters',
hidden = false
hidden = false
},
},
Line 1,083: Line 1,143:
label = 'Bibcode',
label = 'Bibcode',
mode = 'manual',
mode = 'manual',
prefix = 'http://adsabs.harvard.edu/abs/',
prefix = 'https://ui.adsabs.harvard.edu/abs/',
encode = false,
encode = false,
COinS = 'info:bibcode',
COinS = 'info:bibcode',
Line 1,353: Line 1,413:
presentation = presentation,
presentation = presentation,
prop_cats = prop_cats,
prop_cats = prop_cats,
punct_skip = punct_skip,
script_lang_codes = script_lang_codes,
script_lang_codes = script_lang_codes,
lang_code_remap = lang_code_remap,
lang_code_remap = lang_code_remap,