Changes
hide deprecated parameters error messages and hide missing periodical error messages;
--[[--------------------------< U N C A T E G O R I Z E D _ N A M E S P A C E S >------------------------------
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 messages = {
['agency'] = '$1 $2', -- $1 is sepc, $2 is agency
['archived-dead'] = 'Archived from $1 on $2',
['archived-not-deadlive'] = '$1 from the original on $2',
['archived-missing'] = 'Archived from the original$1 on $2',
['archived'] = 'Archived',
['newsgroup'] = '[[Usenet newsgroup|Newsgroup]]: $1',
['original'] = 'the original',
['origyear'] = ' [$1]',
['published'] = ' (published $1)',
['retrieved'] = 'Retrieved $1',
['section'] = '§ $1',
['sections'] = '§§ $1',
['series'] = '$1 $2', -- $1 is sepc, $2 is series ['seriesnum'] = 'Series $1',
['translated'] = 'Translated by $1',
['type'] = ' ($1)', -- for titletype
['j-sheets'] = ': Sheets $1',
['subscription'] = '<span styleclass="fontcs1-size:90%; color:#555subscription">(Subscription required (<span title="The site requires a paid subscription to access this page." style="border-bottom:1px dotted;cursor:help">help</span>))</span>' ..
'[[Category:Pages containing links to subscription-only content]]',
['registration']='<span styleclass="fontcs1-size:90%; color:#555registration">(Registration required (<span title="The site requires registration to access this page." style="border-bottom:1px dotted;cursor:help">help</span>))</span>' ..
'[[Category:Pages with login required references or sources]]',
['unknown_argument_map'] = 'Argument map not defined for this variable',
['bare_url_no_origin'] = 'Bare url found but origin indicator is nil or empty',
}
--[=[-------------------------< 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
(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 = {
"[;,]? *[\"']*%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]and [Oo]thers", -- and alternate to et al.
}
--[[--------------------------< E D I T O R _ M A R K U P _ P A T T E R N S >----------------------------------
This table provides Lua patterns for the phrase "ed" and variants in name text
(author, editor, etc.). The main module uses these to identify and emit the
'extra_text_names' message. (It is not the only series of patterns for this message.)
]]
local editor_markup_patterns = { -- these patterns match annotations at end of name
'%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
}
-- .error class is specified at https://git.wikimedia.org/blob/mediawiki%2Fcore.git/9553bd02a5595da05c184f7521721fb1b79b3935/skins%2Fcommon%2Fshared.css#L538
-- .citation-comment class is specified at Help:CS1_errors#Controlling_error_message_display
['hidden-error'] = '<span styleclass="display:none;fontcs1-size:100%" class="hidden-error error citation-comment">$1</span>', ['visible-error'] = '<span styleclass="fontcs1-size:100%visible-error error citation-comment" >$1</span>', ['hidden-maint'] = '<span class="error cs1-maint citation-comment">$1</span>',
['accessdate'] = '<span class="reference-accessdate">$1$2</span>', -- to allow editors to hide accessdate using personal css
['cite-id'] = '<cite id="$1" class="$2">$3</cite>'; -- for use when |ref= is set
['format'] = ' <span styleclass="fontcs1-size:85%;format">($1)</span>', -- for |format=, |chapter-format=, etc
-- various access levels, for |access=, |doi-access=, |arxiv=, ...
-- narrow no-break space   may work better than nowrap css. Or not? browser support?
['ext-link-access-signal'] = '<span class="plainlinks">$1 " title="$2">$3</span>', -- external link with appropriate lock icon ['free'] = {class= '[[File:Lockcs1-lock-green.svg|9px|linkfree', title=|alt=Freely accessible|'Freely accessible]]'}, -- classes defined in Module:Citation/CS1/styles.css ['registration'] = {class= '[[File:Lockcs1-bluelock-alt-2.svg|9px|link=|altregistration', title='Free registration required|Free registration required]]'}, ['limited'] = {class= '[[File:Lockcs1-bluelock-alt-2.svg|9px|link=|alt=Free access subject to limited trial', subscription normally required|title='Free access subject to limited trial, subscription normally required]]'}, ['subscription'] = {class= '[[File:Lockcs1-redlock-alt.svg|9px|link=|altsubscription', title='Paid subscription required|Paid subscription required'}, ['interwiki-icon']= '<span class="$1" title="$2">$3</span>', ['class-wikisource']= 'cs1-ws-icon',
['italic-title'] = "''$1''",
['kern-left'] = '<span styleclass="paddingcs1-kern-left:0.2em;">$1</span>$2', -- spacing to use when title contains leading single or double quote mark ['kern-right'] = '$1<span styleclass="paddingcs1-kern-right:0.2em;">$2</span>', -- spacing to use when title contains trailing single or double quote mark
-- these for simple wikilinked titles [["text]], [[text"]] and [["text"]]
-- span wraps entire wikilink
['kern-wl-left'] = '<span styleclass="paddingcs1-kern-wl-left:0.2em;">$1</span>', -- when title contains leading single or double quote mark ['kern-wl-right'] = '<span styleclass="paddingcs1-right:0.2em;kern-wl-left">$1</span>', -- when title contains trailing single or double quote mark ['kern-wl-both'] = '<span styleclass="paddingcs1-kern-wl-left:0.2em;paddingcs1-kern-wl-right:0.2em;">$1</span>', -- when title contains leading and trailing single or double quote marks
['nowrap1'] = '<span class="nowrap">$1</span>', -- for nowrapping an item: <span ...>yyyy-mm-dd</span>
['nowrap2'] = '<span class="nowrap">$1</span> $2', -- for nowrapping portions of an item: <span ...>dd mmmm</span> yyyy (note white space)
['ocins'] = '<span title="$1" class="Z3988"><span style="display:none;"> </span></span>', -- Note: Using display: none on the COinS span breaks some clients ['parameter'] = '<code styleclass="'..code_style..'cs1-code">|$1=</code>',
['ps_cs1'] = '.'; -- cs1 style postscript (terminal) character
['ps_cs2'] = ''; -- cs2 style postscript (terminal) character (empty string)
['ASINTLD'] = {'ASIN-TLD', 'asin-tld'},
['At'] = 'at',
['Authors'] = {'authors', 'people', 'host', 'credits'},
['BookTitle'] = {'book-title', 'booktitle'},
['Cartography'] = 'cartography',
['Contribution'] = 'contribution', -- introduction, foreword, afterword, etc; required when |contributor= set
['Date'] = 'date',
['Degree'] = 'degree',
['DF'] = 'df',
['DisplayAuthors'] = {'display-authors', 'displayauthors'},
['DisplayContributors'] = 'display-contributors',
['DisplayEditors'] = {'display-editors', 'displayeditors'},
['DisplayInterviewers'] = 'display-interviewers',
['DisplayTranslators'] = 'display-translators',
['Docket'] = 'docket',
['DoiBroken'] = {'doi-broken', 'doi-broken-date', 'doi-inactive-date'},
['Inset'] = 'inset',
['Issue'] = {'issue', 'number'},
['LastAuthorAmp'] = {'last-author-amp', 'lastauthoramp'},
['LayDate'] = {'lay-date', 'laydate'},
['MapFormat'] = 'map-format', -- cite map only
['MapURL'] = {'mapurl', 'map-url'}, -- cite map only
['MapUrlAccess'] = 'map-url-access', -- cite map only
['MessageID'] = 'message-id',
['Minutes'] = 'minutes',
['Page'] = {'p', 'page'},
['Pages'] = {'pp', 'pages'},
['Periodical'] = {'journal', 'newspapermagazine', 'magazinenewspaper', 'workperiodical', 'website', 'periodicalwork', 'encyclopedia', 'encyclopaedia', 'dictionary', 'mailinglist'}, -- these masquerade as periodicals but aren't TODO: find a better way to handle these?
['Place'] = {'place', 'location'},
['PostScript'] = 'postscript',
['PublicationDate'] = {'publicationdate', 'publication-date'},
['PublicationPlace'] = {'publication-place', 'publicationplace'},
['PublisherName'] = {'publisher', 'distributor', 'institution', 'newsgroup'},
['Quote'] = {'quote', 'quotation'},
['Ref'] = 'ref',
['RegistrationRequired'] = 'registration',
['Scale'] = 'scale',
['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',
['Section'] = 'section',
['TitleNote'] = 'department',
['TitleType'] = {'type', 'medium'},
['TransChapter'] = {'trans-article', 'trans-chapter', ['TransMaptrans-contribution'] = , 'trans-mapentry', 'trans-- cite map onlysection'},
['Transcript'] = 'transcript',
['TranscriptFormat'] = 'transcript-format',
['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',
['URL'] = {'url', 'URL'},
['UrlAccess'] = {'url-access'},
['UrlStatus'] = {'url-status', 'dead-url', 'deadurl'}, -- TODO: remove 'dead-url', 'deadurl'
['Vauthors'] = 'vauthors',
['Veditors'] = 'veditors',
['AuthorList-First'] = {"first#", "given#", "author-first#", "author#-first"},
['AuthorList-Last'] = {"last#", "author#", "surname#", "author-last#", "author#-last", "subject#", 'host#'},
['AuthorList-Link'] = {"authorlink#", "author-link#", "author#-link", "subjectlink#", "author#link", "subject-link#", "subject#-link", "subject#link"},
['AuthorList-Mask'] = {"author-mask#", "authormask#", "author#mask", "author#-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
local special_case_translation = {
['AuthorList'] = "'authors list"', -- these for multiple names maint categories ['ContributorList'] = "'contributors list"', ['EditorList'] = "'editors list"', ['InterviewerList'] = "'interviewers list"', ['TranslatorList'] = "'translators list"',
['authors'] = "'authors"', -- used in get_display_authors_editorsget_display_names() ['contributors'] = 'contributors', ['editors'] = "'editors"', ['interviewers'] = 'interviewers', ['translators'] = 'translators', ['archived_copy'] = '^archived?%s+copy$', -- lua pattern to match pseudo title used by Internet Archive bot and others as place holder for unknown |title= value -- used with CS1 maint: Archived copy as title
}
local defaults = {
['DeadURLUrlStatus'] = 'yesdead',
}
local date_names = {
['en'] = { -- English
['long'] = {['January']=1, ['February']=2, ['March']=3, ['April']=4, ['May']=5, ['June']=6, ['July']=7, ['August']=8, ['September']=9, ['October']=10, ['November']=11, ['December']=12};, ['short'] = {['Jan']=1, ['Feb']=2, ['Mar']=3, ['Apr']=4, ['May']=5, ['Jun']=6, ['Jul']=7, ['Aug']=8, ['Sep']=9, ['Oct']=10, ['Nov']=11, ['Dec']=12};, ['season'] = {['Winter']=24, ['Spring']=21, ['Summer']=22, ['Fall']=23, ['Autumn']=23};, ['named'] = {['Christmas']=99};,
},
['local'] = { -- replace these English date names with the local language equivalents
['long'] = {['January']=1, ['February']=2, ['March']=3, ['April']=4, ['May']=5, ['June']=6, ['July']=7, ['August']=8, ['September']=9, ['October']=10, ['November']=11, ['December']=12};, ['short'] = {['Jan']=1, ['Feb']=2, ['Mar']=3, ['Apr']=4, ['May']=5, ['Jun']=6, ['Jul']=7, ['Aug']=8, ['Sep']=9, ['Oct']=10, ['Nov']=11, ['Dec']=12};, ['season'] = {['Winter']=24, ['Spring']=21, ['Summer']=22, ['Fall']=23, ['Autumn']=23};, ['named'] = {['Christmas']=99};,
},
['inv_local_l'] = {}, -- used in date reformatting; copy of date_names['local'].long where k/v are inverted: [1]='<local name>' etc ['inv_local_s'] = {}, -- used in date reformatting; copy of date_names['local'].short where k/v are inverted: [1]='<local name>' etc ['local_digits'] = {['0'] = '0', ['1'] = '1', ['2'] = '2', ['3'] = '3', ['4'] = '4', ['5'] = '5', ['6'] = '6', ['7'] = '7', ['8'] = '8', ['9'] = '9'}; , -- used to convert local language digits to Western 0-9 ['xlate_digits'] = {}, } 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 ymdend 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 ymdend 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.xlate_digits [ed] = ld; -- en digit becomes index with local digit as the valueend local df_template_patterns = { -- table of redirects to {{Use dmy dates}} and {{Use mdy dates}} '{{ *[Uu]se (dmy) dates *[|}]', -- 915k -- sorted by approximate transclusion count '{{ *[Uu]se *(mdy) *dates *[|}]', -- 161k '{{ *[Uu]se (DMY) dates *[|}]', -- 2929 '{{ *[Uu]se *(dmy) *[|}]', -- 250 + 34 '{{ *([Dd]my) *[|}]', -- 272 '{{ *[Uu]se (MDY) dates *[|}]', -- 173 '{{ *[Uu]se *(mdy) *[|}]', -- 59 + 12 '{{ *([Mm]dy) *[|}]', -- 9 '{{ *[Uu]se (MDY) *[|}]', -- 3 '{{ *([Dd]MY) *[|}]', -- 2 '{{ *([Mm]DY) *[|}]', -- 0-- '{{ *[Uu]se(mdy) *[|}]',-- '{{ *[Uu]se(mdy)dates *[|}]',-- '{{ *[Uu]se(dmy) *[|}]',
}
local function get_date_format () 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 ld_, ed pattern in pairs ipairs (date_names.local_digitsdf_template_patterns) do -- make a digit translation table loop through the patterns looking for simple {{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 translation from en to local language using local_digits tableformat date_namesif match then 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 return match:lower() .xlate_digits . '-' .. content:match ('| *cs1%-dates *= *([lsy][edsy] = ld?)'); else return match:lower() .. '-all'; -- en digit becomes index with local digit as the no |cs1-dates= k/v pair; return valueappropriate for use in |df= end end
end
end
local global_df = get_date_format ();
local keywords = {
['yes_true_y'] = {'yes', 'true', 'y'}, -- ignore-isbn-error, last-author-amp, no-tracking, nopp, registration, subscription
['deadurl'] = {'yes', 'true', 'y', 'no', 'unfit', 'usurped', 'bot: unknown'},
['mode'] = {'cs1', 'cs2', 'mla'},
['name-list-format'] = {'vanc'},
['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', '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-status'] = {'dead', 'live', 'unfit', 'usurped', 'bot: unknown'}, -- replacement for |dead-url= ['id-access'] = {'free'}, -- access level of an identifier (free to read), subscription required (or no full text) ; not free-to-read by default
}
table data in an arbitrary order. Here, we want to process the table from top to bottom because the entries at
the top of the table are also found in the ranges specified by the entries at the bottom of the table.
Also here is a pattern that recognizes stripmarkers that begin and end with the delete characters. The nowiki
}
-- [[Indic script makes use of zero width joiner as a character modifier so zwj characters must be left in. This-- pattern covers all of the unicode characters for these languages:-- Devanagari 0900–097F – https://unicode.org/charts/PDF/U0900.pdf-- Devanagari extended A8E0–A8FF – https://unicode.org/charts/PDF/UA8E0.pdf-- Bengali 0980–09FF – https://unicode.org/charts/PDF/U0980.pdf-- Gurmukhi 0A00–0A7F – https://unicode.org/charts/PDF/U0A00.pdf-- Gujarati 0A80–0AFF – https://unicode.org/charts/PDF/U0A80.pdf-- Oriya 0B00–0B7F – https://unicode.org/charts/PDF/U0B00.pdf-- Tamil 0B80–0BFF – https://unicode.org/charts/PDF/U0B80.pdf-- Telugu 0C00–0C7F – https://unicode.org/charts/PDF/U0C00.pdf-- Kannada 0C80–0CFF – https://unicode.org/charts/PDF/U0C80.pdf-- Malayalam 0D00–0D7F – https://unicode.org/charts/PDF/U0D00.pdf-- plus the not-necessarily Indic scripts for Sinhala and Burmese:-- Sinhala 0D80-0DFF - https://unicode.org/charts/PDF/U0D80.pdf-- Myanmar 1000-109F - https://unicode.org/charts/PDF/U1000.pdf-- Myanmar extended A AA60-AA7F - https://unicode.org/charts/PDF/UAA60.pdf-- Myanmar extended B A9E0-A9FF - https://unicode.org/charts/PDF/UA9E0.pdf-- the pattern is used by has_invisible_chars() and coins_cleanup()-- TODO: find a better place for this?]]
local indic_script = '[\224\164\128-\224\181\191\224\163\160-\224\183\191\225\128\128-\225\130\159\234\167\160-\234\167\191\234\169\160-\234\169\191]';
local script_lang_codes = {
'am', 'ar', 'be', 'bg', 'bn', 'bs', 'dv', 'el', 'fa', 'gu', -- ISO 639-1 codes only for |script-title= and |script-chapter= 'guhe', 'hehi', 'hy', 'ja', 'ka', 'kk', 'km', 'kn', 'ko', 'ku', 'mk', 'ml', 'mn', 'mr', 'my', 'ne', 'ps', 'ru', 'sd', 'si', 'sr', 'ta', 'tg', 'th', 'ug', 'uk', 'ugur', 'uruz', 'yi', 'zh'
};
]]
}
}
--[[--------------------------< M A I N T E N A N C E _ C A T E G O R I E S >----------------------------------
local maint_cats = {
['ASIN'] = 'CS1 maint: ASIN uses ISBN',
['archived_copy'] = 'CS1 maint: archived copy as title', ['authors'] = 'CS1 maint: Uses uses authors parameter',
['bot:_unknown'] = 'CS1 maint: BOT: original-url status unknown',
['date_format'] = 'CS1 maint: Date date format', ['date_year'] = 'CS1 maint: Date date and year', ['disp_auth_eddisp_name'] = 'CS1 maint: display-$1', -- $1 is authors or , contributors, editors, interviewers, translators; gets value from special_case_translation table ['editors'] = 'CS1 maint: Uses uses editors parameter',
['embargo'] = 'CS1 maint: PMC embargo expired',
['englishextra_punct'] = 'CS1 maint: English language specified', ['etal'] = 'CS1 maint: Explicit use of et al.extra punctuation', ['extra_text'] = 'CS1 maint: Extra extra text', ['extra_text_names'] = 'CS1 maint: Extra extra text: $1', -- $1 is <name>s list; gets value from special_case_translation table ['ignore_isbn_err'] = 'CS1 maint: Ignored ignored ISBN errors', ['interviewers'] = 'CS1 maint: Uses interviewers parameter', ['missing_pipe'] = 'CS1 maint: Missing pipe', ['mult_names'] = 'CS1 maint: Multiple multiple names: $1', -- $1 is <name>s list; gets value from special_case_translation table ['others'] = 'CS1 maint: others',
['pmc_format'] = 'CS1 maint: PMC format',
['unfit'] = 'CS1 maint: Unfit unfit url', ['unknown_lang'] = 'CS1 maint: Unrecognized unrecognized language', ['untitled'] = 'CS1 maint: Untitled untitled periodical', ['zbl'] = 'CS1 maint: ZBL',
}
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_2'] = 'CS1 foreign language sources (ISO 639-2)|$1', -- |language= category; a cat for ISO639-2 languages; $1 is the ISO 639-2 codeused as a sort key
['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
['jul_greg_uncertainty'] = 'CS1: Julian–Gregorian uncertainty', -- probably temporary cat to identify scope of template with dates 1 October 1582 – 1 January 1926
['long_vol'] = 'CS1: long volume value', -- probably temporary cat to identify scope of |volume= values longer than 4 charachters
}
local error_conditions = {
accessdate_missing_url = {
message = '<code styleclass="'..code_style..'cs1-code">|access-date=</code> requires <code styleclass="'..code_style..'cs1-code">|url=</code>',
anchor = 'accessdate_missing_url',
category = 'Pages using citations with accessdate and no URL',
hidden = true false }, apostrophe_markup = { message = 'Italic or bold markup not allowed in: <code class="cs1-code">|$1=</code>', anchor = 'apostrophe_markup', category = 'CS1 errors: markup', hidden = false },
archive_missing_date = {
message = '<code styleclass="'..code_style..'cs1-code">|archive-url=</code> requires <code styleclass="'..code_style..'cs1-code">|archive-date=</code>',
anchor = 'archive_missing_date',
category = 'Pages with archiveurl citation errors',
hidden = false },
archive_missing_url = {
message = '<code styleclass="'..code_style..'cs1-code">|archive-url=</code> requires <code styleclass="'..code_style..'cs1-code">|url=</code>',
anchor = 'archive_missing_url',
category = 'Pages with archiveurl citation errors',
hidden = false },
archive_url = {
message = '<code styleclass="'..code_style..'cs1-code">|archive-url=</code> is malformed: $1',
anchor = 'archive_url',
category = 'Pages with archiveurl citation errors',
hidden = false },
arxiv_missing = {
message = '<code styleclass="'..code_style..'cs1-code">|arxiv=</code> required',
anchor = 'arxiv_missing',
category = 'CS1 errors: arXiv', -- same as bad arxiv
hidden = false },
arxiv_params_not_supported = {
message = 'Unsupported parameter(s) in cite arXiv',
anchor = 'arxiv_params_not_supported',
category = 'CS1 errors: arXiv', -- same as bad arxiv
hidden = false },
bad_arxiv = {
message = 'Check <code styleclass="'..code_style..'cs1-code">|arxiv=</code> value',
anchor = 'bad_arxiv',
category = 'CS1 errors: arXiv',
hidden = false },
bad_asin = {
message = 'Check <code styleclass="'..code_style..'cs1-code">|asin=</code> value',
anchor = 'bad_asin',
category ='CS1 errors: ASIN',
hidden = false },
bad_bibcode = {
message = 'Check <code styleclass="'..code_style..'cs1-code">|bibcode=</code> $1',
anchor = 'bad_bibcode',
category = 'CS1 errors: bibcode',
hidden = false },
bad_biorxiv = {
message = 'Check <code styleclass="'..code_style..'cs1-code">|biorxiv=</code> value',
anchor = 'bad_biorxiv',
category = 'CS1 errors: bioRxiv',
hidden = false },
bad_citeseerx = {
message = 'Check <code styleclass="'..code_style..'cs1-code">|citeseerx=</code> value',
anchor = 'bad_citeseerx',
category = 'CS1 errors: citeseerx',
hidden = false },
bad_date = {
message = 'Check date values in: <code styleclass="'..code_style..'cs1-code">$1</code>',
anchor = 'bad_date',
category = 'CS1 errors: dates',
hidden = false },
bad_doi = {
message = 'Check <code styleclass="'..code_style..'cs1-code">|doi=</code> value',
anchor = 'bad_doi',
category = 'CS1 errors: DOI',
hidden = false },
bad_hdl = {
message = 'Check <code styleclass="'..code_style..'cs1-code">|hdl=</code> value',
anchor = 'bad_hdl',
category = 'CS1 errors: HDL',
hidden = false },
bad_isbn = {
message = 'Check <code styleclass="'..code_style..'cs1-code">|isbn=</code> value: $1',
anchor = 'bad_isbn',
category = 'CS1 errors: ISBN',
hidden = false },
bad_ismn = {
message = 'Check <code styleclass="'..code_style..'cs1-code">|ismn=</code> value',
anchor = 'bad_ismn',
category = 'CS1 errors: ISMN',
hidden = false },
bad_issn = {
message = 'Check <code styleclass="'..code_style..'cs1-code">|$1issn=</code> value',
anchor = 'bad_issn',
category = 'CS1 errors: ISSN',
hidden = false },
bad_jfm = {
message = 'Check <code styleclass="'..code_style..'cs1-code">|jfm=</code> value',
anchor = 'bad_jfm',
category = 'CS1 errors: JFM',
hidden = false },
bad_lccn = {
message = 'Check <code styleclass="'..code_style..'cs1-code">|lccn=</code> value',
anchor = 'bad_lccn',
category = 'CS1 errors: LCCN',
hidden = false },
bad_usenet_id = {
message = 'Check <code styleclass="'..code_style..'cs1-code">|message-id=</code> value',
anchor = 'bad_message_id',
category = 'CS1 errors: message-id',
hidden = false },
bad_mr = {
message = 'Check <code styleclass="'..code_style..'cs1-code">|mr=</code> value',
anchor = 'bad_mr',
category = 'CS1 errors: MR',
hidden = false },
bad_ol = {
message = 'Check <code styleclass="'..code_style..'cs1-code">|ol=</code> value',
anchor = 'bad_ol',
category = 'CS1 errors: OL',
hidden = false },
bad_paramlink = { -- for |title-link=, |author/editor/translator-link=, |series-link=, |episode-link=
message = 'Check <code styleclass="'..code_style..'cs1-code">|$1=</code> value',
anchor = 'bad_paramlink',
category = 'CS1 errors: parameter link',
hidden = false },
bad_pmc = {
message = 'Check <code styleclass="'..code_style..'cs1-code">|pmc=</code> value',
anchor = 'bad_pmc',
category = 'CS1 errors: PMC',
hidden = false },
bad_pmid = {
message = 'Check <code styleclass="'..code_style..'cs1-code">|pmid=</code> value',
anchor = 'bad_pmid',
category = 'CS1 errors: PMID',
hidden = false },
bad_oclc = {
message = 'Check <code styleclass="'..code_style..'cs1-code">|oclc=</code> value',
anchor = 'bad_oclc',
category = 'CS1 errors: OCLC',
hidden = false },
bad_ssrn = {
message = 'Check <code styleclass="'..code_style..'cs1-code">|ssrn=</code> value',
anchor = 'bad_ssrn',
category = 'CS1 errors: SSRN',
hidden = false },
bad_url = {
message = 'Check $1 value',
anchor = 'bad_url',
category = 'Pages with URL errors',
hidden = false },
bad_zbl = {
message = 'Check <code styleclass="'..code_style..'cs1-code">|zbl=</code> value',
anchor = 'bad_zbl',
category = 'CS1 errors: ZBL',
hidden = false },
bare_url_missing_title = {
message = '$1 missing title',
anchor = 'bare_url_missing_title',
category = 'Pages with citations having bare URLs',
hidden = false },
biorxiv_missing = {
message = '<code styleclass="'..code_style..'cs1-code">|biorxiv=</code> required',
anchor = 'biorxiv_missing',
category = 'CS1 errors: bioRxiv', -- same as bad bioRxiv
hidden = false },
chapter_ignored = {
message = '<code styleclass="'..code_style..'cs1-code">|$1=</code> ignored',
anchor = 'chapter_ignored',
category = 'CS1 errors: chapter ignored',
hidden = false },
citation_missing_title = {
message = 'Missing or empty <code styleclass="'..code_style..'cs1-code">|$1=</code>',
anchor = 'citation_missing_title',
category = 'Pages with citations lacking titles',
hidden = false },
citeseerx_missing = {
message = '<code styleclass="'..code_style..'cs1-code">|citeseerx=</code> required',
anchor = 'citeseerx_missing',
category = 'CS1 errors: citeseerx', -- same as bad citeseerx
hidden = false },
cite_web_url = { -- this error applies to cite web and to cite podcast
message = 'Missing or empty <code styleclass="'..code_style..'cs1-code">|url=</code>',
anchor = 'cite_web_url',
category = 'Pages using web citations with no URL',
hidden = true false }, class_ignored = { message = '<code class="cs1-code">|class=</code> ignored', anchor = 'class_ignored', category = 'CS1 errors: class', hidden = false },
contributor_ignored = {
message = '<code styleclass="'..code_style..'cs1-code">|contributor=</code> ignored',
anchor = 'contributor_ignored',
category = 'CS1 errors: contributor',
hidden = false },
contributor_missing_required_param = {
message = '<code styleclass="'..code_style..'cs1-code">|contributor=</code> requires <code styleclass="'..code_style..'cs1-code">|$1=</code>',
anchor = 'contributor_missing_required_param',
category = 'CS1 errors: contributor',
hidden = false },
deprecated_params = {
message = 'Cite uses deprecated parameter <code styleclass="'..code_style..'cs1-code">|$1=</code>',
anchor = 'deprecated_params',
category = 'CS1 errors: deprecated parameters',
hidden = true }, doibroken_missing_doi = { message = '<code class="cs1-code">|$1=</code> requires <code class="cs1-code">|doi=</code>', anchor = 'doibroken_missing_doi', category = 'CS1 errors: DOI', hidden = false },
empty_citation = {
message = 'Empty citation',
anchor = 'empty_citation',
category = 'Pages with empty citations',
hidden = false }, etal = { message = 'Explicit use of et al. in: <code class="cs1-code">|$1=</code>', anchor = 'explicit_et_al', category = 'CS1 errors: explicit use of et al.', hidden = false },
first_missing_last = {
message = '<code styleclass="'..code_style..'cs1-code">|first$21=</code> missing <code styleclass="'..code_style..'cs1-code">|last$2=</code> in ', -- $1'is first alias,$2 is matching last alias
anchor = 'first_missing_last',
category = 'CS1 errors: missing name', -- author or , contributor, editor',interviewer, translator hidden = false },
format_missing_url = {
message = '<code styleclass="'..code_style..'cs1-code">|$1=</code> requires <code styleclass="'..code_style..'cs1-code">|$2=</code>',
anchor = 'format_missing_url',
category = 'Pages using citations with format and no URL',
hidden = true false },
invalid_param_val = {
message = 'Invalid <code styleclass="'..code_style..'cs1-code">|$1=$2</code>',
anchor = 'invalid_param_val',
category = 'CS1 errors: invalid parameter value',
hidden = false },
invisible_char = {
message = '$1 in $2 at position $3',
anchor = 'invisible_char',
category = 'CS1 errors: invisible characters',
hidden = false },
missing_name = {
message = 'Missing <code styleclass="'..code_style..'cs1-code">|last$1$2=</code> in ', -- $1',is modified NameList; $2 is enumerator
anchor = 'missing_name',
category = 'CS1 errors: missing name', -- author or , contributor, editor, interviewer, translator hidden = false }, missing_periodical = { message = 'Cite $1 requires <code class="cs1-code">|$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 = true }, missing_pipe = { message = 'Missing pipe in: <code class="cs1-code">|$1=</code>', anchor = 'missing_pipe', category = 'CS1 errors: missing pipe', hidden = false },
param_access_requires_param = {
message = '<code styleclass="'..code_style..'cs1-code">|$1-access=</code> requires <code styleclass="'..code_style..'cs1-code">|$1=</code>',
anchor = 'param_access_requires_param',
category = 'CS1 errors: param-access',
hidden = false },
param_has_ext_link = {
message = 'External link in <code styleclass="'..code_style..'cs1-code">$1</code>',
anchor = 'param_has_ext_link',
category = 'CS1 errors: external links',
hidden = false },
parameter_ignored = {
message = 'Unknown parameter <code styleclass="'..code_style..'cs1-code">|$1=</code> ignored',
anchor = 'parameter_ignored',
category = 'Pages with citations using unsupported parameters',
hidden = false },
parameter_ignored_suggest = {
message = 'Unknown parameter <code styleclass="'..code_style..'cs1-code">|$1=</code> ignored (<code styleclass="'..code_style..'cs1-code">|$2=</code> suggested)',
anchor = 'parameter_ignored_suggest',
category = 'Pages with citations using unsupported parameters',
hidden = false },
redundant_parameters = {
message = 'More than one of $1 specified',
anchor = 'redundant_parameters',
category = 'Pages with citations having redundant parameters',
hidden = false }, script_parameter = { message = 'Invalid <code class="cs1-code">|$1=</code>: $2', anchor = 'script_parameter', category = 'CS1 errors: script parameters', hidden = false },
text_ignored = {
message = 'Text "$1" ignored',
anchor = 'text_ignored',
category = 'Pages with citations using unnamed parameters',
hidden = false },
trans_missing_title = {
message = '<code styleclass="'..code_style..'cs1-code">|trans-$1=</code> requires <code styleclass="'..code_style..'cs1-code">|$1=</code>',
anchor = 'trans_missing_title',
category = 'CS1 errors: translated title',
hidden = false },
vancouver = {
message = 'Vancouver style error: $1',
anchor = 'vancouver',
category = 'CS1 errors: Vancouver style',
hidden = false },
wikilink_in_url = {
message = 'URL–wikilink conflict', -- uses ndash
anchor = 'wikilink_in_url',
category = 'CS1 errors: URL–wikilink conflict', -- uses ndash
hidden = false },
}
separator = ':',
access = 'free', -- free to read
['ASIN'] = {
parameters = { 'asin', 'ASIN' },
separator = ' ',
encode = false;
['BIBCODE'] = {
parameters = {'bibcode'},
label = 'Bibcode',
mode = 'manual',
prefix = 'httphttps://ui.adsabs.harvard.edu/abs/',
encode = false,
COinS = 'info:bibcode',
separator = ':',
custom_access = 'bibcode-access',
['BIORXIV'] = {
parameters = {'biorxiv'},
encode = true,
separator = ' ',
['CITESEERX'] = {
parameters = {'citeseerx'},
encode = true,
separator = ' ',
['DOI'] = {
parameters = { 'doi', 'DOI' },
encode = true,
custom_access = 'doi-access',
['EISSN'] = {
parameters = {'eissn', 'EISSN'},
encode = false,
separator = ' ',
['HDL'] = {
parameters = { 'hdl', 'HDL' },
encode = true,
custom_access = 'hdl-access',
['ISBN'] = {
parameters = {'isbn', 'ISBN', 'isbn13', 'ISBN13'},
COinS = 'rft.isbn',
separator = ' ',
['ISMN'] = {
parameters = {'ismn', 'ISMN'},
COinS = 'nil', -- nil because we can't use pre or rft or info:
separator = ' ',
['ISSN'] = {
parameters = {'issn', 'ISSN'},
encode = false,
separator = ' ',
['JFM'] = {
parameters = {'jfm', 'JFM'},
encode = true,
separator = ' ',
['JSTOR'] = {
parameters = {'jstor', 'JSTOR'},
separator = ' ',
custom_access = 'jstor-access',
['LCCN'] = {
parameters = {'LCCN', 'lccn'},
encode = false,
separator = ' ',
['MR'] = {
parameters = {'MR', 'mr'},
encode = true,
separator = ' ',
['OCLC'] = {
parameters = {'OCLC', 'oclc'},
encode = true,
separator = ' ',
['OL'] = {
parameters = { 'ol', 'OL' },
encode = true,
custom_access = 'ol-access',
['OSTI'] = {
parameters = {'OSTI', 'osti'},
label = 'OSTI',
mode = 'external',
prefix = '//www.osti.gov/energycitationsbiblio/product.biblio.jsp?osti_id=', -- protocol relative tested 20132018-09-0412
COinS = 'pre', -- use prefix value
encode = true,
separator = ' ',
custom_access = 'osti-access',
['PMC'] = {
parameters = {'PMC', 'pmc'},
separator = ' ',
access = 'free', -- free to read
['PMID'] = {
parameters = {'PMID', 'pmid'},
encode = false,
separator = ' ',
['RFC'] = {
parameters = {'RFC', 'rfc'},
separator = ' ',
access = 'free', -- free to read
['SSRN'] = {
parameters = {'SSRN', 'ssrn'},
separator = ' ',
access = 'free', -- always free to read
['USENETID'] = {
parameters = {'message-id'},
COinS = 'pre', -- use prefix value
separator = ' ',
['ZBL'] = {
parameters = {'ZBL', 'zbl'},
encode = true,
separator = ' ',
}
--[[--------------------------< E X P O R T E D T A B L E S >------------------------------------------------
]]
return {
date_names = date_names,
error_conditions = error_conditions,
editor_markup_patterns = editor_markup_patterns,
et_al_patterns = et_al_patterns,
global_df = global_df,
id_handlers = id_handlers,
keywords = keywords,
presentation = presentation,
prop_cats = prop_cats,
punct_skip = punct_skip,
script_lang_codes = script_lang_codes,
lang_code_remap = lang_code_remap,