local m_bases = require("Mòdul:basas") local m_langs = require("Mòdul:lengas") local m_table = require("Mòdul:taula") local m_string = require("Mòdul:string") local m_params = require("Mòdul:paramètres")

local tree = mw.loadData("Mòdul:lexic/data")

local p = {}


function p.categorizeLexicon(frame)

 local args = m_params.process(frame:getParent().args, {
   [1] = {}
 })
 local langCode = args[1]
 local title = mw.title.getCurrentTitle().text
 local langCat, lexiconCat, lang, subject = parseLexiconTitle(title, langCode)
 if langCat and lexiconCat and lang and m_langs._getLanguageCode(lang) and subject then
   local header = ""
   if tree[subject] then
     local det
     if tree[subject]["determiner"] == "du " then
       det = "le "
     elseif tree[subject]["determiner"] == "de la " then
       det = "la "
     elseif tree[subject]["determiner"] == "des " then
       det = "les "
     elseif tree[subject]["determiner"] == "de l’" then
       det = "l’"
     end
     header = mw.ustring.format(
         [=[Cette page liste les mots en %s en rapport avec %s%s.

%s

Pour ajouter une entrée à cette catégorie, utilisez le modèle {{lexique|%s|%s}}. ]=],

         lang, det, subject, tree[subject]["description"], subject, m_langs._getLanguageCode(lang)
     )
     if tree[subject]["super_categories"] ~= nil then
       for _, v in pairs(tree[subject]["super_categories"]) do
         if tree[v] then
           header = header .. mw.ustring.format(
               "%s",
               lang, tree[v]["determiner"] .. v, subject
           )
         else
           header = header .. "Catégorie:Wiktionnaire:Lexiques avec lexique parent non défini"
         end
       end
     end
   else
     header = "Catégorie:Wiktionnaire:Lexiques non définis"
   end
   return header .. mw.ustring.format("Catégorie:%sCatégorie:%s", langCat, m_bases.ucfirst(lexiconCat))
 else
   return "Catégorie:Wiktionnaire:Lexiques avec erreur"
 end

end

local function parseLexiconTitleNoLanguage(title)

 if not title then
   return nil
 end
 local determiners = { "du ", "de la ", "de l’", "des " }
 local subject
 for _, d in ipairs(determiners) do
   subject = mw.ustring.match(title, "Lexique " .. d .. "(.+) sans langue précisée")
   if subject then
     break
   end
 end
 return subject

end

return p