Изменения

bump pmc;
Строка 17: Строка 17:  
local 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
 
local 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
 
local 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
 
local 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
 +
local enable_sort_keys = true; -- when true module adds namespace sort keys to error and maintenance category links
      Строка 37: Строка 38:  
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
    +
--[[
 +
at en.wiki Greek characters are used as sort keys for certain items in a category so that those items are
 +
placed at the end of a category page.  See Wikipedia:Categorization#Sort_keys.  That works well for en.wiki
 +
because English is written using the Latn script.  This may not work well for other languages.  At en.wiki it
 +
is desireable to place content from certain namespaces at the end of a category listing so the module adds sort
 +
keys to error and maintenance category links when rendering a cs1|2 template on a page in that namespace.
 +
 +
i18n: if this does not work well for your language, set <enable_sort_keys> to false.
 +
]]
 +
 +
local name_space_sort_keys = { -- sort keys to be used with these namespaces:
 +
[4] = 'ω', -- wikipedia; omega
 +
[10] = 'τ', -- template; tau
 +
[118] = 'Δ', -- draft; delta
 +
['other'] = 'ο', -- all other non-talk namespaces except main (article); omicron
 +
}
    
--[[--------------------------< M E S S A G E S >--------------------------------------------------------------
 
--[[--------------------------< M E S S A G E S >--------------------------------------------------------------
Строка 114: Строка 131:  
-- categories
 
-- categories
 
['cat wikilink'] = '[[Category:$1]]', -- $1 is the category name
 
['cat wikilink'] = '[[Category:$1]]', -- $1 is the category name
 +
['cat wikilink sk'] = '[[Category:$1|$2]]', -- $1 is the category name; $2 is namespace sort key
 
[':cat wikilink'] = '[[:Category:$1|link]]', -- category name as maintenance message wikilink; $1 is the category name
 
[':cat wikilink'] = '[[:Category:$1|link]]', -- category name as maintenance message wikilink; $1 is the category name
   Строка 264: Строка 282:  
['ASINTLD'] = 'asin-tld',
 
['ASINTLD'] = 'asin-tld',
 
['At'] = 'at', -- Used by InternetArchiveBot
 
['At'] = 'at', -- Used by InternetArchiveBot
['Authors'] = {'authors', 'people', 'credits'},
+
['Authors'] = {'people', 'credits'},
 
['BookTitle'] = {'book-title', 'booktitle'},
 
['BookTitle'] = {'book-title', 'booktitle'},
 
['Cartography'] = 'cartography',
 
['Cartography'] = 'cartography',
Строка 270: Строка 288:  
['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', 'section-url', 'chapterurl'}, -- Used by InternetArchiveBot
+
['ChapterURL'] = {'chapter-url', 'contribution-url', 'entry-url', 'article-url', 'section-url'}, -- 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
Строка 452: Строка 470:  
]]
 
]]
   −
local single_letter_2nd_lvl_domains_t = {'cash', 'company', 'foundation', 'org', 'today'};
+
local single_letter_2nd_lvl_domains_t = {'cash', 'company', 'foundation', 'media', 'org', 'today'};
      Строка 674: Строка 692:     
local function get_date_format ()
 
local function get_date_format ()
-- if title_object.namespace == 10 then -- not in template space so that unused templates appear in unused-template-reports;
   
if not content then -- nil content when we're in template
 
if not content then -- nil content when we're in template
 
return nil; -- auto-formatting does not work in Template space so don't set global_df
 
return nil; -- auto-formatting does not work in Template space so don't set global_df
Строка 681: Строка 698:  
local start, _, match = content:find(pattern); -- match is the three letters indicating desired date format
 
local start, _, match = content:find(pattern); -- match is the three letters indicating desired date format
 
if match then
 
if match then
local use_dates_template = content:match ('%b{}', start); -- get the whole template
+
local use_dates_template = content:match ('%b{}', start); -- get the whole template
if use_dates_template:match ('| *cs1%-dates *= *[lsy][sy]?') then -- look for |cs1-dates=publication date length access-/archive-date length
+
if use_dates_template:match ('| *cs1%-dates *= *[lsy][sy]?') then -- look for |cs1-dates=publication date length access-/archive-date length
 
return match:lower() .. '-' .. use_dates_template:match ('| *cs1%-dates *= *([lsy][sy]?)');
 
return match:lower() .. '-' .. use_dates_template:match ('| *cs1%-dates *= *([lsy][sy]?)');
 
else
 
else
Строка 898: Строка 915:     
local function get_cs1_config ()
 
