Module:User:Sarri.greek/grk-pronunciation/data

From Wiktionary, the free dictionary
Jump to navigation Jump to search

User:Sarri.greek (CAT) » Module grk-pronunciation doc :: data doc »» invoked at Template grk-IPA-mod »»» applied in table Template grk-IPA, Template gkm-IPA

This is Module:grc-pronunciation & Module:grc-pronunciation/data
  • TEST MEDIEVAL with only the two lines, no Hide/Show »» at table Template gkm-IPA
  • TODO check some clusters like ks ps zm (do not break), and initial μπ ντ γκ b d g .

-- 2024.03.24. [[wikt:en:User:Sarri.greek]]-- all my notes with !! and my questions/tocheck with ??
-- this is [[Module:grc-pronuncition/data]] its TESTS at [[Module:grc-pronuncition]]
--!! renamed byz1 to med1 and byz2 to med2
--?? check all geminate consonants med1
--?? for el (byz2 too?) 
--[=[!!?? 
* GENERAL problems at main page.
* for med and el accept imput Rho Ρ ρ initial without daseia
* for el (and med2, med1?) keep together  .ks for ξ, // .ps for ψ  // .zm  .fθ //
	we have to check all the clusters that stay together kt, etc.
* for el (med2?) no repetition of same consonant at αυ ευ ηυ like if.fi ev.via
* for el (med2, med??) μπ ντ γκ initial = b d g, median mb, nd, & γγ ŋg / ŋɟ
* for med (med2)? τζ has double IPA ts or tz (here, not need t͡s or d͡z
* ks ps NO.breaksyllable / zm NObreakSyllabe // for el we use  τσ τζ =  t͡s //  d͡z
	How do i write at τ, itself+1=σ = for ts dz  & # 865; & # x361; U+0361   ͡ COMBINING DOUBLE INVERTED BREVE
]=]--

-- https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.ustring.char
local U = mw.ustring.char --  integers are Unicode codepoints rather than byte values.
local gmatch = mw.ustring.gmatch
local m_utils_data = require("Module:grc-utilities/data")
local diacritics = m_utils_data.diacritics

-- these are IPA symbols
local nonsyllabic = U(0x32F)
local high = U(0x341)  -- combining acute tone mark
local low = U(0x340)  -- combining grave tone mark
local midHigh = U(0x1DC4)  -- mid–high pitch
local midLow = U(0x1DC6)  -- mid–low pitch
local highMid = U(0x1DC7)  -- high–mid pitch
local rising = U(0x30C)		-- combining caron
local falling = diacritics.Latin_circum	-- combining circumflex
local voiceless = U(0x325) -- combining ring below
local aspirated = 'ʰ'
local stress_mark = 'ˈ'
local long = 'ː'
local macron = diacritics.spacing_macron
local breve = diacritics.spacing_breve

local circumflex_on_long_vowel = falling
local acute_on_long_vowel = rising
local acute_on_short_vowel = high
local grave_pitch_mark = low

local data = {}


local function get_pitch_marks(accent_type, long)
	if accent_type == 'acute' then
		if long then
			return acute_on_long_vowel
		else
			return acute_on_short_vowel
		end
	elseif accent_type == 'grave' then
		return grave_pitch_mark
	elseif accent_type == 'circum' then
		return circumflex_on_long_vowel
	end
	
	return ''
end

local function alpha(breathing, accent, iota, isLong)
	local breathing = breathing == 'rough' and { 'h', '(h)' } or { '', '' }
	local stress = accent and stress_mark or ''
	local pitch = get_pitch_marks(accent, isLong)
	local length = (isLong or iota or accent == 'circum') and long or ''
	local offglide = iota and ('i' .. nonsyllabic) or ''
-- ἄνθρωπος // ᾰ̓́νθρωπος  // ᾆσμα 	
	return {
			-- ἀκούω	ἄνθρωπος  ᾆσμα 	Ἅλεις 
			--   ᾰ̓́νθρωπος 	
			['cla'] = breathing[1] .. 'a' .. pitch .. length .. offglide,
			['koi1'] = breathing[2] .. stress .. 'a',
			['koi2'] = stress .. 'a',
			['med1'] = stress .. 'a',
			['med2'] = stress .. 'a',
			-- ακούω Αλέξανδρος άνθρωπος άσμα  Άλεξ 
			['el'] = stress .. 'a'
		}
end

local function iota(breathing, accent, isLong)
	local breathing = breathing == 'rough' and { 'h', '(h)' } or { '', '' }
	local stress = accent and stress_mark or ''
	local pitch = get_pitch_marks(accent, isLong)
	local length = (isLong or accent == 'circum') and long or ''
	
	return {
			-- ἱστορία ἴον	ἰξυῗ	ἷξις	 Ἴλιον
			-- ῐ̔στορῐ́ᾱ
			-- ῐ̓́ον
			['cla'] = breathing[1] .. 'i' .. pitch .. length,
			['koi1'] = breathing[2] .. stress .. 'i',
			['koi2'] = stress .. 'i',
			['med1'] = stress .. 'i',
			['med2'] = stress .. 'i',
			-- ιστορία ίον ιόν Ίλιο
			['el'] = stress .. 'i'
		}
end

local function ypsilon(breathing, accent, isLong)
	local breathing = breathing == 'rough' and { 'h', '(h)' } or { '', '' }
	local stress = accent and stress_mark or ''
	local pitch = get_pitch_marks(accent, isLong)
	local length = (isLong or accent == 'circum') and long or ''
	
	return {
			-- ὑψηλός	ὕψι	ὗλις	Ὕλη
			-- ῠ̔ψηλός
			['cla'] = breathing[1] .. 'y' .. pitch .. length,
			['koi1'] = breathing[2] .. stress .. 'y',
			['koi2'] = stress .. 'y',
			['med1'] = stress .. 'y',
			['med2'] = stress .. 'i',
			-- υψηλός Ύλλας
			['el'] = stress .. 'i'
		}
end

local function omicron(breathing, accent)
	local breathing = breathing == 'rough' and { 'h', '(h)' } or { '', '' }
	local stress = accent and stress_mark or ''
	local pitch = get_pitch_marks(accent, false)
	
	return {
			-- Ὅμηρος  -- does it accept nonaccent? ομιλω
			['cla'] = breathing[1] .. 'o' .. pitch,
			['koi1'] = breathing[2] .. stress .. 'o',
			['koi2'] = stress .. 'o',
			['med1'] = stress .. 'o',
			['med2'] = stress .. 'o',
			--  Όμηρος
			['el'] = stress .. 'o'	
		}
end

local function epsilon(breathing, accent)
	local breathing = breathing == 'rough' and { 'h', '(h)' } or { '', '' }
	local stress = accent and stress_mark or ''
	local pitch = get_pitch_marks(accent, false)
	
	return {
			-- ἔρχομαι	Ἕλενος
			['cla'] = breathing[1] .. 'e' .. pitch,
			['koi1'] = breathing[2] .. stress .. 'e',
			['koi2'] = stress .. 'e',
			['med1'] = stress .. 'e',
			['med2'] = stress .. 'e',
			-- έρχομαι Ελένη
			['el'] = stress .. 'e'
		}
end

local function eta(breathing, accent, iota)
	local breathing = breathing == 'rough' and { 'h', '(h)' } or { '', '' }
	local stress = accent and stress_mark or ''
	local pitch = get_pitch_marks(accent, true)
	local offglide = iota and ('i' .. nonsyllabic) or ''
	
	return {
			-- ἦρα	Ἡραῖον
			['cla'] = breathing[1] .. 'ɛ' .. pitch .. long .. offglide,
			['koi1'] = breathing[2] .. stress .. 'e̝',
			['koi2'] = stress .. 'i',
			['med1'] = stress .. 'i',
			['med2'] = stress .. 'i',
			-- ήρα Ήρα
			['el'] = stress .. 'i'
		}
end

local function omega(breathing, accent, iota)
	local breathing = breathing == 'rough' and { 'h', '(h)' } or { '', '' }
	local stress = accent and stress_mark or ''
	local pitch = get_pitch_marks(accent, true)
	local offglide = iota and ('i' .. nonsyllabic) or ''
	
	return {
			-- ᾠδή	Ὥδωνις
			['cla'] = breathing[1] .. 'ɔ' .. pitch .. long .. offglide,
			['koi1'] = breathing[2] .. stress .. 'o',
			['koi2'] = stress .. 'o',
			['med1'] = stress .. 'o',
			['med2'] = stress .. 'o',
			['el'] = stress .. 'o'
		}
end

local function ai(breathing, accent)
	local breathing = breathing == 'rough' and { 'h', '(h)' } or { '', '' }
	local stress = accent and stress_mark or ''
	local pitch = get_pitch_marks(accent, true)
	
	return {
			-- αἴρω		Αἶσα	but Ἄις  Ἄϊς
			['cla'] = breathing[1] .. 'a' .. pitch .. 'i' .. nonsyllabic,
			['koi1'] = breathing[2] .. stress .. 'ɛ',
			['koi2'] = stress .. 'ɛ',
			['med1'] = stress .. 'e',
			['med2'] = stress .. 'e',
			-- αίρω	 Αίσα
			['el'] = stress .. 'e'
		}
end

local function ei(breathing, accent)
	local breathing = breathing == 'rough' and { 'h', '(h)' } or { '', '' }
	local stress = accent and stress_mark or ''
	local pitch = get_pitch_marks(accent, true)
	
	return {
			-- εἶδος	Εἰδομονεύς
			['cla'] = breathing[1] .. 'e' .. pitch .. long,
			['koi1'] = breathing[2] .. stress .. 'i',
			['koi2'] = stress .. 'i',
			['med1'] = stress .. 'i',
			['med2'] = stress .. 'i',
			-- είδος Ειδομενέας
			['el'] = stress .. 'i'
		}
end

local function oi(breathing, accent)
	local breathing = breathing == 'rough' and { 'h', '(h)' } or { '', '' }
	local stress = accent and stress_mark or ''
	local pitch = get_pitch_marks(accent, true)
	
	return {
			-- οἰωνός	Οἴτη
			['cla'] = breathing[1] .. 'o' .. pitch .. 'i' .. nonsyllabic,
			['koi1'] = breathing[2] .. stress .. 'y',
			['koi2'] = stress .. 'y',
			['med1'] = stress .. 'y',
			['med2'] = stress .. 'i',
			-- οιωνός Οίτη
			['el'] = stress .. 'i'
		}
end

local function ui(breathing, accent)
	local breathing = breathing == 'rough' and { 'h', '(h)' } or { '', '' }
	local stress = accent and stress_mark or ''
	local pitch = get_pitch_marks(accent, true)
	
	return {
			-- υἱός		υἷος
			['cla'] = breathing[1] .. 'y' .. pitch .. long,
			['koi1'] = breathing[2] .. stress .. 'y',
			['koi2'] = stress .. 'y',
			['med1'] = stress .. 'y',
			['med2'] = stress .. 'i',
			-- υιός Υιός
			['el'] = stress .. 'i'
		}
end

local function au(breathing, accent)
	local breathing = breathing == 'rough' and { 'h', '(h)' } or { '', '' }
	local stress = accent and stress_mark or ''
	local pitch = get_pitch_marks(accent, true)
	
	return {
		['cla'] = breathing[1] .. 'a' .. pitch .. 'u' .. nonsyllabic,

--!! unvoiced are κπτ χφθ σς ξψ
--?? what is 2=σ+3=μ = x followed by σμ 
		['koi1'] = {
			{'2=σ+3=μ', stress .. 'a' .. 'w'},
			{'2.unvoiced', breathing[2] .. stress .. 'a' .. 'ʍ'},
			breathing[2] .. stress .. 'a' .. 'w',
		},
		['koi2'] = {
			{'2=σ+3=μ', stress .. 'aβ', },
			{ '2.unvoiced', stress .. 'aɸ', },
			stress .. 'aβ',
		},
		['med1'] = {
			{'2=σ+3=μ', stress .. 'av', },
			{ '2.unvoiced', stress .. 'af', },
			stress .. 'av',
		},
		['med2'] = {
			{'2=σ+3=μ', stress .. 'av', },
			{ '2.unvoiced', stress .. 'af', },
			stress .. 'av',
		},
		['el'] = {
			-- ??αυσμ
			{'2=σ+3=μ', stress .. 'av', },
			-- κ Καύκαος / π αυπ... / τ αύτανδρος / χ αυχένας / σ ναυς / ξ αυξάνω / ψ αυψ...
			--??TODO EXCEPT φ αυφ..> af not aff
			{ '2.unvoiced', stress .. 'af', },
			-- αυγ / αυδ / αυα αυε αυο / 
			--??TODO EXCEPT αυβ = av not avv
			stress .. 'av',
		},
	}
end

local function eu(breathing, accent)
	local breathing = breathing == 'rough' and { 'h', '(h)' } or { '', '' }
	local stress = accent and stress_mark or ''
	local pitch = get_pitch_marks(accent, true)
--!! unvoiced are κπτ χφθ σς ξψ	
	return {
		['cla'] = breathing[1] .. 'e' .. pitch .. 'u' .. nonsyllabic,
		['koi1'] = {
			{'2=σ+3=μ', stress .. 'e' .. 'w'},
			{'2.unvoiced+3=μ', breathing[2] .. stress .. 'e' .. 'ʍ'},
			breathing[2] .. stress .. 'e' .. 'w',
		},
		['koi2'] = {
			{'2=σ+3=μ', stress .. 'eβ', },
			{ '2.unvoiced', stress .. 'eɸ', },
			stress .. 'eβ',
		},
		['med1'] = {
			{'2=σ+3=μ', stress .. 'ev', },
			{ '2.unvoiced', stress .. 'ef', },
			stress .. 'ev',
		},
		['med2'] = {
			{'2=σ+3=μ', stress .. 'ev', },
			{ '2.unvoiced', stress .. 'ef', },
			stress .. 'ev',
		},
		['el'] = {
			{'2=σ+3=μ', stress .. 'ev', },
			--??TODO EXCEPT φ ευφ..> ef not eff ευφυής
			{ '2.unvoiced', stress .. 'ef', },
			--??TODO EXCEPT β ευβ..> ev not evv Εύβοια
			stress .. 'ev',
		},
	}
end

local function hu(breathing, accent)
	local breathing = breathing == 'rough' and { 'h', '(h)' } or { '', '' }
	local stress = accent and stress_mark or ''
	local pitch = get_pitch_marks(accent, true)
--!! unvoiced are κπτ χφθ σς ξψ		
	return {
		['cla'] = breathing[1] .. 'ɛ' .. pitch .. 'ːu' .. nonsyllabic,
		['koi1'] = {
			{'2=σ+3=μ', stress .. 'e̝' .. 'w'},
			{'2.unvoiced', breathing[2] .. stress .. 'e̝' .. 'ʍ'},
			breathing[2] .. stress .. 'e̝' .. 'w',
		},
		['koi2'] = {
			{'2=σ+3=μ', stress .. 'iβ', },
			{ '2.unvoiced', stress .. 'iɸ', },
			stress .. 'iβ',
		},
		['med1'] = {
			{'2=σ+3=μ', stress .. 'iv', },
			{ '2.unvoiced', stress .. 'if', },
			stress .. 'iv',
		},
		['med2'] = {
			{'2=σ+3=μ', stress .. 'iv', },
			{ '2.unvoiced', stress .. 'if', },
			stress .. 'iv',
		},
		['el'] = {
			{'2=σ+3=μ', stress .. 'iv', },
			--??TODO EXCEPT φ ηυφ..> if not iff -- no example
			{ '2.unvoiced', stress .. 'if', },
			--??TODO EXCEPT β ηυβ..> iv not ivv --no example
			stress .. 'iv',
		},
	}
end

local function ou(breathing, accent)
	local breathing = breathing == 'rough' and { 'h', '(h)' } or { '', '' }
	local stress = accent and stress_mark or ''
	local pitch = get_pitch_marks(accent, true)
	
	return {
			['cla'] = breathing[1] .. 'u' .. pitch .. long,
			['koi1'] = breathing[2] .. stress .. 'u',
			['koi2'] = stress .. 'u',
			['med1'] = stress .. 'u',
			['med2'] = stress .. 'u',
			['el'] = stress .. 'u'
		}
end

data[' '] = {
	['p'] = {
		['cla'] = ' ',
		['koi1'] = ' ',
		['koi2'] = ' ',
		['med1'] = ' ',
		['med2'] = ' ',
		['el'] = ' ',
	},
}

data['β'] = {
	['clusters'] = {
		['δ'] = true,
		['λ'] = true,
		['ρ'] = true,
	},
-- βδέλλα βλέμμα βρόμος
-- μβ = -- ἄμβων ἀββᾶ -- άμβωνας αββάς Σάββατο
	['p'] = {
		['cla'] = 'b',
		['koi1'] = 'b',
		['koi2'] = {
			{ '-1=μ', 'b', },
			'β'
		},
--!! gemination of /v, ð, ɣ/ in 10th century? CHECKTHIS gkm.Camb.Gr.3.4.3
		['med1'] = {
			{ '-1=μ', 'b', },
			'v'
		},
--??CHECKTHIS
		['med2'] = {
			{ '1=β', '', },
			{ '-1=μ', 'b', }, --??CHECKTHIS
			'v',
		},
	-- άμβωνας (see μ)
		['el'] = {
			{ '1=β', '', },
			{ '-1=μ', 'v', }, --!! not b
			'v',
		},
	},
}

data['γ'] = {
	['clusters'] = {
		['λ'] = true,
		['ν'] = true,
		['ρ'] = true,
	},
--!! dorsal are κγχ ξ
--!! prefront means (cf main page) "frontVowel = ιηευ" or "frontDiphth - αι or οι" and not is(letter2, "iDiaer"))
	['p'] = {
		['cla'] = {
			{ '1.dorsal/1=μ', 'ŋ', }, -- γκ γγ γχ γξ or γμ?
			'ɡ',
		},
		['koi1'] = {
			{ '1.dorsal', 'ŋ', }, -- γκ γγ γχ γξ
			'ɡ',
		},
		['koi2'] = {
			{ '1.dorsal',
				{
					{ '1~preFront', 'ɲ', },
					'ŋ',
				},
			},
			{ '0~preFront',
				{
					{ '-1=γ', 'ɟ', },
					'ʝ',
				},
			},
			{ '-1=γ', 'ɡ', },
			'ɣ',		},
		['med1'] = {
			{ '1.dorsal',
				{
					{ '1~preFront', 'ŋ', }, -- oops ɲ wrong { '1~preFront', 'ɲ', },
					'ŋ',
				},
			},
			{ '0~preFront',
				{
					{ '-1=γ', 'ɟ', },
					'ʝ',
				},
			},
			{ '-1=γ', 'ɡ', },
			'ɣ',
		},
		['med2'] = {
			-- 'γγίζω
			{ '1.dorsal', {
				{ '1~preFront', 'ŋ', }, -- oops ɲ wrong { '1~preFront', 'ɲ', },
				'ŋ', },
			},
			{ '0~preFront',
				{
					{ '-1=γ', 'ɟ', },
					'ʝ',
				},
			},
			{ '-1=γ', 'ɡ', },
			'ɣ',
		},
		['el'] = {
			-- κ γκάφα  αγκώνας BUT αγκράφα // γ αγγούρι //  χ άγχος // ξ ελέγξω
			-- γκιώνης γκέλα κάγκελο άγγελος σύγκειμαι εγκαίνια εγγυήτρια έγκυος/ no γκυι
			{ '1.dorsal', {
				{ '1~preFront', 'ŋ', }, -- not ɲ For /ŋɟ ŋç/ see §1.4.2.4. at Mackridge, Peter (1985) The Modern Greek Language
				'ŋ', },
			},
			{ '0~preFront',
				{
					{ '-1=γ', 'ɟ', },
					'ʝ',				-- γείτονας γεύομαι
				},
			},
			{ '-1=γ', 'ɡ', },
			'ɣ',
		},
	},
}

