Module:ko-hangeul

Bonjour, vous êtes venu ici pour chercher la signification du mot Module:ko-hangeul. Dans DICTIOUS, vous trouverez non seulement toutes les significations du dictionnaire pour le mot Module:ko-hangeul, mais vous apprendrez également son étymologie, ses caractéristiques et comment dire Module:ko-hangeul au singulier et au pluriel. Tout ce que vous devez savoir sur le mot Module:ko-hangeul est ici. La définition du mot Module:ko-hangeul vous aidera à être plus précis et correct lorsque vous parlerez ou écrirez vos textes. Connaître la définition deModule:ko-hangeul, 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:ko-hangeul/Documentation

local ko = {}
local sinogramme = require('Module:sinogramme')

-- Il est à noter que mw.ustring.gsub ne peut pas utiliser
-- un tableau de remplacement importé par mw.loadData.
local hangeul = mw.loadData("Module:ko-hangeul/data")

-- Cette fonction décompose des hangeuls en jamos.
-- La barre oblique supprime un rieul précédent s’il y en a.
-- La fonction mw.ustring.toNFD est inutile ici
-- parce qu’elle décompose un hangeul en nouveaux jamos (bloc U+1100-U+11FF)
-- tandis que nous avons besoin des jamos de compatibilité (bloc U+3130-U+318F).
function ko.decompos(str)
	str = mw.ustring.gsub(str, "()", jamos)
	str = mw.ustring.gsub(str, "ㄹ?/", "")
	str = mw.ustring.gsub(str, "+()", "%1") -- au plus deux consonnes
	str = mw.ustring.gsub(str, "+()$", "%1") -- au plus une seule consonne à la fin
	return str
end

-- Fonction internelle pour décomposer un hangeul en jamos.
function jamos(caractere)
	local code = mw.ustring.codepoint(caractere)
	return hangeul.initiale ..
	       hangeul.voyelle ..
	       hangeul.finale
end

-- Cette fonction supprime tous les clés de prononciation ("'", "-", "." et "s")
-- et elle compose des hangeuls.
function ko.compos(str, conserver)
	if not conserver then
		str = mw.ustring.gsub(str, "", "") -- conserver seulement les hangeuls, les jamos et les espaces
	end
	str = mw.ustring.gsub(str, "()()", hangeul_sans_finale)
	str = mw.ustring.gsub(str, "()()", hangeul_avec_finale)
	return str
end

-- fonction internelle
function hangeul_sans_finale(initiale, voyelle)
	return mw.ustring.char((hangeul.indice_initiale - 1) * 21 * 28
	                       + (hangeul.indice_voyelle - 1) * 28
	                       + 0xac00)
end

-- fonction internelle
function hangeul_avec_finale(caractere, finale)
	return mw.ustring.char(mw.ustring.codepoint(caractere)
	                       + hangeul.indice_finale - 1)
end

-- Cette fonction modifie des hangeuls selon les règles du Standard
-- et les clés de prononciation ("'", "-", "." et "s").
function ko.modif_jamo(str, pron, changer_oe)
	str = ko.decompos(str)
	-- apostrophes (Articles 26-29)
	if pron then -- pour la prononciation
		str = mw.ustring.gsub(str, "'ㅇ", "ㄴ") -- Article 29
		str = mw.ustring.gsub(str, "'()", consonne_forte) -- Articles 26, 27 et 28
	else -- pour la romanisation
		str = mw.ustring.gsub(str, "()'ㅇ", "%1ㄴ") -- Article 29
	end
	str = mw.ustring.gsub(str, "'", "")
	-- s (Article 16)
	str = mw.ustring.gsub(str, "()s", "ㅅ")

	-- changements phonologiques qu’il faut traiter avant la supression des traits d’union
	-- Article 17
	str = mw.ustring.gsub(str, "()()",
	                      function (frontiere, voyelle)
	                      	return (hangeul.palatale or frontiere) .. voyelle
	                      end)
	if pron then
		-- Article 4
		if changer_oe then
			str = mw.ustring.gsub(str, "ㅚ", "ㅞ")
		end
		-- Article 5
		str = mw.ustring.gsub(str, "()ㅖ", "%1ㅔ") -- ㅖ est prononcé ㅔ dans 계, 례, 몌, 혜 et 폐
		str = mw.ustring.gsub(str, "()ㅢ", "%1ㅣ") -- ㅢ est prononcé ㅣ après une consonne
		str = mw.ustring.gsub(str, "(ㅇ)ㅢ", "%1ㅣ") -- ㅢ est prononcé ㅣ au milieu du mot ; -의 sera conservé
	end

	-- traits d’union et espaces (Articles 20 et 15)
	str = mw.ustring.gsub(str, "%-ㄹ", "ㄴㄴ") -- Article 20
	if pron then -- pour la prononciation
		str = mw.ustring.gsub(str, " ㄹ", "ㄴㄴ") -- Article 20
	else -- pour la romanisation
		str = mw.ustring.gsub(str, "()%-ㅎ", "%1--ㅎ") -- pour éviter la suppression
		str = mw.ustring.gsub(str, "() ", "%1- ") -- pour éviter la suppression
	end
	str = mw.ustring.gsub(str, "()", neutralisation) -- Article 15

	-- fin du mot
	str = mw.ustring.gsub(str, "()$", neutralisation) -- Articles 9, 10 et 11
	-- frontières
	str = mw.ustring.gsub(str, "(?)()()", pron_frontiere)
	if pron then -- pour la prononciation
		str = mw.ustring.gsub(str, "'()", consonne_forte)
		-- Article 5
		str = mw.ustring.gsub(str, "()()", -- ㅈ, ㅉ et ㅊ sont déjà palatales
		                      function (consonne, voyelle)
		                      	return consonne .. (hangeul.non_palatale or voyelle)
		                      end)
	else -- pour la romanisation
		str = mw.ustring.gsub(str, "", "") -- consonnes fortes pas romanisées
	end
	return str