local function get_cs1_config ()
-- if title_object.namespace == 10 then -- not in template space so that unused templates appear in unused-template-reports;
   
if not content then -- nil content when we're in template
 
if not content then -- nil content when we're in template
 
return nil; -- auto-formatting does not work in Template space so don't set global_df
 
return nil; -- auto-formatting does not work in Template space so don't set global_df
Строка 1035: Строка 1051:     
-- list of emoji that use a 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
+
-- from: https://unicode.org/Public/emoji/15.1/emoji-zwj-sequences.txt; version: 15.1; 2023-06-05
 
-- table created by: [[:en:Module:Make emoji zwj table]]
 
-- table created by: [[:en:Module:Make emoji zwj table]]
 
local emoji_t = { -- indexes are decimal forms of the hex values in U+xxxx
 
local emoji_t = { -- indexes are decimal forms of the hex values in U+xxxx
 +
[8596] = true, -- U+2194 ↔ left right arrow
 +
[8597] = true, -- U+2195 ↕ up down arrow
 
[9760] = true, -- U+2620 ☠ skull and crossbones
 
[9760] = true, -- U+2620 ☠ skull and crossbones
 
[9792] = true, -- U+2640 ♀ female sign
 
[9792] = true, -- U+2640 ♀ female sign
Строка 1047: Строка 1065:  
[10052] = true, -- U+2744 ❄ snowflake
 
[10052] = true, -- U+2744 ❄ snowflake
 
[10084] = true, -- U+2764 ❤ heavy black heart
 
[10084] = true, -- U+2764 ❤ heavy black heart
 +
[10145] = true, -- U+27A1 ➡ black rightwards arrow
 
[11035] = true, -- U+2B1B ⬛ black large square
 
[11035] = true, -- U+2B1B ⬛ black large square
 
[127752] = true, -- U+1F308 🌈 rainbow
 
[127752] = true, -- U+1F308 🌈 rainbow
Строка 1064: Строка 1083:  
[128105] = true, -- U+1F469 👩 woman
 
[128105] = true, -- U+1F469 👩 woman
 
[128139] = true, -- U+1F48B 💋 kiss mark
 
[128139] = true, -- U+1F48B 💋 kiss mark
 +
[128165] = true, -- U+1F4A5 💥 collision symbol
 
[128168] = true, -- U+1F4A8 💨 dash symbol
 
[128168] = true, -- U+1F4A8 💨 dash symbol
 
[128171] = true, -- U+1F4AB 💫 dizzy symbol
 
[128171] = true, -- U+1F4AB 💫 dizzy symbol
Строка 1074: Строка 1094:  
[128640] = true, -- U+1F680 🚀 rocket
 
[128640] = true, -- U+1F680 🚀 rocket
 
[128658] = true, -- U+1F692 🚒 fire engine
 
[128658] = true, -- U+1F692 🚒 fire engine
 +
[129001] = true, -- U+1F7E9 🟩 large green square
 +
[129003] = true, -- U+1F7EB 🟫 large brown square
 
[129309] = true, -- U+1F91D 🤝 handshake
 
[129309] = true, -- U+1F91D 🤝 handshake
 
[129455] = true, -- U+1F9AF 🦯 probing cane
 
[129455] = true, -- U+1F9AF 🦯 probing cane
Строка 1084: Строка 1106:  
[129469] = true, -- U+1F9BD 🦽 manual wheelchair
 
[129469] = true, -- U+1F9BD 🦽 manual wheelchair
 
[129489] = true, -- U+1F9D1 🧑 adult
 
[129489] = true, -- U+1F9D1 🧑 adult
 +
[129490] = true, -- U+1F9D2 🧒 child
 
[129657] = true, -- U+1FA79 🩹 adhesive bandage
 
[129657] = true, -- U+1FA79 🩹 adhesive bandage
 
[129778] = true, -- U+1FAF2 🫲 leftwards hand
 
[129778] = true, -- U+1FAF2 🫲 leftwards hand
Строка 1164: Строка 1187:  
['ca-valencia'] = 'Valencian', -- IETF variant of Catalan
 
['ca-valencia'] = 'Valencian', -- IETF variant of Catalan
 
['fkv'] = 'Kven', -- MediaWiki returns Kvensk
 
['fkv'] = 'Kven', -- MediaWiki returns Kvensk
 +
['gsw'] = 'Swiss German',
 
['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
Строка 1169: Строка 1193:  
['mis-x-ripuar'] = 'Ripuarian', -- override MediaWiki ksh; no IANA/ISO 639 code for Ripuarian; 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
 
['nan-tw'] = 'Taiwanese Hokkien', -- make room for MediaWiki/IANA/ISO 639 nan: Min Nan Chinese and support en.wiki preferred name
 +
['sr-ec'] = 'Serbian (Cyrillic script)', -- MediaWiki returns српски (ћирилица)
 +
['sr-el'] = 'Serbian (Latin script)', -- MediaWiki returns srpski (latinica)
 
}
 
}
    
local lang_name_remap = { -- used for |language=; names require proper capitalization; tags must be lowercase
 
local lang_name_remap = { -- used for |language=; names require proper capitalization; tags must be lowercase
 +
['alemannic'] = {'Swiss German', 'gsw'}, -- ISO 639-2, -3 alternate for Swiss German; MediaWiki mediawiki returns Alemannic for gsw; en.wiki preferred name
 
['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
Строка 1185: Строка 1212:  
['kvensk'] = {'Kven', 'fkv'}, -- ...they say to refer to IANA registry for English names
 
['kvensk'] = {'Kven', 'fkv'}, -- ...they say to refer to IANA registry for English names
 
['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
 +
['serbian (cyrillic script)'] = {'Serbian (Cyrillic script)', 'sr-cyrl'}, -- special case to get correct tag when |language=sr-ec
 +
['serbian (latin script)'] = {'Serbian (Latin script)', 'sr-latn'}, -- special case to get correct tag when |language=sr-el
 +
['swiss german'] = {'Swiss German', 'gsw'},
 
['taiwanese hokkien'] = {'Taiwanese Hokkien', 'nan-tw'}, -- make room for MediaWiki/IANA/ISO 639 nan: Min Nan Chinese  
 
['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
Строка 1229: Строка 1259:  
['thesis'] = 'Thesis',
 
['thesis'] = 'Thesis',
 
}
 
}
 +
 +
 +
--[[--------------------------< B U I L D _ K N O W N _ F R E E _ D O I _ R E G I S T R A N T S _ T A B L E >--
 +
 +
build a table of doi registrants known to be free-to-read  In a doi, the registrant ID is the series of digits
 +
between the '10.' and the first '/': in doi 10.1100/sommat, 1100 is the registrant ID
 +
 +
]]
 +
 +
local function build_free_doi_registrants_table()
 +
local registrants_t = {};
 +
for _, v in ipairs ({
 +
'1100', '1155', '1186', '1371', '1629', '1989', '1999', '2147', '2196', '3285', '3389', '3390', '3410',
 +
'3748', '3814', '3847', '3897', '4061', '4089', '4103', '4172', '4175', '4236', '4239', '4240', '4251',
 +
'4252', '4253', '4254', '4291', '4292', '4329', '4330', '4331', '5194', '5306', '5312', '5313', '5314',
 +
'5315', '5316', '5317', '5318', '5319', '5320', '5321', '5334', '5402', '5409', '5410', '5411', '5412',
 +
'5492', '5493', '5494', '5495', '5496', '5497', '5498', '5499', '5500', '5501', '5527', '5528', '5662',
 +
'6064', '6219', '7167', '7217', '7287', '7482', '7490', '7554', '7717', '7766', '11131', '11569', '11647',
 +
'11648', '12688', '12703', '12715', '12998', '13105', '14293', '14303', '15215', '15412', '15560', '16995',
 +
'17645', '19080', '19173', '20944', '21037', '21468', '21767', '22261', '22459', '24105', '24196', '24966',
 +
'26775', '30845', '32545', '35711', '35712', '35713', '35995', '36648', '37126', '37532', '37871', '47128',
 +
'47622', '47959', '52437', '52975', '53288', '54081', '54947', '55667', '55914', '57009', '58647', '59081',
 +
}) do
 +
registrants_t[v] = true; -- build a k/v table of known free-to-read doi registrants
 +
end
 +
 +
return registrants_t;
 +
end
      Строка 1306: Строка 1364:  
},
 
},
 
err_archive_date_url_ts_mismatch = {
 
err_archive_date_url_ts_mismatch = {
message = '<code class="cs1-code">&#124;archive-date=</code> / <code class="cs1-code">&#124;archive-url=</code> timestamp mismatch',
+
message = '<code class="cs1-code">&#124;archive-date=</code> / <code class="cs1-code">&#124;archive-url=</code> timestamp mismatch; $1 suggested',
 
anchor = 'archive_date_url_ts_mismatch',
 
anchor = 'archive_date_url_ts_mismatch',
 
category = 'CS1 errors: archive-url',
 
category = 'CS1 errors: archive-url',
Строка 1633: Строка 1691:  
anchor = 'extra_text_volume',
 
anchor = 'extra_text_volume',
 
category = 'CS1 errors: extra text: volume',
 
category = 'CS1 errors: extra text: volume',
hidden = true,
+
hidden = false,
 
},
 
},
 
err_first_missing_last = {
 
err_first_missing_last = {
Строка 1687: Строка 1745:  
anchor = 'missing_periodical',
 
anchor = 'missing_periodical',
 
category = 'CS1 errors: missing periodical',
 
category = 'CS1 errors: missing periodical',
hidden = true
+
hidden = false
 
},
 
},
 
err_missing_pipe = {
 
err_missing_pipe = {
Строка 1700: Строка 1758:  
category = 'CS1 errors: missing publisher',
 
category = 'CS1 errors: missing publisher',
 
hidden = false
 
hidden = false
 +
},
 +
err_numeric_names = {
 +
message = '<code class="cs1-code">&#124;$1=</code> has numeric name', -- $1 is parameter name',
 +
anchor = 'numeric_names',
 +
category = 'CS1 errors: numeric name',
 +
hidden = false,
 
},
 
},
 
err_param_access_requires_param = {
 
err_param_access_requires_param = {
Строка 1792: Строка 1856:  
anchor = 'archived_copy',
 
anchor = 'archived_copy',
 
category = 'CS1 maint: archived copy as title',
 
category = 'CS1 maint: archived copy as title',
hidden = true,
  −
},
  −
maint_authors = {
  −
message = nil,
  −
anchor = 'authors',
  −
category = 'CS1 maint: uses authors parameter',
   
hidden = true,
 
hidden = true,
 
},
 
},
Строка 1852: Строка 1910:  
anchor = 'doi_inactive_dated',
 
anchor = 'doi_inactive_dated',
 
category = 'CS1 maint: DOI inactive as of $2$3$1', -- $1 is year, $2 is month-name or empty string, $3 is space or empty string
 
category = 'CS1 maint: DOI inactive as of $2$3$1', -- $1 is year, $2 is month-name or empty string, $3 is space or empty string
 +
hidden = true,
 +
},
 +
maint_doi_unflagged_free = {
 +
message = nil,
 +
anchor = 'doi_unflagged_free',
 +
category = 'CS1 maint: unflagged free DOI',
 
hidden = true,
 
hidden = true,
 
},
 
},
Строка 2202: Строка 2266:  
encode = true,
 