data['δ'] = {
	['clusters'] = {
		['ρ'] = true,
	},
	['p'] = {
		['cla'] = 'd',
		['koi1'] = 'd',
		['koi2'] = {
			{ '-1=ν', 'd', },
			'ð',
		},
--!! gemination of /v, ð, ɣ/ in 10th century? CHECKTHIS gkm.Camb.Gr.3.4.3
		['med1'] = {
			{ '-1=ν', 'd', },
			'ð',
		},
		['med2'] = {
			{ '1=δ', '', },
			{ '-1=ν', 'd', },
			'ð',
		},
		['el'] = {
			{ '1=δ', '', },
			{ '-1=ν', 'd', },
			'ð',
		},
	},
}

data['ζ'] = {
	['clusters'] = { },
	['p'] = {
		['cla'] = 'zd',
		['koi1'] = 'z',
		['koi2'] = 'z',
		['med1'] = 'z',
		['med2'] = {
			{ '1=ζ', '', },
			'z',
		},
		['el'] = {
			{ '1=ζ', '', },
			'z',
		},
	},
}

data['θ'] = {
	['clusters'] = {
		['ρ'] = true,
	},
	['p'] = {
		['cla'] = 'tʰ',
		['koi1'] = 'tʰ',
		['koi2'] = 'θ',
		['med1'] = 'θ',
		['med2'] = {
			{ '1=θ', '', },
			'θ',
		},
		['el'] = {
			{ '1=θ', '', },
			'θ',
		},
	},
}

