Module:Citation/CS1/Configuration: Difference between revisions

sync from sandbox;
m (73 revisions imported from templatewiki:Module:Citation/CS1/Configuration)
(sync from sandbox;)
Line 1: Line 1:
local citation_config = {};


--[[--------------------------< U N C A T E G O R I Z E D _ N A M E S P A C E S >------------------------------
--[[--------------------------< U N C A T E G O R I Z E D _ N A M E S P A C E S >------------------------------
Line 11: 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
 


--[[--------------------------< M E S S A G E S >--------------------------------------------------------------
--[[--------------------------< M E S S A G E S >--------------------------------------------------------------
Line 24: 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-unfit'] = 'Archived from the original on ',
['archived'] = 'Archived',
['archived'] = 'Archived',
['by'] = 'By', -- contributions to authored works: introduction, foreword, afterword
['by'] = 'By', -- contributions to authored works: introduction, foreword, afterword
Line 42: Line 43:
['newsgroup'] = '[[Usenet newsgroup|Newsgroup]]:&nbsp;$1',
['newsgroup'] = '[[Usenet newsgroup|Newsgroup]]:&nbsp;$1',
['original'] = 'the original',
['original'] = 'the original',
['origyear'] = ' [$1]',
['published'] = ' (published $1)',
['published'] = ' (published $1)',
['retrieved'] = 'Retrieved $1',
['retrieved'] = 'Retrieved $1',
Line 47: Line 49:
['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 69: Line 72:
['j-sheet'] = ': Sheet&nbsp;$1',
['j-sheet'] = ': Sheet&nbsp;$1',
['j-sheets'] = ': Sheets&nbsp;$1',
['j-sheets'] = ': Sheets&nbsp;$1',
['subscription'] = '<span class="cs1-subscription">(Subscription required (<span title="The site requires a paid subscription to access this page.">help</span>))</span>' ..
'[[Category:Pages containing links to subscription-only content]]',
['registration']='<span class="cs1-registration">(Registration required (<span title="The site requires registration to access this page.">help</span>))</span>' ..
'[[Category:Pages with login required references or sources]]',
['language'] = '(in $1)',
['language'] = '(in $1)',
Line 95: Line 92:
['unknown_argument_map'] = 'Argument map not defined for this variable',
['unknown_argument_map'] = 'Argument map not defined for this variable',
['bare_url_no_origin'] = 'Bare url found but origin indicator is nil or empty',
['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.
]=]
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.
"%[%[ *[Ee][Tt]%.? *[Aa][Ll]%.? *%]%]", -- a wikilinked form
"[%(%[] *[Ee][Tt]%.? *[Aa][Ll]%.? *[%)%]]", -- a bracketed form
}
--[[--------------------------< 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][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
-- these patterns match annotations that are the 'name'
'^[Ee][Dd][Ii][Tt][Oo][Rr][Ss]?%.?$', -- editor or editors; case insensitive
}
}


Line 112: Line 149:
['hidden-error'] = '<span class="cs1-hidden-error error citation-comment">$1</span>',
['hidden-error'] = '<span class="cs1-hidden-error error citation-comment">$1</span>',
['visible-error'] = '<span class="cs1-visible-error error citation-comment">$1</span>',
['visible-error'] = '<span class="cs1-visible-error error citation-comment">$1</span>',
 
['hidden-maint'] = '<span class="cs1-maint citation-comment">$1</span>',
['accessdate'] = '<span class="reference-accessdate">$1$2</span>', -- to allow editors to hide accessdate using personal css
['accessdate'] = '<span class="reference-accessdate">$1$2</span>', -- to allow editors to hide accessdate using personal css


Line 130: Line 168:
['limited'] = {class='cs1-lock-limited', title='Free access subject to limited trial, subscription normally required'},
['limited'] = {class='cs1-lock-limited', title='Free access subject to limited trial, subscription normally required'},
['subscription'] = {class='cs1-lock-subscription', title='Paid subscription required'},
['subscription'] = {class='cs1-lock-subscription', title='Paid subscription required'},
['interwiki-icon'] = '<span class="$1" title="$2">$3</span>',
['class-wikisource'] = 'cs1-ws-icon',


['italic-title'] = "''$1''",
['italic-title'] = "''$1''",
Line 175: Line 216:


local aliases = {
local aliases = {
['AccessDate'] = {'access-date', 'accessdate'},
['AccessDate'] = {'access-date', 'accessdate'}, --  (Used by InternetArchiveBot)
['Agency'] = 'agency',
['Agency'] = 'agency',
['AirDate'] = {'air-date', 'airdate'},
['AirDate'] = {'air-date', 'airdate'},
['ArchiveDate'] = {'archive-date', 'archivedate'},
['ArchiveDate'] = {'archive-date', 'archivedate'}, --  (Used by InternetArchiveBot)
['ArchiveFormat'] = 'archive-format',
['ArchiveFormat'] = 'archive-format',
['ArchiveURL'] = {'archive-url', 'archiveurl'},
['ArchiveURL'] = {'archive-url', 'archiveurl'}, --  (Used by InternetArchiveBot)
['ASINTLD'] = {'ASIN-TLD', 'asin-tld'},
['ASINTLD'] = 'asin-tld',
['At'] = 'at',
['At'] = 'at', --  (Used by InternetArchiveBot)
['Authors'] = {'authors', 'people', 'host', 'credits'},
['Authors'] = {'authors', 'people', 'credits'},
['BookTitle'] = {'book-title', 'booktitle'},
['BookTitle'] = {'book-title', 'booktitle'},
['Cartography'] = 'cartography',
['Cartography'] = 'cartography',
['Chapter'] = {'chapter', 'contribution', 'entry', 'article', 'section'},
['Chapter'] = {'chapter', 'contribution', 'entry', 'article', 'section'},
['ChapterFormat'] = {'chapter-format', 'contribution-format', 'entry-format', 'article-format', 'section-format'};
['ChapterFormat'] = {'chapter-format', 'contribution-format', 'entry-format', 'article-format', 'section-format'};
['ChapterURL'] = {'chapter-url', 'chapterurl', 'contribution-url', 'contributionurl', 'entry-url', 'article-url', 'section-url', 'sectionurl'},
['ChapterURL'] = {'chapter-url', 'chapterurl', 'contribution-url', 'contributionurl', 'entry-url', 'article-url', 'section-url', 'sectionurl'}, --  (Used by InternetArchiveBot)
['ChapterUrlAccess'] = {'chapter-url-access', 'contribution-url-access', 'entry-url-access', 'article-url-access', 'section-url-access'},
['ChapterUrlAccess'] = {'chapter-url-access', 'contribution-url-access', 'entry-url-access', 'article-url-access', 'section-url-access'}, --  (Used by InternetArchiveBot)
['Class'] = 'class', -- cite arxiv and arxiv identifiers
['Class'] = 'class', -- cite arxiv and arxiv identifiers
['Collaboration'] = 'collaboration',
['Collaboration'] = 'collaboration',
['Conference'] = {'conference', 'event'},
['Conference'] = {'conference', 'event'},
['ConferenceFormat'] = {'conference-format', 'event-format'},
['ConferenceFormat'] = {'conference-format', 'event-format'},
['ConferenceURL'] = {'conference-url', 'conferenceurl', 'event-url', 'eventurl'},
['ConferenceURL'] = {'conference-url', 'conferenceurl', 'event-url', 'eventurl'}, --  (Used by InternetArchiveBot)
['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',
['DisplayAuthors'] = {'display-authors', 'displayauthors'},
['DisplayAuthors'] = {'display-authors', 'displayauthors'},
['DisplayContributors'] = 'display-contributors',
['DisplayEditors'] = {'display-editors', 'displayeditors'},
['DisplayEditors'] = {'display-editors', 'displayeditors'},
['DisplayInterviewers'] = 'display-interviewers',
['DisplayTranslators'] = 'display-translators',
['Docket'] = 'docket',
['Docket'] = 'docket',
['DoiBroken'] = {'doi-broken', 'doi-broken-date', 'doi-inactive-date'},
['DoiBroken'] = {'doi-broken', 'doi-broken-date', 'doi-inactive-date'},
Line 214: Line 257:
['Inset'] = 'inset',
['Inset'] = 'inset',
['Issue'] = {'issue', 'number'},
['Issue'] = {'issue', 'number'},
['Interviewers'] = 'interviewers',
['Language'] = {'language', 'lang'},
['Language'] = {'language', 'lang'},
['LastAuthorAmp'] = {'last-author-amp', 'lastauthoramp'},
['LastAuthorAmp'] = {'last-author-amp', 'lastauthoramp'},
Line 220: Line 262:
['LayFormat'] = 'lay-format',
['LayFormat'] = 'lay-format',
['LaySource'] = {'lay-source', 'laysource'},
['LaySource'] = {'lay-source', 'laysource'},
['LayURL'] = {'lay-url', 'lay-summary', 'layurl', 'laysummary'},
['LayURL'] = {'lay-url', 'layurl'}, --  (Used by InternetArchiveBot)
['MailingList'] = {'mailinglist', 'mailing-list'}, -- cite mailing list only
['MailingList'] = {'mailinglist', 'mailing-list'}, -- cite mailing list only
['Map'] = 'map', -- cite map only
['Map'] = 'map', -- cite map only
['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 --  (Used by InternetArchiveBot)
['MapUrlAccess'] = 'map-url-access', -- cite map only --  (Used by InternetArchiveBot)
['MessageID'] = 'message-id',
['MessageID'] = 'message-id',
['Minutes'] = 'minutes',
['Minutes'] = 'minutes',
Line 236: Line 279:
['OrigYear'] = {'orig-year', 'origyear'},
['OrigYear'] = {'orig-year', 'origyear'},
['Others'] = 'others',
['Others'] = 'others',
['Page'] = {'p', 'page'},
['Page'] = {'p', 'page'}, --  (Used by InternetArchiveBot)
['Pages'] = {'pp', 'pages'},
['Pages'] = {'pp', 'pages'}, --  (Used by InternetArchiveBot)
['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',
['Scale'] = 'scale',
['Scale'] = 'scale',
['ScriptChapter'] = 'script-chapter',
['ScriptChapter'] = {'script-chapter', 'script-contribution', 'script-entry', 'script-article', 'script-section'},
['ScriptTitle'] = 'script-title',
['ScriptMap'] = 'script-map',
['ScriptPeriodical'] = {'script-journal', 'script-magazine', 'script-newspaper', 'script-periodical', 'script-website', 'script-work'},
['ScriptTitle'] = 'script-title', --  (Used by InternetArchiveBot)
['Section'] = 'section',
['Section'] = 'section',
['Season'] = 'season',
['Season'] = 'season',
Line 261: Line 305:
['Sheets'] = 'sheets', -- cite map only
['Sheets'] = 'sheets', -- cite map only
['Station'] = 'station',
['Station'] = 'station',
['SubscriptionRequired'] = 'subscription',
['Time'] = 'time',
['Time'] = 'time',
['TimeCaption'] = {'time-caption', 'timecaption'},
['TimeCaption'] = {'time-caption', 'timecaption'},
['Title'] = 'title',
['Title'] = 'title', --  (Used by InternetArchiveBot)
['TitleLink'] = {'title-link', 'episode-link', 'titlelink', 'episodelink'},
['TitleLink'] = {'title-link', 'episode-link', 'titlelink', 'episodelink'}, --  (Used by InternetArchiveBot)
['TitleNote'] = 'department',
['TitleNote'] = 'department',
['TitleType'] = {'type', 'medium'},
['TitleType'] = {'type', 'medium'},
['TransChapter'] = 'trans-chapter',
['TransChapter'] = {'trans-article', 'trans-chapter', 'trans-contribution', 'trans-entry', 'trans-section'},
['Transcript'] = 'transcript',
['TranscriptFormat'] = 'transcript-format',
['TranscriptURL'] = {'transcript-url', 'transcripturl'}, --  (Used by InternetArchiveBot)
['TransMap'] = 'trans-map', -- cite map only
['TransMap'] = 'trans-map', -- cite map only
['Transcript'] = 'transcript',
['TransPeriodical'] = {'trans-journal', 'trans-magazine', 'trans-newspaper', 'trans-periodical', 'trans-website', 'trans-work'},
['TranscriptFormat'] = 'transcript-format',
['TransTitle'] = 'trans-title', --  (Used by InternetArchiveBot)
['TranscriptURL'] = {'transcript-url', 'transcripturl'},
['URL'] = {'url', 'URL'}, --  (Used by InternetArchiveBot)
['TransTitle'] = 'trans-title',
['UrlAccess'] = {'url-access'}, --  (Used by InternetArchiveBot)
['URL'] = {'url', 'URL'},
['UrlStatus'] = 'url-status', --  (Used by InternetArchiveBot)
['UrlAccess'] = {'url-access'},
['Vauthors'] = 'vauthors',
['Vauthors'] = 'vauthors',
['Veditors'] = 'veditors',
['Veditors'] = 'veditors',
Line 283: Line 328:


['AuthorList-First'] = {"first#", "given#", "author-first#", "author#-first"},
['AuthorList-First'] = {"first#", "given#", "author-first#", "author#-first"},
['AuthorList-Last'] = {"last#", "author#", "surname#", "author-last#", "author#-last", "subject#"},
['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-Link'] = {"authorlink#", "author-link#", "author#-link", "subjectlink#", "author#link", "subject-link#", "subject#-link", "subject#link"},
['AuthorList-Mask'] = {"author-mask#", "authormask#", "author#mask", "author#-mask"},
['AuthorList-Mask'] = {"author-mask#", "authormask#", "author#mask", "author#-mask"},
Line 307: Line 352:
['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 318: Line 389:


local special_case_translation = {
local special_case_translation = {
['AuthorList'] = "authors list", -- these for multiple names maint categories
['AuthorList'] = 'authors list', -- these for multiple names maint categories
['ContributorList'] = "contributors list",
['ContributorList'] = 'contributors list',
['EditorList'] = "editors list",
['EditorList'] = 'editors list',
['InterviewerList'] = "interviewers list",
['InterviewerList'] = 'interviewers list',
['TranslatorList'] = "translators list",
['TranslatorList'] = 'translators list',
['authors'] = "authors", -- used in get_display_authors_editors()
['authors'] = 'authors', -- used in get_display_names()
['editors'] = "editors",
['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
['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
Line 340: Line 414:


local defaults = {
local defaults = {
['DeadURL'] = 'yes',
['UrlStatus'] = 'dead', --  (Used by InternetArchiveBot)
}
}


Line 364: Line 438:
local date_names = {
local date_names = {
['en'] = { -- English
['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};
['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};
['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};
['season'] = {['Winter']=24, ['Spring']=21, ['Summer']=22, ['Fall']=23, ['Autumn']=23},
['named'] = {['Christmas']=99};
['named'] = {['Christmas']=99},
},
},
['local'] = { -- replace these English date names with the local language equivalents
['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};
['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};
['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};
['season'] = {['Winter']=24, ['Spring']=21, ['Summer']=22, ['Fall']=23, ['Autumn']=23},
['named'] = {['Christmas']=99};
['named'] = {['Christmas']=99},
},
},
['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
['inv_local_l'] = {}, -- used in date reformatting; copy of date_names['local'].long where k/v are inverted: [1]='<local name>' etc
['xlate_digits'] = {};
['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 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
for name, i in pairs (date_names['local'].long) do -- this table is ['name'] = i
date_names.xlate_digits [ed] = ld; -- en digit becomes index with local digit as the value
date_names['inv_local_l'][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
date_names['inv_local_s'][i] = name; -- invert to get [i] = 'name' for conversions from ymd
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
date_names.xlate_digits [ed] = ld; -- en digit becomes index with local digit as the value
end
 
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 _, 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
if 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() .. '-' .. content:match ('| *cs1%-dates *= *([lsy][sy]?)');
else
return match:lower() .. '-all'; -- no |cs1-dates= k/v pair; return value appropriate for use in |df=
end
end
end
end
end
local global_df = get_date_format ();




Line 393: Line 511:


local templates_using_volume = {'citation', 'audio-visual', 'book', 'conference', 'encyclopaedia', 'interview', 'journal', 'magazine', 'map', 'news', 'report', 'techreport', 'thesis'}
local templates_using_volume = {'citation', 'audio-visual', 'book', 'conference', 'encyclopaedia', 'interview', 'journal', 'magazine', 'map', 'news', 'report', 'techreport', 'thesis'}
local templates_using_issue = {'citation', 'conference', 'episode', 'interview', 'journal', 'magazine', 'map', 'news'}
local templates_using_issue = {'citation', 'conference', 'episode', 'interview', 'journal', 'magazine', 'map', 'news', 'podcast'}
local templates_not_using_page = {'audio-visual', 'episode', 'mailinglist', 'newsgroup', 'podcast', 'serial', 'sign', 'speech'}
local templates_not_using_page = {'audio-visual', 'episode', 'mailinglist', 'newsgroup', 'podcast', 'serial', 'sign', 'speech'}


Line 399: Line 517:
--[[--------------------------< K E Y W O R D S >--------------------------------------------------------------
--[[--------------------------< K E Y W O R D S >--------------------------------------------------------------


This table holds keywords for those parameters that have defined sets of acceptible keywords.
These tables hold keywords for those parameters that have defined sets of acceptible keywords.
 
]]
 
--[[--------------------------< M A K E _ K E Y W O R D S _ L I S T >------------------------------------------
 
this function assembles, for parameter-value validation, the list of keywords appropriate to that parameter.
 
keywords_lists{}, is a table of tables from keywords{}
 
]]
 
local function make_keywords_list (keywords_lists)
local out_table = {}; -- output goes here
for _, keyword_list in ipairs (keywords_lists) do -- spin through keywords_lists{} and get a table of keywords
for _, keyword in ipairs (keyword_list) do -- spin through keyword_list{} and add each keyword, ...
table.insert (out_table, keyword); -- ... as plain text, to the output list
end
end
return out_table;
end
 
 
--[[--------------------------< K E Y W O R D S  T A B L E >--------------------------------------------------
 
this is a list of keywords; each key in the list is associated with a table of synonymous keywords possibly from
different languages.
 
for i18n: add local-language keywords to value table; do not change the key.  For example, adding the German keyword 'ja':
['affirmative'] = {'yes', 'true', 'y', 'ja'},
 
Because cs1|2 templates from en.wiki articles are often copied to other local wikis, it is recommended that the English
keywords remain in these tables.


]]
]]


local keywords = {
local keywords = {
['yes_true_y'] = {'yes', 'true', 'y'}, -- ignore-isbn-error, last-author-amp, no-tracking, nopp, registration, subscription
['affirmative'] = {'yes', 'true', 'y'}, -- ignore-isbn-error, last-author-amp, no-tracking, nopp --  (Used by InternetArchiveBot)
-- ['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
['afterword'] = {'afterword'}, -- contribution
['deadurl'] = {'yes', 'true', 'y', 'no', 'unfit', 'usurped', 'bot: unknown'},
['bot: unknown'] = {'bot: unknown'}, -- url-status --  (Used by InternetArchiveBot)
['mode'] = {'cs1', 'cs2', 'mla'},
['cs1'] = {'cs1'}, -- mode
['name-list-format'] = {'vanc'},
['cs2'] = {'cs2'}, -- mode
['contribution'] = {'afterword', 'foreword', 'introduction', 'preface'}, -- generic contribution titles that are rendered unquoted in the 'chapter' position
['dead'] = {'dead'}, -- url-status --  (Used by InternetArchiveBot)
['date-format'] = {'dmy', 'dmy-all', 'mdy', 'mdy-all', 'ymd', 'ymd-all'},
['dmy'] = {'dmy'}, -- df
['url-access'] = {'subscription', 'limited', 'registration'},   -- access level of a URL (subscription required, limited access, free registration required), free to read by default
['dmy-all'] = {'dmy-all'}, -- df
    ['id-access'] = {'free'},                                         -- access level of an identifier (free to read), subscription required (or no full text) by default
['foreword'] = {'foreword'}, -- contribution
}
['free'] = {'free'}, -- url-access --  (Used by InternetArchiveBot)
['introduction'] = {'introduction'}, -- contribution
['limited'] = {'limited'}, -- url-access --  (Used by InternetArchiveBot)
['live'] = {'live'}, -- url-status -- (Used by InternetArchiveBot)
['mdy'] = {'mdy'}, -- df
['mdy-all'] = {'mdy-all'}, -- df
['preface'] = {'preface'}, -- contribution
['registration'] = {'registration'}, -- url-access --  (Used by InternetArchiveBot)
['subscription'] = {'subscription'}, -- url-access --  (Used by InternetArchiveBot)
['unfit'] = {'unfit'}, -- url-status --  (Used by InternetArchiveBot)
['usurped'] = {'usurped'}, -- url-status --  (Used by InternetArchiveBot)
['vanc'] = {'vanc'}, -- name-list-format
['ymd'] = {'ymd'}, -- df
['ymd-all'] = {'ymd-all'}, -- df
-- ['yMd'] = {'yMd'}, -- df; not supported at en.wiki
-- ['yMd-all'] = {'yMd-all'}, -- df; not supported at en.wiki
}
 
 
--[[--------------------------< X L A T E _ K E Y W O R D S >--------------------------------------------------
 
this function builds a list, keywords_xlate{}, of the keywords found in keywords{} where the values from keywords{}
become the keys in keywords_xlate{} and the keys from keywords{} become the values in keywords_xlate{}:
['affirmative'] = {'yes', 'true', 'y'}, -- in keywords{}
becomes
['yes'] = 'affirmative', -- in keywords_xlate{}
['true'] = 'affirmative',
['y'] = 'affirmative',
 
the purpose of this function is to act as a translator between a non-English keyword and its English equivalent
that may be used in other modules of this suite
 
]]
 
local function xlate_keywords ()
local out_table = {}; -- output goes here
for k, keywords_t in pairs (keywords) do -- spin through the keywords table
for _, keyword in ipairs (keywords_t) do -- for each keyword
out_table[keyword] = k; -- create an entry in the output table where keyword is the key
end
end
return out_table;
end
 
local keywords_xlate = xlate_keywords (); -- the list of translated keywords
 
 
--[[--------------------------< K E Y W O R D S _ L I S T S >--------------------------------------------------
 
this is a list of lists of valid keywords for the various parameters in [key].  Generally the keys in this table
are the canonical en.wiki parameter names though some are contrived because of use in multiple differently named
parameters: ['yes_true_y'], ['id-access'].
 
The function make_keywords_list() extracts the individual keywords from the appropriate list in keywords{}.
 
The lists in this table are used to validate the keyword assignment for the parameters named in this table's keys.
 
]]
 
local keywords_lists = {
['yes_true_y'] = make_keywords_list ({keywords.affirmative}),
['contribution'] = make_keywords_list ({keywords.afterword, keywords.foreword, keywords.introduction, keywords.preface}),
['df'] = make_keywords_list ({keywords.dmy, keywords['dmy-all'], keywords.mdy, keywords['mdy-all'], keywords.ymd, keywords['ymd-all']}),
-- ['df'] = make_keywords_list ({keywords.dmy, keywords['dmy-all'], keywords.mdy, keywords['mdy-all'], keywords.ymd, keywords['ymd-all'], keywords.yMd, keywords['yMd-all']}), -- not supported at en.wiki
['mode'] = make_keywords_list ({keywords.cs1, keywords.cs2}),
['name-list-format'] = make_keywords_list ({keywords.vanc}),
['url-access'] = make_keywords_list ({keywords.subscription, keywords.limited, keywords.registration}),
['url-status'] = make_keywords_list ({keywords.dead, keywords.live, keywords.unfit, keywords.usurped, keywords['bot: unknown']}),
['id-access'] = make_keywords_list ({keywords.free}),
}




Line 435: Line 656:
table data in an arbitrary order.  Here, we want to process the table from top to bottom because the entries at
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.
the top of the table are also found in the ranges specified by the entries at the bottom of the table.
This list contains patterns for templates like {{'}} which isn't an error but transcludes characters that are
invisible.  These kinds of patterns must be recognized by the functions that use this list.


Also here is a pattern that recognizes stripmarkers that begin and end with the delete characters.  The nowiki
Also here is a pattern that recognizes stripmarkers that begin and end with the delete characters.  The nowiki
Line 489: Line 707:




--[[--------------------------< L A N G U A G E S >------------------------------------------------------------
 
 
--[[--------------------------< L A N G U A G E   S U P P O R T >----------------------------------------------
 
These tables and constants support various language-specific functionality.
 
]]
 
local this_wiki_code = mw.getContentLanguage():getCode() -- get this wiki's language code
 
local local_lang_cat_enable = false; -- set to true to categorize pages where |language=<local wiki's language>
 
 
--[[--------------------------< S C R I P T _ L A N G _ C O D E S >--------------------------------------------


This table is used to hold ISO 639-1 two-character language codes that apply only to |script-title= and |script-chapter=
This table is used to hold ISO 639-1 two-character language codes that apply only to |script-title= and |script-chapter=
Line 496: Line 727:


local script_lang_codes = {
local script_lang_codes = {
'am', 'ar', 'be', 'bg', 'bn', 'bs', 'dv', 'el', 'fa', -- ISO 639-1 codes only for |script-title= and |script-chapter=
'am', 'ar', 'be', 'bg', 'bn', 'bo', 'bs', 'dv', 'dz', 'el', 'fa', -- ISO 639-1 codes only for |script-title= and |script-chapter=
'gu', 'he', 'hy', 'ja', 'ka', 'kn', 'ko', 'ku',
'gu', 'he', 'hi', 'hy', 'ja', 'ka', 'kk', 'km', 'kn', 'ko', 'ku',
'mk', 'ml', 'mn', 'mr', 'my', 'ps', 'ru', 'sd',
'mk', 'ml', 'mn', 'mr', 'my', 'ne', 'ota', 'ps', 'ru', 'sd', 'si',
'sr', 'tg', 'th', 'uk', 'ug', 'ur', 'yi', 'zh'
'sr', 'ta', 'tg', 'th', 'ug', 'uk', 'ur', 'uz', 'yi', 'zh'
};
};


Line 509: Line 740:
]]
]]


local lang_code_remap = { -- used for |language= and |script-title= / |script-chapter=
local lang_code_remap = { -- used for |language= and |script-title= / |script-chapter=
['bh'] = 'Bihari', -- MediaWiki uses 'bh' as a subdomain name for Bhojpuri wWikipedia: bh.wikipedia.org
['als'] = 'Tosk Albanian', -- MediaWiki returns Alemannisch
['bn'] = 'Bengali', -- MediaWiki returns Bangla
['bh'] = 'Bihari', -- MediaWiki uses 'bh' as a subdomain name for Bhojpuri wWikipedia: bh.wikipedia.org
['cnr'] = 'Montenegrin', -- 'new' 639 code that MediaWiki does not yet understand
['bla'] = 'Blackfoot', -- MediaWiki/IANA/ISO 639: Siksika; use en.wiki preferred name
}
['bn'] = 'Bengali', -- MediaWiki returns Bangla
['ca-valencia'] = 'Valencian', -- IETF variant of Catalan
['crh'] = 'Crimean Tatar', -- synonymous with Crimean Turkish (return value from {{#language:crh|en}})
['ilo'] = 'Ilocano', -- MediaWiki/IANA/ISO 639: Iloko; use en.wiki preferred name
['ksh'] = 'Kölsch', -- MediaWiki: Colognian; use IANA/ISO 639 preferred name
['ksh-x-colog'] = 'Colognian', -- override MediaWiki ksh; no IANA/ISO 639 code for Colognian; IETF private code created at Module:Lang/data
['mis-x-ripuar'] = 'Ripuarian', -- override MediaWiki ksh; no IANA/ISO 639 code for Ripuarian; IETF private code created at Module:Lang/data
['nan-tw'] = 'Taiwanese Hokkien', -- make room for MediaWiki/IANA/ISO 639 nan: Min Nan Chinese and support en.wiki preferred name
}
 
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
['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
['bhojpuri'] = {'Bhojpuri', 'bho'}, -- MediaWiki uses 'bh' as a subdomain name for Bhojpuri Wikipedia: bh.wikipedia.org
['bihari'] = {'Bihari', 'bh'}, -- MediaWiki replaces 'Bihari' with 'Bhojpuri' so 'Bihari' cannot be found
['blackfoot'] = {'Blackfoot', 'bla'}, -- MediaWiki/IANA/ISO 639: Siksika; use en.wiki preferred name
['colognian'] = {'Colognian', 'ksh-x-colog'}, -- MediaWiki preferred name for ksh
['crimean tatar'] = {'Crimean Tatar', 'crh'}, -- MediaWiki uses 'crh' as a subdomain name for Crimean Tatar Wikipedia: crh.wikipedia.org
['ilocano'] = {'Ilocano', 'ilo'}, -- MediaWiki/IANA/ISO 639: Iloko; use en.wiki preferred name
['kolsch'] = {'Kölsch', 'ksh'}, -- use IANA/ISO 639 preferred name (use o instead of ö)
['kölsch'] = {'Kölsch', 'ksh'}, -- use IANA/ISO 639 preferred name
['ripuarian'] = {'Ripuarian', 'mis-x-ripuar'}, -- group of dialects; no code in MediaWiki or in IANA/ISO 639
-- ['siksika'] = {'Siksika', 'bla'}, -- MediaWiki/IANA/ISO 639 preferred name: Siksika
['taiwanese hokkien'] = {'Taiwanese Hokkien', 'nan-TW'}, -- make room for MediaWiki/IANA/ISO 639 nan: Min Nan Chinese
['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
}


local lang_name_remap = { -- used for |language=
['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
['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 wWikipedia: bh.wikipedia.org
['montenegrin'] = {'Montenegrin', 'cnr'}, -- 'new' 639 code that MediaWiki does not yet understand
}


--[[--------------------------< M A I N T E N A N C E _ C A T E G O R I E S >----------------------------------
--[[--------------------------< M A I N T E N A N C E _ C A T E G O R I E S >----------------------------------
Line 531: Line 782:
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_auth_ed'] = 'CS1 maint: display-$1', -- $1 is authors or editors; 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',
['etal'] = 'CS1 maint: Explicit use of et al.',
['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',
['location'] = 'CS1 maint: location',
['interviewers'] = 'CS1 maint: Uses interviewers parameter',
['mult_names'] = 'CS1 maint: multiple names: $1', -- $1 is <name>s list; gets value from special_case_translation table
['missing_pipe'] = 'CS1 maint: Missing pipe',
['others'] = 'CS1 maint: others',
['mult_names'] = 'CS1 maint: Multiple names: $1', -- $1 is <name>s list; gets value from special_case_translation table
['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 561: Line 812:


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 foreign-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
['local_lang_source'] = 'CS1 $1-language sources ($2)', -- |language= categories; $1 is local-language name, $2 is ISO639-1 code; not emitted when local_lang_cat_enable is false
['location test'] = 'CS1 location test',
['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
['jul_greg_uncertainty'] = 'CS1: Julian–Gregorian uncertainty', -- probably temporary cat to identify scope of template with dates 1 October 1582 – 1 January 1926
['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
}
}


Line 604: Line 858:
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 832: Line 1,092:
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 838: Line 1,104:
anchor = 'empty_citation',
anchor = 'empty_citation',
category = 'Pages with empty citations',
category = 'Pages with empty citations',
hidden = false
},
etal = {
message = 'Explicit use of et al. in: <code class="cs1-code">&#124;$1=</code>',
anchor = 'explicit_et_al',
category = 'CS1 errors: explicit use of et al.',
hidden = false
hidden = false
},
},
first_missing_last = {
first_missing_last = {
message = '<code class="cs1-code">&#124;first$2=</code> missing <code class="cs1-code">&#124;last$2=</code> in $1',
message = '<code class="cs1-code">&#124;$1=</code> missing <code class="cs1-code">&#124;$2=</code>', -- $1 is first alias, $2 is matching last alias
anchor = 'first_missing_last',
anchor = 'first_missing_last',
category = 'CS1 errors: missing author or editor',
category = 'CS1 errors: missing name', -- author, contributor, editor, interviewer, translator
hidden = false
hidden = false
},
},
Line 865: Line 1,137:
},
},
missing_name = {
missing_name = {
message = 'Missing <code class="cs1-code">&#124;last$2=</code> in $1',
message = 'Missing <code class="cs1-code">&#124;$1$2=</code>', -- $1 is modified NameList; $2 is enumerator
anchor = 'missing_name',
anchor = 'missing_name',
category = 'CS1 errors: missing author or editor',
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 = true
},
missing_pipe = {
message = 'Missing pipe in: <code class="cs1-code">&#124;$1=</code>',
anchor = 'missing_pipe',
category = 'CS1 errors: missing pipe',
hidden = false
hidden = false
},
},
Line 898: Line 1,182:
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
},
ssrn_missing = {
message = '<code class="cs1-code">&#124;ssrn=</code> required',
anchor = 'ssrn_missing',
category = 'CS1 errors: ssrn', -- same as bad arxiv
hidden = false
hidden = false
},
},
Line 982: Line 1,278:
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,012: Line 1,308:
separator = '&nbsp;',
separator = '&nbsp;',
},
},
['DOI'] = {
['DOI'] = { --  (Used by InternetArchiveBot)
parameters = { 'doi', 'DOI' },
parameters = { 'doi', 'DOI' },
link = 'Digital object identifier',
link = 'Digital object identifier',
Line 1,047: Line 1,343:
custom_access = 'hdl-access',
custom_access = 'hdl-access',
},
},
['ISBN'] = {
['ISBN'] = { --  (Used by InternetArchiveBot)
parameters = {'isbn', 'ISBN', 'isbn13', 'ISBN13'},
parameters = {'isbn', 'ISBN', 'isbn13', 'ISBN13'},
link = 'International Standard Book Number',
link = 'International Standard Book Number',
Line 1,177: Line 1,473:
label = 'PMID',
label = 'PMID',
mode = 'manual',
mode = 'manual',
prefix = '//www.ncbi.nlm.nih.gov/pubmed/',
-- prefix = '//www.ncbi.nlm.nih.gov/pubmed/',
prefix = '//pubmed.ncbi.nlm.nih.gov/', -- new for 2020
COinS = 'info:pmid',
COinS = 'info:pmid',
encode = false,
encode = false,
Line 1,231: Line 1,528:




--[[--------------------------< E X P O R T S >----------------------------------------------------------------
--[[--------------------------< E X P O R T E D  T A B L E S >------------------------------------------------
]]
]]


Line 1,240: Line 1,537:
date_names = date_names,
date_names = date_names,
error_conditions = error_conditions,
error_conditions = error_conditions,
editor_markup_patterns = editor_markup_patterns,
et_al_patterns = et_al_patterns,
global_df = global_df,
id_handlers = id_handlers,
id_handlers = id_handlers,
keywords = keywords,
keywords_lists = keywords_lists,
keywords_xlate = keywords_xlate,
stripmarkers=stripmarkers,
stripmarkers=stripmarkers,
invisible_chars = invisible_chars,
invisible_chars = invisible_chars,
indic_script = indic_script,
indic_script = indic_script,
local_lang_cat_enable = local_lang_cat_enable,
maint_cats = maint_cats,
maint_cats = maint_cats,
messages = messages,
messages = messages,
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,
lang_name_remap = lang_name_remap,
lang_name_remap = lang_name_remap,
this_wiki_code = this_wiki_code,
title_types = title_types,
title_types = title_types,
uncategorized_namespaces = uncategorized_namespaces,
uncategorized_namespaces = uncategorized_namespaces,