<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://tes5.st34an.tech/index.php?action=history&amp;feed=atom&amp;title=Module%3AHv-pronunc</id>
	<title>Module:Hv-pronunc - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://tes5.st34an.tech/index.php?action=history&amp;feed=atom&amp;title=Module%3AHv-pronunc"/>
	<link rel="alternate" type="text/html" href="https://tes5.st34an.tech/index.php?title=Module:Hv-pronunc&amp;action=history"/>
	<updated>2026-04-17T18:48:15Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://tes5.st34an.tech/index.php?title=Module:Hv-pronunc&amp;diff=3195&amp;oldid=prev</id>
		<title>imported&gt;Juelos: Text replacement - &quot;ɡ&quot; to &quot;g&quot;</title>
		<link rel="alternate" type="text/html" href="https://tes5.st34an.tech/index.php?title=Module:Hv-pronunc&amp;diff=3195&amp;oldid=prev"/>
		<updated>2026-02-18T22:45:55Z</updated>

		<summary type="html">&lt;p&gt;Text replacement - &amp;quot;ɡ&amp;quot; to &amp;quot;g&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Based on https://linguifex.com/wiki/Module:qhv-pron by https://linguifex.com/wiki/User:Sware with permission. &lt;br /&gt;
&lt;br /&gt;
local sub = mw.ustring.sub&lt;br /&gt;
local find = mw.ustring.find&lt;br /&gt;
local gmatch = mw.ustring.gmatch&lt;br /&gt;
local gsub = mw.ustring.gsub&lt;br /&gt;
local match = mw.ustring.match&lt;br /&gt;
local u = mw.ustring.char&lt;br /&gt;
local split = mw.text.split&lt;br /&gt;
local gsplit = mw.text.gsplit&lt;br /&gt;
&lt;br /&gt;
local export = {}&lt;br /&gt;
&lt;br /&gt;
local palatal = &amp;quot;ɲʎɟj&amp;quot;&lt;br /&gt;
local velar = &amp;quot;kgxɣ&amp;quot;&lt;br /&gt;
local uvular = &amp;quot;q&amp;quot;&lt;br /&gt;
local consonants = &amp;quot;[mpbvwθntdszlrɾɲŋɴʎhɥjɟṛʃ&amp;quot; .. velar .. uvular .. &amp;quot;]&amp;quot;&lt;br /&gt;
local NONSYLLABIC = u(0x032F) -- non-syllabic, combining inverted breve below&lt;br /&gt;
local DIPHTHONG = u(0x035C) -- double articulation, combining double breve below&lt;br /&gt;
local vowels = &amp;quot;[aeiouyáéíóúýàèìòùỳː&amp;quot; .. NONSYLLABIC .. DIPHTHONG .. &amp;quot;]&amp;quot;&lt;br /&gt;
local vowelsonly = &amp;quot;[aeiouyáéíóúýàèìòùỳ&amp;quot; .. NONSYLLABIC .. DIPHTHONG .. &amp;quot;]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local rules = {&lt;br /&gt;
	{&amp;quot;rh&amp;quot;, &amp;quot;ṛ&amp;quot;}, {&amp;quot;mh&amp;quot;, &amp;quot;m&amp;quot;}, {&amp;quot;th&amp;quot;, &amp;quot;θ&amp;quot;}, {&amp;quot;lj&amp;quot;, &amp;quot;ʎ&amp;quot;}, {&amp;quot;ñ&amp;quot;, &amp;quot;ɲ&amp;quot;}, {&amp;quot;kh&amp;quot;, &amp;quot;x&amp;quot;}, {&amp;quot;[gg]h&amp;quot;, &amp;quot;ɣ&amp;quot;}, {&amp;quot;g&amp;quot;, &amp;quot;g&amp;quot;}, {&amp;quot;j&amp;quot;, &amp;quot;ɟ&amp;quot;}, {&amp;quot;sh&amp;quot;, &amp;quot;ʃ&amp;quot;},&lt;br /&gt;
	&lt;br /&gt;
	{&amp;quot;([aāáà][eo])&amp;quot;, &amp;quot;%1&amp;quot; .. NONSYLLABIC}, {&amp;quot;([iíuú])([aāeēoōáéóàèò])&amp;quot;, &amp;quot;%1&amp;quot; .. DIPHTHONG .. &amp;quot;%2&amp;quot;}, &lt;br /&gt;
	{&amp;quot;ā&amp;quot;, &amp;quot;aː&amp;quot;}, {&amp;quot;ē&amp;quot;, &amp;quot;eː&amp;quot;}, {&amp;quot;ī&amp;quot;, &amp;quot;iː&amp;quot;}, {&amp;quot;ō&amp;quot;, &amp;quot;oː&amp;quot;}, {&amp;quot;ū&amp;quot;, &amp;quot;uː&amp;quot;}, {&amp;quot;ȳ&amp;quot;, &amp;quot;yː&amp;quot;},&lt;br /&gt;
	{&amp;quot;à&amp;quot;, &amp;quot;áː&amp;quot;}, {&amp;quot;è&amp;quot;, &amp;quot;éː&amp;quot;}, {&amp;quot;ì&amp;quot;, &amp;quot;íː&amp;quot;}, {&amp;quot;ò&amp;quot;, &amp;quot;óː&amp;quot;}, {&amp;quot;ù&amp;quot;, &amp;quot;úː&amp;quot;}, {&amp;quot;ỳ&amp;quot;, &amp;quot;ýː&amp;quot;},&lt;br /&gt;
	&lt;br /&gt;
	{&amp;quot;n([&amp;quot; .. palatal .. &amp;quot;])&amp;quot;, &amp;quot;ɲ%1&amp;quot;}, {&amp;quot;n([&amp;quot; .. velar .. &amp;quot;])&amp;quot;, &amp;quot;ŋ%1&amp;quot;}, {&amp;quot;n([&amp;quot; .. uvular .. &amp;quot;])&amp;quot;, &amp;quot;ɴ%1&amp;quot;}, &lt;br /&gt;
	{&amp;quot;ɲi&amp;quot;, &amp;quot;ni&amp;quot;}, {&amp;quot;ʎi&amp;quot;, &amp;quot;li&amp;quot;}, &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local deacuter = {&lt;br /&gt;
	[&amp;quot;á&amp;quot;] = &amp;quot;a&amp;quot;, [&amp;quot;é&amp;quot;] = &amp;quot;e&amp;quot;, [&amp;quot;í&amp;quot;] = &amp;quot;i&amp;quot;, [&amp;quot;ó&amp;quot;] = &amp;quot;o&amp;quot;, [&amp;quot;ú&amp;quot;] = &amp;quot;u&amp;quot;, [&amp;quot;ý&amp;quot;] = &amp;quot;y&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function export.write_stress(term, from_module)&lt;br /&gt;
	local pattern = &amp;quot;(&amp;quot; .. consonants .. &amp;quot;*&amp;quot;.. vowels .. &amp;quot;*&amp;quot; .. consonants .. &amp;quot;-)&amp;quot;&lt;br /&gt;
	local weight = {}&lt;br /&gt;
	term = gsub(term, pattern, &amp;quot;·%1&amp;quot;)&lt;br /&gt;
	term = gsub(term, &amp;quot;^·&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	term = gsub(term, &amp;quot;·$&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	term = gsub(term, &amp;quot;·(&amp;quot; .. consonants .. &amp;quot;)·&amp;quot;, &amp;quot;·%1&amp;quot;)&lt;br /&gt;
	term = gsub(term, &amp;quot;·(&amp;quot; .. consonants .. &amp;quot;)$&amp;quot;, &amp;quot;%1&amp;quot;)&lt;br /&gt;
	term = gsub(term, &amp;quot;·(&amp;quot; .. consonants .. &amp;quot;)(&amp;quot; .. consonants .. &amp;quot;)&amp;quot;, &amp;quot;%1·%2&amp;quot;)  &lt;br /&gt;
	term = gsub(term, &amp;quot;([ptkbdg])·([rlṛsz])&amp;quot;, &amp;quot;·%1%2&amp;quot;)&lt;br /&gt;
	term = gsub(term, &amp;quot;·(&amp;quot; .. consonants .. &amp;quot;?&amp;quot; .. consonants .. &amp;quot;)$&amp;quot;, &amp;quot;%1&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local syllables = split(term, &amp;quot;·&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	if from_module then return #syllables end -- allow other modules to know the number of syllables&lt;br /&gt;
	&lt;br /&gt;
	if #syllables == 1 then return table.concat(syllables) end -- account for monosyllables&lt;br /&gt;
	for i, syllable in ipairs(syllables) do&lt;br /&gt;
		if match(syllable, &amp;quot;[áéíóúý]&amp;quot;) then -- if the user inputted manual stress, ignore all the rest&lt;br /&gt;
			table.insert(syllables, i, &amp;quot;ˈ&amp;quot;)&lt;br /&gt;
			return table.concat(syllables)&lt;br /&gt;
		end	&lt;br /&gt;
		if match(syllable, consonants .. &amp;quot;$&amp;quot;) or match(syllable, &amp;quot;ː$&amp;quot;) then weight[i] = &amp;quot;h&amp;quot;&lt;br /&gt;
		elseif match(syllable, NONSYLLABIC .. &amp;quot;$&amp;quot;) then weight[i] = &amp;quot;h&amp;quot;&lt;br /&gt;
		else weight[i] = &amp;quot;l&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local a, p = weight[#weight-2], weight[#weight-1]&lt;br /&gt;
	if p == nil then table.insert(syllables, #syllables, &amp;quot;ˈ&amp;quot;)&lt;br /&gt;
	elseif a == nil then table.insert(syllables, #syllables-1, &amp;quot;ˈ&amp;quot;)&lt;br /&gt;
	elseif p == &amp;quot;l&amp;quot; and a == &amp;quot;h&amp;quot; then table.insert(syllables, #syllables-2, &amp;quot;ˈ&amp;quot;)&lt;br /&gt;
	elseif (p == &amp;quot;l&amp;quot; and a == &amp;quot;l&amp;quot;) or (p == &amp;quot;h&amp;quot;) then table.insert(syllables, #syllables-1, &amp;quot;ˈ&amp;quot;)&lt;br /&gt;
	else table.insert(syllables, #syllables-1, &amp;quot;ˈ&amp;quot;) end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(syllables)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.crux(term)&lt;br /&gt;
	term = mw.ustring.lower(term)&lt;br /&gt;
	&lt;br /&gt;
	for _, rule in ipairs(rules) do&lt;br /&gt;
		term = gsub(term, rule[1], rule[2])&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return export.write_stress(term, false)&lt;br /&gt;
end	&lt;br /&gt;
&lt;br /&gt;
function export.postclassical_crux(term)&lt;br /&gt;
	local postclassicalrules = {&lt;br /&gt;
	{&amp;quot;sri(&amp;quot;.. vowelsonly .. &amp;quot;)&amp;quot;, &amp;quot;ɟ%1&amp;quot;}, {&amp;quot;sˈri(&amp;quot;.. vowelsonly .. &amp;quot;)&amp;quot;, &amp;quot;ˈɟ%1&amp;quot;}, {&amp;quot;sr&amp;quot;, &amp;quot;ɟ&amp;quot;}, {&amp;quot;sˈr&amp;quot;, &amp;quot;ˈɟ&amp;quot;}, &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	term = export.crux(term)&lt;br /&gt;
	&lt;br /&gt;
	for _, postclassicalrule in ipairs(postclassicalrules) do&lt;br /&gt;
		term = gsub(term, postclassicalrule[1], postclassicalrule[2])	&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return term&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function IPA_span(items)&lt;br /&gt;
	local bits = {}&lt;br /&gt;
	for _, item in ipairs(items) do&lt;br /&gt;
		local bit = item.pron&lt;br /&gt;
		table.insert(bits, bit)&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(bits)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function format_IPA(items)&lt;br /&gt;
	return &amp;quot;[[Wiktionary:International Phonetic Alphabet|IPA]]&amp;lt;sup&amp;gt;([[Appendix:High_Valyrian_pronunciation|key]])&amp;lt;/sup&amp;gt;:&amp;amp;#32;&amp;quot; .. IPA_span(items)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function format_IPA_bare(items)&lt;br /&gt;
	return IPA_span(items)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function line_format(pronunciation, register)&lt;br /&gt;
	local full_pronunciations = {}&lt;br /&gt;
	local IPA_args = {{pron = &amp;#039;/&amp;#039; .. pronunciation .. &amp;#039;/&amp;#039;}}&lt;br /&gt;
	table.insert(full_pronunciations, format_IPA(IPA_args))&lt;br /&gt;
	return &amp;quot;(&amp;#039;&amp;#039;&amp;quot; .. table.concat(register, &amp;quot;, &amp;quot;) .. &amp;quot;&amp;#039;&amp;#039;)&amp;quot; .. &amp;#039; &amp;#039; .. table.concat(full_pronunciations, &amp;#039; or &amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function line_format_bare(pronunciation)&lt;br /&gt;
	local full_pronunciations = {}&lt;br /&gt;
	local IPA_args = {{pron = &amp;#039;/&amp;#039; .. pronunciation .. &amp;#039;/&amp;#039;}}&lt;br /&gt;
	table.insert(full_pronunciations, format_IPA_bare(IPA_args))&lt;br /&gt;
	return table.concat(full_pronunciations, &amp;#039; or &amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function separate_word(term, b)&lt;br /&gt;
	local result = {}&lt;br /&gt;
	&lt;br /&gt;
	for word in gsplit(term, &amp;quot; &amp;quot;) do&lt;br /&gt;
		if b then table.insert(result, export.postclassical_crux(word))&lt;br /&gt;
		else table.insert(result, export.crux(word)) end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(result, &amp;quot; &amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.show(frame)&lt;br /&gt;
	local params = {&lt;br /&gt;
		[1] = { default = mw.title.getCurrentTitle().nsText == &amp;#039;Template&amp;#039; and &amp;quot;kostōba&amp;quot; or mw.title.getCurrentTitle().text },&lt;br /&gt;
		nocat = { default = 0 },&lt;br /&gt;
	}&lt;br /&gt;
	local args = require(&amp;quot;Module:parameters&amp;quot;).process(frame:getParent().args, params)&lt;br /&gt;
	local term = args[1]&lt;br /&gt;
	&lt;br /&gt;
	local ipa = &amp;quot;&amp;quot;&lt;br /&gt;
	ipa = ipa .. line_format(separate_word(term, false), {&amp;#039;Classical&amp;#039;})&lt;br /&gt;
	if export.crux(term) ~= export.postclassical_crux(term) then&lt;br /&gt;
		ipa = ipa .. &amp;quot;&amp;lt;br/&amp;gt;&amp;quot; .. line_format(separate_word(term, true), {&amp;#039;Post-Classical&amp;#039;})&lt;br /&gt;
	end	&lt;br /&gt;
	&lt;br /&gt;
	ipa = gsub(ipa, &amp;quot;ṛ&amp;quot;, &amp;quot;r̥&amp;quot;)&lt;br /&gt;
	ipa = gsub(ipa, u(0x032F), &amp;quot;&amp;quot;)&lt;br /&gt;
	ipa = gsub(ipa, u(0x035C), &amp;quot;&amp;quot;)&lt;br /&gt;
	ipa = gsub(ipa, &amp;quot;([áéíóúý])&amp;quot;, function(v) return deacuter[v] end)&lt;br /&gt;
	&lt;br /&gt;
	return ipa&lt;br /&gt;
end	&lt;br /&gt;
&lt;br /&gt;
function export.bare(frame)&lt;br /&gt;
	local params = {&lt;br /&gt;
		[1] = { default = mw.title.getCurrentTitle().nsText == &amp;#039;Template&amp;#039; and &amp;quot;kostōba&amp;quot; or mw.title.getCurrentTitle().text },&lt;br /&gt;
		nocat = { default = 0 },&lt;br /&gt;
	}&lt;br /&gt;
	local args = require(&amp;quot;Module:parameters&amp;quot;).process(frame:getParent().args, params)&lt;br /&gt;
	local term = args[1]&lt;br /&gt;
	&lt;br /&gt;
	local ipa = &amp;quot;&amp;quot;&lt;br /&gt;
	ipa = ipa .. line_format_bare(separate_word(term, false))&lt;br /&gt;
	&lt;br /&gt;
	ipa = gsub(ipa, &amp;quot;ṛ&amp;quot;, &amp;quot;r̥&amp;quot;)&lt;br /&gt;
	ipa = gsub(ipa, u(0x032F), &amp;quot;&amp;quot;)&lt;br /&gt;
	ipa = gsub(ipa, u(0x035C), &amp;quot;&amp;quot;)&lt;br /&gt;
	ipa = gsub(ipa, &amp;quot;([áéíóúý])&amp;quot;, function(v) return deacuter[v] end)&lt;br /&gt;
	&lt;br /&gt;
	return ipa&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</summary>
		<author><name>imported&gt;Juelos</name></author>
	</entry>
</feed>