data['κ'] = {
	['clusters'] = {
		['λ'] = true,
		['ν'] = true,
		['τ'] = true,
		['ρ'] = true,
	},
--!! voiced are βδγ μν λρ ζ  and ϝ
--!! stops are  πβφ κγχ τδθ  ξ ψ
--!! aspirated are χφθ
--!! prefront means (cf main page) "frontVowel = ιηευ" or "frontDiphth - αι or οι" and not is(letter2, "iDiaer"))
	['p'] = {
		['cla'] = {
			{ '1.voiced+1.stop', 'ɡ', },
			{ '1.aspirated', 'kʰ', },
			'k',
		},
		['koi1'] = {
			{ '1.voiced+1.stop', 'ɡ', },
			'k',
		},
		['koi2'] = {
			{ '1=κ', '', },
			{ '1.voiced+1.stop', 'ɡ', },
			{
				'-1=γ',
				{
					{ '0~preFront', 'ɟ' },
					'ɡ',
				},
			},
			{ '0~preFront', 'c', },
			'k',
		},
		['med1'] = {
			{ '1=κ', '', },
			{ '1.voiced+1.stop', 'ɡ', },
			{
				'-1=γ',
				{
					{ '0~preFront', 'ɟ' },
					'ɡ',
				},
			},
			{ '0~preFront', 'c', },
			'k',
		},
		['med2'] = {
			{ '1=κ', '', },
			{ '1.voiced+1.stop', 'ɡ', },
			{
				'-1=γ',
				{
					{ '0~preFront', 'ɟ' },
					'ɡ',
				},
			},
			{ '0~preFront', 'c', },
			'k',
		},
		['el'] = {
			{ '1=κ', '', },
		--?? what is this
			{ '1.voiced+1.stop', 'ɡ', },
			{
				'-1=γ',			-- αγκώνας BUT initial γκ = g
				{
					{ '0~preFront', 'ɟ' },
					'ɡ',
				},
			},
			{ '0~preFront', 'c', },
			'k',
		},
	},
}

