Module:Betacode

From Wikisource
Jump to navigation Jump to search

--[=[
Beta Code greek implementation
]=]

local getArgs = require('Module:Arguments').getArgs

local p = {} --p stands for package

local letters = {
	['a'] = 'α', ['A'] = 'Α',
	['b'] = 'β', ['B'] = 'Β',
	['c'] = 'ξ', ['C'] = 'Ξ',
	['d'] = 'δ', ['D'] = 'Δ',
	['e'] = 'ε', ['E'] = 'Ε',
	['f'] = 'φ', ['F'] = 'Φ',
	['g'] = 'γ', ['G'] = 'Γ',
	['h'] = 'η', ['H'] = 'Η',
	['i'] = 'ι', ['I'] = 'Ι',
	['j'] = 'ς',
	['k'] = 'κ', ['K'] = 'Κ',
	['l'] = 'λ', ['L'] = 'Λ',
	['m'] = 'μ', ['M'] = 'Μ',
	['n'] = 'ν', ['N'] = 'Ν',
	['o'] = 'ο', ['O'] = 'Ο',
	['p'] = 'π', ['P'] = 'Π',
	['q'] = 'θ', ['Q'] = 'Θ',
	['r'] = 'ρ', ['R'] = 'Ρ',
	['t'] = 'τ', ['T'] = 'Τ',
	['s'] = 'σ', ['S'] = 'Σ',
	['u'] = 'υ', ['U'] = 'Υ',
	['v'] = 'ϝ', ['v'] = 'Ϝ',
	['w'] = 'ω', ['W'] = 'Ω',
	['x'] = 'χ', ['X'] = 'Χ',
	['y'] = 'ψ', ['Y'] = 'Ψ',
	['z'] = 'ζ', ['Z'] = 'Ζ',
}

--[=[
Decode betacode into polytonic Greek
]=]
function p.decode(frame)
	local args = getArgs(frame)
	
	local txt = args[1] or ""
	
	-- end of word s
	txt = txt:gsub('s(%A)', 'j%1')
	txt = txt:gsub('s$', 'j')
	
	txt = txt:gsub('([A-Za-z])', function(l)
		return letters[l]
	end)
	
	txt = txt:gsub('%)', mw.ustring.char(0x313))
	txt = txt:gsub('%(', mw.ustring.char(0x314))
	txt = txt:gsub('=', mw.ustring.char(0x342))
	txt = txt:gsub('~', mw.ustring.char(0x342))
	txt = txt:gsub('/', mw.ustring.char(0x301))
	txt = txt:gsub('\\', mw.ustring.char(0x300))
	txt = txt:gsub('%+', mw.ustring.char(0x308))
	txt = txt:gsub('|', mw.ustring.char(0x345))
	txt = txt:gsub('!', mw.ustring.char(0x345))
	txt = txt:gsub('%?', mw.ustring.char(0x323))
	txt = txt:gsub('%^', mw.ustring.char(0x311)) -- inverted breve
	
	return frame:expandTemplate{title = 'polytonic', args = { txt }}
end

return p