Module:clé de tri
Apparence
Invoqué dans {{clé de tri}}
et {{clé par langue}}
.
La documentation de ce module est générée par le modèle {{Documentation module}}.
Elle est incluse depuis la page Module:clé de tri/Documentation. Veuillez placer les catégories sur cette page-là.
Les éditeurs peuvent travailler dans le bac à sable (créer).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
local p = {}
-- Le caractère ⿕ utilisé ci-après correspond au caractère de point de code le plus élevé
-- dans le jeu de caractères utilisé sur le Wiktionnaire, et permet de forcer une lettre
-- à être classée à la suite d’une lettre donnée, le classement par défaut se contentant d’ignorer les diacritiques
p.hash = {}
p.hash['default'] = {} -- pour retirer les diacritiques
p.hash['br'] = { ['ch'] = 'c⿕', ['cʼh'] = 'c⿕⿕' }
p.hash['da'] = { ['æ'] = 'z⿕', ['ø'] = 'z⿕⿕', ['å'] = 'z⿕⿕⿕' }
p.hash['eo'] = { ['ĉ'] = 'cx', ['ĝ'] = 'gx', ['ĥ'] = 'hx', ['ĵ'] = 'jx', ['ŝ'] = 'sx', ['ŭ'] = 'ux' }
p.hash['es'] = { ['ñ'] = 'n⿕' }
p.hash['esu'] = { ['gg'] = 'g⿕', ['ll'] = 'l⿕', ['ḿ'] = 'm⿕', ['n'] = 'n⿕', ['ng'] = 'n⿕⿕',
['ńg'] = 'n⿕⿕⿕', ['rr'] = 'r⿕', ['ss'] = 's⿕', ['vv'] = 'v⿕' }
p.hash['fi'] = { ['å'] = 'z⿕', ['ä'] = 'z⿕⿕', ['ö'] = 'z⿕⿕⿕' }
p.hash['hu'] = { ['cs'] = 'c⿕', ['dz'] = 'd⿕', ['dzs'] = 'd⿕⿕', ['gy'] = 'g⿕', ['ly'] = 'l⿕',
['ny'] = 'n⿕', ['sz'] = 's⿕', ['ty'] = 't⿕', ['zs'] = 'z⿕' }
p.hash['is'] = { ['á'] = 'a⿕', ['ð'] = 'd⿕', ['é'] = 'e⿕', ['í'] = 'i⿕', ['ó'] = 'o⿕', ['ú'] = 'u⿕', ['ý'] = 'y⿕', ['þ'] = 'z', ['æ'] = 'z⿕', ['ö'] = 'z⿕⿕' }
p.hash['koy'] = { ['dl'] = 'd⿕', ['dz'] = 'd⿕⿕', ['ee'] = 'eaa', ['gg'] = 'g⿕', ['gh'] = 'g⿕⿕',
['ch'] = 'k', ['chʼ'] = 'k⿕', ['kʼ'] = 'k⿕', ['kk'] = 'k⿕⿕', ['kkʼ'] = 'k⿕⿕⿕',
['nh'] = 'n⿕', ['oo'] = 'o⿕', ['tl'] = 't⿕⿕', ['tlʼ'] = 't⿕⿕⿕', ['ts'] = 't⿕⿕⿕⿕',
['tsʼ'] = 't⿕⿕⿕⿕⿕', ['yh'] = 'y⿕', ['sh'] = 'y⿕',
['ʼ'] = 'a⿕', ['m'] = 'b', ['j'] = 'g', ['ł'] = 'l', ['tʼ'] = 't⿕',
['ʉ'] = 'u⿕', ['s'] = 'z' }
p.hash['nb'] = p.hash['da']
p.hash['nn'] = p.hash['da']
p.hash['no'] = p.hash['da']
p.hash['os'] = { ['ӕ'] = 'a⿕', ['ё'] = 'e⿕' }
p.hash['scn'] = { ['ḍḍ'] = 'd⿕', ['dd'] = 'd⿕⿕', ['đđ'] = 'd⿕⿕⿕', ['ddh'] = 'd⿕⿕⿕⿕', ['ddr'] = 'd⿕⿕⿕⿕⿕' }
p.hash['scn-2'] = { ['ch'] = 'c⿕', ['k'] = 'c⿕⿕', ['x'] = 'c⿕⿕⿕', ['dd'] = 'd⿕', ['dr'] = 'd⿕⿕', ['gh'] = 'g⿕', ['gn'] = 'g⿕⿕', ['j'] = 'g⿕⿕⿕',
['ng'] = 'n⿕', ['ngr'] = 'n⿕⿕', ['sc'] = 's⿕', ['sk'] = 's⿕⿕', ['sgr'] = 's⿕⿕⿕', ['str'] = 's⿕⿕⿕⿕', ['tr'] = 't⿕', ['zz'] = 'z⿕' }
p.hash['se'] = { ['á'] = 'a⿕', ['č'] = 'c⿕', ['đ'] = 'd⿕', ['ŋ'] = 'n⿕', ['š'] = 's⿕', ['ŧ'] = 't⿕', ['ž'] = 'z⿕' }
p.hash['sl'] = { ['č'] = 'c⿕', ['š'] = 's⿕', ['ž'] = 'z⿕' }
p.hash['sv'] = p.hash['fi']
p.hash['vi'] = { ['ă'] = 'a⿕', ['ằ'] = 'a⿕', ['ẳ'] = 'a⿕', ['ẵ'] = 'a⿕', ['ắ'] = 'a⿕', ['ặ'] = 'a⿕',
['â'] = 'a⿕⿕', ['ầ'] = 'a⿕⿕', ['ẩ'] = 'a⿕⿕', ['ẫ'] = 'a⿕⿕', ['ấ'] = 'a⿕⿕', ['ậ'] = 'a⿕⿕',
['đ'] = 'd⿕',
['ê'] = 'e⿕', ['ề'] = 'e⿕', ['ể'] = 'e⿕', ['ễ'] = 'e⿕', ['ế'] = 'e⿕', ['ệ'] = 'e⿕',
['ô'] = 'o⿕', ['ồ'] = 'o⿕', ['ổ'] = 'o⿕', ['ỗ'] = 'o⿕', ['ố'] = 'o⿕', ['ộ'] = 'o⿕',
['ơ'] = 'o⿕⿕', ['ờ'] = 'o⿕⿕', ['ở'] = 'o⿕⿕', ['ỡ'] = 'o⿕⿕', ['ớ'] = 'o⿕⿕', ['ợ'] = 'o⿕⿕',
['ư'] = 'u⿕', ['ừ'] = 'u⿕', ['ử'] = 'u⿕', ['ữ'] = 'u⿕', ['ứ'] = 'u⿕', ['ự'] = 'u⿕' }
local function ucfirst(text)
return text and mw.ustring.gsub(text, "^.", mw.ustring.upper)
end
local function str_subst(text, hash, max_len)
local len_text = mw.ustring.len(text)
local position = 1
local result = {}
while position <= len_text do
local val = nil
local found_len = nil
for len_sub = max_len, 1, -1 do
val = hash[mw.ustring.sub(text, position, position + len_sub - 1)]
if val then
found_len = len_sub
break
end
end
table.insert(result, val or mw.ustring.sub(text, position, position)) -- par défaut
position = position + (found_len or 1)
end
return table.concat(result)
end
function p.clef(titre, langue)
if titre == nil then return nil end
langue = mw.text.trim(langue or 'fr') -- français par défaut
-- Remplacement de certains symboles par des espaces
titre = mw.ustring.gsub(titre, "[-,./()·×…]", " ")
titre = mw.ustring.gsub(titre, "%s+", " ")
-- les apostrophes sont supprimées
if langue ~= 'tsolyáni' then titre = mw.ustring.gsub(titre, "’", "") end
-- Fonctions particulières par langue
if langue == 'ja' then
local ja = require('Module:ja-kana')
return ja.kana_sans_longue(titre)
end
if langue == 'tsolyáni' then titre = mw.ustring.gsub(titre, "-+", "") end
-- Cas particuliers par langue
local hash = p.hash[langue]
if hash == nil then
return titre -- pas une langue spéciale
end
-- table pour la majuscule
local hash_maj = {}
local max_len = 1
for key, value in pairs(hash) do
max_len = math.max(max_len, mw.ustring.len(key))
hash_maj[key] = value
hash_maj[mw.ustring.upper(key)] = mw.ustring.upper(value)
hash_maj[ucfirst(key)] = ucfirst(value)
end
-- Cas particuliers par langue
titre = str_subst(titre, hash_maj, max_len)
-- Décompose la chaîne notamment en séparant les accents
local nfd = mw.ustring.toNFD(titre)
if nfd == nil then return nil end
-- Enlève les caractères qui ne sont ni des lettres, ni des chiffres, ni le signe ⿕
local noacc = mw.ustring.gsub(nfd, "[^%w⿕ ]", "")
return noacc
end
function p.cle_de_tri(frame)
local titre = frame.args[1]
local langue = frame.args[2]
return p.clef(titre, langue)
end
return p