Module:Citation/CS1/Configuration: Difference between revisions
Jump to navigation
Jump to search
Content added Content deleted
m (1 revision imported) |
(sync from sandbox;) |
||
Line 1: | Line 1: | ||
local lang_obj = mw.language.getContentLanguage(); -- make a language object for the local language; used here for languages and dates |
|||
--[[--------------------------< 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 >------------------------------ |
||
List of namespaces that |
List of namespaces identifiers for namespaces that will not be included in citation error categories. |
||
Same as setting notracking = true by default. |
Same as setting notracking = true by default. |
||
For wikis that have a current version of Module:cs1 documentation support, this #invoke will return an unordered |
|||
Note: Namespace names should use underscores instead of spaces. |
|||
list of namespace names and their associated identifiers: |
|||
{{#invoke:cs1 documentation support|uncategorized_namespace_lister|all=<anything>}} |
|||
]] |
]] |
||
uncategorized_namespaces_t = {[2]=true}; -- init with user namespace id |
|||
local uncategorized_namespaces = { 'User', 'Talk', 'User_talk', 'Wikipedia_talk', |
|||
for k, _ in pairs (mw.site.talkNamespaces) do -- add all talk namespace ids |
|||
'File_talk', 'Template_talk', 'Help_talk', 'Category_talk', 'Portal_talk', |
|||
uncategorized_namespaces_t[k] = true; |
|||
'Book_talk', 'Draft_talk', 'Education_Program_talk', 'Module_talk', 'MediaWiki_talk' }; |
|||
end |
|||
local uncategorized_subpages = {'/[Ss]andbox', '/[Tt]estcases', '/[^/]*[Ll]og', '/[Aa]rchive'}; -- list of Lua patterns found in page names of pages we should not categorize |
local uncategorized_subpages = {'/[Ss]andbox', '/[Tt]estcases', '/[^/]*[Ll]og', '/[Aa]rchive'}; -- list of Lua patterns found in page names of pages we should not categorize |
||
Line 61: | Line 66: | ||
['vol'] = '$1 Vol. $2', -- $1 is sepc; bold journal style volume is in presentation{} |
['vol'] = '$1 Vol. $2', -- $1 is sepc; bold journal style volume is in presentation{} |
||
['vol-no'] = '$1 Vol. $2 no. $3', |
['vol-no'] = '$1 Vol. $2, no. $3', -- sepc, volume, issue (alternatively insert $1 after $2, but then we'd also have to change capitalization) |
||
['issue'] = '$1 No. $2', -- $1 is sepc |
['issue'] = '$1 No. $2', -- $1 is sepc |
||
['art'] = '$1 Art. $2', -- $1 is sepc; for {{cite conference}} only |
|||
['vol-art'] = '$1 Vol. $2, art. $3', -- sepc, volume, article-number; for {{cite conference}} only |
|||
['j-vol'] = '$1 $2', -- sepc, volume; bold journal volume is in presentation{} |
['j-vol'] = '$1 $2', -- sepc, volume; bold journal volume is in presentation{} |
||
['j-issue'] = ' ($1)', |
['j-issue'] = ' ($1)', |
||
['j-article-num'] = ' $1', -- TODO: any punctuation here? static text? |
|||
['nopp'] = '$1 $2'; -- page(s) without prefix; $1 is sepc |
['nopp'] = '$1 $2'; -- page(s) without prefix; $1 is sepc |
||
Line 93: | Line 102: | ||
-- Internal errors (should only occur if configuration is bad) |
-- Internal errors (should only occur if configuration is bad) |
||
['undefined_error'] = 'Called with an undefined error condition', |
['undefined_error'] = 'Called with an undefined error condition', |
||
['unknown_ID_key'] = 'Unrecognized ID key', |
['unknown_ID_key'] = 'Unrecognized ID key: ', -- an ID key in id_handlers not found in ~/Identifiers func_map{} |
||
['unknown_ID_access'] = 'Unrecognized ID access keyword: ', -- an ID access keyword in id_handlers not found in keywords_lists['id-access']{} |
|||
['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', |
||
['warning_msg_e'] = '<span style="color:#d33">One or more <code style="color: inherit; background: inherit; border: none; padding: inherit;">{{$1}}</code> templates have errors</span>; messages may be hidden ([[Help:CS1_errors#Controlling_error_message_display|help]]).'; -- $1 is template link |
|||
['warning_msg_m'] = '<span style="color:#3a3">One or more <code style="color: inherit; background: inherit; border: none; padding: inherit;">{{$1}}</code> templates have maintenance messages</span>; messages may be hidden ([[Help:CS1_errors#Controlling_error_message_display|help]]).'; -- $1 is template link |
|||
} |
} |
||
--[[--------------------------< C I T A T I O N _ C L A S S _ M A P >------------------------------------------ |
|||
this table maps the value assigned to |CitationClass= in the cs1|2 templates to the canonical template name when |
|||
the value assigned to |CitationClass= is different from the canonical template name. |CitationClass= values are |
|||
used as class attributes in the <cite> tag that encloses the citation so these names may not contain spaces while |
|||
the canonical template name may. These names are used in warning_msg_e and warning_msg_m to create links to the |
|||
template's documentation when an article is displayed in preview mode. |
|||
Most cs1|2 template |CitationClass= values at en.wiki match their canonical template names so are not listed here. |
|||
]] |
|||
local citation_class_map_t = { -- TODO: if kept, these and all other config.CitationClass 'names' require some sort of i18n |
|||
['audio-visual'] = 'AV media', |
|||
['AV-media-notes'] = 'AV media notes', |
|||
['encyclopaedia'] = 'encyclopedia', |
|||
['mailinglist'] = 'mailing list', |
|||
['pressrelease'] = 'press release' |
|||
} |
|||
Line 107: | Line 141: | ||
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][AaIi][Ee]?[%.\"']*$", |
"[;,]? *[\"']*%f[%a][Ee][Tt]%.? *[Aa][Ll][Ii][AaIi][Ee]?[%.;,\"']*$", -- variations on the 'et alia', 'et alii' and 'et aliae' themes (false positive 'et aliie' unlikely to match) |
||
"[;,]? *%f[%a]and [Oo]thers", -- an alternative to et al. |
"[;,]? *%f[%a]and [Oo]thers", -- an alternative to et al. |
||
"%[%[ *[Ee][Tt]%.? *[Aa][Ll]%.? *%]%]", -- a wikilinked form |
"%[%[ *[Ee][Tt]%.? *[Aa][Ll]%.? *%]%]", -- a wikilinked form |
||
"%(%( *[Ee][Tt]%.? *[Aa][Ll]%.? *%)%)", -- a double-bracketed form (to counter partial removal of ((...)) syntax) |
"%(%( *[Ee][Tt]%.? *[Aa][Ll]%.? *%)%)", -- a double-bracketed form (to counter partial removal of ((...)) syntax) |
||
"[%(%[] *[Ee][Tt]%.? *[Aa][Ll]%.? *[%)%]]", -- a bracketed 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 square brackets, case insensitive, optional brackets, 's' |
|||
'^[%(%[]?%s*[Ee][Dd][Ii][Tt][Ee][Dd]%A', -- (edited: also square 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 149: | Line 159: | ||
local presentation = |
local presentation = |
||
{ |
{ |
||
-- Error output |
|||
-- .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 |
-- .citation-comment class is specified at Help:CS1_errors#Controlling_error_message_display |
||
['hidden-error'] = '<span class="cs1-hidden- |
['hidden-error'] = '<span class="cs1-hidden-error citation-comment">$1</span>', |
||
['visible-error'] = '<span class="cs1-visible- |
['visible-error'] = '<span class="cs1-visible-error citation-comment">$1</span>', |
||
['hidden-maint'] = '<span class="cs1-maint citation-comment">$1</span>', |
['hidden-maint'] = '<span class="cs1-maint citation-comment">$1</span>', |
||
Line 160: | Line 168: | ||
['bdi'] = '<bdi$1>$2</bdi>', -- bidirectional isolation used with |script-title= and the like |
['bdi'] = '<bdi$1>$2</bdi>', -- bidirectional isolation used with |script-title= and the like |
||
['cite'] = '<cite class="$1">$2</cite>'; -- |ref= not set so no id="..." attribute |
['cite'] = '<cite class="$1">$2</cite>'; -- for use when citation does not have a namelist and |ref= not set so no id="..." attribute |
||
['cite-id'] = '<cite id="$1" class="$2">$3</cite>'; -- for use when |ref= is set |
['cite-id'] = '<cite id="$1" class="$2">$3</cite>'; -- for use when when |ref= is set or when citation has a namelist |
||
['format'] = ' <span class="cs1-format">($1)</span>', -- for |format=, |chapter-format=, etc. |
['format'] = ' <span class="cs1-format">($1)</span>', -- for |format=, |chapter-format=, etc. |
||
['interwiki'] = ' <span class="cs1-format">[in $1]</span>', -- for interwiki-language-linked author, editor, etc |
|||
['interproj'] = ' <span class="cs1-format">[at $1]</span>', -- for interwiki-project-linked author, editor, etc (:d: and :s: supported; :w: ignored) |
|||
-- various access levels, for |access=, |doi-access=, |arxiv=, ... |
-- various access levels, for |access=, |doi-access=, |arxiv=, ... |
||
Line 179: | Line 189: | ||
['italic-title'] = "''$1''", |
['italic-title'] = "''$1''", |
||
['kern-left'] = '<span class="cs1-kern-left"> |
['kern-left'] = '<span class="cs1-kern-left"></span>$1', -- spacing to use when title contains leading single or double quote mark |
||
['kern-right'] = '$1<span class="cs1-kern-right"> |
['kern-right'] = '$1<span class="cs1-kern-right"></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 class="cs1-kern-wl-left">$1</span>', -- when title contains leading single or double quote mark |
|||
['kern-wl-right'] = '<span class="cs1-kern-wl-left">$1</span>', -- when title contains trailing single or double quote mark |
|||
['kern-wl-both'] = '<span class="cs1-kern-wl-left cs1-kern-wl-right">$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> |
['nowrap1'] = '<span class="nowrap">$1</span>', -- for nowrapping an item: <span ...>yyyy-mm-dd</span> |
||
Line 194: | Line 198: | ||
['parameter'] = '<code class="cs1-code">|$1=</code>', |
['parameter'] = '<code class="cs1-code">|$1=</code>', |
||
['ps_cs1'] = '.'; -- CS1 style postscript (terminal) character |
['ps_cs1'] = '.'; -- CS1 style postscript (terminal) character |
||
['ps_cs2'] = ''; -- CS2 style postscript (terminal) character (empty string) |
['ps_cs2'] = ''; -- CS2 style postscript (terminal) character (empty string) |
||
Line 235: | Line 239: | ||
['ArchiveFormat'] = 'archive-format', |
['ArchiveFormat'] = 'archive-format', |
||
['ArchiveURL'] = {'archive-url', 'archiveurl'}, -- Used by InternetArchiveBot |
['ArchiveURL'] = {'archive-url', 'archiveurl'}, -- Used by InternetArchiveBot |
||
['ArticleNumber'] = 'article-number', |
|||
['ASINTLD'] = 'asin-tld', |
['ASINTLD'] = 'asin-tld', |
||
['At'] = 'at', -- Used by InternetArchiveBot |
['At'] = 'at', -- Used by InternetArchiveBot |
||
Line 243: | Line 248: | ||
['ChapterFormat'] = {'chapter-format', 'contribution-format', 'entry-format', |
['ChapterFormat'] = {'chapter-format', 'contribution-format', 'entry-format', |
||
'article-format', 'section-format'}; |
'article-format', 'section-format'}; |
||
['ChapterURL'] = {'chapter-url', 'contribution-url', 'entry-url', 'article-url', |
['ChapterURL'] = {'chapter-url', 'contribution-url', 'entry-url', 'article-url', 'section-url', 'chapterurl'}, -- Used by InternetArchiveBot |
||
'section-url', 'chapterurl'}, -- Used by InternetArchiveBot |
|||
['ChapterUrlAccess'] = {'chapter-url-access', 'contribution-url-access', |
['ChapterUrlAccess'] = {'chapter-url-access', 'contribution-url-access', |
||
'entry-url-access', 'article-url-access', 'section-url-access'}, -- Used by InternetArchiveBot |
'entry-url-access', 'article-url-access', 'section-url-access'}, -- Used by InternetArchiveBot |
||
['Class'] = 'class', -- cite arxiv and arxiv |
['Class'] = 'class', -- cite arxiv and arxiv identifier |
||
['Collaboration'] = 'collaboration', |
['Collaboration'] = 'collaboration', |
||
['Conference'] = {'conference', 'event'}, |
['Conference'] = {'conference', 'event'}, |
||
Line 386: | Line 390: | ||
]] |
]] |
||
local punct_meta_params = { -- table of aliases[] keys (meta parameters); each key has a table of parameter names for a value |
|||
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 |
'BookTitle', 'Chapter', 'ScriptChapter', 'ScriptTitle', 'Title', 'TransChapter', 'Transcript', 'TransMap', 'TransTitle', -- title-holding parameters |
||
'AuthorList-Mask', 'ContributorList-Mask', 'EditorList-Mask', 'InterviewerList-Mask', 'TranslatorList-Mask', -- name-list mask may have name separators |
'AuthorList-Mask', 'ContributorList-Mask', 'EditorList-Mask', 'InterviewerList-Mask', 'TranslatorList-Mask', -- name-list mask may have name separators |
||
'PostScript', 'Quote', 'ScriptQuote', 'TransQuote', 'Ref', |
'PostScript', 'Quote', 'ScriptQuote', 'TransQuote', 'Ref', -- miscellaneous |
||
'ArchiveURL', 'ChapterURL', 'ConferenceURL', 'LayURL', 'MapURL', 'TranscriptURL', 'URL', -- URL-holding parameters |
'ArchiveURL', 'ChapterURL', 'ConferenceURL', 'LayURL', 'MapURL', 'TranscriptURL', 'URL', -- URL-holding parameters |
||
} |
} |
||
local url_meta_params = { -- table of aliases[] keys (meta parameters); each key has a table of parameter names for a value |
|||
'ArchiveURL', 'ChapterURL', 'ConferenceURL', 'ID', 'LayURL', 'MapURL', 'TranscriptURL', 'URL', -- parameters allowed to hold urls |
|||
'Page', 'Pages', 'At', 'QuotePage', 'QuotePages', -- insource locators allowed to hold urls |
|||
} |
|||
local function build_skip_table (skip_t, meta_params) |
|||
for _, meta_param in ipairs (meta_params) do -- for each meta parameter key |
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 |
local params = aliases[meta_param]; -- get the parameter or the table of parameters associated with the meta parameter name |
||
if 'string' == type (params) then |
if 'string' == type (params) then |
||
skip_t[params] = 1; -- just a single parameter |
|||
else |
else |
||
for _, param in ipairs (params) do -- get the parameter name |
for _, param in ipairs (params) do -- get the parameter name |
||
skip_t[param] = 1; -- add the parameter name to the skip table |
|||
local count; |
local count; |
||
param, count = param:gsub ('#', ''); -- remove enumerator marker from enumerated parameters |
param, count = param:gsub ('#', ''); -- remove enumerator marker from enumerated parameters |
||
if 0 ~= count then -- if removed |
if 0 ~= count then -- if removed |
||
skip_t[param] = 1; -- add param name without enumerator marker |
|||
end |
end |
||
end |
end |
||
end |
end |
||
end |
end |
||
return skip_t; |
|||
end |
|||
local punct_skip = {}; |
|||
local url_skip = {}; |
|||
--[[--------------------------< S I N G L E - L E T T E R S E C O N D - L E V E L D O M A I N S >---------- |
|||
this is a list of tlds that are known to have single-letter second-level domain names. This list does not include |
|||
ccTLDs which are accepted in is_domain_name(). |
|||
]] |
|||
local single_letter_2nd_lvl_domains_t = {'cash', 'company', 'foundation', 'org', 'today'}; |
|||
Line 420: | Line 443: | ||
]] |
]] |
||
local is_Latn = 'A-Za-z\195\128-\195\150\195\152-\195\182\195\184-\198\191\199\132-\201\143'; |
|||
local special_case_translation = { |
local special_case_translation = { |
||
['AuthorList'] = 'authors list', -- used to assemble maintenance category names |
['AuthorList'] = 'authors list', -- used to assemble maintenance category names |
||
['ContributorList'] = 'contributors list', -- translation of these names plus translation of the base |
['ContributorList'] = 'contributors list', -- translation of these names plus translation of the base maintenance category names in maint_cats{} table below |
||
['EditorList'] = 'editors list', -- must match the names of the actual categories |
['EditorList'] = 'editors list', -- must match the names of the actual categories |
||
['InterviewerList'] = 'interviewers list', -- this group or translations used by name_has_ed_markup() and name_has_mult_names() |
['InterviewerList'] = 'interviewers list', -- this group or translations used by name_has_ed_markup() and name_has_mult_names() |
||
Line 436: | Line 459: | ||
-- Lua patterns to match generic titles; usually created by bots or reference filling tools |
-- Lua patterns to match generic titles; usually created by bots or reference filling tools |
||
-- translators: replace ['local'] = nil with lowercase translation only when bots or tools create generic titles in your language |
-- translators: replace ['local'] = nil with lowercase translation only when bots or tools create generic titles in your language |
||
-- generic titles and patterns in this table should be lowercase only |
|||
['generic_titles'] = { |
|||
-- patterns in this table should be lowercase only |
|||
-- leave ['local'] nil except when there is a matching generic title in your language |
-- leave ['local'] nil except when there is a matching generic title in your language |
||
-- generic titles must be lowercase |
|||
-- boolean 'true' for plain-text searches; 'false' for pattern searches |
-- boolean 'true' for plain-text searches; 'false' for pattern searches |
||
{['en'] = {'^wayback%s+machine$', false}, ['local'] = nil}, |
|||
['generic_titles'] = { |
|||
{['en'] = {'are you a robot', true}, ['local'] = nil}, |
|||
['accept'] = { |
|||
{['en'] = {'hugedomains.com', true}, ['local'] = nil}, |
|||
}, |
|||
{['en'] = {'^[%(%[{<]?no +title[>}%]%)]?$', false}, ['local'] = nil}, |
|||
['reject'] = { |
|||
{['en'] = {'page not found', true}, ['local'] = nil}, |
|||
{['en'] = {' |
{['en'] = {'^wayback%s+machine$', false}, ['local'] = nil}, |
||
{['en'] = {' |
{['en'] = {'are you a robot', true}, ['local'] = nil}, |
||
{['en'] = {' |
{['en'] = {'hugedomains.com', true}, ['local'] = nil}, |
||
{['en'] = {'^ |
{['en'] = {'^[%(%[{<]?no +title[>}%]%)]?$', false}, ['local'] = nil}, |
||
{['en'] = {' |
{['en'] = {'page not found', true}, ['local'] = nil}, |
||
{['en'] = {' |
{['en'] = {'subscribe to read', true}, ['local'] = nil}, |
||
{['en'] = {' |
{['en'] = {'^[%(%[{<]?unknown[>}%]%)]?$', false}, ['local'] = nil}, |
||
{['en'] = {' |
{['en'] = {'website is for sale', true}, ['local'] = nil}, |
||
{['en'] = {' |
{['en'] = {'^404', false}, ['local'] = nil}, |
||
{['en'] = {'internet archive wayback machine', true}, ['local'] = nil}, |
|||
} |
|||
{['en'] = {'log into facebook', true}, ['local'] = nil}, |
|||
{['en'] = {'login • instagram', true}, ['local'] = nil}, |
|||
{['en'] = {'redirecting...', true}, ['local'] = nil}, |
|||
{['en'] = {'usurped title', true}, ['local'] = nil}, -- added by a GreenC bot |
|||
{['en'] = {'webcite query result', true}, ['local'] = nil}, |
|||
{['en'] = {'wikiwix\'s cache', true}, ['local'] = nil}, |
|||
} |
|||
}, |
|||
-- boolean 'true' for plain-text searches, search string must be lowercase only |
|||
-- boolean 'false' for pattern searches |
|||
-- leave ['local'] nil except when there is a matching generic name in your language |
|||
['generic_names'] = { |
|||
['accept'] = { |
|||
{['en'] = {'%[%[[^|]*%(author%) *|[^%]]*%]%]', false}, ['local'] = nil}, |
|||
}, |
|||
['reject'] = { |
|||
{['en'] = {'about us', true}, ['local'] = nil}, |
|||
{['en'] = {'%f[%a][Aa]dvisor%f[%A]', false}, ['local'] = nil}, |
|||
{['en'] = {'allmusic', true}, ['local'] = nil}, |
|||
{['en'] = {'%f[%a][Aa]uthor%f[%A]', false}, ['local'] = nil}, |
|||
{['en'] = {'business', true}, ['local'] = nil}, |
|||
{['en'] = {'cnn', true}, ['local'] = nil}, |
|||
{['en'] = {'collaborator', true}, ['local'] = nil}, |
|||
{['en'] = {'contributor', true}, ['local'] = nil}, |
|||
{['en'] = {'contact us', true}, ['local'] = nil}, |
|||
{['en'] = {'directory', true}, ['local'] = nil}, |
|||
{['en'] = {'%f[%(%[][%(%[]%s*eds?%.?%s*[%)%]]?$', false}, ['local'] = nil}, |
|||
{['en'] = {'[,%.%s]%f[e]eds?%.?$', false}, ['local'] = nil}, |
|||
{['en'] = {'^eds?[%.,;]', false}, ['local'] = nil}, |
|||
{['en'] = {'^[%(%[]%s*[Ee][Dd][Ss]?%.?%s*[%)%]]', false}, ['local'] = nil}, |
|||
{['en'] = {'%f[%a][Ee]dited%f[%A]', false}, ['local'] = nil}, |
|||
{['en'] = {'%f[%a][Ee]ditors?%f[%A]', false}, ['local'] = nil}, |
|||
{['en'] = {'%f[%a]]Ee]mail%f[%A]', false}, ['local'] = nil}, |
|||
{['en'] = {'facebook', true}, ['local'] = nil}, |
|||
{['en'] = {'google', true}, ['local'] = nil}, |
|||
{['en'] = {'home page', true}, ['local'] = nil}, |
|||
{['en'] = {'^[Ii]nc%.?$', false}, ['local'] = nil}, |
|||
{['en'] = {'instagram', true}, ['local'] = nil}, |
|||
{['en'] = {'interviewer', true}, ['local'] = nil}, |
|||
{['en'] = {'linkedIn', true}, ['local'] = nil}, |
|||
{['en'] = {'^[Nn]ews$', false}, ['local'] = nil}, |
|||
{['en'] = {'pinterest', true}, ['local'] = nil}, |
|||
{['en'] = {'policy', true}, ['local'] = nil}, |
|||
{['en'] = {'privacy', true}, ['local'] = nil}, |
|||
{['en'] = {'reuters', true}, ['local'] = nil}, |
|||
{['en'] = {'translator', true}, ['local'] = nil}, |
|||
{['en'] = {'tumblr', true}, ['local'] = nil}, |
|||
{['en'] = {'twitter', true}, ['local'] = nil}, |
|||
{['en'] = {'site name', true}, ['local'] = nil}, |
|||
{['en'] = {'statement', true}, ['local'] = nil}, |
|||
{['en'] = {'submitted', true}, ['local'] = nil}, |
|||
{['en'] = {'super.?user', false}, ['local'] = nil}, |
|||
{['en'] = {'%f['..is_Latn..'][Uu]ser%f[^'..is_Latn..']', false}, ['local'] = nil}, |
|||
{['en'] = {'verfasser', true}, ['local'] = nil}, |
|||
} |
|||
} |
|||
} |
} |
||
Line 480: | Line 559: | ||
Easter and Christmas are defined here as 98 and 99, which should be out of the |
Easter and Christmas are defined here as 98 and 99, which should be out of the |
||
ISO 8601 (EDTF) range of uses for a while. |
ISO 8601 (EDTF) range of uses for a while. |
||
local_date_names_from_mediawiki is a boolean. When set to: |
|||
true – module will fetch local month names from MediaWiki for both date_names['local']['long'] and date_names['local']['short'] |
|||
false – module will *not* fetch local month names from MediaWiki |
|||
Caveat lector: There is no guarantee that MediaWiki will provide short month names. At your wiki you can test |
|||
the results of the MediaWiki fetch in the debug console with this command (the result is alpha sorted): |
|||
=mw.dumpObject (p.date_names['local']) |
|||
While the module can fetch month names from MediaWiki, it cannot fetch the quarter, season, and named date names |
|||
from MediaWiki. Those must be translated manually. |
|||
]] |
]] |
||
local local_date_names_from_mediawiki = true; -- when false, manual translation required for date_names['local']['long'] and date_names['local']['short'] |
|||
-- when true, module fetches long and short month names from MediaWiki |
|||
local date_names = { |
local date_names = { |
||
['en'] = { -- English |
['en'] = { -- English |
||
Line 491: | Line 583: | ||
['named'] = {['Easter'] = 98, ['Christmas'] = 99}, |
['named'] = {['Easter'] = 98, ['Christmas'] = 99}, |
||
}, |
}, |
||
-- when local_date_names_from_mediawiki = false |
|||
['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}, |
||
Line 498: | Line 591: | ||
['named'] = {['Easter'] = 98, ['Christmas'] = 99}, |
['named'] = {['Easter'] = 98, ['Christmas'] = 99}, |
||
}, |
}, |
||
[' |
['inv_local_long'] = {}, -- used in date reformatting & translation; copy of date_names['local'].long where k/v are inverted: [1]='<local name>' etc. |
||
[' |
['inv_local_short'] = {}, -- used in date reformatting & translation; copy of date_names['local'].short where k/v are inverted: [1]='<local name>' etc. |
||
['inv_local_quarter'] = {}, -- used in date translation; copy of date_names['local'].quarter where k/v are inverted: [1]='<local name>' etc. |
|||
['inv_local_season'] = {}, -- used in date translation; copy of date_names['local'].season where k/v are inverted: [1]='<local name>' etc. |
|||
['inv_local_named'] = {}, -- used in date translation; copy of date_names['local'].named 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 |
['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'] = {}, |
['xlate_digits'] = {}, |
||
} |
} |
||
if local_date_names_from_mediawiki then -- if fetching local month names from MediaWiki is enabled |
|||
for name, i in pairs (date_names['local'].long) do -- this table is ['name'] = i |
|||
local long_t = {}; |
|||
date_names['inv_local_l'][i] = name; -- invert to get [i] = 'name' for conversions from ymd |
|||
local short_t = {}; |
|||
for i=1, 12 do -- loop 12x and |
|||
local name = lang_obj:formatDate('F', '2022-' .. i .. '-1'); -- get long month name for each i |
|||
long_t[name] = i; -- save it |
|||
name = lang_obj:formatDate('M', '2022-' .. i .. '-1'); -- get short month name for each i |
|||
short_t[name] = i; -- save it |
|||
end |
|||
date_names['local']['long'] = long_t; -- write the long table – overwrites manual translation |
|||
date_names['local']['short'] = short_t; -- write the short table – overwrites manual translation |
|||
end |
end |
||
-- create inverted date-name tables for reformatting and/or translation |
|||
for _, invert_t in pairs {{'long', 'inv_local_long'}, {'short', 'inv_local_short'}, {'quarter', 'inv_local_quarter'}, {'season', 'inv_local_season'}, {'named', 'inv_local_named'}} do |
|||
for name, i in pairs (date_names['local'].short) do -- this table is ['name'] = i |
|||
date_names[' |
for name, i in pairs (date_names['local'][invert_t[1]]) do -- this table is ['name'] = i |
||
date_names[invert_t[2]][i] = name; -- invert to get [i] = 'name' for conversions from ymd |
|||
end |
|||
end |
end |
||
Line 533: | Line 640: | ||
local function get_date_format () |
local function get_date_format () |
||
local title_object = mw.title.getCurrentTitle(); |
|||
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 |
|||
if title_object.namespace == 10 then -- not in template space so that unused templates appear in unused-template-reports; |
|||
return nil; -- auto-formatting does not work in Template space so don't set global_df |
|||
end |
|||
local content = title_object: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 |
||
Line 547: | Line 658: | ||
end |
end |
||
local global_df |
local global_df; |
||
Line 562: | Line 673: | ||
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'} |
||
--[[ |
|||
These tables control when it is appropriate for {{citation}} to render |volume= and/or |issue=. The parameter |
|||
names in the tables constrain {{citation}} so that its renderings match the renderings of the equivalent cs1 |
|||
templates. For example, {{cite web}} does not support |volume= so the equivalent {{citation |website=...}} must |
|||
not support |volume=. |
|||
]] |
|||
local citation_no_volume_t = { -- {{citation}} does not render |volume= when these parameters are used |
|||
'website', 'mailinglist', 'script-website', |
|||
} |
|||
local citation_issue_t = { -- {{citation}} may render |issue= when these parameters are used |
|||
'journal', 'magazine', 'newspaper', 'periodical', 'work', |
|||
'script-journal', 'script-magazine', 'script-newspaper', 'script-periodical', 'script-work', |
|||
} |
|||
--[[ |
--[[ |
||
Line 573: | Line 700: | ||
bad_ppatterns = { -- patterns for |page= and |pages= |
bad_ppatterns = { -- patterns for |page= and |pages= |
||
'^[Pp][PpGg]?%.?[ %d]', |
'^[Pp][PpGg]?%.?[ %d]', |
||
'^[Pp][Pp]?%. ', -- from {{p.}} and {{pp.}} templates |
|||
'^[Pp]ages?', |
'^[Pp]ages?', |
||
'^[Pp]gs.?', |
'^[Pp]gs.?', |
||
Line 618: | Line 746: | ||
['cs1'] = {'cs1'}, -- |mode= |
['cs1'] = {'cs1'}, -- |mode= |
||
['cs2'] = {'cs2'}, -- |mode= |
['cs2'] = {'cs2'}, -- |mode= |
||
['dead'] = {'dead'}, |
['dead'] = {'dead', 'deviated'}, -- |url-status= -- Used by InternetArchiveBot |
||
['dmy'] = {'dmy'}, -- |df= |
['dmy'] = {'dmy'}, -- |df= |
||
['dmy-all'] = {'dmy-all'}, -- |df= |
['dmy-all'] = {'dmy-all'}, -- |df= |
||
['foreword'] = {'foreword'}, -- |contribution= |
['foreword'] = {'foreword'}, -- |contribution= |
||
['free'] = {'free'}, -- | |
['free'] = {'free'}, -- |<id>-access= -- Used by InternetArchiveBot |
||
['harv'] = {'harv'}, -- |ref=; this no longer supported; is_valid_parameter_value() called with <invert> = true |
|||
['introduction'] = {'introduction'}, -- |contribution= |
['introduction'] = {'introduction'}, -- |contribution= |
||
['limited'] = {'limited'}, -- |url-access= -- Used by InternetArchiveBot |
['limited'] = {'limited'}, -- |url-access= -- Used by InternetArchiveBot |
||
Line 714: | Line 843: | ||
['mode'] = make_keywords_list ({keywords.cs1, keywords.cs2}), |
['mode'] = make_keywords_list ({keywords.cs1, keywords.cs2}), |
||
['name-list-style'] = make_keywords_list ({keywords.amp, keywords['and'], keywords.vanc}), |
['name-list-style'] = make_keywords_list ({keywords.amp, keywords['and'], keywords.vanc}), |
||
['ref'] = make_keywords_list ({keywords.harv}), -- inverted check; |ref=harv no longer supported |
|||
['url-access'] = make_keywords_list ({keywords.subscription, keywords.limited, keywords.registration}), |
['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']}), |
['url-status'] = make_keywords_list ({keywords.dead, keywords.live, keywords.unfit, keywords.usurped, keywords['bot: unknown']}), |
||
Line 775: | Line 905: | ||
--[[ |
--[[ |
||
Indic script makes use of zero width joiner as a character modifier so zwj |
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 |
characters must be left in. This pattern covers all of the unicode characters |
||
Line 799: | Line 930: | ||
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 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]'; |
||
-- list of emoji that use zwj character (U+200D) to combine with another emoji |
-- list of emoji that use a zwj character (U+200D) to combine with another emoji |
||
-- from: https://unicode.org/Public/emoji/15.0/emoji-zwj-sequences.txt; version: 15.0; 2022-05-06 |
|||
local emoji = { -- indexes are decimal forms of the hex values in U+xxxx |
|||
-- table created by: [[:en:Module:Make emoji zwj table]] |
|||
local emoji_t = { -- indexes are decimal forms of the hex values in U+xxxx |
|||
[9760] = true, -- U+2620 ☠ skull and crossbones |
|||
[9792] = true, -- U+2640 ♀ female sign |
|||
[9794] = true, -- U+2642 ♂ male sign |
|||
[9877] = true, -- U+2695 ⚕ staff of aesculapius |
|||
[9878] = true, -- U+2696 ⚖ scales |
|||
[9895] = true, -- U+26A7 ⚧ male with stroke and male and female sign |
|||
[9992] = true, -- U+2708 ✈ airplane |
|||
[10052] = true, -- U+2744 ❄ snowflake |
|||
[10084] = true, -- U+2764 ❤ heavy black heart |
|||
[11035] = true, -- U+2B1B ⬛ black large square |
|||
[127752] = true, -- U+1F308 🌈 rainbow |
[127752] = true, -- U+1F308 🌈 rainbow |
||
[127787] = true, -- U+1F32B 🌫 fog |
|||
[127806] = true, -- U+1F33E 🌾 ear of rice |
[127806] = true, -- U+1F33E 🌾 ear of rice |
||
[127859] = true, -- U+1F373 🍳 cooking |
[127859] = true, -- U+1F373 🍳 cooking |
||
[127868] = true, -- U+1F37C 🍼 baby bottle |
|||
[127876] = true, -- U+1F384 🎄 christmas tree |
|||
[127891] = true, -- U+1F393 🎓 graduation cap |
[127891] = true, -- U+1F393 🎓 graduation cap |
||
[127908] = true, -- U+1F3A4 🎤 microphone |
[127908] = true, -- U+1F3A4 🎤 microphone |
||
Line 814: | Line 960: | ||
[128105] = true, -- U+1F469 👩 woman |
[128105] = true, -- U+1F469 👩 woman |
||
[128139] = true, -- U+1F48B 💋 kiss mark |
[128139] = true, -- U+1F48B 💋 kiss mark |
||
[128168] = true, -- U+1F4A8 💨 dash symbol |
|||
[128171] = true, -- U+1F4AB 💫 dizzy symbol |
|||
[128187] = true, -- U+1F4BB 💻 personal computer |
[128187] = true, -- U+1F4BB 💻 personal computer |
||
[128188] = true, -- U+1F4BC 💼 brief case |
[128188] = true, -- U+1F4BC 💼 brief case |
||
[128293] = true, -- U+1F525 🔥 fire |
|||
[128295] = true, -- U+1F527 🔧 wrench |
[128295] = true, -- U+1F527 🔧 wrench |
||
[128300] = true, -- U+1F52C 🔬 microscope |
[128300] = true, -- U+1F52C 🔬 microscope |
||
Line 831: | Line 980: | ||
[129469] = true, -- U+1F9BD 🦽 manual wheelchair |
[129469] = true, -- U+1F9BD 🦽 manual wheelchair |
||
[129489] = true, -- U+1F9D1 🧑 adult |
[129489] = true, -- U+1F9D1 🧑 adult |
||
[ |
[129657] = true, -- U+1FA79 🩹 adhesive bandage |
||
[ |
[129778] = true, -- U+1FAF2 🫲 leftwards hand |
||
[9794] = true, -- U+2642 ♂ male sign |
|||
[9877] = true, -- U+2695 ⚕ staff of aesculapius |
|||
[9878] = true, -- U+2696 ⚖ scales |
|||
[9992] = true, -- U+2708 ✈ airplane |
|||
[10084] = true, -- U+2764 ❤ heavy black heart |
|||
} |
} |
||
Line 847: | Line 991: | ||
]] |
]] |
||
local this_wiki_code = mw.getContentLanguage():getCode(); -- get this wiki's language code |
--local this_wiki_code = mw.getContentLanguage():getCode(); -- get this wiki's language code |
||
local this_wiki_code = lang_obj:getCode(); -- get this wiki's language code |
|||
if string.match (mw.site.server, 'wikidata') then |
|||
if string.match (mw.site.server, 'wikidata') then |
|||
this_wiki_code = mw.getCurrentFrame():preprocess('{{int:lang}}'); -- on Wikidata so use interface language setting instead |
this_wiki_code = mw.getCurrentFrame():preprocess('{{int:lang}}'); -- on Wikidata so use interface language setting instead |
||
end |
end |
||
local |
local mw_languages_by_tag_t = mw.language.fetchLanguageNames (this_wiki_code, 'all'); -- get a table of language tag/name pairs known to Wikimedia; used for interwiki tests |
||
local mw_languages_by_name_t = {}; |
|||
for k, v in pairs (mw_languages_by_tag_t) do -- build a 'reversed' table name/tag language pairs know to MediaWiki; used for |language= |
|||
v = mw.ustring.lower (v); -- lowercase for tag fetch; get name's proper case from mw_languages_by_tag_t[<tag>] |
|||
if mw_languages_by_name_t[v] then -- when name already in the table |
|||
if 2 == #k or 3 == #k then -- if tag does not have subtags |
|||
mw_languages_by_name_t[v] = k; -- prefer the shortest tag for this name |
|||
end |
|||
else -- here when name not in the table |
|||
mw_languages_by_name_t[v] = k; -- so add name and matching tag |
|||
end |
|||
end |
|||
local inter_wiki_map = {}; -- map of interwiki prefixes that are language-code prefixes |
local inter_wiki_map = {}; -- map of interwiki prefixes that are language-code prefixes |
||
for k, v in pairs (mw.site.interwikiMap ('local')) do -- spin through the base interwiki map (limited to local) |
for k, v in pairs (mw.site.interwikiMap ('local')) do -- spin through the base interwiki map (limited to local) |
||
if |
if mw_languages_by_tag_t[v["prefix"]] then -- if the prefix matches a known language tag |
||
inter_wiki_map[v["prefix"]] = true; -- add it to our local map |
inter_wiki_map[v["prefix"]] = true; -- add it to our local map |
||
end |
end |
||
end |
end |
||
local local_lang_cat_enable = false; -- set to true to categorize pages where |language=<local wiki's language> |
|||
Line 872: | Line 1,026: | ||
local script_lang_codes = { |
local script_lang_codes = { |
||
'am', 'ar', 'be', 'bg', 'bn', 'bo', 'bs', 'dv', 'dz', 'el', 'fa', 'gu', |
'ab', 'am', 'ar', 'be', 'bg', 'bn', 'bo', 'bs', 'dv', 'dz', 'el', 'fa', 'gu', |
||
'he', 'hi', 'hy', 'ja', 'ka', 'kk', 'km', 'kn', 'ko', 'ku', 'ky', 'lo', |
'he', 'hi', 'hy', 'ja', 'ka', 'kk', 'km', 'kn', 'ko', 'ku', 'ky', 'lo', 'mk', |
||
'ml', 'mn', 'mr', 'my', 'ne', 'or', 'ota', 'pa', 'ps', 'ru', 'sd', 'si', 'sr', |
|||
' |
'syc', 'ta', 'te', 'tg', 'th', 'ti', 'tt', 'ug', 'uk', 'ur', 'uz', 'yi', 'yue', 'zh' |
||
}; |
}; |
||
Line 905: | Line 1,059: | ||
['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}}) |
|||
['ilo'] = 'Ilocano', -- MediaWiki/IANA/ISO 639: Iloko; use en.wiki preferred name |
['ilo'] = 'Ilocano', -- MediaWiki/IANA/ISO 639: Iloko; use en.wiki preferred name |
||
['ksh'] = 'Kölsch', -- MediaWiki: Colognian; use IANA/ISO 639 preferred name |
['ksh'] = 'Kölsch', -- MediaWiki: Colognian; use IANA/ISO 639 preferred name |
||
Line 913: | Line 1,066: | ||
} |
} |
||
local lang_name_remap = { -- used for |language= |
local lang_name_remap = { -- used for |language=; names require proper capitalization; tags must be lowercase |
||
['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 |
||
Line 921: | Line 1,074: | ||
['blackfoot'] = {'Blackfoot', 'bla'}, -- MediaWiki/IANA/ISO 639: Siksika; use en.wiki preferred name |
['blackfoot'] = {'Blackfoot', 'bla'}, -- MediaWiki/IANA/ISO 639: Siksika; use en.wiki preferred name |
||
['colognian'] = {'Colognian', 'ksh-x-colog'}, -- MediaWiki preferred name for ksh |
['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 |
['ilocano'] = {'Ilocano', 'ilo'}, -- MediaWiki/IANA/ISO 639: Iloko; use en.wiki preferred name |
||
['kolsch'] = {'Kölsch', 'ksh'}, -- use IANA/ISO 639 preferred name (use non-diacritical o instead of umlaut ö) |
['kolsch'] = {'Kölsch', 'ksh'}, -- use IANA/ISO 639 preferred name (use non-diacritical o instead of umlaut ö) |
||
['kölsch'] = {'Kölsch', 'ksh'}, -- use IANA/ISO 639 preferred name |
['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 |
['ripuarian'] = {'Ripuarian', 'mis-x-ripuar'}, -- group of dialects; no code in MediaWiki or in IANA/ISO 639 |
||
['taiwanese hokkien'] = {'Taiwanese Hokkien', 'nan- |
['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 |
['tosk albanian'] = {'Tosk Albanian', 'als'}, -- MediaWiki replaces 'Tosk Albanian' with 'Alemannisch' so 'Tosk Albanian' cannot be found |
||
['valencian'] = {'Valencian', 'ca'}, |
['valencian'] = {'Valencian', 'ca-valencia'}, -- variant of Catalan; categorizes as Valencian |
||
} |
} |
||
Line 939: | Line 1,091: | ||
local prop_cats = { |
local prop_cats = { |
||
[' |
['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 used as a sort key |
||
['jul-greg-uncertainty'] = 'CS1: Julian–Gregorian uncertainty', -- probably temporary cat to identify scope of template with dates 1 October 1582 – 1 January 1926 |
|||
['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 |
|||
['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', |
|||
['location-test'] = 'CS1 location test', |
|||
['script'] = 'CS1 uses foreign language script', -- when language specified by |script-title=xx: doesn't have its own category |
|||
['long-vol'] = 'CS1: long volume value', -- probably temporary cat to identify scope of |volume= values longer than 4 characters |
|||
['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'] = '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 |
|||
['tracked-param'] = 'CS1 tracked parameter: $1', -- $1 is base (enumerators removed) parameter name |
|||
['long_vol'] = 'CS1: long volume value', -- probably temporary cat to identify scope of |volume= values longer than 4 charachters |
|||
[' |
['year-range-abbreviated'] = 'CS1: abbreviated year range', -- probably temporary cat to identify scope of |date=, |year= values using YYYY–YY form |
||
} |
} |
||
Line 965: | Line 1,117: | ||
['pressrelease'] = 'Press release', |
['pressrelease'] = 'Press release', |
||
['report'] = 'Report', |
['report'] = 'Report', |
||
['speech'] = 'Speech', |
|||
['techreport'] = 'Technical report', |
['techreport'] = 'Technical report', |
||
['thesis'] = 'Thesis', |
['thesis'] = 'Thesis', |
||
Line 988: | Line 1,141: | ||
['group'] = 'invalid group id', -- |isbn= |
['group'] = 'invalid group id', -- |isbn= |
||
['initials'] = 'initials', -- Vancouver |
['initials'] = 'initials', -- Vancouver |
||
['invalid language code'] = 'invalid language code', -- |script-<param>= |
|||
['journal'] = 'journal', -- |bibcode= |
['journal'] = 'journal', -- |bibcode= |
||
['length'] = 'length', -- |isbn=, |bibcode=, |sbn= |
['length'] = 'length', -- |isbn=, |bibcode=, |sbn= |
||
['liveweb'] = 'liveweb', -- |archive-url= |
['liveweb'] = 'liveweb', -- |archive-url= |
||
['missing comma'] = 'missing comma', -- Vancouver |
['missing comma'] = 'missing comma', -- Vancouver |
||
['missing prefix'] = 'missing prefix', -- |script-<param>= |
|||
['missing title part'] = 'missing title part', -- |script-<param>= |
|||
['name'] = 'name', -- Vancouver |
['name'] = 'name', -- Vancouver |
||
['non-Latin char'] = 'non-Latin character', -- Vancouver |
['non-Latin char'] = 'non-Latin character', -- Vancouver |
||
Line 1,000: | Line 1,156: | ||
['suffix'] = 'suffix', -- Vancouver |
['suffix'] = 'suffix', -- Vancouver |
||
['timestamp'] = 'timestamp', -- |archive-url= |
['timestamp'] = 'timestamp', -- |archive-url= |
||
['unknown language code'] = 'unknown language code', -- |script-<param>= |
|||
['value'] = 'value', -- |bibcode= |
['value'] = 'value', -- |bibcode= |
||
['year'] = 'year', -- |bibcode= |
['year'] = 'year', -- |bibcode= |
||
Line 1,355: | Line 1,512: | ||
message = '<code class="cs1-code">|$1=</code> missing <code class="cs1-code">|$2=</code>', -- $1 is first alias, $2 is matching last alias |
message = '<code class="cs1-code">|$1=</code> missing <code class="cs1-code">|$2=</code>', -- $1 is first alias, $2 is matching last alias |
||
anchor = 'first_missing_last', |
anchor = 'first_missing_last', |
||
category = 'CS1 errors: missing name', |
category = 'CS1 errors: missing name', -- author, contributor, editor, interviewer, translator |
||
hidden = false |
hidden = false |
||
}, |
}, |
||
Line 1,363: | Line 1,520: | ||
category = 'CS1 errors: format without URL', |
category = 'CS1 errors: format without URL', |
||
hidden = false |
hidden = false |
||
}, |
|||
err_generic_name = { |
|||
message = '<code class="cs1-code">|$1=</code> has generic name', -- $1 is parameter name |
|||
anchor = 'generic_name', |
|||
category = 'CS1 errors: generic name', |
|||
hidden = false, |
|||
}, |
}, |
||
err_generic_title = { |
err_generic_title = { |
||
Line 1,480: | Line 1,643: | ||
]] |
]] |
||
maint_archived_copy = { |
maint_archived_copy = { |
||
message = nil, |
message = nil, |
||
Line 1,496: | Line 1,660: | ||
anchor = 'bot:_unknown', |
anchor = 'bot:_unknown', |
||
category = 'CS1 maint: bot: original URL status unknown', |
category = 'CS1 maint: bot: original URL status unknown', |
||
hidden = true, |
|||
}, |
|||
maint_date_auto_xlated = { -- date auto-translation not supported by en.wiki |
|||
message = nil, |
|||
anchor = 'date_auto_xlated', |
|||
category = 'CS1 maint: date auto-translated', |
|||
hidden = true, |
hidden = true, |
||
}, |
}, |
||
Line 1,508: | Line 1,678: | ||
anchor = 'date_year', |
anchor = 'date_year', |
||
category = 'CS1 maint: date and year', |
category = 'CS1 maint: date and year', |
||
hidden = true, |
|||
}, |
|||
maint_discouraged = { |
|||
message = nil, |
|||
anchor = 'discouraged', |
|||
category = 'CS1 maint: discouraged parameter', |
|||
hidden = true, |
hidden = true, |
||
}, |
}, |
||
Line 1,538: | Line 1,702: | ||
anchor = 'extra_punct', |
anchor = 'extra_punct', |
||
category = 'CS1 maint: extra punctuation', |
category = 'CS1 maint: extra punctuation', |
||
hidden = true, |
|||
}, |
|||
maint_extra_text_names = { |
|||
message = nil, |
|||
anchor = 'extra_text_names', |
|||
category = 'CS1 maint: extra text: $1', -- $1 is '<name>s list'; gets value from special_case_translation table |
|||
hidden = true, |
hidden = true, |
||
}, |
}, |
||
Line 1,569: | Line 1,727: | ||
category = 'CS1 maint: location', |
category = 'CS1 maint: location', |
||
hidden = true, |
hidden = true, |
||
}, |
|||
maint_mr_format = { |
maint_mr_format = { |
||
message = nil, |
message = nil, |
||
Line 1,575: | Line 1,733: | ||
category = 'CS1 maint: MR format', |
category = 'CS1 maint: MR format', |
||
hidden = true, |
hidden = true, |
||
}, |
|||
maint_mult_names = { |
maint_mult_names = { |
||
message = nil, |
message = nil, |
||
Line 1,599: | Line 1,757: | ||
category = 'CS1 maint: others in cite AV media (notes)', |
category = 'CS1 maint: others in cite AV media (notes)', |
||
hidden = true, |
hidden = true, |
||
}, |
|||
maint_pmc_embargo = { |
maint_pmc_embargo = { |
||
message = nil, |
message = nil, |
||
Line 1,624: | Line 1,782: | ||
hidden = true, |
hidden = true, |
||
}, |
}, |
||
maint_ref_harv = { |
|||
message = nil, |
|||
anchor = 'ref_harv', |
|||
category = 'CS1 maint: ref=harv', |
|||
hidden = true, |
|||
}, |
|||
maint_unfit = { |
maint_unfit = { |
||
message = nil, |
message = nil, |
||
Line 1,646: | Line 1,798: | ||
anchor = 'untitled', |
anchor = 'untitled', |
||
category = 'CS1 maint: untitled periodical', |
category = 'CS1 maint: untitled periodical', |
||
hidden = true, |
|||
}, |
|||
maint_url_status = { |
|||
message = nil, |
|||
anchor = 'url_status', |
|||
category = 'CS1 maint: url-status', |
|||
hidden = true, |
hidden = true, |
||
}, |
}, |
||
Line 1,667: | Line 1,825: | ||
redirect: a local redirect to a local Wikipedia article name; at en.wiki, 'ISBN (identifier)' is a redirect to 'International Standard Book Number' |
redirect: a local redirect to a local Wikipedia article name; at en.wiki, 'ISBN (identifier)' is a redirect to 'International Standard Book Number' |
||
q: Wikidata q number for the identifier |
q: Wikidata q number for the identifier |
||
label: the label |
label: the label preceding the identifier; label is linked to a Wikipedia article (in this order): |
||
redirect from id_handlers['<id>'].redirect when use_identifier_redirects is true |
redirect from id_handlers['<id>'].redirect when use_identifier_redirects is true |
||
Wikidata-supplied article name for the local wiki from id_handlers['<id>'].q |
Wikidata-supplied article name for the local wiki from id_handlers['<id>'].q |
||
Line 1,686: | Line 1,844: | ||
custom_access: to enable custom access level for an identifier, set this parameter |
custom_access: to enable custom access level for an identifier, set this parameter |
||
to the parameter that should control it (normally 'id-access') |
to the parameter that should control it (normally 'id-access') |
||
]] |
]] |
||
Line 1,784: | Line 1,943: | ||
}, |
}, |
||
['ISBN'] = { -- Used by InternetArchiveBot |
['ISBN'] = { -- Used by InternetArchiveBot |
||
parameters = {'isbn', 'ISBN |
parameters = {'isbn', 'ISBN'}, |
||
link = 'International Standard Book Number', |
link = 'International Standard Book Number', |
||
redirect = 'ISBN (identifier)', |
redirect = 'ISBN (identifier)', |
||
Line 1,854: | Line 2,013: | ||
q = 'Q211172', |
q = 'Q211172', |
||
label = 'MR', |
label = 'MR', |
||
prefix = '// |
prefix = '//mathscinet.ams.org/mathscinet-getitem?mr=', |
||
COinS = 'pre', -- use prefix value |
COinS = 'pre', -- use prefix value |
||
encode = true, |
encode = true, |
||
Line 1,893: | Line 2,052: | ||
encode = true, |
encode = true, |
||
separator = ' ', |
separator = ' ', |
||
id_limit = |
id_limit = 23010000, |
||
custom_access = 'osti-access', |
custom_access = 'osti-access', |
||
}, |
}, |
||
Line 1,907: | Line 2,066: | ||
encode = true, |
encode = true, |
||
separator = ' ', |
separator = ' ', |
||
id_limit = |
id_limit = 9900000, |
||
access = 'free', -- free to read |
access = 'free', -- free to read |
||
}, |
}, |
||
Line 1,920: | Line 2,079: | ||
encode = false, |
encode = false, |
||
separator = ' ', |
separator = ' ', |
||
id_limit = |
id_limit = 36900000, |
||
}, |
}, |
||
['RFC'] = { |
['RFC'] = { |
||
Line 1,932: | Line 2,091: | ||
encode = false, |
encode = false, |
||
separator = ' ', |
separator = ' ', |
||
id_limit = |
id_limit = 9300, |
||
access = 'free', -- free to read |
access = 'free', -- free to read |
||
}, |
}, |
||
Line 1,950: | Line 2,109: | ||
q = 'Q7550801', |
q = 'Q7550801', |
||
label = 'SSRN', |
label = 'SSRN', |
||
prefix = '//ssrn.com/ |
prefix = '//papers.ssrn.com/sol3/papers.cfm?abstract_id=', |
||
COinS = 'pre', -- use prefix value |
COinS = 'pre', -- use prefix value |
||
encode = true, |
encode = true, |
||
separator = ' ', |
separator = ' ', |
||
id_limit = |
id_limit = 4300000, |
||
custom_access = 'ssrn-access', |
|||
access = 'free', -- always free to read |
|||
}, |
}, |
||
['S2CID'] = { |
['S2CID'] = { |
||
Line 1,967: | Line 2,126: | ||
encode = false, |
encode = false, |
||
separator = ' ', |
separator = ' ', |
||
id_limit = |
id_limit = 256000000, |
||
custom_access = 's2cid-access', |
custom_access = 's2cid-access', |
||
}, |
}, |
||
Line 1,999: | Line 2,158: | ||
return { |
return { |
||
use_identifier_redirects = true, -- when true use redirect name for identifier label links |
use_identifier_redirects = true, -- when true use redirect name for identifier label links; always true at en.wiki |
||
local_lang_cat_enable = false; -- when true categorizes pages where |language=<local wiki's language>; always false at en.wiki |
|||
date_name_auto_xlate_enable = false; -- when true translates English month-names to the local-wiki's language month names; always false at en.wiki |
|||
date_digit_auto_xlate_enable = false; -- when true translates Western date digit to the local-wiki's language digits (date_names['local_digits']); always false at en.wiki |
|||
-- tables and variables created when this module is loaded |
|||
global_df = get_date_format (), -- this line can be replaced with "global_df = 'dmy-all'," to have all dates auto translated to dmy format. |
|||
punct_skip = build_skip_table (punct_skip, punct_meta_params), |
|||
url_skip = build_skip_table (url_skip, url_meta_params), |
|||
aliases = aliases, |
aliases = aliases, |
||
Line 2,008: | Line 2,175: | ||
editor_markup_patterns = editor_markup_patterns, |
editor_markup_patterns = editor_markup_patterns, |
||
et_al_patterns = et_al_patterns, |
et_al_patterns = et_al_patterns, |
||
global_df = global_df, |
|||
id_handlers = id_handlers, |
id_handlers = id_handlers, |
||
keywords_lists = keywords_lists, |
keywords_lists = keywords_lists, |
||
keywords_xlate = keywords_xlate, |
keywords_xlate = keywords_xlate, |
||
stripmarkers=stripmarkers, |
stripmarkers = stripmarkers, |
||
invisible_chars = invisible_chars, |
invisible_chars = invisible_chars, |
||
invisible_defs = invisible_defs, |
invisible_defs = invisible_defs, |
||
indic_script = indic_script, |
indic_script = indic_script, |
||
emoji_t = emoji_t, |
|||
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, |
||
Line 2,028: | Line 2,192: | ||
this_wiki_code = this_wiki_code, |
this_wiki_code = this_wiki_code, |
||
title_types = title_types, |
title_types = title_types, |
||
uncategorized_namespaces = |
uncategorized_namespaces = uncategorized_namespaces_t, |
||
uncategorized_subpages = uncategorized_subpages, |
uncategorized_subpages = uncategorized_subpages, |
||
templates_using_volume = templates_using_volume, |
templates_using_volume = templates_using_volume, |
||
Line 2,034: | Line 2,198: | ||
templates_not_using_page = templates_not_using_page, |
templates_not_using_page = templates_not_using_page, |
||
vol_iss_pg_patterns = vol_iss_pg_patterns, |
vol_iss_pg_patterns = vol_iss_pg_patterns, |
||
single_letter_2nd_lvl_domains_t = single_letter_2nd_lvl_domains_t, |
|||
inter_wiki_map = inter_wiki_map, |
inter_wiki_map = inter_wiki_map, |
||
mw_languages_by_tag_t = mw_languages_by_tag_t, |
|||
languages = languages, |
|||
mw_languages_by_name_t = mw_languages_by_name_t, |
|||
citation_class_map_t = citation_class_map_t, |
|||
citation_issue_t = citation_issue_t, |
|||
citation_no_volume_t = citation_no_volume_t, |
|||
} |
} |