aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/db.struct263
-rw-r--r--data/dbverb.struct323
-rw-r--r--scm/conjugator.scm289
-rw-r--r--src/ellinika/elmorph.c51
-rw-r--r--xml/pl/rhmata.xml254
-rw-r--r--xml/ru/rhmata.xml254
6 files changed, 867 insertions, 567 deletions
diff --git a/data/db.struct b/data/db.struct
index 616d2c5..1b2f160 100644
--- a/data/db.struct
+++ b/data/db.struct
@@ -160,264 +160,5 @@ CREATE TABLE newsart(
----
-set names utf8;
-DROP TABLE IF EXISTS verbflect;
-CREATE TABLE verbflect(
- ident int(32) not null, -- REL 8
- sing1 varchar(32),
- sing2 varchar(32),
- sing3 varchar(32),
- plur1 varchar(32),
- plur2 varchar(32),
- plur3 varchar(32),
- UNIQUE(ident)
-);
-
-DROP TABLE IF EXISTS conjugation;
-CREATE TABLE conjugation(
- conj char(2), -- REL 9
- voice enum('act','pas'), -- Ενεργητηκή/Μεσοπαθητική
- mode enum('ind','sub','imp'),
- tense varchar(128),
- thema enum('pres','aor','sub','synt'), -- Ενεστώτα, Αόριστου, υποτακτικής, syntethic
- suffix char(32),
- flect int(32), -- REL 8
- accmap char(7), -- accent map
- particle char(2), -- NULL/θα/να
- aux varchar(128), -- REL 10
- auxtense char(32),
- KEY (conj),
- KEY (voice),
- KEY (mode)
-);
-
-DROP TABLE IF EXISTS participle;
-CREATE TABLE participle (
- conj char(2), -- REL 9
- voice enum('act','pas'), -- Ενεργητηκή/Μεσοπαθητική
- tense char(32),
- thema enum('pres','aor','sub'), -- Ενεστώτα, Αόριστου, υποτακτικής
- suffix char(32),
- flect char(32),
- aux varchar(128)
-);
-
-INSERT INTO verbflect VALUES
-(0, NULL, NULL, NULL, NULL, NULL, NULL),
--- Συζυγία Α'
-(1, "ω", "εις", "ει", "ουμε", "ετε", "ουν(ε)"),
-(2, "α", "ες", "ε", "αμε", "ατε", "αν"),
-(8, NULL, "ε", NULL, NULL, "ετε", NULL),
-(9, NULL, "ε", NULL, NULL, "τε", NULL),
-(11, "ομαι", "εσαι", "εται", "όμαστε", "εστε", "ονται"),
-(12, "όμουν", "όσουν", "όταν", "όμαστε", "όμαστε", "ονταν"),
-(15, "ώ", "είς", "εί", "ούμε", "είτε", "ούν(ε)"),
-(17, NULL, "ου", NULL, NULL, NULL, NULL),
-(18, NULL, NULL, NULL, NULL, "είτε", NULL),
--- Συζυγία Β΄ - α΄ τάξη
-(20, "ώ,άω", "άς", "ά,άει","άμε,ούμε","άτε","ούν(ε)"),
-(25, NULL, "α", NULL, NULL, "άτε", NULL),
-(28, "ιέμαι", "ιέσαι", "ιέται", "ιόμαστε", "ιέστε", "ιούνται"),
-(29, "ιόμουν", "ιόσουν", "ιόταν", "ιόμαστε", "ιόσαστε", "ιόνταν"),
-(30, NULL, "ιέσαι", NULL, NULL, "ιέσται", NULL),
-(31, NULL, "ου", NULL, NULL, NULL, NULL),
-(32, NULL, NULL, NULL, NULL, "είτε", NULL),
--- Συζυγία Β΄ - β΄ τάξη
-(33, NULL, "είς", NULL, NULL, "είτε", NULL),
-(34, "ούμαι", "είσαι", "είται", "ούμαστε", "είστε", "ούνται"),
-(35, "ούμουν", "ούσουν", "ούvταν", "ούμαστε", "ούσαστε", "ούνταν"),
-(36, NULL, "είσαι", NULL, NULL, "είστε", NULL),
-(100, "είμαι", "είσαι", "είναι", "είμαστε", "είστε,είσαστε", "είναι"),
-(101, "ήμουν(α)", "ήσουν(α)", "ήταν(ε)", "ήμαστε,ήμασταν", "ήσαστε,ήσασταν", "ήταν(ε)")
-;
-
-
-INSERT INTO conjugation VALUES
--- Συζυγία Α'
--- Ενεργητηκή φωνή
--- Οριστική
-("A", "act", "ind", "Ενεστώτας", 'pres', NULL, 1, "000000", NULL, NULL, NULL),
-("A", "act", "ind", "Παρατατικός", 'pres', NULL, 2, "333333+", NULL, NULL, NULL),
-("A", "act", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 1, "000000", "θα", NULL, NULL),
-("A", "act", "ind", "Αόριστος", 'aor', NULL, 2, "333333+", NULL, NULL, NULL),
-("A", "act", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"),
-("A", "act", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"),
-("A", "act", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"),
-("A", "act", "ind", "Μέλλοντας στιγμιαίος", 'sub', NULL, 1, "000000", "θα", NULL, NULL),
--- Υποτακτική
-("A", "act", "sub", "Ενεστώτας", 'pres', NULL, 1, "000000", "να", NULL, NULL),
-("A", "act", "sub", "Αόριστος", 'sub', NULL, 1, "000000", "να", NULL, NULL),
-("A", "act", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"),
--- Προστακτική
-("A", "act", "imp", "Ενεστώτας", 'pres', NULL, 8, "-3--3-", NULL, NULL, NULL),
-("A", "act", "imp", "Αόριστος", 'sub', NULL, 9, "-0--0-", NULL, NULL, NULL),
-("A", "act", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"),
--- Μεσοπαθητική φωνή
--- Οριστική
-("A", "pas", "ind", "Ενεστώτας", 'pres', NULL, 11, "000300", NULL, NULL, NULL),
-("A", "pas", "ind", "Παρατατικός", 'pres', NULL, 12, "222333", NULL, NULL, NULL),
-("A", "pas", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 11, "333333", "θα", NULL, NULL),
-("A", "pas", "ind", "Αόριστος", 'aor', "ηκ", 2, "333333", NULL, NULL, NULL),
-("A", "pas", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"),
-("A", "pas", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"),
-("A", "pas", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"),
-("A", "pas", "ind", "Μέλλοντας στιγμιαίος", 'aor', NULL, 15, "111111", "θα", NULL, NULL),
--- Υποτακτική
-("A", "pas", "sub", "Ενεστώτας", 'pres', NULL, 11, "333333", "να", NULL, NULL),
-("A", "pas", "sub", "Αόριστος", 'aor', NULL, 15, "111221", "να", NULL, NULL),
-("A", "pas", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός"),
--- Προστακτική
-("A", "pas", "imp", "Ενεστώτας", 'pres', NULL, 11, "-3--3-", "να", NULL, NULL),
-("A", "pas", "imp", "Αόριστος", 'aor', NULL, 17, "-0----", NULL, NULL, NULL),
-("A", "pas", "imp", "Αόριστος", 'aor', NULL, 18, "----2-", NULL, NULL, NULL),
-("A", "pas", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός"),
--- Συζυγία Β΄ - α΄ τάξη
--- Ενεργητηκή φωνή
--- Οριστική
-("B1", "act", "ind", "Ενεστώτας", 'pres', NULL, 20, "ffffff", NULL, NULL, NULL),
-("B1", "act", "ind", "Παρατατικός", 'pres', "ούς", 2, "ssssss", NULL, NULL, NULL),
-("B1", "act", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 20, "ffffff", "θα", NULL, NULL),
-("B1", "act", "ind", "Αόριστος", 'aor', "ησ", 2, "333333", NULL, NULL, NULL),
-("B1", "act", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"),
-("B1", "act", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"),
-("B1", "act", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"),
-("B1", "act", "ind", "Μέλλοντας στιγμιαίος", 'aor', "ήσ", 1, "ssssss", "θα", NULL, NULL),
--- Υποτακτική
-("B1", "act", "sub", "Ενεστώτας", 'pres', NULL, 20, "ffffff", "να", NULL, NULL),
-("B1", "act", "sub", "Αόριστος", 'aor', "ήσ", 1, "ssssss", "να", NULL, NULL),
-("B1", "act", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"),
--- Προστακτική
-("B1", "act", "imp", "Ενεστώτας", 'pres', NULL, 25, "-0--2-", NULL, NULL, NULL),
-("B1", "act", "imp", "Αόριστος", 'aor', "ησ", 9, "-3--3-", NULL, NULL, NULL),
-("B1", "act", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"),
--- Μεσοπαθητική φωνή
--- Οριστική
-("B1", "pas", "ind", "Ενεστώτας", 'pres', NULL, 28, "ffffff", NULL, NULL, NULL),
-("B1", "pas", "ind", "Παρατατικός", 'pres', NULL, 29, "ffffff", NULL, NULL, NULL),
-("B1", "pas", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 28, "ffffff", "θα", NULL, NULL),
-("B1", "pas", "ind", "Αόριστος", 'aor', "ηκ", 2, "333333", NULL, NULL, NULL),
-("B1", "pas", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"),
-("B1", "pas", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"),
-("B1", "pas", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"),
-("B1", "pas", "ind", "Μέλλοντας στιγμιαίος", 'aor', NULL, 15, "ffffff", "θα", NULL, NULL),
--- Υποτακτική
-("B1", "pas", "sub", "Ενεστώτας", 'pres', NULL, 28, "ffffff", "να", NULL, NULL),
-("B1", "pas", "sub", "Αόριστος", 'aor', NULL, 15, "ffffff", "να", NULL, NULL),
-("B1", "pas", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός"),
--- Προστακτική
-("B1", "pas", "imp", "Ενεστώτας", 'pres', NULL, 30, "-f--f-", "να", NULL, NULL),
-
-("B1", "pas", "imp", "Αόριστος", 'aor', NULL, 31, "-2----", NULL, NULL, NULL),
-("B1", "pas", "imp", "Αόριστος", 'aor', NULL, 32, "----2-", NULL, NULL, NULL),
-
-("B1", "pas", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός"),
--- Συζυγία Β΄ - β΄ τάξη
--- Ενεργητηκή φωνή
--- Οριστική
-("B2", "act", "ind", "Ενεστώτας", 'pres', NULL, 15, "ffffff", NULL, NULL, NULL),
-("B2", "act", "ind", "Παρατατικός", 'pres', "ούσ", 2, "ssssss", NULL, NULL, NULL),
-("B2", "act", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 15, "ffffff", "θα", NULL, NULL),
-("B2", "act", "ind", "Αόριστος", 'aor', "ησ", 2, "333333", NULL, NULL, NULL),
-("B2", "act", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"),
-("B2", "act", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"),
-("B2", "act", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"),
-("B2", "act", "ind", "Μέλλοντας στιγμιαίος", 'aor', "ήσ", 1, "ssssss", "θα", NULL, NULL),
--- Υποτακτική
-("B2", "act", "sub", "Ενεστώτας", 'pres', NULL, 15, "ffffff", "να", NULL, NULL),
-("B2", "act", "sub", "Αόριστος", 'aor', "ήσ", 1, "ssssss", "να", NULL, NULL),
-("B2", "act", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"),
--- Προστακτική
-("B2", "act", "imp", "Ενεστώτας", 'pres', NULL, 15, "-f----", "να", NULL, NULL),
-("B2", "act", "imp", "Ενεστώτας", 'pres', NULL, 15, "----f-", NULL, NULL, NULL),
-
-("B2", "act", "imp", "Αόριστος", 'aor', "ησ", 9, "-3--3-", NULL, NULL, NULL),
-("B2", "act", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"),
--- Μεσοπαθητική φωνή
--- Οριστική
-("B2", "pas", "ind", "Ενεστώτας", 'pres', NULL, 34, "ffffff", NULL, NULL, NULL),
-("B2", "pas", "ind", "Παρατατικός", 'pres', NULL, 35, "ffffff", NULL, NULL, NULL),
-("B2", "pas", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 34, "ffffff", "θα", NULL, NULL),
-("B2", "pas", "ind", "Αόριστος", 'aor', "ηκ", 2, "333333", NULL, NULL, NULL),
-("B2", "pas", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"),
-("B2", "pas", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"),
-("B2", "pas", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"),
-("B2", "pas", "ind", "Μέλλοντας στιγμιαίος", 'aor', NULL, 15, "ffffff", "θα", NULL, NULL),
--- Υποτακτική
-("B2", "pas", "sub", "Ενεστώτας", 'pres', NULL, 34, "ffffff", "να", NULL, NULL),
-("B2", "pas", "sub", "Αόριστος", 'aor', NULL, 15, "ffffff", "να", NULL, NULL),
-("B2", "pas", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός"),
--- Προστακτική
-("B2", "pas", "imp", "Ενεστώτας", 'pres', NULL, 36, "-f--f-", "να", NULL, NULL),
-
-("B2", "pas", "imp", "Αόριστος", 'aor', NULL, 31, "-2----", NULL, NULL, NULL),
-("B2", "pas", "imp", "Αόριστος", 'aor', NULL, 32, "----2-", NULL, NULL, NULL),
-
-("B2", "pas", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός");
-
-INSERT INTO participle VALUES
--- Συζυγία Α'
--- Ενεργητηκή φωνή
-("A", "act", "Ενεστώτας", 'pres', NULL, "οντας", NULL),
-("A", "act", "Παρακείμενος", 'aor', NULL, "ει", "εχοντας"),
--- Μεσοπαθητική φωνή
-("A", "pas", "Παρακείμενος", 'root', NULL, "μένος", NULL),
--- Συζυγία Β΄ - α΄ τάξη
--- Ενεργητηκή φωνή
-("B1", "act", "Ενεστώτας", 'pres', NULL, "ώντας", NULL),
-("B1", "act", "Παρακείμενος", 'aor', NULL, "ήσει", "εχοντας"),
--- Μεσοπαθητική φωνή
-("B1", "pass", "Παρακείμενος", 'pres', "η", "μένος", NULL),
--- Συζυγία Β΄ - β΄ τάξη
--- Ενεργητηκή φωνή
-("B2", "act", "Ενεστώτας", 'pres', NULL, "ώντας", NULL),
-("B2", "act", "Παρακείμενος", 'aor', NULL, "ει", "εχοντας"),
--- Μεσοπαθητική φωνή
-("B1", "pass", "Παρακείμενος", 'pres', "η", "μένος", NULL);
-
-DROP TABLE IF EXISTS verb;
-CREATE TABLE verb(
- verb varchar(128), -- REL 10
- conj char(2), -- REL 9
- augment char(1),
- accmap char(7),
- INDEX(verb)
-);
-
-DROP TABLE IF EXISTS irregular_root;
-CREATE TABLE irregular_root(
- verb varchar(128),
- voice enum('act','pas'), -- Ενεργητηκή/Μεσοπαθητική
- thema enum('pres','aor','sub'), -- Αόριστος/Υποτακτική
- root varchar(128)
-);
-
-INSERT INTO verb VALUES
-('βρίσκω', 'A', NULL, '000000'),
-('θέλω','A','η',NULL),
-('έχω','A',NULL,NULL),
-('ξέρω','A','η',NULL)
-;
-
-INSERT INTO irregular_root VALUES
-('βρίσκω','act','aor','βρήκ'),
-('βρίσκω','act','sub','βρ'),
-('βρίσκω','pas','aor','βρέθ'),
-('βρίσκω','pas','sub','βρέθ'),
-('θέλω','act','aor','θέλησ'),
-('έχω','act', 'aor', 'είχ')
-;
-
-DROP TABLE IF EXISTS individual_verb;
-CREATE TABLE individual_verb(
- verb varchar(128),
- voice enum('act','pas'), -- Ενεργητηκή/Μεσοπαθητική
- mode enum('ind','sub','imp'),
- tense varchar(128),
- ident int(32),
- INDEX(verb,voice,mode,tense)
-);
-
-INSERT INTO individual_verb VALUES
-("είμαι", "act", "ind", "Ενεστώτας", 100),
-("είμαι", "act", "ind", "Παρατατικός", 101)
-;
+source dbverb.struct;
+ \ No newline at end of file
diff --git a/data/dbverb.struct b/data/dbverb.struct
new file mode 100644
index 0000000..4ab6a37
--- /dev/null
+++ b/data/dbverb.struct
@@ -0,0 +1,323 @@
+set names utf8;
+DROP TABLE IF EXISTS verbflect;
+CREATE TABLE verbflect(
+ ident int(32) not null, -- REL 8
+ sing1 varchar(32),
+ sing2 varchar(32),
+ sing3 varchar(32),
+ plur1 varchar(32),
+ plur2 varchar(32),
+ plur3 varchar(32),
+ UNIQUE(ident)
+);
+
+DROP TABLE IF EXISTS conjugation;
+CREATE TABLE conjugation(
+ conj char(2), -- REL 9
+ voice enum('act','pas'), -- Ενεργητηκή/Μεσοπαθητική
+ mode enum('ind','sub','imp'),
+ tense varchar(128),
+ thema enum('pres','aor','sub','synt'), -- Ενεστώτα, Αόριστου, υποτακτικής, syntethic
+ suffix char(32),
+ flect int(32), -- REL 8
+ accmap char(7), -- accent map
+ particle char(2), -- NULL/θα/να
+ aux varchar(128), -- REL 10
+ auxtense char(32),
+ KEY (conj),
+ KEY (voice),
+ KEY (mode)
+);
+
+DROP TABLE IF EXISTS participle;
+CREATE TABLE participle (
+ conj char(2), -- REL 9
+ voice enum('act','pas'), -- Ενεργητηκή/Μεσοπαθητική
+ tense char(32),
+ thema enum('pres','aor','sub'), -- Ενεστώτα, Αόριστου, υποτακτικής
+ suffix char(32),
+ flect char(32),
+ aux varchar(128)
+);
+
+INSERT INTO verbflect VALUES
+(0, NULL, NULL, NULL, NULL, NULL, NULL),
+-- Συζυγία Α'
+(1, "ω", "εις", "ει", "ουμε", "ετε", "ουν(ε)"),
+(2, "α", "ες", "ε", "αμε", "ατε", "αν"),
+(8, NULL, "ε", NULL, NULL, "ετε", NULL),
+(9, NULL, "ε", NULL, NULL, "τε", NULL),
+(11, "ομαι", "εσαι", "εται", "όμαστε", "εστε", "ονται"),
+(12, "όμουν", "όσουν", "όταν", "όμαστε", "όμαστε", "ονταν"),
+(15, "ώ", "είς", "εί", "ούμε", "είτε", "ούν(ε)"),
+(17, NULL, "ου", NULL, NULL, NULL, NULL),
+(18, NULL, NULL, NULL, NULL, "είτε", NULL),
+-- Συζυγία Β΄ - α΄ τάξη
+(20, "ώ,άω", "άς", "ά,άει","άμε,ούμε","άτε","ούν(ε)"),
+(25, NULL, "α", NULL, NULL, "άτε", NULL),
+(28, "ιέμαι", "ιέσαι", "ιέται", "ιόμαστε", "ιέστε", "ιούνται"),
+(29, "ιόμουν", "ιόσουν", "ιόταν", "ιόμαστε", "ιόσαστε", "ιόνταν"),
+(30, NULL, "ιέσαι", NULL, NULL, "ιέσται", NULL),
+(31, NULL, "ου", NULL, NULL, NULL, NULL),
+(32, NULL, NULL, NULL, NULL, "είτε", NULL),
+-- Συζυγία Β΄ - β΄ τάξη
+(33, NULL, "είς", NULL, NULL, "είτε", NULL),
+(34, "ούμαι", "είσαι", "είται", "ούμαστε", "είστε", "ούνται"),
+(35, "ούμουν", "ούσουν", "ούvταν", "ούμαστε", "ούσαστε", "ούνταν"),
+(36, NULL, "είσαι", NULL, NULL, "είστε", NULL),
+(100, "είμαι", "είσαι", "είναι", "είμαστε", "είστε,είσαστε", "είναι"),
+(101, "ήμουν(α)", "ήσουν(α)", "ήταν(ε)", "ήμαστε,ήμασταν", "ήσαστε,ήσασταν", "ήταν(ε)"),
+(102, "θα είμαι", "θα είσαι", "θα είναι", "θα είμαστε", "θα είστε,θα είσαστε", "θα είναι"),
+(103, "να είμαι", "να είσαι", "να είναι", "να είμαστε", "να είστε,να είσαστε", "να είναι"),
+(104, NULL, "να είσαι", NULL, NULL, "να είστε", NULL),
+(105, "είχα", "είχες", "είχα", "είχαμε", "είχατε", "είχαν"),
+(106, NULL, "βρες", NULL, NULL, "βρείτε,βρεστε", NULL)
+;
+
+INSERT INTO conjugation VALUES
+-- Συζυγία Α'
+-- Ενεργητηκή φωνή
+-- Οριστική
+("A", "act", "ind", "Ενεστώτας", 'pres', NULL, 1, "000000", NULL, NULL, NULL),
+("A", "act", "ind", "Παρατατικός", 'pres', NULL, 2, "333333+", NULL, NULL, NULL),
+("A", "act", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 1, "000000", "θα", NULL, NULL),
+("A", "act", "ind", "Αόριστος", 'aor', NULL, 2, "333333+", NULL, NULL, NULL),
+("A", "act", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"),
+("A", "act", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"),
+("A", "act", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"),
+("A", "act", "ind", "Μέλλοντας στιγμιαίος", 'sub', NULL, 1, "000000", "θα", NULL, NULL),
+-- Υποτακτική
+("A", "act", "sub", "Ενεστώτας", 'pres', NULL, 1, "000000", "να", NULL, NULL),
+("A", "act", "sub", "Αόριστος", 'sub', NULL, 1, "000000", "να", NULL, NULL),
+("A", "act", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"),
+-- Προστακτική
+("A", "act", "imp", "Ενεστώτας", 'pres', NULL, 8, "-3--3-", NULL, NULL, NULL),
+("A", "act", "imp", "Αόριστος", 'sub', NULL, 9, "-0--0-", NULL, NULL, NULL),
+("A", "act", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"),
+-- Μεσοπαθητική φωνή
+-- Οριστική
+("A", "pas", "ind", "Ενεστώτας", 'pres', NULL, 11, "000300", NULL, NULL, NULL),
+("A", "pas", "ind", "Παρατατικός", 'pres', NULL, 12, "222333", NULL, NULL, NULL),
+("A", "pas", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 11, "333333", "θα", NULL, NULL),
+("A", "pas", "ind", "Αόριστος", 'aor', "ηκ", 2, "333333", NULL, NULL, NULL),
+("A", "pas", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"),
+("A", "pas", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"),
+("A", "pas", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"),
+("A", "pas", "ind", "Μέλλοντας στιγμιαίος", 'aor', NULL, 15, "111111", "θα", NULL, NULL),
+-- Υποτακτική
+("A", "pas", "sub", "Ενεστώτας", 'pres', NULL, 11, "333333", "να", NULL, NULL),
+("A", "pas", "sub", "Αόριστος", 'aor', NULL, 15, "111221", "να", NULL, NULL),
+("A", "pas", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός"),
+-- Προστακτική
+("A", "pas", "imp", "Ενεστώτας", 'pres', NULL, 11, "-3--3-", "να", NULL, NULL),
+("A", "pas", "imp", "Αόριστος", 'aor', NULL, 17, "-0----", NULL, NULL, NULL),
+("A", "pas", "imp", "Αόριστος", 'aor', NULL, 18, "----2-", NULL, NULL, NULL),
+("A", "pas", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός"),
+-- Συζυγία Β΄ - α΄ τάξη
+-- Ενεργητηκή φωνή
+-- Οριστική
+("B1", "act", "ind", "Ενεστώτας", 'pres', NULL, 20, "ffffff", NULL, NULL, NULL),
+("B1", "act", "ind", "Παρατατικός", 'pres', "ούς", 2, "ssssss", NULL, NULL, NULL),
+("B1", "act", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 20, "ffffff", "θα", NULL, NULL),
+("B1", "act", "ind", "Αόριστος", 'aor', "ησ", 2, "333333", NULL, NULL, NULL),
+("B1", "act", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"),
+("B1", "act", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"),
+("B1", "act", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"),
+("B1", "act", "ind", "Μέλλοντας στιγμιαίος", 'aor', "ήσ", 1, "ssssss", "θα", NULL, NULL),
+-- Υποτακτική
+("B1", "act", "sub", "Ενεστώτας", 'pres', NULL, 20, "ffffff", "να", NULL, NULL),
+("B1", "act", "sub", "Αόριστος", 'aor', "ήσ", 1, "ssssss", "να", NULL, NULL),
+("B1", "act", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"),
+-- Προστακτική
+("B1", "act", "imp", "Ενεστώτας", 'pres', NULL, 25, "-0--2-", NULL, NULL, NULL),
+("B1", "act", "imp", "Αόριστος", 'aor', "ησ", 9, "-3--3-", NULL, NULL, NULL),
+("B1", "act", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"),
+-- Μεσοπαθητική φωνή
+-- Οριστική
+("B1", "pas", "ind", "Ενεστώτας", 'pres', NULL, 28, "ffffff", NULL, NULL, NULL),
+("B1", "pas", "ind", "Παρατατικός", 'pres', NULL, 29, "ffffff", NULL, NULL, NULL),
+("B1", "pas", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 28, "ffffff", "θα", NULL, NULL),
+("B1", "pas", "ind", "Αόριστος", 'aor', "ηκ", 2, "333333", NULL, NULL, NULL),
+("B1", "pas", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"),
+("B1", "pas", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"),
+("B1", "pas", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"),
+("B1", "pas", "ind", "Μέλλοντας στιγμιαίος", 'aor', NULL, 15, "ffffff", "θα", NULL, NULL),
+-- Υποτακτική
+("B1", "pas", "sub", "Ενεστώτας", 'pres', NULL, 28, "ffffff", "να", NULL, NULL),
+("B1", "pas", "sub", "Αόριστος", 'aor', NULL, 15, "ffffff", "να", NULL, NULL),
+("B1", "pas", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός"),
+-- Προστακτική
+("B1", "pas", "imp", "Ενεστώτας", 'pres', NULL, 30, "-f--f-", "να", NULL, NULL),
+
+("B1", "pas", "imp", "Αόριστος", 'aor', NULL, 31, "-2----", NULL, NULL, NULL),
+("B1", "pas", "imp", "Αόριστος", 'aor', NULL, 32, "----2-", NULL, NULL, NULL),
+
+("B1", "pas", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός"),
+-- Συζυγία Β΄ - β΄ τάξη
+-- Ενεργητηκή φωνή
+-- Οριστική
+("B2", "act", "ind", "Ενεστώτας", 'pres', NULL, 15, "ffffff", NULL, NULL, NULL),
+("B2", "act", "ind", "Παρατατικός", 'pres', "ούσ", 2, "ssssss", NULL, NULL, NULL),
+("B2", "act", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 15, "ffffff", "θα", NULL, NULL),
+("B2", "act", "ind", "Αόριστος", 'aor', "ησ", 2, "333333", NULL, NULL, NULL),
+("B2", "act", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"),
+("B2", "act", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"),
+("B2", "act", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"),
+("B2", "act", "ind", "Μέλλοντας στιγμιαίος", 'aor', "ήσ", 1, "ssssss", "θα", NULL, NULL),
+-- Υποτακτική
+("B2", "act", "sub", "Ενεστώτας", 'pres', NULL, 15, "ffffff", "να", NULL, NULL),
+("B2", "act", "sub", "Αόριστος", 'aor', "ήσ", 1, "ssssss", "να", NULL, NULL),
+("B2", "act", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"),
+-- Προστακτική
+("B2", "act", "imp", "Ενεστώτας", 'pres', NULL, 15, "-f----", "να", NULL, NULL),
+("B2", "act", "imp", "Ενεστώτας", 'pres', NULL, 15, "----f-", NULL, NULL, NULL),
+
+("B2", "act", "imp", "Αόριστος", 'aor', "ησ", 9, "-3--3-", NULL, NULL, NULL),
+("B2", "act", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"),
+-- Μεσοπαθητική φωνή
+-- Οριστική
+("B2", "pas", "ind", "Ενεστώτας", 'pres', NULL, 34, "ffffff", NULL, NULL, NULL),
+("B2", "pas", "ind", "Παρατατικός", 'pres', NULL, 35, "ffffff", NULL, NULL, NULL),
+("B2", "pas", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 34, "ffffff", "θα", NULL, NULL),
+("B2", "pas", "ind", "Αόριστος", 'aor', "ηκ", 2, "333333", NULL, NULL, NULL),
+("B2", "pas", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"),
+("B2", "pas", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"),
+("B2", "pas", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"),
+("B2", "pas", "ind", "Μέλλοντας στιγμιαίος", 'aor', NULL, 15, "ffffff", "θα", NULL, NULL),
+-- Υποτακτική
+("B2", "pas", "sub", "Ενεστώτας", 'pres', NULL, 34, "ffffff", "να", NULL, NULL),
+("B2", "pas", "sub", "Αόριστος", 'aor', NULL, 15, "ffffff", "να", NULL, NULL),
+("B2", "pas", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός"),
+-- Προστακτική
+("B2", "pas", "imp", "Ενεστώτας", 'pres', NULL, 36, "-f--f-", "να", NULL, NULL),
+
+("B2", "pas", "imp", "Αόριστος", 'aor', NULL, 31, "-2----", NULL, NULL, NULL),
+("B2", "pas", "imp", "Αόριστος", 'aor', NULL, 32, "----2-", NULL, NULL, NULL),
+
+("B2", "pas", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός");
+
+INSERT INTO participle VALUES
+-- Συζυγία Α'
+-- Ενεργητηκή φωνή
+("A", "act", "Ενεστώτας", 'pres', NULL, "οντας", NULL),
+("A", "act", "Παρακείμενος", 'aor', NULL, "ει", "εχοντας"),
+-- Μεσοπαθητική φωνή
+("A", "pas", "Παρακείμενος", 'root', NULL, "μένος", NULL),
+-- Συζυγία Β΄ - α΄ τάξη
+-- Ενεργητηκή φωνή
+("B1", "act", "Ενεστώτας", 'pres', NULL, "ώντας", NULL),
+("B1", "act", "Παρακείμενος", 'aor', NULL, "ήσει", "εχοντας"),
+-- Μεσοπαθητική φωνή
+("B1", "pass", "Παρακείμενος", 'pres', "η", "μένος", NULL),
+-- Συζυγία Β΄ - β΄ τάξη
+-- Ενεργητηκή φωνή
+("B2", "act", "Ενεστώτας", 'pres', NULL, "ώντας", NULL),
+("B2", "act", "Παρακείμενος", 'aor', NULL, "ει", "εχοντας"),
+-- Μεσοπαθητική φωνή
+("B1", "pass", "Παρακείμενος", 'pres', "η", "μένος", NULL);
+
+DROP TABLE IF EXISTS verb;
+CREATE TABLE verb(
+ verb varchar(128), -- REL 10
+ conj char(2), -- REL 9
+ augment char(1),
+ accmap char(7),
+ suffix_aor_path varchar(2),
+ INDEX(verb)
+);
+
+DROP TABLE IF EXISTS irregular_root;
+CREATE TABLE irregular_root(
+ verb varchar(128),
+ voice enum('act','pas'), -- Ενεργητηκή/Μεσοπαθητική
+ thema enum('pres','aor','sub'), -- Αόριστος/Υποτακτική
+ root varchar(128)
+);
+
+INSERT INTO verb VALUES
+('βρίσκω', 'A', NULL, '000000', NULL),
+('θέλω','A','η',NULL, NULL),
+('έχω','A',NULL,'000000', NULL),
+('ξέρω','A','η',NULL, NULL),
+('κρεμάω','B1',NULL,NULL,"ασ"),
+('κρεμώ','B1',NULL,NULL,"ασ"),
+('κιτάω','B1',NULL,NULL,"αξ"),
+('κιτώ','B1',NULL,NULL,"αξ"),
+('τραβάω','B1',NULL,NULL,"ηξ"),
+('τραβώ','B1',NULL,NULL,"ηξ"),
+('νικώ','B1',NULL,NULL,NULL)
+;
+
+INSERT INTO irregular_root VALUES
+('βρίσκω','act','aor','βρήκ'),
+('βρίσκω','act','sub','βρ'),
+('βρίσκω','pas','aor','βρέθ'),
+('βρίσκω','pas','sub','βρέθ'),
+('θέλω','act','aor','θέλησ')
+;
+
+DROP TABLE IF EXISTS individual_verb;
+CREATE TABLE individual_verb(
+ verb varchar(128),
+ voice enum('act','pas'), -- Ενεργητηκή/Μεσοπαθητική
+ mode enum('ind','sub','imp'),
+ tense varchar(128),
+ ident int(32),
+ INDEX(verb,voice,mode,tense)
+);
+
+INSERT INTO individual_verb VALUES
+("είμαι", "act", "ind", "Ενεστώτας", 100),
+("είμαι", "act", "ind", "Παρατατικός", 101),
+("είμαι", "act", "ind", "Μέλλοντας διαρκείας", 102),
+("είμαι", "act", "ind", "Αόριστος", 0),
+("είμαι", "act", "ind", "Παρακείμενος", 0),
+("είμαι", "act", "ind", "Υπερσυντέλικος", 0),
+("είμαι", "act", "ind", "Συντελεσμένος μέλλοντας", 0),
+("είμαι", "act", "ind", "Μέλλοντας στιγμιαίος", 0),
+("είμαι", "act", "sub", "Ενεστώτας", 103),
+("είμαι", "act", "sub", "Αόριστος", 0),
+("είμαι", "act", "sub", "Παρακείμενος", 0),
+("είμαι", "act", "imp", "Ενεστώτας", 104),
+("είμαι", "act", "imp", "Αόριστος", 0),
+("είμαι", "act", "imp", "Παρακείμενος", 0),
+("είμαι", "pas", "ind", "Ενεστώτας", 0),
+("είμαι", "pas", "ind", "Παρατατικός", 0),
+("είμαι", "pas", "ind", "Μέλλοντας διαρκείας", 0),
+("είμαι", "pas", "ind", "Αόριστος", 0),
+("είμαι", "pas", "ind", "Παρακείμενος", 0),
+("είμαι", "pas", "ind", "Υπερσυντέλικος", 0),
+("είμαι", "pas", "ind", "Συντελεσμένος μέλλοντας", 0),
+("είμαι", "pas", "ind", "Μέλλοντας στιγμιαίος", 0),
+("είμαι", "pas", "sub", "Ενεστώτας", 0),
+("είμαι", "pas", "sub", "Αόριστος", 0),
+("είμαι", "pas", "sub", "Παρακείμενος", 0),
+("είμαι", "pas", "imp", "Ενεστώτας", 0),
+("είμαι", "pas", "imp", "Αόριστος", 0),
+("είμαι", "pas", "imp", "Παρακείμενος", 0),
+
+("έχω", "act", "ind", "Παρατατικός", 105),
+("έχω", "act", "ind", "Αόριστος", 0),
+("έχω", "act", "ind", "Παρακείμενος", 0),
+("έχω", "act", "ind", "Υπερσυντέλικος", 0),
+("έχω", "act", "ind", "Συντελεσμένος μέλλοντας", 0),
+("έχω", "act", "ind", "Μέλλοντας στιγμιαίος", 0),
+("έχω", "act", "sub", "Αόριστος", 0),
+("έχω", "act", "sub", "Παρακείμενος", 0),
+("έχω", "act", "imp", "Αόριστος", 0),
+("έχω", "act", "imp", "Παρακείμενος", 0),
+("έχω", "pas", "ind", "Παρατατικός", 0),
+("έχω", "pas", "ind", "Μέλλοντας διαρκείας", 0),
+("έχω", "pas", "ind", "Αόριστος", 0),
+("έχω", "pas", "ind", "Παρακείμενος", 0),
+("έχω", "pas", "ind", "Υπερσυντέλικος", 0),
+("έχω", "pas", "ind", "Συντελεσμένος μέλλοντας", 0),
+("έχω", "pas", "ind", "Μέλλοντας στιγμιαίος", 0),
+("έχω", "pas", "sub", "Ενεστώτας", 0),
+("έχω", "pas", "sub", "Αόριστος", 0),
+("έχω", "pas", "sub", "Παρακείμενος", 0),
+("έχω", "pas", "imp", "Ενεστώτας", 0),
+("έχω", "pas", "imp", "Αόριστος", 0),
+("έχω", "pas", "imp", "Παρακείμενος", 0),
+("βρίσκω", "act", "imp", "Αόριστος", 106)
+;
diff --git a/scm/conjugator.scm b/scm/conjugator.scm
index 99f5189..4f1eccd 100644
--- a/scm/conjugator.scm
+++ b/scm/conjugator.scm
@@ -47,49 +47,137 @@
(apply format (current-error-port) fmt fmtargs))
(define (guess-verb-info verb)
- (let ((elverb (string->elstr verb)))
+ (let ((elverb (force-elstr verb)))
(cond
+ ;; FIXME
+ ((elstr-suffix? elverb "άω")
+ (list "B1"
+ #f
+ #f
+ "ησ"
+ #f
+ #f))
+ ((elstr-suffix? elverb "ώ")
+ (list "B2"
+ #f
+ #f
+ "ησ"
+ #f
+ #f))
(else
- (let ((root (elstr-trim elverb -1)))
- (list "A"
- #f
- "ε"
- #f))))))
+ (list "A"
+ #f
+ "ε"
+ #f
+ #f
+ #f)))))
-(define (get-verb-info verb)
- (let ((conn (dict-connect)))
+(define (get-verb-info verb . rest)
+ (let ((conn (dict-connect))
+ (class (if (null? rest)
+ ""
+ (string-append " AND conj='" (car rest) "'"))))
(let ((vdb (my-sql-query
conn
(string-append
- "SELECT conj,accmap,augment FROM verb \
-WHERE verb='" verb "'"))))
- (if (null? vdb)
- (guess-verb-info verb)
- (let ((x (car vdb)))
- (list
- (list-ref x 0)
- (list-ref x 1)
- (or (list-ref x 2) "ε")
- #f))))))
+ "SELECT conj,accmap,augment,suffix_aor_path FROM verb \
+WHERE verb='" (force-string verb) "'"
+ class))))
+ (cond
+ ((and vdb (not (null? vdb)))
+ (let ((x (car vdb)))
+ (list
+ (list-ref x 0)
+ (list-ref x 1)
+ (or (list-ref x 2) "ε")
+ (list-ref x 3)
+ #f
+ '(class))))
+ ((elstr-suffix? (force-elstr verb) "άω")
+ (get-verb-info (elstr-append
+ (elstr-trim (force-elstr verb) -2) "ώ") "B1"))
+ (else
+ (guess-verb-info verb))))))
+(define (thema-aoristoy-mesapathitikis root)
+ (cond
+ ((elstr-suffix? root "αίν")
+ (elstr-append (elstr-trim root -3) "ανθ")) ;; FIXME: Also αθ, ηθ
+ ((and
+ (elstr-suffix? root "ν")
+ (logand (elstr-char-prop-bitmask root -2) elmorph:vowel))
+ (elstr-append (elstr-trim root -1) "θ")) ;; FIXME: also στ, νθ, θ
+ ((and
+ (elstr-suffix? root "δ" "θ" "ζ" "ν") ;; FIXME: see above
+ (logand (elstr-char-prop-bitmask root -2) elmorph:vowel))
+ (elstr-append (elstr-trim root -1) "στ"))
+ ((elstr-suffix? root "γγ" "σσ" "ττ" "χν" "γ" "ζ" "κ" "χ") =>
+ (lambda (suf)
+ (elstr-append (elstr-trim root (- 0 (elstr-length (string->elstr suf))))
+ "χτ"))) ;; also χθ
+ ((elstr-suffix? root "π" "β" "φ" "πτ" "φτ") =>
+ (lambda (suf)
+ (elstr-append (elstr-trim root (- 0 (elstr-length (string->elstr suf))))
+ "φτ"))) ;; also φθ
+ ((elstr-suffix? root "αύ" "εύ") =>
+ (lambda (suf)
+ (elstr-append root "τ")))
+ ((elstr-suffix? root "άρ" "ίρ")
+ ((elstr-append root "ιστ")))
+ ((logand (elstr-char-prop-bitmask root -1) elmorph:vowel)
+ (elstr-append root "θ"))
+ (else
+ #f)))
+
(define (complement-verb-info vinfo verb voice thema)
; (format #t "COMPLEMENT ~S~%" thema)
- (let ((result (my-sql-query
+ (let ((elverb (string->elstr verb))
+ (result (my-sql-query
(dict-connect)
(string-append
"SELECT root FROM irregular_root \
WHERE verb='" verb "' AND voice='" voice "' AND thema='" thema "'"))))
- (list-set! vinfo 3
- (if (not (null? result))
- (caar result)
- (let ((root (elstr-trim (string->elstr verb) -1)))
- (cond
- ((string=? thema "pres")
- root)
- ((or (string=? thema "aor") (string=? thema "sub"))
- (elstr-thema-aoristoy root))
- (else
- #f)))))))
+ (verb-info-set! #:root vinfo
+ (cond
+ ((not (null? result))
+ (verb-info-set! #:attested vinfo 'root)
+ (caar result))
+ ((string=? (verb-info #:conj vinfo) "A")
+ (let ((root (elstr-trim elverb -1)))
+ (cond
+ ((string=? thema "pres")
+ (verb-info-set! #:attested vinfo 'root)
+ root)
+ ((or (string=? thema "aor") (string=? thema "sub"))
+ (if (string=? voice "act")
+ (elstr-thema-aoristoy root)
+ (thema-aoristoy-mesapathitikis root)))
+ (else
+ #f))))
+ ((string=? (verb-info #:conj vinfo) "B1")
+ (let ((root (if (elstr-suffix? elverb "άω")
+ (elstr-trim elverb -2)
+ (elstr-trim elverb -1))))
+ (cond
+ ((or (string=? voice "act") (string=? thema "pres"))
+ (verb-info-set! #:attested vinfo 'root)
+ root)
+ ((or (string=? thema "aor") (string=? thema "sub"))
+ (elstr-append root "ηθ")) ;; FIXME: guesswork
+ (else
+ #f))))
+ ((string=? (verb-info #:conj vinfo) "B2")
+ (let ((root (elstr-trim elverb -1)))
+ (cond
+ ((or (string=? voice "act") (string=? thema "pres"))
+ (verb-info-set! #:attested vinfo 'root)
+ root)
+ ((or (string=? thema "aor") (string=? thema "sub"))
+ (elstr-append root "ηθ")) ;; FIXME: guesswork
+ (else
+ #f))))
+ (else
+ #f)))))
(define-syntax verb-info
(syntax-rules ()
@@ -99,8 +187,31 @@ WHERE verb='" verb "' AND voice='" voice "' AND thema='" thema "'"))))
(list-ref v 1))
((verb-info #:augment v)
(list-ref v 2))
+ ((verb-info #:suffix v)
+ (list-ref v 3))
((verb-info #:root v)
- (list-ref v 3))))
+ (list-ref v 4))
+ ((verb-info #:attested v)
+ (list-ref v 5))))
+
+(define-syntax verb-info-set!
+ (syntax-rules ()
+ ((verb-info-set! #:root v val)
+ (list-set! v 4 val))
+ ((verb-info-set! #:attested v val)
+ (list-set! v 5
+ (if (not val)
+ val
+ (let ((oldval (list-ref v 5)))