encode = true,
 
separator = '&nbsp;',
 
separator = '&nbsp;',
id_limit = 10030000000,
+
id_limit = 10100000000,
 
},
 
},
 
['OL'] = {
 
['OL'] = {
Строка 2240: Строка 2304:  
encode = true,
 
encode = true,
 
separator = '&nbsp;',
 
separator = '&nbsp;',
id_limit = 10700000,
+
id_limit = 10900000,
 
access = 'free', -- free to read
 
access = 'free', -- free to read
 
},
 
},
Строка 2287: Строка 2351:  
encode = true,
 
encode = true,
 
separator = '&nbsp;',
 
separator = '&nbsp;',
id_limit = 4600000,
+
id_limit = 4700000,
 
custom_access = 'ssrn-access',
 
custom_access = 'ssrn-access',
 
},
 
},
Строка 2300: Строка 2364:  
encode = false,
 
encode = false,
 
separator = '&nbsp;',
 
separator = '&nbsp;',
id_limit = 266000000,
+
id_limit = 268000000,
 
custom_access = 's2cid-access',
 
custom_access = 's2cid-access',
 
},
 
},
Строка 2336: Строка 2400:  
date_name_auto_xlate_enable = date_name_auto_xlate_enable,
 
date_name_auto_xlate_enable = date_name_auto_xlate_enable,
 
date_digit_auto_xlate_enable = date_digit_auto_xlate_enable,
 
date_digit_auto_xlate_enable = date_digit_auto_xlate_enable,
 +
enable_sort_keys = enable_sort_keys,
 
 
 
-- tables and variables created when this module is loaded
 
-- tables and variables created when this module is loaded
Строка 2342: Строка 2407:  
punct_skip = build_skip_table (punct_skip, punct_meta_params),
 
punct_skip = build_skip_table (punct_skip, punct_meta_params),
 
url_skip = build_skip_table (url_skip, url_meta_params),
 
url_skip = build_skip_table (url_skip, url_meta_params),
 +
known_free_doi_registrants_t = build_free_doi_registrants_table(),
    +
name_space_sort_keys = name_space_sort_keys,
 
aliases = aliases,
 
aliases = aliases,
 
special_case_translation = special_case_translation,
 
special_case_translation = special_case_translation,
Анонимный участник