Module:Classement

La bibliothèque libre.
Sauter à la navigation Sauter à la recherche
Documentation du module Documentation du module[voir] [modifier] [purger]
La documentation de ce module est incluse depuis sa sous-page de documentation.
Présentation

Ce modèle permet de classer, dans des catégories, la page « L’Avare » avant « Avertissement », ce que ne fait pas par défaut MediaWiki qui classe un titre toujours d’après son premier caractère (et donc « L’Avare » sera classé à la lettre « L »).

Le modèle lit le nom de la page qui l’appelle et en élimine ou modifie les premiers caractères pour mieux la classer par ordre alphabétique dans les catégories où elle est.

Il élimine ou modifie :

  • l’article du titre : « Le », « La », « L’ » (apostrophe courbe), « L' » (apostrophe droite), « Les » (suivi ou non d’une lettre accentuée).
  • les accents sur la première lettre : « Â », « À », « É », « Ê », « È », « Î », « Ô ».
  • les ligatures « Æ » et « Œ » en début de titres.
  • le guillemet ouvrant («).
  • les accents et les guillemets (« et ») et d’autres caractères à l’intérieur des titres pris en charge.
  • les lettres « à », « é », « è », « î », à l’intérieur des titres qui ne relèvent pas des cas qui précèdent.
  • à peu près tous les accents et caractères spéciaux des sous-pages.


Syntaxe pour le modèle seul
{{Classement|1}}
où « 1 » est la partie du titre que l’on veut classer, par défaut {{SUBPAGENAME}}.

On indique cette partie avec un mot magique :

{{PAGENAME}} pour le titre entier de la page : « L’Avare » sera classé à « Avare ».

Sinon, on aura par défaut {{SUBPAGENAME}} qui classe normalement un titre sans sous-page, mais qui est surtout utile pour les sous-pages : l’article « Dictionnaire philosophique/Apparition » sera ainsi classé à « Apparition ».

Astuce : dans les cas très rares qui ne seront sans doute pas pris en charge par ce modèle, par exemple lorsque le titre est en grec (Γνωτι Σεαυτον), il est possible d’ajouter dans la page :
{{Classement|Gnoti séauton}}
en vérifiant que la clé de tri contienne bien un caractère ou un article pris en charge par le modèle, par exemple « Le » ou, comme dans l’exemple, « é ».


Utilisation
Utilisation seule

Ce modèle est fait pour être ajouté à des modèles de titre. Son utilisation directe dans les pages de l’espace principal n’est généralement pas nécessaire puisqu’il ne fait que remplacer DEFAULSORT. Mais il peut être plus rapide d’ajouter {{classement}} dans une page, que d’ajouter {{DEFAUTSORT:clé de tri}}.

Dans le cas d’une telle utilisation, le modèle ne doit être ajouté que dans des pages ne contenant pas de modèles de titre : redirections ou catégories par exemple.


Utilisation avec d’autres modèles

De manière générale, un texte sera classé par le modèle dès lors que la page du texte contient une boîte de titre dans les cas suivants :

Soit avec les modèles {{Titre}}, {{Journal}}, {{ChapitreNav}}, {{NavigateurLaFontaine}}, {{Éditions}}, {{PoèmeNav}}, {{TitrePoeme}}.

Il n’est donc pas nécessaire d’utiliser DEFAULTSORT avec ces modèles. Il reste possible soit d’utiliser l’option DEFAULTSORT de {{Titre}} et {{Journal}}, soit de choisir une clé de tri spécifique pour une catégorie particulière :

[[Catégorie:Nom|clé]]

Soit avec une transclusion

Le modèle n’est utilisé que lorsque <pages index... /> est affiché avec un en-tête (paramètre header=1 de {{Proofreadpage header template}}). Le paramètre Type des index détermine en partie son comportement pour classer les textes selon un titre principal ou selon les sous-pages des dictionnaires. Il fonctionne dans les cas suivants :

Type « Journal » : le classement se fait d’après l’ensemble du titre ;
Type « Dictionnaire » : le classement se fait d’après le titre des sous-pages.
Autres : dans tous les autres cas, le classement se fait uniquement sur l’ensemble du titre en excluant les sous-pages. Cette exclusion est nécessaire en attendant de déterminer comment classer les différents types de sous-pages autres que les articles de dictionnaire (comme « Titre/Chapitre »).


Cas connus de classements erronés

