Initial import

This commit is contained in:
David Baer
2015-07-10 09:17:50 -04:00
commit ed8bdcfd93
81 changed files with 100150 additions and 0 deletions

292
engine/accents.py Normal file
View File

@@ -0,0 +1,292 @@
# -*- coding: utf-8 -*-
# vim:set noet ts=4:
#
# ibus-grc - The Input Bus polytonic Greek input method
#
# Copyright (c) 2011 David Baer <david.a.baer@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
from greek_alphabet import *
ACCENT_ACUTE = 1
ACCENT_GRAVE = 2
ACCENT_CIRCUMFLEX = 4
IOTA_SUBSCRIPT = 8
BREATHING_ROUGH = 16
BREATHING_SMOOTH = 32
LENGTH_MACRON = 64
LENGTH_VRACHY = 128
DIALYTIKA = 256
DIPTHONG = 512
MASK_ACCENTS = ACCENT_ACUTE|ACCENT_GRAVE|ACCENT_CIRCUMFLEX
MASK_BREATHING = BREATHING_ROUGH|BREATHING_SMOOTH
a = 5
_decomposition_table = {
u"\u1f00" : (alpha, BREATHING_SMOOTH),
u"\u1f01" : (alpha, BREATHING_ROUGH),
u"\u1f02" : (alpha, BREATHING_SMOOTH|ACCENT_GRAVE),
u"\u1f03" : (alpha, BREATHING_ROUGH|ACCENT_GRAVE),
u"\u1f04" : (alpha, BREATHING_SMOOTH|ACCENT_ACUTE),
u"\u1f05" : (alpha, BREATHING_ROUGH|ACCENT_ACUTE),
u"\u1f06" : (alpha, BREATHING_SMOOTH|ACCENT_CIRCUMFLEX),
u"\u1f07" : (alpha, BREATHING_ROUGH|ACCENT_CIRCUMFLEX),
u"\u1f08" : (Alpha, BREATHING_SMOOTH),
u"\u1f09" : (Alpha, BREATHING_ROUGH),
u"\u1f0a" : (Alpha, BREATHING_SMOOTH|ACCENT_GRAVE),
u"\u1f0b" : (Alpha, BREATHING_ROUGH|ACCENT_GRAVE),
u"\u1f0c" : (Alpha, BREATHING_SMOOTH|ACCENT_ACUTE),
u"\u1f0d" : (Alpha, BREATHING_ROUGH|ACCENT_ACUTE),
u"\u1f0e" : (Alpha, BREATHING_SMOOTH|ACCENT_CIRCUMFLEX),
u"\u1f0f" : (Alpha, BREATHING_ROUGH|ACCENT_CIRCUMFLEX),
u"\u1f10" : (epsilon, BREATHING_SMOOTH),
u"\u1f11" : (epsilon, BREATHING_ROUGH),
u"\u1f12" : (epsilon, BREATHING_SMOOTH|ACCENT_GRAVE),
u"\u1f13" : (epsilon, BREATHING_ROUGH|ACCENT_GRAVE),
u"\u1f14" : (epsilon, BREATHING_SMOOTH|ACCENT_ACUTE),
u"\u1f15" : (epsilon, BREATHING_ROUGH|ACCENT_ACUTE),
u"\u1f18" : (Epsilon, BREATHING_SMOOTH),
u"\u1f19" : (Epsilon, BREATHING_ROUGH),
u"\u1f1a" : (Epsilon, BREATHING_SMOOTH|ACCENT_GRAVE),
u"\u1f1b" : (Epsilon, BREATHING_ROUGH|ACCENT_GRAVE),
u"\u1f1c" : (Epsilon, BREATHING_SMOOTH|ACCENT_ACUTE),
u"\u1f1d" : (Epsilon, BREATHING_ROUGH|ACCENT_ACUTE),
u"\u1f20" : (eta, BREATHING_SMOOTH),
u"\u1f21" : (eta, BREATHING_ROUGH),
u"\u1f22" : (eta, BREATHING_SMOOTH|ACCENT_GRAVE),
u"\u1f23" : (eta, BREATHING_ROUGH|ACCENT_GRAVE),
u"\u1f24" : (eta, BREATHING_SMOOTH|ACCENT_ACUTE),
u"\u1f25" : (eta, BREATHING_ROUGH|ACCENT_ACUTE),
u"\u1f26" : (eta, BREATHING_SMOOTH|ACCENT_CIRCUMFLEX),
u"\u1f27" : (eta, BREATHING_ROUGH|ACCENT_CIRCUMFLEX),
u"\u1f28" : (Eta, BREATHING_SMOOTH),
u"\u1f29" : (Eta, BREATHING_ROUGH),
u"\u1f2a" : (Eta, BREATHING_SMOOTH|ACCENT_GRAVE),
u"\u1f2b" : (Eta, BREATHING_ROUGH|ACCENT_GRAVE),
u"\u1f2c" : (Eta, BREATHING_SMOOTH|ACCENT_ACUTE),
u"\u1f2d" : (Eta, BREATHING_ROUGH|ACCENT_ACUTE),
u"\u1f2e" : (Eta, BREATHING_SMOOTH|ACCENT_CIRCUMFLEX),
u"\u1f2f" : (Eta, BREATHING_ROUGH|ACCENT_CIRCUMFLEX),
u"\u1f30" : (iota, BREATHING_SMOOTH),
u"\u1f31" : (iota, BREATHING_ROUGH),
u"\u1f32" : (iota, BREATHING_SMOOTH|ACCENT_GRAVE),
u"\u1f33" : (iota, BREATHING_ROUGH|ACCENT_GRAVE),
u"\u1f34" : (iota, BREATHING_SMOOTH|ACCENT_ACUTE),
u"\u1f35" : (iota, BREATHING_ROUGH|ACCENT_ACUTE),
u"\u1f36" : (iota, BREATHING_SMOOTH|ACCENT_CIRCUMFLEX),
u"\u1f37" : (iota, BREATHING_ROUGH|ACCENT_CIRCUMFLEX),
u"\u1f38" : (Iota, BREATHING_SMOOTH),
u"\u1f39" : (Iota, BREATHING_ROUGH),
u"\u1f3a" : (Iota, BREATHING_SMOOTH|ACCENT_GRAVE),
u"\u1f3b" : (Iota, BREATHING_ROUGH|ACCENT_GRAVE),
u"\u1f3c" : (Iota, BREATHING_SMOOTH|ACCENT_ACUTE),
u"\u1f3d" : (Iota, BREATHING_ROUGH|ACCENT_ACUTE),
u"\u1f3e" : (Iota, BREATHING_SMOOTH|ACCENT_CIRCUMFLEX),
u"\u1f3f" : (Iota, BREATHING_ROUGH|ACCENT_CIRCUMFLEX),
u"\u1f40" : (omicron, BREATHING_SMOOTH),
u"\u1f41" : (omicron, BREATHING_ROUGH),
u"\u1f42" : (omicron, BREATHING_SMOOTH|ACCENT_GRAVE),
u"\u1f43" : (omicron, BREATHING_ROUGH|ACCENT_GRAVE),
u"\u1f44" : (omicron, BREATHING_SMOOTH|ACCENT_ACUTE),
u"\u1f45" : (omicron, BREATHING_ROUGH|ACCENT_ACUTE),
u"\u1f46" : (omicron, BREATHING_SMOOTH|ACCENT_CIRCUMFLEX),
u"\u1f47" : (omicron, BREATHING_ROUGH|ACCENT_CIRCUMFLEX),
u"\u1f48" : (Omicron, BREATHING_SMOOTH),
u"\u1f49" : (Omicron, BREATHING_ROUGH),
u"\u1f4a" : (Omicron, BREATHING_SMOOTH|ACCENT_GRAVE),
u"\u1f4b" : (Omicron, BREATHING_ROUGH|ACCENT_GRAVE),
u"\u1f4c" : (Omicron, BREATHING_SMOOTH|ACCENT_ACUTE),
u"\u1f4d" : (Omicron, BREATHING_ROUGH|ACCENT_ACUTE),
u"\u1f4e" : (Omicron, BREATHING_SMOOTH|ACCENT_CIRCUMFLEX),
u"\u1f4f" : (Omicron, BREATHING_ROUGH|ACCENT_CIRCUMFLEX),
u"\u1f50" : (upsilon, BREATHING_SMOOTH),
u"\u1f51" : (upsilon, BREATHING_ROUGH),
u"\u1f52" : (upsilon, BREATHING_SMOOTH|ACCENT_GRAVE),
u"\u1f53" : (upsilon, BREATHING_ROUGH|ACCENT_GRAVE),
u"\u1f54" : (upsilon, BREATHING_SMOOTH|ACCENT_ACUTE),
u"\u1f55" : (upsilon, BREATHING_ROUGH|ACCENT_ACUTE),
u"\u1f56" : (upsilon, BREATHING_SMOOTH|ACCENT_CIRCUMFLEX),
u"\u1f57" : (upsilon, BREATHING_ROUGH|ACCENT_CIRCUMFLEX),
u"\u1f58" : (Upsilon, BREATHING_SMOOTH),
u"\u1f59" : (Upsilon, BREATHING_ROUGH),
u"\u1f5a" : (Upsilon, BREATHING_SMOOTH|ACCENT_GRAVE),
u"\u1f5b" : (Upsilon, BREATHING_ROUGH|ACCENT_GRAVE),
u"\u1f5c" : (Upsilon, BREATHING_SMOOTH|ACCENT_ACUTE),
u"\u1f5d" : (Upsilon, BREATHING_ROUGH|ACCENT_ACUTE),
u"\u1f5e" : (Upsilon, BREATHING_SMOOTH|ACCENT_CIRCUMFLEX),
u"\u1f5f" : (Upsilon, BREATHING_ROUGH|ACCENT_CIRCUMFLEX),
u"\u1f60" : (omega, BREATHING_SMOOTH),
u"\u1f61" : (omega, BREATHING_ROUGH),
u"\u1f62" : (omega, BREATHING_SMOOTH|ACCENT_GRAVE),
u"\u1f63" : (omega, BREATHING_ROUGH|ACCENT_GRAVE),
u"\u1f64" : (omega, BREATHING_SMOOTH|ACCENT_ACUTE),
u"\u1f65" : (omega, BREATHING_ROUGH|ACCENT_ACUTE),
u"\u1f66" : (omega, BREATHING_SMOOTH|ACCENT_CIRCUMFLEX),
u"\u1f67" : (omega, BREATHING_ROUGH|ACCENT_CIRCUMFLEX),
u"\u1f68" : (Omega, BREATHING_SMOOTH),
u"\u1f69" : (Omega, BREATHING_ROUGH),
u"\u1f6a" : (Omega, BREATHING_SMOOTH|ACCENT_GRAVE),
u"\u1f6b" : (Omega, BREATHING_ROUGH|ACCENT_GRAVE),
u"\u1f6c" : (Omega, BREATHING_SMOOTH|ACCENT_ACUTE),
u"\u1f6d" : (Omega, BREATHING_ROUGH|ACCENT_ACUTE),
u"\u1f6e" : (Omega, BREATHING_SMOOTH|ACCENT_CIRCUMFLEX),
u"\u1f6f" : (Omega, BREATHING_ROUGH|ACCENT_CIRCUMFLEX),
u"\u1f70" : (alpha, ACCENT_GRAVE),
u"\u1f71" : (alpha, ACCENT_ACUTE),
u"\u1f72" : (epsilon, ACCENT_GRAVE),
u"\u1f73" : (epsilon, ACCENT_ACUTE),
u"\u1f74" : (eta, ACCENT_GRAVE),
u"\u1f75" : (eta, ACCENT_ACUTE),
u"\u1f76" : (iota, ACCENT_GRAVE),
u"\u1f77" : (iota, ACCENT_ACUTE),
u"\u1f78" : (omicron, ACCENT_GRAVE),
u"\u1f79" : (omicron, ACCENT_ACUTE),
u"\u1f7a" : (upsilon, ACCENT_GRAVE),
u"\u1f7b" : (upsilon, ACCENT_ACUTE),
u"\u1f7c" : (omega, ACCENT_GRAVE),
u"\u1f7d" : (omega, ACCENT_ACUTE),
u"\u1f80" : (alpha, IOTA_SUBSCRIPT|BREATHING_SMOOTH),
u"\u1f81" : (alpha, IOTA_SUBSCRIPT|BREATHING_ROUGH),
u"\u1f82" : (alpha, IOTA_SUBSCRIPT|BREATHING_SMOOTH|ACCENT_GRAVE),
u"\u1f83" : (alpha, IOTA_SUBSCRIPT|BREATHING_ROUGH|ACCENT_GRAVE),
u"\u1f84" : (alpha, IOTA_SUBSCRIPT|BREATHING_SMOOTH|ACCENT_ACUTE),
u"\u1f85" : (alpha, IOTA_SUBSCRIPT|BREATHING_ROUGH|ACCENT_ACUTE),
u"\u1f86" : (alpha, IOTA_SUBSCRIPT|BREATHING_SMOOTH|ACCENT_CIRCUMFLEX),
u"\u1f87" : (alpha, IOTA_SUBSCRIPT|BREATHING_ROUGH|ACCENT_CIRCUMFLEX),
u"\u1f88" : (Alpha, IOTA_SUBSCRIPT|BREATHING_SMOOTH),
u"\u1f89" : (Alpha, IOTA_SUBSCRIPT|BREATHING_ROUGH),
u"\u1f8a" : (Alpha, IOTA_SUBSCRIPT|BREATHING_SMOOTH|ACCENT_GRAVE),
u"\u1f8b" : (Alpha, IOTA_SUBSCRIPT|BREATHING_ROUGH|ACCENT_GRAVE),
u"\u1f8c" : (Alpha, IOTA_SUBSCRIPT|BREATHING_SMOOTH|ACCENT_ACUTE),
u"\u1f8d" : (Alpha, IOTA_SUBSCRIPT|BREATHING_ROUGH|ACCENT_ACUTE),
u"\u1f8e" : (Alpha, IOTA_SUBSCRIPT|BREATHING_SMOOTH|ACCENT_CIRCUMFLEX),
u"\u1f8f" : (Alpha, IOTA_SUBSCRIPT|BREATHING_ROUGH|ACCENT_CIRCUMFLEX),
u"\u1f90" : (eta, IOTA_SUBSCRIPT|BREATHING_SMOOTH),
u"\u1f91" : (eta, IOTA_SUBSCRIPT|BREATHING_ROUGH),
u"\u1f92" : (eta, IOTA_SUBSCRIPT|BREATHING_SMOOTH|ACCENT_GRAVE),
u"\u1f93" : (eta, IOTA_SUBSCRIPT|BREATHING_ROUGH|ACCENT_GRAVE),
u"\u1f94" : (eta, IOTA_SUBSCRIPT|BREATHING_SMOOTH|ACCENT_ACUTE),
u"\u1f95" : (eta, IOTA_SUBSCRIPT|BREATHING_ROUGH|ACCENT_ACUTE),
u"\u1f96" : (eta, IOTA_SUBSCRIPT|BREATHING_SMOOTH|ACCENT_CIRCUMFLEX),
u"\u1f97" : (eta, IOTA_SUBSCRIPT|BREATHING_ROUGH|ACCENT_CIRCUMFLEX),
u"\u1f98" : (Eta, IOTA_SUBSCRIPT|BREATHING_SMOOTH),
u"\u1f99" : (Eta, IOTA_SUBSCRIPT|BREATHING_ROUGH),
u"\u1f9a" : (Eta, IOTA_SUBSCRIPT|BREATHING_SMOOTH|ACCENT_GRAVE),
u"\u1f9b" : (Eta, IOTA_SUBSCRIPT|BREATHING_ROUGH|ACCENT_GRAVE),
u"\u1f9c" : (Eta, IOTA_SUBSCRIPT|BREATHING_SMOOTH|ACCENT_ACUTE),
u"\u1f9d" : (Eta, IOTA_SUBSCRIPT|BREATHING_ROUGH|ACCENT_ACUTE),
u"\u1f9e" : (Eta, IOTA_SUBSCRIPT|BREATHING_SMOOTH|ACCENT_CIRCUMFLEX),
u"\u1f9f" : (Eta, IOTA_SUBSCRIPT|BREATHING_ROUGH|ACCENT_CIRCUMFLEX),
u"\u1fa0" : (omega, IOTA_SUBSCRIPT|BREATHING_SMOOTH),
u"\u1fa1" : (omega, IOTA_SUBSCRIPT|BREATHING_ROUGH),
u"\u1fa2" : (omega, IOTA_SUBSCRIPT|BREATHING_SMOOTH|ACCENT_GRAVE),
u"\u1fa3" : (omega, IOTA_SUBSCRIPT|BREATHING_ROUGH|ACCENT_GRAVE),
u"\u1fa4" : (omega, IOTA_SUBSCRIPT|BREATHING_SMOOTH|ACCENT_ACUTE),
u"\u1fa5" : (omega, IOTA_SUBSCRIPT|BREATHING_ROUGH|ACCENT_ACUTE),
u"\u1fa6" : (omega, IOTA_SUBSCRIPT|BREATHING_SMOOTH|ACCENT_CIRCUMFLEX),
u"\u1fa7" : (omega, IOTA_SUBSCRIPT|BREATHING_ROUGH|ACCENT_CIRCUMFLEX),
u"\u1fa8" : (Omega, IOTA_SUBSCRIPT|BREATHING_SMOOTH),
u"\u1fa9" : (Omega, IOTA_SUBSCRIPT|BREATHING_ROUGH),
u"\u1faa" : (Omega, IOTA_SUBSCRIPT|BREATHING_SMOOTH|ACCENT_GRAVE),
u"\u1fab" : (Omega, IOTA_SUBSCRIPT|BREATHING_ROUGH|ACCENT_GRAVE),
u"\u1fac" : (Omega, IOTA_SUBSCRIPT|BREATHING_SMOOTH|ACCENT_ACUTE),
u"\u1fad" : (Omega, IOTA_SUBSCRIPT|BREATHING_ROUGH|ACCENT_ACUTE),
u"\u1fae" : (Omega, IOTA_SUBSCRIPT|BREATHING_SMOOTH|ACCENT_CIRCUMFLEX),
u"\u1faf" : (Omega, IOTA_SUBSCRIPT|BREATHING_ROUGH|ACCENT_CIRCUMFLEX),
u"\u1fb0" : (alpha, LENGTH_VRACHY),
u"\u1fb1" : (alpha, LENGTH_MACRON),
u"\u1fb2" : (alpha, IOTA_SUBSCRIPT|ACCENT_GRAVE),
u"\u1fb3" : (alpha, IOTA_SUBSCRIPT),
u"\u1fb4" : (alpha, IOTA_SUBSCRIPT|ACCENT_ACUTE),
u"\u1fb6" : (alpha, ACCENT_CIRCUMFLEX),
u"\u1fb7" : (alpha, IOTA_SUBSCRIPT|ACCENT_CIRCUMFLEX),
u"\u1fb8" : (Alpha, LENGTH_VRACHY),
u"\u1fb9" : (Alpha, LENGTH_MACRON),
u"\u1fba" : (Alpha, ACCENT_GRAVE),
u"\u1fbb" : (Alpha, ACCENT_ACUTE),
u"\u1fbc" : (Alpha, IOTA_SUBSCRIPT),
u"\u1fc2" : (eta, IOTA_SUBSCRIPT|ACCENT_GRAVE),
u"\u1fc3" : (eta, IOTA_SUBSCRIPT),
u"\u1fc4" : (eta, IOTA_SUBSCRIPT|ACCENT_ACUTE),
u"\u1fc6" : (eta, ACCENT_CIRCUMFLEX),
u"\u1fc7" : (eta, IOTA_SUBSCRIPT|ACCENT_CIRCUMFLEX),
u"\u1fc8" : (Epsilon, ACCENT_GRAVE),
u"\u1fc9" : (Epsilon, ACCENT_ACUTE),
u"\u1fca" : (Eta, ACCENT_GRAVE),
u"\u1fcb" : (Eta, ACCENT_ACUTE),
u"\u1fcc" : (Eta, IOTA_SUBSCRIPT),
u"\u1fd0" : (iota, LENGTH_VRACHY),
u"\u1fd1" : (iota, LENGTH_MACRON),
u"\u03ca" : (iota, DIALYTIKA),
u"\u1fd2" : (iota, DIALYTIKA|ACCENT_GRAVE),
u"\u1fd3" : (iota, DIALYTIKA|ACCENT_ACUTE),
u"\u1fd6" : (iota, ACCENT_CIRCUMFLEX),
u"\u1fd7" : (iota, DIALYTIKA|ACCENT_CIRCUMFLEX),
u"\u1fd8" : (Iota, LENGTH_VRACHY),
u"\u1fd9" : (Iota, LENGTH_MACRON),
u"\u1fda" : (Iota, ACCENT_GRAVE),
u"\u1fdb" : (Iota, ACCENT_ACUTE),
u"\u03aa" : (Iota, DIALYTIKA),
u"\u1fe0" : (upsilon, LENGTH_VRACHY),
u"\u1fe1" : (upsilon, LENGTH_MACRON),
u"\u03cb" : (upsilon, DIALYTIKA),
u"\u1fe2" : (upsilon, DIALYTIKA|ACCENT_GRAVE),
u"\u1fe3" : (upsilon, DIALYTIKA|ACCENT_ACUTE),
u"\u1fe4" : (rho, BREATHING_SMOOTH),
u"\u1fe5" : (rho, BREATHING_ROUGH),
u"\u1fe6" : (upsilon, ACCENT_CIRCUMFLEX),
u"\u1fe7" : (upsilon, DIALYTIKA|ACCENT_CIRCUMFLEX),
u"\u1fe8" : (Upsilon, LENGTH_VRACHY),
u"\u1fe9" : (Upsilon, LENGTH_MACRON),
u"\u1fea" : (Upsilon, ACCENT_GRAVE),
u"\u1feb" : (Upsilon, ACCENT_ACUTE),
u"\u03ab" : (Upsilon, DIALYTIKA),
u"\u1fec" : (Rho, BREATHING_ROUGH),
u"\u1ff2" : (omega, IOTA_SUBSCRIPT|ACCENT_GRAVE),
u"\u1ff3" : (omega, IOTA_SUBSCRIPT),
u"\u1ff4" : (omega, IOTA_SUBSCRIPT|ACCENT_ACUTE),
u"\u1ff6" : (omega, ACCENT_CIRCUMFLEX),
u"\u1ff7" : (omega, IOTA_SUBSCRIPT|ACCENT_CIRCUMFLEX),
u"\u1ff8" : (Omicron, ACCENT_GRAVE),
u"\u1ff9" : (Omicron, ACCENT_ACUTE),
u"\u1ffa" : (Omega, ACCENT_GRAVE),
u"\u1ffb" : (Omega, ACCENT_ACUTE),
u"\u1ffc" : (Omega, IOTA_SUBSCRIPT) }
def decompose_character(ch):
"decompose_character(ch) -> ( stripped_character, diacritics )"
if _decomposition_table.has_key(ch):
return _decomposition_table[ch]
else:
return (ch, 0)
_composition_table = dict([ (_decomposition_table[k], k) for k in _decomposition_table.keys() ])
def compose_character(vowel, diacritics):
global _composition_table
if diacritics == 0:
return vowel
else:
return _composition_table[(vowel, diacritics)]