data['λ'] = {
	['clusters'] = { },
	['p'] = {
		['cla'] = 'l',
		['koi1'] = 'l',
		['koi2'] = 'l',
		['med1'] = 'l',
		['med2'] = {
			{ '1=λ', '', },
			'l',
		},
		-- Ελλάδα εραλδικός
		['el'] = {
			{ '1=λ', '', },
			'l',
		},
	},
}

data['μ'] = {
	['clusters'] = {
		['ν'] = true,
	},
	['p'] = {
		['cla'] = 'm',
		['koi1'] = 'm',
		['koi2'] = 'm',
		['med1'] = 'm',
		['med2'] = {
			{ '1=μ', '', },
			'm',
		},
		-- μβ μφ = ɱv ɱf
		['el'] = {
			{ '1=β', 'ɱ', },
			{ '1=φ', 'ɱ', },
			{ '1=μ', '', },
			'm',
		},
	},
}

data['ν'] = {
	['clusters'] = { },
	['p'] = {
		['cla'] = 'n',
		['koi1'] = 'n',
		['koi2'] = 'n',
		['med1'] = 'n',
		['med2'] = {
			{ '1=ν', '', },
			'n',
		},
		--??CHEKTHIS ντζ  νεράντζι - νγκ ανγκορά
		['el'] = {
			{ '1=ν', '', },
			'n',
		},
	},
}