end

-- Fonction internelle de la neutralisation des finales.
function neutralisation(jamo)
	return hangeul.neutralisation or jamo
end

-- Fonction internelle des consonnes fortes.
function consonne_forte(jamo)
	return hangeul.forte or jamo
end

-- Fonction internelle pour la prononciation.
function pron_frontiere(finale, initiale, voyelle)
	return (hangeul.frontiere
	        or hangeul.neutralisation .. initiale)
	       .. voyelle
end

-- Cette fonction change des hangeuls en phonèmes
function ko.phoneme(str, son, sonore)
	str = ko.modif_jamo(str, true, false)
	-- prononciations modernes sans géminée
	str = mw.ustring.gsub(str, "()",
	                      function (frontiere)
	                      	return hangeul.sans_geminee or frontiere
	                      end)
	-- phonèmes d’une initiale et d’une voyelle
	str = mw.ustring.gsub(str, "ㅅㅞ", "sjwe") -- prononciation populaire de 쉐
	str = mw.ustring.gsub(str, "()()",
	                      function (initiale, voyelle)
	                      	return "." .. hangeul.phoneme_initiale .. hangeul.phoneme_voyelle
	                      end)
	-- phonème d’une finale
	str = mw.ustring.gsub(str, "()",
	                      function (finale)
	                      	return hangeul.phoneme_finale
	                      end)
	-- Article 12-4 : ㄹㅎ, ㄴㅎ, ㅁㅎ et ㅇㅎ
	-- Article 13 : ㅇㅇ
	str = mw.ustring.gsub(str, "()%.(h?)", ".%1%2")

	-- réalisation des phonèmes
	if son then
		-- sonorisation après une voyelle ou une consonne sonore
		if not sonore then
			str = mw.ustring.gsub(str, "^%.", "")
		end
		str = mw.ustring.gsub(str, "%.(ɕ?)()",
		                      function (consonne, voyelle)
		                      	return "." .. hangeul.sonorisation .. voyelle
		                      end)
		-- implosives
		str = mw.ustring.gsub(str, "()%.(ˀ?)", "%1̚.%2") -- pas implosive devant ㅅ
		str = mw.ustring.gsub(str, "()$", "%1̚")
		-- ㄹㄹ
		str = mw.ustring.gsub(str, "l%.l", "ɭ.ɭ")
		-- ㄹ devant une voyelle
		str = mw.ustring.gsub(str, "l(h?)", "ɾ%1")
		-- ㄹ de finale
		str = mw.ustring.gsub(str, "l", "ɭ")
		-- Article 12-4 : ㄹㅎ, ㄴㅎ, ㅁㅎ et ㅇㅎ
		str = mw.ustring.gsub(str, "()h", "%1ʱ")
		-- distinction perdue entre 에 et 애
		str = mw.ustring.gsub(str, "", "e̞")
		-- palatalisation de 위
		str = mw.ustring.gsub(str, "wi", "ɥi")
		-- palatalisation de ㅅ et ㅆ
		str = mw.ustring.gsub(str, "sjw", "ʃw") -- prononciation populaire de 쉐
		str = mw.ustring.gsub(str, "sj", "ɕ")
		str = mw.ustring.gsub(str, "si", "ɕi")
		str = mw.ustring.gsub(str, "sɥi", "ʃɥi")
		-- palatalisation de ㅎ
		str = mw.ustring.gsub(str, "hj", "ç")
		str = mw.ustring.gsub(str, "h(ɥ?i)", "ç%1")
		-- palatalisation de ㅋ, ㅌ, ㅍ
		str = mw.ustring.gsub(str, "()ʰj", "%1ç")
		str = mw.ustring.gsub(str, "()ʰ(ɥ?i)", "%1ç%2")
		-- /w/ après une consonne
		str = mw.ustring.gsub(str, "()w", "%1ʷ")
		-- le suffixe -요
		str = mw.ustring.gsub(str, "o%.$", "o̞")
	end

	-- suppression des points au début et à la fin
	str = mw.ustring.gsub(str, "^%.", "")
	str = mw.ustring.gsub(str, "%.$", "")
	return str
