Modulus:sectio
Usus
+/-Usurpatur in “Formula:S”
{{A|{{#invoke:strConversion|laAncora|{{{1}}}}}}}{{#invoke:sectio|section}}<noinclude>
-- Copy of the [[:fr:Module:section]]
-- 2018-07-09 - Module:phrasis to Module:locutio.
-- 2017-05-21 - Removed obsolete reference to Module:linguae.
-- 2016-08-17 - Inhibited creating real categories until algorithm is fixed to work properly.
-- 2016-08-04 — Modified and extended by Usor:YaganZ
-- Modified and maintained by: Usor:DenisWasRight
b = require('Module:basis')
typ = require('Module:partes orationis')
-- lang = require('Module:linguae')
sect = require('Module:sectionibus')
locu = require('Module:locutio')
local p = {}
-- Types of words allowed in international conventions (-> no language name in the categories)
local conv_allowed = {
['scientific names'] = true,
['numbers'] = true,
}
-- General error messages
local link_help_section = "[[Victionarium:List of sections|<span title=\"Unknown section\">*</span>]]"
local link_help_type = "[[Victionarium:Types of words|<span title=\"Unknown section\">*</span>]]"
local link_help_language = "[[VT:List of languages|<span title=\"Unknown language\">*</span>]]"
local link_help_number = "<span title=\"Incorrect number\">*</span>"
-- Regroup the categories
categories = {}
-- Regroup the error messages
errors = {}
-- Activer pour voir les catégories générées (seulement pour déboguer avec l’aperçu : désactiver en sauvegardant)
-------------------------------
local isdebug = false
-------------------------------
-- For the anchors generated
local show_anchor = false
function _add_category(name_cat, key, writing)
local text_category = ''
-- Debug : displays all
if isdebug then
if key then
text_category = b.fact_category(name_cat, nil, true) .. '(' .. key .. ')'
else
text_category = b.fact_category(name_cat, nil, true)
end
-- Actual use: create a true category
else
text_category = b.fact_category_content(name_cat, key, writing)
end
table.insert(categories, text_category)
end
function _add_error(message)
if message ~= nil and message ~= '' then
table.insert(errors, message)
end
end
-- Confirm that number is a positive integer
function _check_num(num)
num = tonumber(num)
if num == nil then return false end -- Pas un nombre
if num ~= math.floor(num) then return false end -- Pas un entier
if num > 0 then
return true
end
return false
end
---------------------------------------------------------------------------------------------------------------------
-- SECTION TYPES OF WORDS
-- Crée le texte qui sera affiché pour la section de type de mot donné
function _fact_title(typen, flex, loc, num)
-- Full Name
local name = typ.get_name_singular(typen, loc, flex)
-- No name ?
if name == nil then
-- Peut-être parce qu’on demande un nom de locution pour un mot qui n’en est pas ?
local name_loc = typ.get_name_singular(typen, true, flex)
if not loc and name_loc ~= nil then
name = name_loc
_add_category("Victionarium:Phrases without space", typen)
end
end
-- Number ?
local numtext = ''
if num then
if _check_num(num) then
numtext = ' ' .. num
else
_add_error(link_help_number)
_add_category("Victionarium:Incorrect section number", num)
end
end
-- Final display
if (typen) then
-- Type of word defined?
if name then
return b.ucfirst(name) .. numtext
else
-- Undefined: posted (but with an asterisk + category)
_add_error(link_help_type)
_add_category('Victionarium:Sections with unknown name', typen)
return numtext
end
-- If type is not even given
else
_add_error(link_help_type)
_add_category('Victionarium:Untitled sections')
return 'Untitled sections'
end
end
-- Crée l’ancre correspondant au titre de section donné
function _fact_anchor(article, lang, typen, flex, loc, num)
-- Type abbreviation
local abrev = typ.get_abrev(typen, loc, flex)
local anchor = ''
-- Final display
if (lang and abrev) then
anchor = lang .. '-' .. abrev
num = num or 1
if num then
if _check_num(num) then
anchor = anchor .. '-' .. num
end
end
end
return anchor
end
local sinogramme -- pour un clé de sinogramme
-- Crée la catégorie correspondant au titre de section donné
function _fact_category(code_lang, typen, flex, loc, key, gender, title)
-- Pas de catégorie si pas espace principal
if not b.page_of_content then return '' end
-- Nom complet du type au pluriel pour la catégorie
local name = typ.get_name_plural(typen, loc, flex)
-- Spécial : genre pour les prénoms
if name == 'given names' and gender ~= nil then
if gender == 'm' then
name = name .. ' masc.'
elseif gender == 'f' then
name = name .. ' fem.'
elseif gender == 'mf' then
name = name .. ' mix.'
else
_add_category('Victionarium:Sections with invalid gender', gender)
end
end
-- Language name
-- local language = lang.get_name(code_lang)
local language = 'Latine'
-- Category "type of word" and "language"
if name and language then
local name_cat = ''
-- Spécial : sections spéciales en conventions internationales
-- Pas de nom de langue pour ça
if code_lang == 'conv' then
if conv_allowed[name] ~= nil then
name_cat = b.ucfirst(name)
else
-- Type de mot pas autorisé pour les conventions internationales : afficher normalement, mais catégoriser ?
--_ajoute_categorie('Wiktionnaire:Sections non autorisées en conventions internationales', nom)
name_cat = b.ucfirst(name) .. ' ' .. language
end
else
name_cat = b.ucfirst(name) .. ' ' .. language
end
-- Ajoute aussi la catégorie de langue si la clef est donnée (pour modifier la catégorie créée par la section de langue)
if key ~= nil and key ~= '' then
_add_category(language, key)
end
-- clé de tri d’un sinogramme
if name == 'sinogrammes' then
if not sinogramme then
sinogramme = require('Module:Sinogramme')
end
key = sinogramme.string_radical_line(title)
end
_add_category(name_cat, key)
else
-- Nom correct, mais langue incorrecte : pas de catégorie
if name then
_add_error(link_help_language)
if code_lang ~= nil and code_lang ~= '' then
-- Code donné : n’est pas défini dans la liste
_add_category('Victionarium:Sections with unknown language', name)
else
-- Pas de code langue donné du tout
_add_category('Victionarium:Sections with unspecified language', name)
end
end
end
end
-- TYPES DE MOT : FONCTION POUR MODÈLE (ou en lui passant le frame d’un modèle)
function p.entry(frame)
-- Récupération des variables nécessaires à la création du titre
local args = frame:getParent().args
local argsnum = b.trim_parametres(args)
local article = mw.title.getCurrentTitle()
local typen = argsnum[1] -- Le type de mot (nom standard ou alias)
local lang = argsnum[2] -- Code langue
local key = args['key'] -- Clé de tri (quand le tri par défaut ne convient pas)
-- Stocker les erreurs pour afficher les catégories à la fin
local error_cat = ''
-- s’agit-il d’une flexion ?
local flex = false
if argsnum[3] then
if argsnum[3]=='flexion' then
flex=true
else
_add_category('Victionarium:Sections type with invalid parameter 3')
end
end
-- s’agit-il d’une locution ?
local loc = locu.is_phrase(args, article, lang)
local num = args.num
-- S’il s’agit d’un alias, on crée une catégorie (pour remplacer les alias par le mot standard si on le veut)
if typ.is_alias(typen) then
_add_category('Victionarium:Types of words sections using alias', typen)
end
-- Crée le texte, l’ancre, la catégorie et utilise le tout pour créer le titre de section de type de mot complet.
-- _fact_category(lang, typen, flex, loc, key, args['gender'], article.text)
local text_title = _fact_title(typen, flex, loc, num)
local anchor = _fact_anchor(article, lang, typen, flex, loc, num)
-- Récupère aussi la class du type de mot (si elle existe) pour afficher une icône adaptée
local class = sect.get_class('dictio') or ""
local final = '<span class="' .. class .. '" id="' .. anchor .. '">' .. text_title .. '</span>'
-- Ajoute ancre par défaut
if num == nil or tonumber(num) == 1 then
local anchor_defaut = mw.ustring.gsub(anchor, '-1$', '')
local anchor_defaut_span = '<span id="' .. anchor_defaut .. '" ></span>'
final = final .. anchor_defaut_span
end
if show_anchor then final = final .. ' ' .. anchor end
return final
end
---------------------------------------------------------------------------------------------------------------------
-- AUTRES SECTIONS (étymologie, synonymes...)
-- AUTRES SECTIONS : FONCTION POUR MODÈLE (ou en lui passant le frame d’un modèle)
-- Création d’un titre de section pour tout ce qui n’est pas type de mot, ni langue
function p.section_other(frame)
-- Récupération des variables nécessaires à la création du titre
local args = frame:getParent().args
local argsnum = b.trim_parametres(args)
local title = argsnum[1]
if argsnum[2] then
_add_category('Victionarium:Sections with unnecessary parameters', argsnum[2])
end
-- S’il s’agit d’un alias, on crée une catégorie (pour remplacer les alias par le mot standard si on le veut)
if sect.is_alias(title) then
-- On ignore ces deux titres, utilisés (pour l’instant) sans préférence
local ignore_alias = {['voir'] = true, ['trad-trier'] = true, ['variantes orthographiques'] = true}
if ignore_alias[title] == nil then
_add_category('Victionarium:Sections using alias', title)
end
end
-- Récupération du texte associé à ce titre (créé dans le module dédié section_article)
local text_title = title and b.ucfirst(sect.get_name_section(title)) or "Untitled sections"
-- Récupère aussi la class de la section (si elle existe) pour afficher une icône adaptée
local class = sect.get_class(title) or ""
-- Finalisation du texte affiché
local final = '<span class="' .. class .. '">' .. text_title .. '</span>'
return final
end
---------------------------------------------------------------------------------------------------------------------
-- TOUTES SECTIONS (autres que LANGUE)
-- TOUTES SECTIONS : FONCTION POUR MODÈLE
-- Renvoie un titre de section, normale ou avec de type de mot défini
function p.section(frame)
local args = frame:getParent().args
local title = args[1] and mw.text.trim(args[1]) or ''
local text_final = ''
-- Pas même un titre donné ?
if title == nil or title == '' then
_add_error(link_help_section)
_add_category('Victionarium:Untitled sections')
text_final = 'Untitled sections'
else
-- S’agit-il d’un titre de type de mot ?
if typ.is_type(title) then
text_final = p.entry(frame)
-- Sinon, est-ce une section autorisée ? (pas de fonction dédiée pour l’instant)
elseif sect.is_title(title) then
text_final = p.section_other(frame)
-- Section non-supportée : on affiche quand même la section, mais avec un lien vers l’aide (avec une *)
-- pour soit 1) trouver le bon nom à utiliser,
-- soit 2) proposer que le titre utilisé soit supporté.
else
-- Lien d’aide selon qu’il y a une langue donnée ou pas
if args[2] ~= nil and args[2] ~= '' then
_add_error(link_help_type)
else
_add_error(link_help_section)
end
_add_category('Victionarium:Sections with unknown title', title)
text_final = b.ucfirst(title)
end
end
-- Finalise les erreurs et les catégories
local text_errors = table.concat(errors)
local text_categories = table.concat(categories)
return text_final .. text_errors .. text_categories
end
return p