Aller au contenu

Module:rimes

Définition, traduction, prononciation, anagramme et synonyme sur le dictionnaire libre Wiktionnaire.

La documentation pour ce module peut être créée à Module:rimes/Documentation

local m_params = require("Module:paramètres")
local m_lang = require('Module:langues')

local p = {}

-- Liste des sons vocaliques
local voyelles = {"a", "ɑ", "ã", "ɑ̃", "ɛ", "e", "ə", "ø", "œ", "i", "ɛ̃", "œ̃", "ɔ", "o", "ɔ̃", "u", "y", "ʊ"}

-- Teste si un son est un son vocalique.
function est_voyelle(son)
  for _, v in pairs(voyelles) do
    if v == son then
      return true
    end
  end
  return false
end

-- Teste si la prononciation fournie est une rime vocalique, c'est-à-dire qu'elle finit par un son vocalique.
function p.est_vocalique(pron)
  local last = mw.ustring.sub(pron, -1)

  if last == mw.ustring.char(0x303) then
    last = mw.ustring.sub(pron, -2)
  end

  return est_voyelle(last)
end


function get_finale(pron)
  pron = mw.text.trim(pron)
  local finale = ""
  
  pron = mw.ustring.gsub(pron, "[‿ ]", "")

  for i = #pron, 1, -1 do
    local son = mw.ustring.sub(pron, i, i)
    finale = son .. finale
    if est_voyelle(son) then
      if p.est_vocalique(pron) and i > 1 then
        local c = mw.ustring.sub(pron, i - 1, i - 1)
        local prev = c
        if (c == mw.ustring.char(0x303) or c == '.') and i > 2 then
          c = mw.ustring.sub(pron, i - 2, i - 2)
          prev = c .. prev
          if (c == mw.ustring.char(0x303) or c == '.') and i > 3 then
            c = mw.ustring.sub(pron, i - 3, i - 3)
            prev = c .. prev
          end
        end
        finale = prev .. finale
      end
      break
    end
  end
  
  if finale ~= "" then
    return finale
  else
    return ""
  end
end

-- 
function p.pron_rimes(frame)
  local params = {
    [1] = { required = true, allow_empty = true },
    [2] = { required = true },
    ["pron"] = { alias_of = 1 },
    ["lang"] = { alias_of = 2 },
  }
  local args, success = m_params.process(frame:getParent().args, params, true)
  
  if args[1] == nil then
  	return '(Merci d’indiquer une prononciation, ou à défaut, de retirer le modèle.) [[Catégorie:Wiktionnaire:Prononciations manquantes en français]]'
  end
  if args[2] ~= "fr" then
  	return '(Merci d’indiquer le code de langue. Pour l’instant, seul le français est pris en charge) [[Catégorie:Wiktionnaire:Prononciations manquantes sans langue précisée]]'
  end
  local finale = get_finale(args[1])
  local lang = m_lang.get_nom(args[2])

  return 'La prononciation <span class="API" title="Prononciation API">\\' .. args[1] .. "\\</span> rime avec les [[Annexe:Rimes en "..lang.." en \\".. finale .. '\\|mots qui finissent en <span class="API" title="Prononciation API">\\' .. finale .. "\\</span>]].[[Catégorie:Rimes en ".. lang ..' en \\' .. finale .. "\\]]"
end


return p