end

-- Fonction internelle pour la romanisation des finales
function roman_finale(finale, initiale)
	return (hangeul.roman_finale or finale) .. (initiale or "")
end

-- Fonctions pour des modèles.

-- Prononciation (Modèle:ko-pron)
function ko.pron(frame)
	local str = frame.args or ""
	local phon = frame.args or ""
	local sonore = frame.args or ""
	return ko.phoneme(str, phon == "", sonore ~= "")
end

-- Initiale du premier hangeul donné
function ko.initiale(frame)
	local str = ko.decompos(frame.args or "")
	str = mw.ustring.gsub(str, "", "")
	return mw.ustring.match(str, "^()") or "" -- première consonne suivie par une voyelle
end

-- Voyelle du dernier hangeul donné
function ko.voyelle(frame)
	local str = ko.decompos(frame.args or "")
	str = mw.ustring.gsub(str, "", "")
	return mw.ustring.match(str, "()?$") or "" -- dernière voyelle
end

-- Finale du dernier hangeul donné
function ko.finale(frame)
	local str = ko.decompos(frame.args or "")
	str = mw.ustring.gsub(str, "", "")
	return mw.ustring.match(str, "(?)$") or "" -- dernière consonne
end

-- Translittération (Modèle:ko-translit)
function ko.translit(frame)
	local str = frame.args or ""
	str = ko.decompos(str)
	str = mw.ustring.gsub(str, "", "")
	str = mw.ustring.gsub(str, "ㅇ()", "-%1")
	str = mw.ustring.gsub(str, "^%-", "")
	str = mw.ustring.gsub(str, " %-", " ")
	str = mw.ustring.gsub(str, "()",
	                      function (jamo) return hangeul.translit end)
	return str
end

-- Romanisation (Modèle:ko-roman)
function ko.roman(frame)
	local str = frame.args or ""
	str = ko.modif_jamo(str)
	str = mw.ustring.gsub(str, "ㅇ()", "%1")
	str = mw.ustring.gsub(str, "()",
	                      function (jamo) return hangeul.translit end)
	-- ㄹ devant une voyelle
	str = mw.ustring.gsub(str, "l()", "r%1")
	-- ㄹㄹ
	str = mw.ustring.gsub(str, "lr", "ll")
	-- finale : b → p ; d → t ; g → k ; ng → ng sans changement
	str = mw.ustring.gsub(str, "(n?)()", roman_finale)
	str = mw.ustring.gsub(str, "(n?)$", roman_finale)
	-- majuscule
	if frame.args and frame.args ~= "" then
		str = mw.ustring.gsub(str, "^(.)", mw.ustring.upper)
	end
	return str
end

-- Composer des hangeuls utilisant des jamos (Modèle:hangeul mot)
function ko.hangeul_mot(frame)
	local str = frame.args or ""
	local pron = frame.args or ""
	return ko.compos(ko.decompos(str), pron ~= "")
end

-- Hangeul phonétique (Modèle:ko-hangeul-phon)
function ko.hangeul_phonetique(frame)
	local str = frame.args or ""
	return ko.compos(ko.modif_jamo(str, true, true))
end

-- Frontière des sinogrammes
function ko.frontiere_hanja(frame)
	-- Article 26
	local str = frame.args or ""
	local hanja = frame.args or ""
	if hanja == "" then return str end

	local hanjas = {}
	local finales = {}

	local regex = ""
	local i = 1
	for caractere in mw.ustring.gmatch(hanja, regex) do
		hanjas = not mw.ustring.match(caractere, "") -- true si c’est un sinogramme
		i = i + 1
	end

	i = 1
	str = mw.ustring.gsub(str, "(*)()",
	                      function (modif, caractere)
	                          local code = mw.ustring.codepoint(caractere) - 0xac00
	                          local initiale = hangeul.initiale
	                          finales = hangeul.finale
	                          if modif == "" and i >= 2 then
	                              if hanjas
	                                 and hanjas
	                                 and finales == "ㄹ"
	                                 and (initiale == "ㄷ" or initiale == "ㅅ" or initiale == "ㅈ") then
                                      modif = "'"
                                  elseif (hanjas or hanjas)
                                         and initiale == "ㅎ"
                                         and (finales == "ㄱ" or finales == "ㅂ") then
                                      modif = "-"
                                  end
	                          end
	                          i = i + 1
	                          return modif .. caractere
	                      end)
	return str