data['ξ'] = {
	['clusters'] = { },
	['p'] = {
		['cla'] = 'ks',
		['koi1'] = 'ks',
		['koi2'] = 'ks',
--!!??CHECKTHIS this ks must never separate
		['med1'] = 'ks',
		['med2'] = 'ks',
		['el'] = 'ks',	
	},
}

data['π'] = {
	['clusters'] = {
		['λ'] = true,
		['ν'] = true,
		['ρ'] = true,
		['τ'] = true,
	},
--!! aspirated are χφθ
	['p'] = {
		['cla'] = { 
			{ '1.aspirated', 'pʰ', },
			'p',
		},
		['koi1'] = 'p',
		['koi2'] = 'p',
		['med1'] = 'p',
--??CHECKTHIS check initial ΜΠ
		['med2'] = {
			{ '-1=μ', 'b' },
			{ '1=π', '', },
			'p',
		},
--??CHECKTHIS check initial ΜΠ and manually override mb for some loanwords
		['el'] = {
			{ '-1=μ', 'b' },	-- μπόμπα = bomba  αμπούλα = ambula BUT MANUALLY μπαμπάς babas
			{ '1=π', '', },
			'p',
		},
	},
}

data['ρ'] = {
	['clusters'] = { },
	['p'] = {
		['cla'] = {
			{ '1=ρ/1=ῥ/-1=ρ', 'r̥', },
			'r',
		},
		['koi1'] = 'r',
		['koi2'] = 'r',
		['med1'] = 'r',
		['med2'] = {
			{ '1=ρ', '', },
			'r',
		},
		['el'] = {
			{ '1=ρ', '', },
			'r',
		},
	},
}

data['ῥ'] = {
	['clusters'] = { },
	['p'] = {
		['cla'] = 'r̥',
		['koi1'] = 'r',
		['koi2'] = 'r',
		['med1'] = 'r',
		['med2'] = {
			{ '1=ρ', '', },
			'r',
		},
	--!! for el-kth Katharevousa spellings
		['el'] = {
			{ '1=ρ', '', },
			'r',
		},
	},
}

