diff options
-rw-r--r-- | data/dbverb.struct | 101 | ||||
-rw-r--r-- | data/irregular-verbs.xml | 641 | ||||
-rw-r--r-- | scm/.gitignore | 2 | ||||
-rw-r--r-- | scm/Makefile.am | 7 | ||||
-rw-r--r-- | scm/conjugator.scm | 189 | ||||
-rw-r--r-- | scm/verbop.scm | 676 | ||||
-rw-r--r-- | src/ellinika/elmorph.c | 66 |
7 files changed, 1516 insertions, 166 deletions
diff --git a/data/dbverb.struct b/data/dbverb.struct index af9d236..06745c8 100644 --- a/data/dbverb.struct +++ b/data/dbverb.struct @@ -32,7 +32,7 @@ DROP TABLE IF EXISTS conjugation; CREATE TABLE conjugation( conj char(2), -- REL 9 voice enum('act','pas'), -- Ενεργητηκή/Μεσοπαθητική - mode enum('ind','sub','imp'), + mood enum('ind','sub','imp'), tense varchar(128), thema enum('pres','aor','sub','synt'), -- Ενεστώτα, Αόριστου, υποτακτικής, syntethic suffix char(32), @@ -43,7 +43,7 @@ CREATE TABLE conjugation( auxtense char(32), KEY (conj), KEY (voice), - KEY (mode) + KEY (mood) ); DROP TABLE IF EXISTS participle; @@ -243,98 +243,21 @@ CREATE TABLE verb( 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'), + voice enum('act','pas'), + mood enum('ind','sub','imp'), tense varchar(128), ident int(32), - INDEX(verb,voice,mode,tense) + INDEX(verb,voice,mood,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), +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) +); -("έχω", "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/data/irregular-verbs.xml b/data/irregular-verbs.xml new file mode 100644 index 0000000..ca2c7d1 --- /dev/null +++ b/data/irregular-verbs.xml @@ -0,0 +1,641 @@ +<i> + <v> + <a>είμαι</a> + <c>I</c> + <act> + <ind> + <t name="Ενεστώτας"> + <p n="s" p="1">είμαι</p> + <p n="s" p="2">είσαι</p> + <p n="s" p="3">είναι</p> + <p n="p" p="1">είμαστε</p> + <p n="p" p="2">είστε,είσαστε</p> + <p n="p" p="3">είναι</p> + </t> + <t name="Παρατατικός"> + <p n="s" p="1">ήμουν(α)</p> + <p n="s" p="2">ήσουν(α)</p> + <p n="s" p="3">ήταν(ε)</p> + <p n="p" p="1">ήμαστε,ήμασταν</p> + <p n="p" p="2">ήσαστε,ήσασταν</p> + <p n="p" p="3">ήταν(ε)</p> + </t> + <t name="Μέλλοντας διαρκείας"> + <p n="s" p="1">θα είμαι</p> + <p n="s" p="2">θα είσαι</p> + <p n="s" p="3">θα είναι</p> + <p n="p" p="1">θα είμαστε</p> + <p n="p" p="2">θα είστε,θα είσαστε</p> + <p n="p" p="3">θα είναι</p> + </t> + <t name="Αόριστος" /> + <t name="Παρακείμενος"/> + <t name="Υπερσυντέλικος"/> + <t name="Συντελεσμένος μέλλοντας"/> + <t name="Μέλλοντας στιγμιαίος"/> + </ind> + <sub> + <t name="Ενεστώτας"> + <p n="s" p="1">να είμαι</p> + <p n="s" p="2">να είσαι</p> + <p n="s" p="3">να είναι</p> + <p n="p" p="1">να είμαστε</p> + <p n="p" p="2">να είστε,θα είσαστε</p> + <p n="p" p="3">να είναι</p> + </t> + <t name="Αόριστος" /> + <t name="Παρακείμενος"/> + </sub> + <imp> + <t name="Ενεστώτας"> + <p n="s" p="2">να είσαι</p> + <p n="p" p="2">να είστε</p> + </t> + <t name="Αόριστος" /> + <t name="Παρακείμενος"/> + </imp> + </act> + + <pas> + <ind> + <t name="Ενεστώτας"/> + <t name="Παρατατικός"/> + <t name="Μέλλοντας διαρκείας"/> + <t name="Αόριστος" /> + <t name="Παρακείμενος"/> + <t name="Υπερσυντέλικος"/> + <t name="Συντελεσμένος μέλλοντας"/> + <t name="Μέλλοντας στιγμιαίος"/> + </ind> + <sub> + <t name="Ενεστώτας"/> + <t name="Αόριστος" /> + <t name="Παρακείμενος"/> + </sub> + <imp> + <t name="Ενεστώτας"/> + <t name="Αόριστος" /> + <t name="Παρακείμενος"/> + </imp> + </pas> + </v> + + <v> + <a>έχω</a> + <c>A</c> + <accmap>000000</accmap> + <act> + <ind> + <t name="Παρατατικός"> + <p n="s" p="1">είχα</p> + <p n="s" p="2">είχες</p> + <p n="s" p="3">είχα</p> + <p n="p" p="1">είχαμε</p> + <p n="p" p="2">είχατε</p> + <p n="p" p="3">είχαν</p> + </t> + <t name="Αόριστος" /> + <t name="Παρακείμενος"/> + <t name="Υπερσυντέλικος"/> + <t name="Συντελεσμένος μέλλοντας"/> + <t name="Μέλλοντας στιγμιαίος"/> + </ind> + <sub> + <t name="Αόριστος" /> + <t name="Παρακείμενος"/> + </sub> + <imp> + <t name="Αόριστος" /> + <t name="Παρακείμενος"/> + </imp> + </act> + <pas> + <ind> + <t name="Ενεστώτας"/> + <t name="Παρατατικός"/> + <t name="Μέλλοντας διαρκείας"/> + <t name="Αόριστος" /> + <t name="Παρακείμενος"/> + <t name="Υπερσυντέλικος"/> + <t name="Συντελεσμένος μέλλοντας"/> + <t name="Μέλλοντας στιγμιαίος"/> + </ind> + <sub> + <t name="Ενεστώτας"/> + <t name="Αόριστος" /> + <t name="Παρακείμενος"/> + </sub> + <imp> + <t name="Ενεστώτας"/> + <t name="Αόριστος" /> + <t name="Παρακείμενος"/> + </imp> + </pas> + </v> + + <v> + <a>κρεμώ</a> + <c>B1</c> + <suffix>ασ</suffix> + </v> + + <v> + <a>κιτώ</a> + <c>B1</c> + <suffix>αξ</suffix> + </v> + + <v> + <a>τραβώ</a> + <c>B1</c> + <suffix>ηξ</suffix> + </v> + + <v> + <a>νικώ</a> + <c>B1</c> + </v> + + <v> + <a>θέλω</a> + <c>A</c> + <act> + <aor>θέλησ</aor> + </act> + </v> + + <v> + <a>αγγέλω</a> + <c>A</c> + <act> + <aor>αγγείλ</aor> + </act> + </v> + + <v> + <a>άγω</a> + <c>A</c> + <act> + <aor>ήγαγ</aor> + <root theme="sub">αγάγ</root> + </act> + </v> + + <v> + <a>ανεβαίνω</a> + <c>A</c> + <act> + <root theme="aor">ανέβηκ</root> + <root theme="sub">ανέβ</root> + </act> + </v> + + <v> + <a>απονέμω</a> + <c>A</c> + <act> + <root theme="aor">απένειμ</root> + <root theme="sub">απονείμ</root> + </act> + </v> + + <v> + <a>αρέσω</a> + <c>A</c> + <act> + <root theme="aor">αρεσ</root> + </act> + </v> + + <v> + <a>βάλλω</a> + <c>A</c> + <act> + <root theme="aor">βαλ</root> + </act> + </v> + + <v> + <a>βαραίνω</a> + <c>A</c> + <act> + <root theme="aor">βαρυν</root> + </act> + </v> + + <v> + <a>βαστώ</a> + <c>B2</c> + <suffix>ηξ</suffix> <!-- also αξ --> + </v> + + <v> + <a>βγάζω</a> + <c>A</c> + <act> + <root theme="aor">βγαλ</root> + </act> + </v> + + <v> + <a>βγαίνω</a> + <c>A</c> + <accmap>000000</accmap> + <act> + <root theme="aor">βγήκ</root> + <root theme="sub">βγ</root> + </act> + </v> + + <v> + <a>βλέπω</a> + <c>A</c> + <accmap>000000</accmap> + <act> + <root theme="aor">είδ</root> + <root theme="sub">δ</root> + <imp> + <t name="Αόριστος"> + <p n="s" p="2">δες</p> + <p n="p" p="2">δείτε,δέστε</p> + </t> + </imp> + </act> + </v> + + <v> + <a>βρίσκω</a> + <c>A</c> + <act> + <root theme="aor">βρήκ</root> + <root theme="sub">βρ</root> + <imp> + <t name="Αόριστος"> + <p n="s" p="2">βρες</p> + <p n="p" p="2">βρείτε,βρέστε</p> + </t> + </imp> + </act> + <pas> + <aor>βρέθ</aor> + </pas> + </v> + + <v> + <a>γελώ</a> + <c>B2</c> + <suffix>ασ</suffix> + </v> + + <v> + <a>γέρνω</a> + <c>A</c> + <act> + <root theme="aor">γειρ</root> + </act> + </v> + + <v> + <a>γίνομαι</a> <!-- FIXME: deponentium --> + <c>A</c> + <act> + <root theme="aor">γίν</root> + </act> + </v> + + <v> + <a>διαβαίνω</a> + <c>A</c> + <act> + <root theme="aor">διάβηκ</root> + <sub> + <t name="Αόριστος"> + <p n="s" p="1">διαβώ</p> + <p n="s" p="2">διαβείς</p> + <p n="s" p="3">διαβεί</p> + <p n="p" p="1">διαβούμε</p> + <p n="p" p="2">διαβέτε</p> + <p n="p" p="3">διαβούν</p> + </t> + </sub> + </act> + </v> + + <v> + <a>διδάσκω</a> + <c>A</c> + <act> + <root theme="aor">διδαξ</root> + </act> + </v> + + <v> + <a>δίνω</a> + <c>A</c> + <act> + <root theme="aor">δωσ</root> + </act> + </v> + +<!-- FIXME + έρχομαι + κάθομαι +--> + + <v> + <a>καίω</a> + <c>A</c> + <act> + <root theme="aor">καψ</root> + </act> + </v> + + <v> + <a>κάν</a> + <c>A</c> + </v> + + <v> + <a>κλαίω</a> + <c>A</c> + <act> + <root theme="aor">κλαψ</root> + </act> + </v> + + <v> + <a>λαβαίνω</a> + <c>A</c> + <act> + <root theme="aor">λαβ</root> + </act> + </v> + + <v> + <a>λέω</a> + <c>A</c> + <accmap>000000</accmap> + <act> + <root theme="aor">είπ</root> + <root theme="sub">π</root> + <imp> + <t name="Αόριστος"> + <p n="s" p="2">πες</p> + <p n="p" p="2">πείτε,πέστε</p> + </t> + </imp> + </act> + </v> + +<!-- FIXME: λέγω -> λέω --> + + <v> + <a>μαθαίνω</a> + <c>A</c> + <act> + <root theme="aor">μαθ</root> + </act> + </v> + + <v> + <a>μπαίνω</a> + <c>A</c> + <accmap>000000</accmap> + <act> + <root theme="aor">μπηκ</root> + <root theme="sub">μπ</root> + <imp> + <t name="Αόριστος"> + <p n="s" p="2">μπες</p> + <p n="p" p="2">μπείτε</p> + </t> + </imp> + </act> + </v> + + <v> + <a></a> + <c>A</c> + <act> + <root theme="aor"></root> + <root theme="sub"></root> + </act> + </v> + + <v> + <a>ξέρω</a> + <c>A</c> + <augment>η</augment> + </v> + + <v> + <a>παθαίνω</a> + <c>A</c> + <act> + <root theme="aor">παθ</root> + </act> + </v> + + <v> + <a>περνώ</a> + <c>B1</c> + <suffix>ασ</suffix> + </v> + + <v> + <a>πέφτω</a> + <c>A</c> + <act> + <root theme="aor">πεσ</root> + </act> + </v> + + <v> + <a>πηγαίνω</a> + <c>A</c> + <accmap>000000</accmap> + <act> + <root theme="aor">πήγ</root> + <ind> + <t name="Μέλλοντας στιγμιαίος"> + <p n="s" p="1">θα πάω</p> + <p n="s" p="2">θα πας</p> + <p n="s" p="3">θα πάει</p> + <p n="p" p="1">θα πάμε</p> + <p n="p" p="2">θα πάτε</p> + <p n="p" p="3">θα πάνε</p> + </t> + </ind> + <sub> + <t name="Αόριστος"> + <p n="s" p="1">να πάω</p> + <p n="s" p="2">να πας</p> + <p n="s" p="3">να πάει</p> + <p n="p" p="1">να πάμε</p> + <p n="p" p="2">να πάτε</p> + <p n="p" p="3">να πάνε</p> + </t> + </sub> + <imp> + <t name="Αόριστος"> + <p n="s" p="2">πήγαινε</p> + <p n="p" p="2">πηγαίνετε</p> + </t> + </imp> + </act> + </v> + + <v> + <a>πίνω</a> + <c>A</c> + <accmap>000000</accmap> + <act> + <root theme="aor">ήπι</root> <!-- FIXME:Syllabizer --> + <root theme="sub">πι</root> + <imp> + <t name="Αόριστος"> + <p n="s" p="2">πιες</p> + <p n="p" p="2">πιείτε,πιέστε</p> + </t> + </imp> + </act> + </v> + + <v> + <a>πλέω</a> + <c>A</c> + <act> + <root theme="aor">πλευσ</root> + </act> + </v> + + <v> + <a>πονώ</a> + <c>A</c> + <act> + <root theme="aor">πονεσ</root> + </act> + </v> + +<!-- FIXME σέβομαι --> + + <v> + <a>σέρνω</a> + <c>A</c> + <act> + <root theme="aor">συρ</root> + </act> + </v> + + <v> + <a>σπέρνω</a> + <c>A</c> + <act> + <root theme="aor">σπειρ</root> + </act> + </v> + +<!-- FIXME: στέκομαι,στέκο --> + + <v> + <a>στέλνω</a> + <c>A</c> + <act> + <root theme="aor">στείλ</root> + </act> + </v> + +<!-- FIXME: συμβαίνει --> + + <v> + <a>τείνω</a> + <c>A</c> + <act> + <root theme="aor">τειν</root> + </act> + </v> + + <v> + <a>τραβώ</a> + <c>B1</c> + <suffix>ηξ</suffix> + </v> + + <v> + <a>τρέφω</a> + <c>A</c> + <act> + <root theme="aor">θρεψ</root> + </act> + </v> + + <v> + <a>τρώω</a> + <c>A</c> + <act> + <root theme="aor">φαγ</root> + <root theme="sub">φα</root> + </act> + </v> + + <v> + <a>τυχαίνω</a> + <c>A</c> + <act> + <root theme="aor">τυχ</root> + </act> + </v> + + <v> + <a>υπάρχω</a> + <c>A</c> + <accmap>000000</accmap> + <act> + <root theme="aor">υπήρξ</root> + <root theme="sub">υπάρξ</root> + </act> + </v> + +<!-- FIXME: υπόσχομαι, φαίνομαι --> + + <v> + <a>φέυγω</a> + <c>A</c> + <act> + <root theme="aor">φυγ</root> + </act> + </v> + + <v> + <a>φορώ</a> + <c>B1</c> + <suffix>εσ</suffix> + </v> + + <v> + <a>φταίω</a> + <c>A</c> + <act> + <root theme="aor">φταιξ</root> + </act> + </v> + +<!-- FIXME χαίρομαι --> + + <v> + <a>χορταίνω</a> + <c>A</c> + <act> + <root theme="aor">χορτασ</root> + </act> + </v> + + <v> + <a>ψέλνω</a> + <c>A</c> + <act> + <root theme="aor">ψαλ</root> + </act> + </v> + +</i> diff --git a/scm/.gitignore b/scm/.gitignore index d033647..0e10ba2 100644 --- a/scm/.gitignore +++ b/scm/.gitignore @@ -1,4 +1,4 @@ dictrans dictrans.sed neatrans - +verbop diff --git a/scm/Makefile.am b/scm/Makefile.am index f2669f4..481676f 100644 --- a/scm/Makefile.am +++ b/scm/Makefile.am @@ -15,8 +15,8 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. pkgmoddir=@GUILE_SITE@ -bin_SCRIPTS=dictrans neatrans -CLEANFILES=dictrans.sed dictrans +bin_SCRIPTS=dictrans neatrans verbop +CLEANFILES=dictrans.sed dictrans neatrans verbop EXTRA_DIST=dictrans.scm dictrans.sed: Makefile @@ -34,3 +34,6 @@ neatrans: $(srcdir)/neatrans.scm dictrans.sed sed -f dictrans.sed $(srcdir)/neatrans.scm > $@ chmod +x $@ +verbop: $(srcdir)/verbop.scm dictrans.sed + sed -f dictrans.sed $(srcdir)/verbop.scm > $@ + chmod +x $@ diff --git a/scm/conjugator.scm b/scm/conjugator.scm index ceda52a..7b2a4a6 100644 --- a/scm/conjugator.scm +++ b/scm/conjugator.scm @@ -128,15 +128,21 @@ WHERE verb='" (force-string verb) "'" (elstr-append root "θ")) (else #f))) - + +(define (lookup-verb-info verb voice thema) + (my-sql-query + (dict-connect) + (string-append + "SELECT root FROM irregular_root \ +WHERE verb='" verb "' AND voice='" voice "' AND thema='" thema "'"))) + (define (complement-verb-info vinfo verb voice thema) ; (format #t "COMPLEMENT ~S~%" thema) (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 "'")))) + (result (let ((tmpres (lookup-verb-info verb voice thema))) + (if (and (null? tmpres) (string=? thema "sub")) + (lookup-verb-info verb voice "aor") + tmpres)))) (verb-info-set! #:root vinfo (cond ((not (null? result)) @@ -247,7 +253,7 @@ WHERE verb='" verb "' AND voice='" voice "' AND thema='" thema "'")))) ((conj-info-set! #:particle v val) (list-set! v 3 val)))) -(define (get-conj-info conj voice mode tense) +(define (get-conj-info conj voice mood tense) (let ((conn (dict-connect))) (let ((answer (my-sql-query conn @@ -255,7 +261,7 @@ WHERE verb='" verb "' AND voice='" voice "' AND thema='" thema "'")))) "SELECT c.thema,c.suffix,c.accmap,c.particle,c.aux,c.auxtense,\ f.sing1,f.sing2,f.sing3,f.plur1,f.plur2,f.plur3 \ FROM conjugation c, verbflect f \ -WHERE c.conj='" conj "' AND c.voice='" voice "' AND c.mode='" mode +WHERE c.conj='" conj "' AND c.voice='" voice "' AND c.mood='" mood "' AND c.tense='" tense "' AND c.flect = f.ident")))) (if (null? answer) #f @@ -271,7 +277,17 @@ WHERE c.conj='" conj "' AND c.voice='" voice "' AND c.mode='" mode (string->elstr str) str)) -(define (apply-flect conj vinfo) +(define (accented-syllable-0 str) + (let ((syl (elstr-accented-syllable str)) + (len (elstr-number-of-syllables str))) + (if (= syl 0) + syl + (+ (- len syl) 1)))) + +(define (set-accented-syllable-0! str nsyl) + (elstr-set-accent! str (+ (- (elstr-number-of-syllables str) nsyl) 1))) + +(define (apply-flect conj vinfo verb) (let ((root (verb-info #:root vinfo)) (suffix (let ((s (conj-info #:suffix conj))) (if s @@ -294,20 +310,29 @@ WHERE c.conj='" conj "' AND c.voice='" voice "' AND c.mode='" mode ((char=? acc #\0) (let* ((rs (force-elstr root)) (suf (elstr-deaccent (elstr-append suffix flect))) - (result (elstr-append rs suf))) - (cond - ((or (= (elstr-accented-syllable rs) 0) - (> (elstr-number-of-syllables suf) 2)) - (let ((nsyl (elstr-number-of-syllables suf))) - (cond - ((= nsyl 1) - result) - ((= nsyl 3) - (elstr-set-accent result 3)) - (else - (elstr-set-accent result 2))))) - (else - result)))) + (result (elstr-append rs suf)) + (acc-syl (let ((n (accented-syllable-0 rs))) + (if (= 0 n) + (accented-syllable-0 verb) + n)))) + (if (> (elstr-number-of-syllables result) 1) + (set-accented-syllable-0! result acc-syl)) + (let ((acc-syl (elstr-accented-syllable result))) + (cond + ((and (= acc-syl 1) + (= (elstr-number-of-syllables result) 1)) + (elstr-deaccent result)) + ((> acc-syl 3) + (let ((nsyl (elstr-number-of-syllables suf))) + (cond + ((= nsyl 1) + result) + ((= nsyl 3) + (elstr-set-accent result 3)) + (else + (elstr-set-accent result 2))))) + (else + result))))) ((char=? acc #\f) (elstr-append (elstr-deaccent (elstr-append root suffix)) @@ -340,13 +365,13 @@ WHERE c.conj='" conj "' AND c.voice='" voice "' AND c.mode='" mode forms) (map force-string forms))))) -(define (individual-verb verb voice mode tense) +(define (individual-verb verb voice mood tense) (let ((res (my-sql-query (dict-connect) (string-append "SELECT f.sing1,f.sing2,f.sing3,f.plur1,f.plur2,f.plur3 \ FROM individual_verb i,verbflect f \ -WHERE i.verb='" verb "' AND i.voice='" voice "' AND i.mode='" mode +WHERE i.verb='" verb "' AND i.voice='" voice "' AND i.mood='" mood "' AND i.tense = '" tense "' AND i.ident=f.ident")))) (if (not (null? res)) (append (car res) @@ -354,17 +379,17 @@ WHERE i.verb='" verb "' AND i.voice='" voice "' AND i.mode='" mode '(class root))) #f))) -(define (conjugate verb voice mode tense . rest) +(define (conjugate verb voice mood tense . rest) (cond - ((individual-verb verb voice mode tense) => + ((individual-verb verb voice mood tense) => (lambda (res) res)) (else (let* ((vinfo (get-verb-info verb)) - (conj (get-conj-info (verb-info #:conj vinfo) voice mode tense))) + (conj (get-conj-info (verb-info #:conj vinfo) voice mood tense))) (if (not conj) (error "cannot obtain conjugation information for " - (verb-info #:conj vinfo) voice mode tense)) + (verb-info #:conj vinfo) voice mood tense)) (if (member #:nopart rest) (conj-info-set! #:particle conj #f)) (cond @@ -386,7 +411,7 @@ WHERE i.verb='" verb "' AND i.voice='" voice "' AND i.mode='" mode (else ; (format #t "CONJ ~S~%" conj) (complement-verb-info vinfo verb voice (conj-info #:thema conj)) - (append (apply-flect conj vinfo) + (append (apply-flect conj vinfo verb) (list (verb-info #:conj vinfo) (verb-info #:attested vinfo))))))))) @@ -423,9 +448,9 @@ WHERE i.verb='" verb "' AND i.voice='" voice "' AND i.mode='" mode (define (term x) (or (assoc-ref transtab x) x)) -(define (test-conjugation verb voice mode tense) - (format #t "~A ~A/~A/~A: " verb (term voice) (term mode) tense) - (let* ((result (conjugate verb voice mode tense)) +(define (test-conjugation verb voice mood tense) + (format #t "~A ~A/~A/~A: " verb (term voice) (term mood) tense) + (let* ((result (conjugate verb voice mood tense)) (conj (conjugation:table result))) (cond ((empty-conjugation? conj) @@ -444,42 +469,64 @@ WHERE i.verb='" verb "' AND i.voice='" voice "' AND i.mode='" mode (newline) (gc)) -(test-conjugation "είμαι" "act" "ind" "Ενεστώτας") -(test-conjugation "είμαι" "act" "ind" "Παρατατίκος") -(test-conjugation "είμαι" "act" "ind" "Μέλλοντας διαρκείας") -(test-conjugation "είμαι" "act" "sub" "Ενεστώτας") -(test-conjugation "είμαι" "act" "imp" "Ενεστώτας") -(test-conjugation "είμαι" "act" "ind" "Αόριστος") - -(test-conjugation "έχω" "act" "ind" "Ενεστώτας") -(test-conjugation "έχω" "act" "ind" "Παρατατίκος") -(test-conjugation "έχω" "act" "ind" "Μέλλοντας διαρκείας") -(test-conjugation "έχω" "act" "sub" "Ενεστώτας") -(test-conjugation "έχω" "act" "imp" "Ενεστώτας") -(test-conjugation "έχω" "act" "imp" "Αόριστος") - -(test-conjugation "ανοίγω" "act" "ind" "Ενεστώτας") -(test-conjugation "ανοίγω" "act" "ind" "Αόριστος") -(test-conjugation "ανοίγω" "pas" "ind" "Αόριστος") -(test-conjugation "δένω" "act" "ind" "Αόριστος") -(test-conjugation "θέλω" "act" "ind" "Αόριστος") -(test-conjugation "θέλω" "act" "ind" "Παρατατικός") -(test-conjugation "βρίσκω" "act" "ind" "Ενεστώτας") -(test-conjugation "βρίσκω" "act" "ind" "Αόριστος") -(test-conjugation "βρίσκω" "act" "ind" "Μέλλοντας στιγμιαίος") -(test-conjugation "βρίσκω" "pas" "ind" "Αόριστος") -(test-conjugation "βρίσκω" "act" "sub" "Ενεστώτας") -(test-conjugation "βρίσκω" "act" "sub" "Αόριστος") -(test-conjugation "βρίσκω" "act" "ind" "Παρακείμενος") -(test-conjugation "βρίσκω" "act" "sub" "Παρακείμενος") -(test-conjugation "βρίσκω" "act" "imp" "Αόριστος") - -(test-conjugation "νικάω" "act" "ind" "Ενεστώτας") -(test-conjugation "νικάω" "act" "ind" "Αόριστος") -(test-conjugation "νικώ" "act" "ind" "Ενεστώτας") -(test-conjugation "νικώ" "act" "ind" "Αόριστος") -(test-conjugation "νικώ" "pas" "ind" "Αόριστος") -(test-conjugation "κρεμάω" "act" "ind" "Αόριστος") -(test-conjugation "κιτάω" "act" "ind" "Αόριστος") -(test-conjugation "τραβάω" "act" "ind" "Αόριστος") +;; (test-conjugation "είμαι" "act" "ind" "Ενεστώτας") +;; (test-conjugation "είμαι" "act" "ind" "Παρατατίκος") +;; (test-conjugation "είμαι" "act" "ind" "Μέλλοντας διαρκείας") +;; (test-conjugation "είμαι" "act" "sub" "Ενεστώτας") +;; (test-conjugation "είμαι" "act" "imp" "Ενεστώτας") +;; (test-conjugation "είμαι" "act" "ind" "Αόριστος") + +;; (test-conjugation "έχω" "act" "ind" "Ενεστώτας") +;; (test-conjugation "έχω" "act" "ind" "Παρατατίκος") +;; (test-conjugation "έχω" "act" "ind" "Μέλλοντας διαρκείας") +;; (test-conjugation "έχω" "act" "sub" "Ενεστώτας") +;; (test-conjugation "έχω" "act" "imp" "Ενεστώτας") +;; (test-conjugation "έχω" "act" "imp" "Αόριστος") + +;; (test-conjugation "ανοίγω" "act" "ind" "Ενεστώτας") +;; (test-conjugation "ανοίγω" "act" "ind" "Αόριστος") +;; (test-conjugation "ανοίγω" "pas" "ind" "Αόριστος") +;; (test-conjugation "δένω" "act" "ind" "Αόριστος") +;; (test-conjugation "θέλω" "act" "i |