<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3AAncient_Greek%2Ftyping</id>
	<title>Module:Ancient Greek/typing - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3AAncient_Greek%2Ftyping"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Ancient_Greek/typing&amp;action=history"/>
	<updated>2026-05-24T11:55:39Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Ancient_Greek/typing&amp;diff=135222&amp;oldid=prev</id>
		<title>imported&gt;Pppery: Remove pointless declarations of functions as local variables</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Ancient_Greek/typing&amp;diff=135222&amp;oldid=prev"/>
		<updated>2020-01-08T21:14:10Z</updated>

		<summary type="html">&lt;p&gt;Remove pointless declarations of functions as local variables&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local sparse_concat = require(&amp;quot;Module:TableTools&amp;quot;).sparseConcat&lt;br /&gt;
local U = mw.ustring.char&lt;br /&gt;
&lt;br /&gt;
local UTF8_char = &amp;quot;[%z\1-\127\194-\244][\128-\191]*&amp;quot; -- roughly equivalent to &amp;quot;.&amp;quot; in Ustring patterns&lt;br /&gt;
local one_UTF8_char_or_none = &amp;quot;[%z\1-\127\194-\244]?[\128-\191]*&amp;quot; -- roughly equivalent to &amp;quot;.?&amp;quot; in Ustring patterns&lt;br /&gt;
&lt;br /&gt;
local subscript = U(0x345) -- iota subscript (ypogegrammeni)&lt;br /&gt;
local macron = U(0x304) -- macron&lt;br /&gt;
local spacing_macron = U(0xAF)&lt;br /&gt;
local modifier_macron = U(0x2C9) -- modifier letter macron&lt;br /&gt;
local breve = U(0x306) -- breve&lt;br /&gt;
local spacing_breve = &amp;quot;˘&amp;quot; -- spacing breve&lt;br /&gt;
local diaeresis = U(0x308) -- diaeresis&lt;br /&gt;
local rough = U(0x314) -- rough breathing (reversed comma)&lt;br /&gt;
local smooth = U(0x313) -- smooth breathing (comma)&lt;br /&gt;
local acute = U(0x301) -- acute&lt;br /&gt;
local grave = U(0x300) -- grave&lt;br /&gt;
local circumflex = U(0x342) -- Greek circumflex (perispomeni)&lt;br /&gt;
local question_mark = U(0x37E) -- Greek question mark&lt;br /&gt;
local spacing_rough = &amp;quot;῾&amp;quot; -- spacing rough breathing&lt;br /&gt;
local spacing_smooth = &amp;quot;᾿&amp;quot; -- spacing smooth breathing&lt;br /&gt;
&lt;br /&gt;
local combining_diacritic = table.concat{&lt;br /&gt;
	&amp;quot;[&amp;quot;,&lt;br /&gt;
	macron, breve,&lt;br /&gt;
	rough, smooth, diaeresis,&lt;br /&gt;
	acute, grave, circumflex,&lt;br /&gt;
	subscript,&lt;br /&gt;
	&amp;quot;]&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- The numbers are used to sort series of diacritics.&lt;br /&gt;
local diacritic_position = {&lt;br /&gt;
	[macron] = 1,&lt;br /&gt;
	[breve] = 2,&lt;br /&gt;
	[rough] = 3,&lt;br /&gt;
	[smooth] = 3,&lt;br /&gt;
	[diaeresis] = 3,&lt;br /&gt;
	[acute] = 4,&lt;br /&gt;
	[grave] = 4,&lt;br /&gt;
	[circumflex] = 4,&lt;br /&gt;
	[subscript] = 5,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Perform a function on each Unicode character in a string.&lt;br /&gt;
local function for_each(str, func)&lt;br /&gt;
	for char in string.gmatch(str, UTF8_char) do&lt;br /&gt;
		func(char)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[=[	This function arranges diacritics in the following order:&lt;br /&gt;
			1. macron or breve&lt;br /&gt;
			2. breathings or diaeresis&lt;br /&gt;
			3. acute, circumflex, or grave&lt;br /&gt;
			4. iota subscript&lt;br /&gt;
		Used by [[Module:typing-aids]].&lt;br /&gt;
		&lt;br /&gt;
		Returns an error if a sequence of diacritics contains more than one&lt;br /&gt;
		of each category.&lt;br /&gt;
]=]&lt;br /&gt;
local function get_relative_position(diacritic1, diacritic2)&lt;br /&gt;
	return diacritic_position[diacritic1] &amp;lt; diacritic_position[diacritic2]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function chars_to_table(chars)&lt;br /&gt;
	local t = {}&lt;br /&gt;
	local i = 0&lt;br /&gt;
	for char in string.gmatch(chars, &amp;quot;[%z\1-\127\194-\244][\128-\191]*&amp;quot;) do&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		t[i] = char&lt;br /&gt;
	end&lt;br /&gt;
	return t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function reorder_diacritic_sequence(diacritics)&lt;br /&gt;
	diacritics = chars_to_table(diacritics)&lt;br /&gt;
	table.sort(diacritics, get_relative_position)&lt;br /&gt;
	return table.concat(diacritics)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.reorder_diacritics(text)&lt;br /&gt;
	return (mw.ustring.gsub(mw.ustring.toNFD(text),&lt;br /&gt;
		combining_diacritic .. combining_diacritic .. &amp;quot;+&amp;quot;,&lt;br /&gt;
		reorder_diacritic_sequence))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local multiple = {&lt;br /&gt;
	[&amp;quot;_i&amp;quot;] = subscript,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local single = {&lt;br /&gt;
	[&amp;quot;a&amp;quot;] = &amp;quot;α&amp;quot;, [&amp;quot;A&amp;quot;] = &amp;quot;Α&amp;quot;,&lt;br /&gt;
	[&amp;quot;b&amp;quot;] = &amp;quot;β&amp;quot;, [&amp;quot;B&amp;quot;] = &amp;quot;Β&amp;quot;,&lt;br /&gt;
	[&amp;quot;c&amp;quot;] = &amp;quot;ξ&amp;quot;, [&amp;quot;C&amp;quot;] = &amp;quot;Ξ&amp;quot;,&lt;br /&gt;
	[&amp;quot;d&amp;quot;] = &amp;quot;δ&amp;quot;, [&amp;quot;D&amp;quot;] = &amp;quot;Δ&amp;quot;,&lt;br /&gt;
	[&amp;quot;e&amp;quot;] = &amp;quot;ε&amp;quot;, [&amp;quot;E&amp;quot;] = &amp;quot;Ε&amp;quot;,&lt;br /&gt;
	[&amp;quot;f&amp;quot;] = &amp;quot;φ&amp;quot;, [&amp;quot;F&amp;quot;] = &amp;quot;Φ&amp;quot;,&lt;br /&gt;
	[&amp;quot;g&amp;quot;] = &amp;quot;γ&amp;quot;, [&amp;quot;G&amp;quot;] = &amp;quot;Γ&amp;quot;,&lt;br /&gt;
	[&amp;quot;h&amp;quot;] = &amp;quot;η&amp;quot;, [&amp;quot;H&amp;quot;] = &amp;quot;Η&amp;quot;,&lt;br /&gt;
	[&amp;quot;i&amp;quot;] = &amp;quot;ι&amp;quot;, [&amp;quot;I&amp;quot;] = &amp;quot;Ι&amp;quot;,&lt;br /&gt;
	[&amp;quot;k&amp;quot;] = &amp;quot;κ&amp;quot;, [&amp;quot;K&amp;quot;] = &amp;quot;Κ&amp;quot;,&lt;br /&gt;
	[&amp;quot;l&amp;quot;] = &amp;quot;λ&amp;quot;, [&amp;quot;L&amp;quot;] = &amp;quot;Λ&amp;quot;,&lt;br /&gt;
	[&amp;quot;m&amp;quot;] = &amp;quot;μ&amp;quot;, [&amp;quot;M&amp;quot;] = &amp;quot;Μ&amp;quot;,&lt;br /&gt;
	[&amp;quot;n&amp;quot;] = &amp;quot;ν&amp;quot;, [&amp;quot;N&amp;quot;] = &amp;quot;Ν&amp;quot;,&lt;br /&gt;
	[&amp;quot;o&amp;quot;] = &amp;quot;ο&amp;quot;, [&amp;quot;O&amp;quot;] = &amp;quot;Ο&amp;quot;,&lt;br /&gt;
	[&amp;quot;p&amp;quot;] = &amp;quot;π&amp;quot;, [&amp;quot;P&amp;quot;] = &amp;quot;Π&amp;quot;,&lt;br /&gt;
	[&amp;quot;q&amp;quot;] = &amp;quot;θ&amp;quot;, [&amp;quot;Q&amp;quot;] = &amp;quot;Θ&amp;quot;,&lt;br /&gt;
	[&amp;quot;r&amp;quot;] = &amp;quot;ρ&amp;quot;, [&amp;quot;R&amp;quot;] = &amp;quot;Ρ&amp;quot;,&lt;br /&gt;
	[&amp;quot;s&amp;quot;] = &amp;quot;σ&amp;quot;, [&amp;quot;S&amp;quot;] = &amp;quot;Σ&amp;quot;,&lt;br /&gt;
	[&amp;quot;t&amp;quot;] = &amp;quot;τ&amp;quot;, [&amp;quot;T&amp;quot;] = &amp;quot;Τ&amp;quot;,&lt;br /&gt;
	[&amp;quot;u&amp;quot;] = &amp;quot;υ&amp;quot;, [&amp;quot;U&amp;quot;] = &amp;quot;Υ&amp;quot;,&lt;br /&gt;
	[&amp;quot;v&amp;quot;] = &amp;quot;ϝ&amp;quot;, [&amp;quot;V&amp;quot;] = &amp;quot;Ϝ&amp;quot;,&lt;br /&gt;
	[&amp;quot;w&amp;quot;] = &amp;quot;ω&amp;quot;, [&amp;quot;W&amp;quot;] = &amp;quot;Ω&amp;quot;,&lt;br /&gt;
	[&amp;quot;x&amp;quot;] = &amp;quot;χ&amp;quot;, [&amp;quot;X&amp;quot;] = &amp;quot;Χ&amp;quot;,&lt;br /&gt;
	[&amp;quot;y&amp;quot;] = &amp;quot;ψ&amp;quot;, [&amp;quot;Y&amp;quot;] = &amp;quot;Ψ&amp;quot;,&lt;br /&gt;
	[&amp;quot;z&amp;quot;] = &amp;quot;ζ&amp;quot;, [&amp;quot;Z&amp;quot;] = &amp;quot;Ζ&amp;quot;,&lt;br /&gt;
	&lt;br /&gt;
	-- vowel length&lt;br /&gt;
	[&amp;quot;_&amp;quot;] = macron, [spacing_macron] = macron, [modifier_macron] = macron,&lt;br /&gt;
	[&amp;quot;^&amp;quot;] = breve, [spacing_breve] = breve,&lt;br /&gt;
	&lt;br /&gt;
	-- diaeresis and breathings&lt;br /&gt;
	[&amp;quot;+&amp;quot;] = diaeresis, [&amp;quot;(&amp;quot;] = rough, [&amp;quot;)&amp;quot;] = smooth,&lt;br /&gt;
	&lt;br /&gt;
	-- accents&lt;br /&gt;
	[&amp;quot;/&amp;quot;] = acute, [&amp;quot;\\&amp;quot;] = grave,&lt;br /&gt;
	[&amp;quot;=&amp;quot;] = circumflex, [&amp;quot;{{=}}&amp;quot;] = circumflex, [&amp;quot;~&amp;quot;] = circumflex,&lt;br /&gt;
	&lt;br /&gt;
	-- punctuation&lt;br /&gt;
	[&amp;quot;&amp;#039;&amp;quot;] = &amp;quot;’&amp;quot;,&lt;br /&gt;
	[&amp;quot;?&amp;quot;] = question_mark,&lt;br /&gt;
	[&amp;quot;;&amp;quot;] = &amp;quot;·&amp;quot;,&lt;br /&gt;
	[&amp;quot;*&amp;quot;] = &amp;quot;&amp;quot;, -- place after s to prevent it from turning into final sigma&lt;br /&gt;
	&lt;br /&gt;
	-- pipe&lt;br /&gt;
	[&amp;quot;!&amp;quot;] = &amp;quot;|&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function convert_s_to_sigma(text)&lt;br /&gt;
	text = string.gsub(text,&lt;br /&gt;
		&amp;quot;s(&amp;quot; .. one_UTF8_char_or_none .. &amp;quot;)&amp;quot;,&lt;br /&gt;
		function (following)&lt;br /&gt;
			return ((following == &amp;quot;&amp;quot;&lt;br /&gt;
				or following ~= &amp;quot;*&amp;quot; and following ~= &amp;quot;-&amp;quot; and mw.ustring.find(following, &amp;quot;[%s%p]&amp;quot;))&lt;br /&gt;
				and  &amp;quot;ς&amp;quot;&lt;br /&gt;
				or &amp;quot;σ&amp;quot;) .. following&lt;br /&gt;
		end)&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function combining_to_spacing(text)&lt;br /&gt;
	for _, accents in ipairs{ { rough, spacing_rough }, { smooth, spacing_smooth } } do&lt;br /&gt;
		local combining, spacing = unpack(accents)&lt;br /&gt;
		text = string.gsub(text,&lt;br /&gt;
			&amp;quot;(&amp;quot; .. one_UTF8_char_or_none .. &amp;quot;)&amp;quot; .. combining,&lt;br /&gt;
			function (preceding)&lt;br /&gt;
				if preceding == &amp;quot;&amp;quot; then&lt;br /&gt;
					return spacing&lt;br /&gt;
				else&lt;br /&gt;
					return preceding .. combining&lt;br /&gt;
				end&lt;br /&gt;
			end)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.to_Greek(text)&lt;br /&gt;
	if type(text) ~= &amp;quot;string&amp;quot; then&lt;br /&gt;
		error(&amp;quot;first argument to to_greek should be string, not &amp;quot; .. type(text))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	text = convert_s_to_sigma(text)&lt;br /&gt;
	for k, v in pairs(multiple) do&lt;br /&gt;
		text = string.gsub(text, k, v)&lt;br /&gt;
	end&lt;br /&gt;
	text = string.gsub(text, UTF8_char, single)&lt;br /&gt;
	text = combining_to_spacing(text)&lt;br /&gt;
	return p.reorder_diacritics(text)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.to_Greek_t(frame)&lt;br /&gt;
	local args = {}&lt;br /&gt;
	for k, v in pairs(frame:getParent().args) do&lt;br /&gt;
		if k == 1 then&lt;br /&gt;
			v = mw.text.trim(v)&lt;br /&gt;
			if v == &amp;quot;&amp;quot; then&lt;br /&gt;
				v = nil&lt;br /&gt;
			end&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not args[1] then&lt;br /&gt;
		if mw.title.getCurrentTitle().nsText == &amp;quot;Template&amp;quot; then&lt;br /&gt;
			args[1] = &amp;quot;le/cis&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			error(&amp;quot;Parameter 1 is required.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return p.to_Greek(args[1])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function process(char)&lt;br /&gt;
	if char == &amp;quot;&amp;quot; then&lt;br /&gt;
		return char&lt;br /&gt;
	end&lt;br /&gt;
	local entity = (&amp;quot;&amp;amp;#x%X;&amp;quot;):format(mw.ustring.codepoint(char))&lt;br /&gt;
	if diacritic_position[char] then&lt;br /&gt;
		return &amp;quot;◌&amp;quot; .. entity&lt;br /&gt;
	else&lt;br /&gt;
		return entity&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.show_shortcuts(frame)&lt;br /&gt;
	local output = { &amp;#039;{| class=&amp;quot;wikitable&amp;quot;&amp;#039; }&lt;br /&gt;
	&lt;br /&gt;
	local function comp(item1, item2)&lt;br /&gt;
		 -- non-letters after letters&lt;br /&gt;
		if item1:find(&amp;quot;^%a$&amp;quot;) ~= item2:find(&amp;quot;^%a$&amp;quot;) then&lt;br /&gt;
			return item1:find(&amp;quot;^%a$&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		local lower1, lower2 = item1:lower(), item2:lower()&lt;br /&gt;
		-- capitals before lowercase&lt;br /&gt;
		if lower1 == lower2 then&lt;br /&gt;
			return item1 &amp;lt; item2&lt;br /&gt;
		-- otherwise case-insensitive sorting&lt;br /&gt;
		else&lt;br /&gt;
			return lower1 &amp;lt; lower2&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local i = 1&lt;br /&gt;
	for k, v in require(&amp;quot;Module:TableTools&amp;quot;).sortedPairs(single, comp) do&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		output[i] = &amp;#039;| &amp;lt;code&amp;gt;&amp;#039; .. k .. &amp;#039;&amp;lt;/code&amp;gt; || &amp;lt;span lang=&amp;quot;grc&amp;quot;&amp;gt;&amp;#039; .. process(v) .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
		if i % 3 == 0 then -- 3 because each row consists of row syntax |- and two pairs of cells&lt;br /&gt;
			i = i + 1&lt;br /&gt;
			output[i] = &amp;#039;|-&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	table.insert(output, &amp;#039;|}&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(output, &amp;#039;\n&amp;#039;)	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Pppery</name></author>
	</entry>
</feed>