data['σ'] = {
	['clusters'] = {
		['β'] = true,
		['θ'] = true,
		['κ'] = true,
		['μ'] = true,
		['π'] = true,
		['τ'] = true,
		['φ'] = true,
		['χ'] = true,
	},
--!! voiced are βδγ μν λρ ζ  and ϝ
	['p'] = {
		['cla'] = {
			{ '1.voiced', 'z', },
			's',
		},
		['koi1'] = {
			{ '1.voiced', 'z', },
			's',
		},
		['koi2'] = {
			{ '1.voiced', 'z', },
			's',
		},
		['med1'] = {
			{ '1.voiced', 'z', },
			's',
		},
		['med2'] = {
			{ '1=σ', '', },
			{ '1.voiced', 'z', },
			's',
		},
		['el'] = {
			{ '1=σ', '', },
--?? keep this zm together xxσμένος = xx.zme.nos
			{ '1.voiced', 'z', },
			's',
		},
	},
}

data['τ'] = {
	['clusters'] = {
		['λ'] = true,
		['μ'] = true,
		['ρ'] = true,
	},
--!! aspirated are χφθ
	['p'] = {
		['cla'] = {
			{ '1.aspirated', 'tʰ', },
			't',
		},
		['koi1'] = 't',
		['koi2'] = 't',
		['med1'] = 't',
--??CHECKTHIS check initial ντ	
		['med2'] = {
			{ '-1=ν', 'd' },
--!! need double for τζ = ts AND τζ
			{ '1=τ', '', },
			't',
		},
--??CHECKTHIS check initial ντ and manually override mb for some loanwords
		['el'] = {
			{ '-1=ν', 'd' },	-- Ντάντολο = dandolo αντί = andi BUT MANUALLY νταντά = dada
--?? τσ τζ	How do i write, itself+1=σ = for ts dz  & # 865; & # x361; U+0361   ͡ COMBINING DOUBLE INVERTED BREVE
			{ '1=σ', 't͡s', },
			{ '1=ζ', 'd͡z', },
			{ '1=τ', '', },
			't',
		},
	},
}

data['φ'] = {
	['clusters'] = {
		['θ'] = true,
		['λ'] = true,
		['ρ'] = true,
	},
	['p'] = {
		['cla'] = 'pʰ',
		['koi1'] = 'pʰ',
		['koi2'] = 'ɸ',
		['med1'] = 'f',
		['med2'] = {
			{ '1=φ', '', },
			'f',
		},
		['el'] = {
			{ '1=φ', '', },
			'f',
		},
	},
}

data['χ'] = {
	['clusters'] = {
		['θ'] = true,
		['λ'] = true,
		['ρ'] = true,
	},
	['p'] = {
		['cla'] = 'kʰ',
		['koi1'] = 'kʰ',
		['koi2'] = {
			{ '1=χ', '', },
			{ '0~preFront', 'ç', },
			'x', },
		['med1'] = {
			{ '1=χ', '', },
			{ '0~preFront', 'ç', },
			'x', },
		['med2'] = {
			{ '1=χ', '', },
			{ '0~preFront', 'ç', },
			'x',
		},
		['el'] = {
			{ '1=χ', '', },
			{ '0~preFront', 'ç', },
			'x',
		},
	},
}

data['ψ'] = {
	['clusters'] = { },
	['p'] = {
		['cla'] = 'ps',
		['koi1'] = 'ps',
		['koi2'] = 'ps',
--!!??CHECKTHIS this ks must never separate αψύς = a.psis
		['med1'] = 'ps',
		['med2'] = 'ps',
		['el'] = 'ps',	
	},
}

data['ϝ'] = {
	['clusters'] = { },
	['p'] = {
		['cla'] = 'w',
		['koi1'] = '',
		['koi2'] = '',
		['med1'] = '',
		['med2'] = '',
		['el'] = '',
	},
}

data['α'] = {
	['pre'] = {
		{ '0~isIDiphth/0~isUDiphth/0~hasMacronBreve', 1},
		0,
	},
	['p'] = {
		['cla'] = 'a',
		['koi1'] = 'a',
		['koi2'] = 'a',
		['med1'] = 'a',
		['med2'] = 'a',
		['el'] = 'a',
	},
}

data['ε'] = {
	['pre'] = {
		{ '0~isIDiphth/0~isUDiphth', 1},
		0,
	},
	['p'] = {
		['cla'] = 'e',
		['koi1'] = 'e',
		['koi2'] = 'e',
		['med1'] = 'e',
		['med2'] = 'e',
		['el'] = 'e',
	},
}

data['η'] = {
	['pre'] = {
		{ '0~isUDiphth', 1},
		0,
	},
	['p'] = {
		['cla'] = 'ɛ',
		['koi1'] = 'e̝',
		['koi2'] = 'i',
		['med1'] = 'i',
		['med2'] = 'i',
		['el'] = 'i',
	},
}

data['ι'] = {
	['p'] = {
		['cla'] = 'i',
		['koi1'] = 'i',
		['koi2'] = 'i',
		['med1'] = 'i',
		['med2'] = 'i',
		['el'] = 'i',
	},
}

data['ο'] = {
	['pre'] = {
		{ '0~isIDiphth/0~isUDiphth', 1},
		0,
	},
	['p'] = {
		['cla'] = 'o',
		['koi1'] = 'o',
		['koi2'] = 'o',
		['med1'] = 'o',
		['med2'] = 'o',
		['el'] = 'o',	
	},
}

