Module:rimes

Bonjour, vous êtes venu ici pour chercher la signification du mot Module:rimes. Dans DICTIOUS, vous trouverez non seulement toutes les significations du dictionnaire pour le mot Module:rimes, mais vous apprendrez également son étymologie, ses caractéristiques et comment dire Module:rimes au singulier et au pluriel. Tout ce que vous devez savoir sur le mot Module:rimes est ici. La définition du mot Module:rimes vous aidera à être plus précis et correct lorsque vous parlerez ou écrirez vos textes. Connaître la définition deModule:rimes, ainsi que celles d'autres mots, enrichit votre vocabulaire et vous fournit des ressources linguistiques plus nombreuses et de meilleure qualité.

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 = {
     = { required = true, allow_empty = true },
     = { required = true },
     = { alias_of = 1 },
     = { alias_of = 2 },
  }
  local args, success = m_params.process(frame:getParent().args, params, true)
  
  if args == nil then
  	return '(Merci d’indiquer une prononciation, ou à défaut, de retirer le modèle.) ]'
  end
  if args ~= "fr" then
  	return '(Merci d’indiquer le code de langue. Pour l’instant, seul le français est pris en charge) ]'
  end
  local finale = get_finale(args)
  local lang = m_lang.get_nom(args)

  return 'La prononciation <span class="API" title="Prononciation API">\\' .. args .. "\\</span> rime avec les ].]"
end


return p