end

-- Supprimer le suffixe -다 du verbe (Modèle:ko-radical1)
function ko.radical1(frame)
	local str = frame.args or ""
	str = ko.compos(ko.decompos(str), true)
	str = mw.ustring.gsub(str, "다$", "")
	return str
end

-- Forme en -으 (utilisée devant -니까, -ㄹ, -면, etc.) (Modèle:ko-radical2)
function ko.radical2(frame)
	local str = ko.decompos(frame.args or "") -- radical
	local groupe = frame.args or ""

	if groupe == "b" then -- irrégulier-ㅂ
		str = mw.ustring.gsub(str, "ㅂ$", "우")
	elseif groupe == "d" then -- irrégulier-ㄷ
		str = mw.ustring.gsub(str, "ㄷ$", "ㄹ으")
	elseif groupe == "s" then -- irrégulier-ㅅ
		str = mw.ustring.gsub(str, "ㅅ$", "으")
	elseif groupe == "h" then -- irrégulier-ㅎ
		str = mw.ustring.gsub(str, "ㅎ$", "")
	elseif mw.ustring.match(str, "$") then -- régulier consonantique
		str = str .. "으"
	end -- régulier vocalique/-으/-ㄹ, irrégulier-러/-르/-시/-여/-이다

	return ko.compos(str, true)
end

-- Forme en -아/어 (utilisée devant -도, -서, etc.) (Modèle:ko-radical3)
function ko.radical3(frame)
	local str = ko.decompos(frame.args or "") -- radical
	local groupe = frame.args or ""
	local alt = ((frame.args or "") ~= "")

	if alt and not (groupe == "si"
	                or groupe == "ida"
	                or groupe == "yeo"
	                or (groupe == "" and mw.ustring.match(str, "$"))) then
		return nil
	end

	if groupe == "b" then -- irrégulier-ㅂ
		local wa = {  = "워",  = "와" }
		str = mw.ustring.gsub(str, "ㅂ$", wa or "") ~= ""])
	elseif groupe == "d" then -- irrégulier-ㄷ
		str = mw.ustring.gsub(str, "ㄷ$", "ㄹㅇ" .. hangeul.yinyang)ㄷ$")])
	elseif groupe == "s" then -- irrégulier-ㅅ
		str = mw.ustring.gsub(str, "ㅅ$", "ㅇ" .. hangeul.yinyang)ㅅ$")])
	elseif groupe == "h" then -- irrégulier-ㅎ
		str = mw.ustring.gsub(str, "ㅑㅎ$", "ㅒ")
		str = mw.ustring.gsub(str, "ㅕㅎ$", "ㅖ")
		str = mw.ustring.gsub(str, "ㅎ$", "ㅐ")
	elseif groupe == "reo" then -- irrégulier-러
		str = str .. "러"
	elseif groupe == "reu" then -- irrégulier-르
		str = mw.ustring.gsub(str, "ㄹㅡ$", "ㄹㄹ" .. hangeul.yinyang)ㄹㅡ$")])
	elseif groupe == "eo" then -- irrégulier-어
		str = mw.ustring.gsub(str, "ㅓ$", "ㅐ")
	elseif groupe == "u" then -- irrégulier-우
		str = mw.ustring.gsub(str, "ㅜ$", "ㅓ")
	elseif groupe == "si" then -- irrégulier-시
		local voyelle = {  = "ㅕ",  = "ㅔ" }
		str = mw.ustring.gsub(str, "ㅣ$", voyelle)
	elseif groupe == "ida" then -- irrégulier-이다
		if str == "" then
			local voyelle = {  = "여",  = "예" }
			str = voyelle
		else
			local voyelle = {  = "어",  = "에" }
			str = str .. voyelle
		end
	elseif groupe == "yeo" then -- irrégulier-여
		if alt then
			str = str .. "여"
		else
			str = mw.ustring.gsub(str, "ㅏ$", "ㅐ")
		end
	elseif mw.ustring.match(str, "$") then -- régulier consonantique/-ㄹ
		str = str .. "ㅇ" .. hangeul.yinyang?)$")]
	elseif mw.ustring.match(str, "ㅡ$") then -- régulier-으
		str = mw.ustring.gsub(str, "ㅡ$", hangeul.yinyang?)ㅡ$")])
	else -- régulier vocalique
		if mw.ustring.match(str, "$") then
			-- faire rien
		elseif alt then -- forme longue
			str = str .. "ㅇ" .. hangeul.yinyang)$")]
		else
			str = mw.ustring.gsub(str, "()$", function (voyelle)
			                                         	return hangeul.diphtongue_verbale or (voyelle .. "어")
			                                         end)
		end
	end

	return ko.compos(str, true)
end

return ko