data['υ'] = {
	['pre'] = {
		{ '0~isIDiphth/0~hasMacronBreve', 1},
		0,
	},
	['p'] = {
		['cla'] = 'y',
		['koi1'] = 'y',
		['koi2'] = 'y',
		['med1'] = 'y',
		['med2'] = 'i',
		['el'] = 'i',
	},
}

data['ω'] = {
	['p'] = {
		['cla'] = 'ɔ',
		['koi1'] = 'o',
		['koi2'] = 'o',
		['med1'] = 'o',
		['med2'] = 'o',
		['el'] = 'o',
	},
}

local categories = {
	[1] = {
		["stop"] = { "π", "τ", "κ", "β", "δ", "γ", "φ", "θ", "χ", "ψ", "ξ", },
		["dorsal"] = { "κ", "γ", "χ", "ξ", },
		["voiced"] = { "β", "δ", "γ", "ζ", "μ", "ν", "λ", "ρ", "ϝ", },
		["unvoiced"] = { "π", "ψ", "τ", "κ", "ξ", "φ", "θ", "χ", "σ", "ς", },
		["aspirated"] = { "φ", "θ", "χ", },
		["diaer"] = { "ϊ", "ϋ", "ΐ", "ΰ", "ῒ", "ῢ", "ῗ", "ῧ", },
		["subi"] = { "ᾳ", "ῃ", "ῳ", "ᾴ", "ῄ", "ῴ", "ᾲ", "ῂ", "ῲ", "ᾷ", "ῇ", "ῷ", "ᾀ", "ᾐ", "ᾠ", "ᾄ", "ᾔ", "ᾤ", "ᾂ", "ᾒ", "ᾢ", "ᾆ", "ᾖ", "ᾦ", "ᾁ", "ᾑ", "ᾡ", "ᾅ", "ᾕ", "ᾥ", "ᾃ", "ᾓ", "ᾣ", "ᾇ", "ᾗ", "ᾧ", },
		},
	["type"] = {
		["vowel"] = { "α", "ε", "η", "ι", "ο", "ω", "υ", }, -- Not currently used; if it were, it might need to include all the accented vowel characters.
		["consonant"] = { "β", "γ", "δ", "ζ", "θ", "κ", "λ", "μ", "ν", "ξ", "π", "ρ", "σ", "ς", "τ", "φ", "χ", "ψ", },
		["long"] = { "η", "ω", "ᾱ", "ῑ", "ῡ", },
		["short"] = { "ε", "ο", "ᾰ", "ῐ", "ῠ", },
		["either"] = { "α", "ι", "υ", },
		["diacritic"] = { diacritics.macron, diacritics.spacing_macron, diacritics.modifier_macron, diacritics.breve, diacritics.spacing_breve, diacritics.rough, diacritics.smooth, diacritics.diaeresis, diacritics.acute, diacritics.grave, diacritics.circum, diacritics.Latin_circum, diacritics.coronis, diacritics.subscript, },
		},
	["accent"] = {
		["acute"] = { "ά", "έ", "ή", "ί", "ό", "ύ", "ώ", "ᾴ", "ῄ", "ῴ", "ἄ", "ἔ", "ἤ", "ἴ", "ὄ", "ὔ", "ὤ", "ᾄ", "ᾔ", "ᾤ", "ἅ", "ἕ", "ἥ", "ἵ", "ὅ", "ὕ", "ὥ", "ᾅ", "ᾕ", "ᾥ", "ΐ", "ΰ", },
		["grave"] = { "ὰ", "ὲ", "ὴ", "ὶ", "ὸ", "ὺ", "ὼ", "ᾲ", "ῂ", "ῲ", "ἂ", "ἒ", "ἢ", "ἲ", "ὂ", "ὒ", "ὢ", "ᾂ", "ᾒ", "ᾢ", "ἃ", "ἓ", "ἣ", "ἳ", "ὃ", "ὓ", "ὣ", "ᾃ", "ᾓ", "ᾣ", "ῒ", "ῢ", },
		["circum"] = { "ᾶ", "ῆ", "ῖ", "ῦ", "ῶ", "ᾷ", "ῇ", "ῷ", "ἆ", "ἦ", "ἶ", "ὖ", "ὦ", "ᾆ", "ᾖ", "ᾦ", "ἇ", "ἧ", "ἷ", "ὗ", "ὧ", "ᾇ", "ᾗ", "ᾧ", "ῗ", "ῧ", },
		},
	["breath"] = {
		["rough"] = { "ἁ", "ἑ", "ἡ", "ἱ", "ὁ", "ὑ", "ὡ", "ᾁ", "ᾑ", "ᾡ", "ἅ", "ἕ", "ἥ", "ἵ", "ὅ", "ὕ", "ὥ", "ᾅ", "ᾕ", "ᾥ", "ἃ", "ἓ", "ἣ", "ἳ", "ὃ", "ὓ", "ὣ", "ᾃ", "ᾓ", "ᾣ", "ἇ", "ἧ", "ἷ", "ὗ", "ὧ", "ᾇ", "ᾗ", "ᾧ", },
		["smooth"] = { "ἀ", "ἐ", "ἠ", "ἰ", "ὀ", "ὐ", "ὠ", "ᾀ", "ᾐ", "ᾠ", "ῤ", "ἄ", "ἔ", "ἤ", "ἴ", "ὄ", "ὔ", "ὤ", "ᾄ", "ᾔ", "ᾤ", "ἂ", "ἒ", "ἢ", "ἲ", "ὂ", "ὒ", "ὢ", "ᾂ", "ᾒ", "ᾢ", "ἆ", "ἦ", "ἶ", "ὖ", "ὦ", "ᾆ", "ᾖ", "ᾦ", },
		},
	}