Comme le modèle doit être mis à jour au fur et à mesure de son utilisation pour tenir compte du plus grand nombre de cas possibles, quelques inconvénients subsistent.

  1. Comme ce modèle ne s’applique pas à tous les titres, certaines anomalies de classement apparaissent. Les titres seront correctement rangés à la bonne lettre dans presque tous les cas (voir point suivant), mais pas toujours dans le bon ordre. Exemples :
    • Un cœur simple, qui, à cause du « œ », sera classé après les titres commençant également par « Un c… ».
    • VIÏ, qui, à cause de la lettre « Ï », sera classé après les titres commençant par « Vi… ».
    Les lettres « à », « é », « è », « î » sont maintenant détectées, et les autres cas, comme ceux décrits ci-dessus, seront bientôt pris en charge. Il n’est donc pas nécessaire d’utiliser DEFAULTSORT pour corriger le classement.
  2. Dans quelques cas très rares (titres en grec par exemple), les titres ne sont pas correctement classés.
  3. Les sous-pages sont actuellement exclues dans les modèles de titre qui utilise ce modèle, sauf dans le cas des dictionnaires, et elles doivent être classées comme d’habitude.
  4. Les chiffres romains ne sont pas classés correctement. Ce cas paraît difficile à prendre en charge.


En cas d’erreur

Si vous constatez un classement erroné, le plus simple est de le signaler en page de discussion afin d’améliorer le modèle.

Si vous voyez un message d’avertissement rouge : « La clé de tri écrase etc. », regardez si la page contient un DEFAULTSORT et enlevez-le. Si le message persiste ou si le classement qui en résulte est incorrect, signalez-le en page de discussion.

Pour obtenir un classement correct sans message d’avertissement, on peut éventuellement ajouter le paramètre « noerror » :

{{DEFAULTSORT:Titre|noerror}}

La page est alors classée selon la clé de tri choisie et le message d’avertissement n’apparaît pas.

Toutefois, il est préférable de signaler ce genre de cas en page de discussion.

--[[
Lua module in order to work on sort keys
]]--
function getSortKey( str )
    str = mw.text.trim( mw.ustring.lower( removeAccentuation( str ) ), " «»\t\r\n\f'\"" )
    --Should be in decreasing order
    local wordsToRemove = { ["les[^%a]"]=3, ["le[^%a]"]=2, ["la[^%a]"]=2, ["des[^%a]"]=3, ["de[^%a]"]=2, ["du[^%a]"]=2, ["l'[%a]"]=2, ["d'[%a]"] = 2 }
    for key, value in next, wordsToRemove do
        if mw.ustring.find( str, "^" .. key ) then
            str = mw.ustring.sub( str, value + 1 )
        end
    end
    return str
end


function getSortKeyForName( firstName, lastName )
    --Should be in decreasing order
    local particles = { "von der ", "de las ", "de les ", "de los ", "das ", "del ", "dos ", "las ", "von ", "af ", "av ", "da ", "de ", "la ", "os ", "zu ", "d’", "d'" } -- c.f. http://fr.geneawiki.com/index.php/La_norme_AFNOR_NF_Z44-001
    local particle = ""
    local i = 1
    local length = table.getn( particles )

    while i <= length and particle == "" do
        if mw.ustring.find( lastName, "^" .. particles[i] ) then
            particle = particles[i]
            lastName = mw.ustring.sub( lastName, mw.ustring.len(particle) + 1 )
            break
        end
        i = i + 1
    end

    local key = removeAccentuation( lastName )
    if firstName ~= nil and firstName ~= "" then
        key = key .. ", " .. removeAccentuation( firstName )
    end
    if particle ~= "" then
        key = key .. " " .. removeAccentuation( particle )
    end

    return key
end

-- Only works for Basic Latin-based languages
function removeAccentuation( text )
    local list = { ["'"]="’", ["a"]="áàâãä", ["A"]="ÁÀÂÄ", ["ae"]="æ", ["Ae"]="Æ", ["c"]="ćç", ["C"]="ĆÇ", ["e"]="éèêëẽ", ["E"]="ÉÈÊË", ["g"]="ģ", ["i"]="íìîï", ["I"]="ÍÌÎÏ", ["l"]="ĺ", ["L"]="Ĺ", ["n"]="ń", ["N"]="Ń", ["oe"]="œ", ["0e"]="Œ", ["o"]="óòôöõ", ["O"]="ÓÒÔÖ", ["r"]="ŕ", ["R"]="Ŕ", ["s"]="ś", ["S"]="Ś", ["u"]="úùûü", ["U"]="ÚÙÛÜ", ["y"]="ý", ["Y"]="Ý", ["z"]="ź", ["Z"]="Ź" }
    for key, value in next,list do
       text = mw.ustring.gsub( text, "[" .. value .. "]", key )
    end
    return text
end


local p = {}

function p.getSortKey( frame )
    return getSortKey( frame.args[1] )
end

function p.getSortKeyForName( frame )
    return getSortKeyForName( frame.args[1], frame.args[2] )
end

function p.removeAccentuation( frame )
    return removeAccentuation( frame.args[1] )
end

return p