for key1, list in pairs(categories) do
	for key2, letters in pairs(list) do
		if type(key1) == "number" then
			for _, letter in ipairs(letters) do
				if not data[letter] then
					data[letter] = {}
				end
				data[letter][key2] = true
			end
		elseif type(key1) == "string" then
			for _, letter in ipairs(letters) do
				if not data[letter] then
					data[letter] = {}
				end
				data[letter][key1] = key2
			end
		end
	end
end

for letter in gmatch("εέὲἐἔἒἑἕἓ", ".") do
	local l_data = data[letter]
	l_data.p = epsilon(l_data.breath, l_data.accent)
end

for letter in gmatch("οόὸὀὄὂὁὅὃ", ".") do
	local l_data = data[letter]
	l_data.p = omicron(l_data.breath, l_data.accent)
end

for letter in gmatch("ηῃήῄὴῂῆῇἠᾐἤᾔἢᾒἦᾖἡᾑἥᾕἣᾓἧᾗ", ".") do
	local l_data = data[letter]
	l_data.p = eta(l_data.breath, l_data.accent, l_data.subi)
end

for letter in gmatch("ωῳώῴὼῲῶῷὠᾠὤᾤὢᾢὦᾦὡᾡὥᾥὣᾣὧᾧ", ".") do
	local l_data = data[letter]
	l_data.p = omega(l_data.breath, l_data.accent, l_data.subi)
end

for letter in gmatch("αᾳάᾴὰᾲᾶᾷἀᾀἄᾄἂᾂἆᾆἁᾁἅᾅἃᾃἇᾇ", ".") do
	local l_data = data[letter]
	l_data.p = alpha(l_data.breath, l_data.accent, l_data.subi)
	if not l_data.subi and l_data.accent ~= 'circum' then
		if not l_data.pre then
			l_data.pre =  { { '0~hasMacronBreve', 1}, 0, }
		end
		data[letter .. breve] = {p = alpha(l_data.breath, l_data.accent, false, false)}
		data[letter .. macron] = {p = alpha(l_data.breath, l_data.accent, false, true)}
	end
end

for letter in gmatch("ιίὶῖἰἴἲἶἱἵἳἷϊΐῒῗ", ".") do
	local l_data = data[letter]
	l_data.p = iota(l_data.breath, l_data.accent)
	if l_data.accent ~= 'circum' then
		l_data.pre =  { { '0~hasMacronBreve', 1}, 0, }
		data[letter .. breve] = {p = iota(l_data.breath, l_data.accent, false)}
		data[letter .. macron] = {p = iota(l_data.breath, l_data.accent, true)}
	end
	if not l_data.diar then
		data['α' .. letter] = {p = ai(l_data.breath, l_data.accent)}
		data['ε' .. letter] = {p = ei(l_data.breath, l_data.accent)}
		data['ο' .. letter] = {p = oi(l_data.breath, l_data.accent)}
		data['υ' .. letter] = {p = ui(l_data.breath, l_data.accent)}
	end
end

for letter in gmatch("υύὺῦὐὔὒὖὑὕὓὗϋΰῢῧ", ".") do
	local l_data = data[letter]
	l_data.p = ypsilon(l_data.breath, l_data.accent)
	if l_data.accent ~= 'circum' then
		if letter ~= 'υ' then l_data.pre =  { { '0~hasMacronBreve', 1}, 0, } end
		data[letter .. breve] = {p = ypsilon(l_data.breath, l_data.accent, false)}
		data[letter .. macron] = {p = ypsilon(l_data.breath, l_data.accent, true)}
	end
	if not l_data.diar then
		data['α' .. letter] = {p = au(l_data.breath, l_data.accent)}
		data['η' .. letter] = {p = hu(l_data.breath, l_data.accent)}
		data['ε' .. letter] = {p = eu(l_data.breath, l_data.accent)}
		data['ο' .. letter] = {p = ou(l_data.breath, l_data.accent)}
	end
end

data['chars'] = {
	['consDouble'] = "[kp]s", -- but only for ξ ψ not for κσ (πσ... cannot find) NO BREAK (also need zm)
	['cons'] = 'bɡŋdzklmnprstβðɣɸθxfvɟʝcçwʍj',
	['vowel'] = "aeiouyɛɔ",
	['diacritic'] = high .. low .. midHigh .. midLow .. highMid .. long .. aspirated .. voiceless .. nonsyllabic .. rising .. falling,
	['liquid'] = "rln",
	['obst'] = "bɡdkptβðɣɸθxfv",
	['frontDiphth'] = "[αο]ι",
	['frontVowel'] = "ιηευ",
	['iDiaer'] = "ϊΐῒῗ",
	['long'] = "ηω",
	['short'] = "εο",
	['ambig'] = "αιυ",
	['uDiphth'] = 'αεηο', -- first members for diphthongs ending in 'υ'
	['iDiphth'] = 'αεου', -- first members for diphthongs ending in 'ι'
	['Greekdiacritic'] = m_utils_data.all,
	['Greekconsonant'] = m_utils_data.consonants
}
data.chars.frontDiphthong = data.chars.frontDiphth

return data