aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2011-06-11 13:45:35 +0300
committerSergey Poznyakoff <gray@gnu.org.ua>2011-06-11 13:45:35 +0300
commit169d0e2887a40e4d845efcaa1e46ec49d02421b7 (patch)
treec15cbf4bd8b94bd86b4da7253acd1a43e96f57e0
parenta1a5b7ddd6c3c0532c37551b24fd573a554ac181 (diff)
downloadellinika-169d0e2887a40e4d845efcaa1e46ec49d02421b7.tar.gz
ellinika-169d0e2887a40e4d845efcaa1e46ec49d02421b7.tar.bz2
Fixes in conjugator
* data/dbverb.struct: Expand conj to char(32). Fix several bugs in conjugation table. Introduce a new pseudo-conjugation A-depon, for verba deponentia. * data/irregular-verbs.xml: Update. * scm/conjugator.scm (complement-verb-info): Handle A-depon. (apply-flect): Don't try to set accent outside of a word, even if so required by accmap. (conjugate): For synthetic tenses, look up for aoristoy ypotaktikis of the same voice as the requested tense. Use accmap to decide whether a particular person exists in that tense. Fixes in syllabificator. * src/ellinika/elmorph.c (_elstr_set_accent): Fix setting accents on diphthongs. (deftab) <elmorph:iota>: New flag. * src/ellinika/elmorph.h (CHF_IOTA): New flag. * src/ellinika/syllabificator.c (SYL_FLAG_MASK): Add more bits. (next_syllable): Mark syllables with iota with CHF_DIPHTHONG|CHF_IOTA.
-rw-r--r--data/dbverb.struct44
-rw-r--r--data/irregular-verbs.xml18
-rw-r--r--scm/conjugator.scm61
-rw-r--r--src/ellinika/elmorph.c18
-rw-r--r--src/ellinika/elmorph.h1
-rw-r--r--src/ellinika/syllabificator.c4
6 files changed, 111 insertions, 35 deletions
diff --git a/data/dbverb.struct b/data/dbverb.struct
index d51633b..f4a4b33 100644
--- a/data/dbverb.struct
+++ b/data/dbverb.struct
@@ -30,7 +30,7 @@ CREATE TABLE verbflect(
30 30
31DROP TABLE IF EXISTS conjugation; 31DROP TABLE IF EXISTS conjugation;
32CREATE TABLE conjugation( 32CREATE TABLE conjugation(
33 conj char(2), -- REL 9 33 conj char(32), -- REL 9
34 voice enum('act','pas'), -- Ενεργητηκή/Μεσοπαθητική 34 voice enum('act','pas'), -- Ενεργητηκή/Μεσοπαθητική
35 mood enum('ind','sub','imp'), 35 mood enum('ind','sub','imp'),
36 tense varchar(128), 36 tense varchar(128),
@@ -48,7 +48,7 @@ CREATE TABLE conjugation(
48 48
49DROP TABLE IF EXISTS participle; 49DROP TABLE IF EXISTS participle;
50CREATE TABLE participle ( 50CREATE TABLE participle (
51 conj char(2), -- REL 9 51 conj char(32), -- REL 9
52 voice enum('act','pas'), -- Ενεργητηκή/Μεσοπαθητική 52 voice enum('act','pas'), -- Ενεργητηκή/Μεσοπαθητική
53 tense char(32), 53 tense char(32),
54 thema enum('pres','aor','sub'), -- Ενεστώτα, Αόριστου, υποτακτικής 54 thema enum('pres','aor','sub'), -- Ενεστώτα, Αόριστου, υποτακτικής
@@ -109,7 +109,7 @@ INSERT INTO conjugation VALUES
109("A", "act", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"), 109("A", "act", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"),
110-- Προστακτική 110-- Προστακτική
111("A", "act", "imp", "Ενεστώτας", 'pres', NULL, 8, "-3--3-", NULL, NULL, NULL), 111("A", "act", "imp", "Ενεστώτας", 'pres', NULL, 8, "-3--3-", NULL, NULL, NULL),
112("A", "act", "imp", "Αόριστος", 'sub', NULL, 9, "-0--0-", NULL, NULL, NULL), 112("A", "act", "imp", "Αόριστος", 'sub', NULL, 9, "-3--0-", NULL, NULL, NULL),
113("A", "act", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"), 113("A", "act", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"),
114-- Μεσοπαθητική φωνή 114-- Μεσοπαθητική φωνή
115-- Οριστική 115-- Οριστική
@@ -120,16 +120,16 @@ INSERT INTO conjugation VALUES
120("A", "pas", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"), 120("A", "pas", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"),
121("A", "pas", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"), 121("A", "pas", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"),
122("A", "pas", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"), 122("A", "pas", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"),
123("A", "pas", "ind", "Μέλλοντας στιγμιαίος", 'aor', NULL, 15, "111111", "θα", NULL, NULL), 123("A", "pas", "ind", "Μέλλοντας στιγμιαίος", 'aor', NULL, 15, "ffffff", "θα", NULL, NULL),
124-- Υποτακτική 124-- Υποτακτική
125("A", "pas", "sub", "Ενεστώτας", 'pres', NULL, 11, "333333", "να", NULL, NULL), 125("A", "pas", "sub", "Ενεστώτας", 'pres', NULL, 11, "333333", "να", NULL, NULL),
126("A", "pas", "sub", "Αόριστος", 'sub', NULL, 15, "111221", "να", NULL, NULL), 126("A", "pas", "sub", "Αόριστος", 'sub', NULL, 15, "ffffff", "να", NULL, NULL),
127("A", "pas", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "ρτατκ"), 127("A", "pas", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "ς"),
128-- Προστακτική 128-- Προστακτική
129("A", "pas", "imp", "Ενεστώτας", 'pres', NULL, 11, "-3--3-", "να", NULL, NULL), 129("A", "pas", "imp", "Ενεστώτας", 'pres', NULL, 11, "-3--3-", "να", NULL, NULL),
130("A", "pas", "imp", "Αόριστος", 'aor', NULL, 17, "-0----", NULL, NULL, NULL), 130("A", "pas", "imp", "Αόριστος", 'aor', NULL, 17, "-0----", NULL, NULL, NULL),
131("A", "pas", "imp", "Αόριστος", 'aor', NULL, 18, "----2-", NULL, NULL, NULL), 131("A", "pas", "imp", "Αόριστος", 'aor', NULL, 18, "----2-", NULL, NULL, NULL),
132("A", "pas", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός"), 132("A", "pas", "imp", "Παρακείμενος", 'synt', NULL, 0, "-0--0-", "να", "έχω", "Παρατατικός"),
133-- Συζυγία Β΄ - α΄ τάξη 133-- Συζυγία Β΄ - α΄ τάξη
134-- Ενεργητηκή φωνή 134-- Ενεργητηκή φωνή
135-- Οριστική 135-- Οριστική
@@ -191,8 +191,8 @@ INSERT INTO conjugation VALUES
191 191
192("B2", "act", "imp", "Αόριστος", 'aor', "ησ", 9, "-3--3-", NULL, NULL, NULL), 192("B2", "act", "imp", "Αόριστος", 'aor', "ησ", 9, "-3--3-", NULL, NULL, NULL),
193("B2", "act", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"), 193("B2", "act", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"),
194-- Μεσοπαθητική φωνή 194-- Μεσοπαθητική φωνή
195-- Οριστική 195-- Οριστική
196("B2", "pas", "ind", "Ενεστώτας", 'pres', NULL, 34, "ffffff", NULL, NULL, NULL), 196("B2", "pas", "ind", "Ενεστώτας", 'pres', NULL, 34, "ffffff", NULL, NULL, NULL),
197("B2", "pas", "ind", "Παρατατικός", 'pres', NULL, 35, "ffffff", NULL, NULL, NULL), 197("B2", "pas", "ind", "Παρατατικός", 'pres', NULL, 35, "ffffff", NULL, NULL, NULL),
198("B2", "pas", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 34, "ffffff", "θα", NULL, NULL), 198("B2", "pas", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 34, "ffffff", "θα", NULL, NULL),
@@ -211,7 +211,29 @@ INSERT INTO conjugation VALUES
211("B2", "pas", "imp", "Αόριστος", 'aor', NULL, 31, "-2----", NULL, NULL, NULL), 211("B2", "pas", "imp", "Αόριστος", 'aor', NULL, 31, "-2----", NULL, NULL, NULL),
212("B2", "pas", "imp", "Αόριστος", 'aor', NULL, 32, "----2-", NULL, NULL, NULL), 212("B2", "pas", "imp", "Αόριστος", 'aor', NULL, 32, "----2-", NULL, NULL, NULL),
213 213
214("B2", "pas", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός"); 214("B2", "pas", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός"),
215-- Αποθετικά ρήματα
216("A-depon", "act", "sub", "Αόριστος", 'sub', NULL, 1, "000000", "να", NULL, NULL),
217-- Μεσοπαθητική φωνή
218-- Οριστική
219("A-depon", "pas", "ind", "Ενεστώτας", 'pres', NULL, 11, "000300", NULL, NULL, NULL),
220("A-depon", "pas", "ind", "Παρατατικός", 'pres', NULL, 12, "222333", NULL, NULL, NULL),
221("A-depon", "pas", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 11, "333333", "θα", NULL, NULL),
222("A-depon", "pas", "ind", "Αόριστος", 'aor', NULL, 2, "000000", NULL, NULL, NULL),
223("A-depon", "pas", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"),
224("A-depon", "pas", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"),
225("A-depon", "pas", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"),
226("A-depon", "pas", "ind", "Μέλλοντας στιγμιαίος", 'sub', NULL, 15, "000000", "θα", NULL, NULL),
227-- Υποτακτική
228("A-depon", "pas", "sub", "Ενεστώτας", 'pres', NULL, 11, "333333", "να", NULL, NULL),
229("A-depon", "pas", "sub", "Αόριστος", 'sub', NULL, 1, "000000", "να", NULL, NULL),
230("A-depon", "pas", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"),
231-- Προστακτική -- FIXME
232("A-depon", "pas", "imp", "Ενεστώτας", 'pres', NULL, 11, "-3--3-", "να", NULL, NULL),
233("A-depon", "pas", "imp", "Αόριστος", 'aor', NULL, 17, "-0----", NULL, NULL, NULL),
234("A-depon", "pas", "imp", "Αόριστος", 'aor', NULL, 18, "----2-", NULL, NULL, NULL),
235("A-depon", "pas", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός")
236;
215 237
216INSERT INTO participle VALUES 238INSERT INTO participle VALUES
217-- Συζυγία Α' 239-- Συζυγία Α'
@@ -236,7 +258,7 @@ INSERT INTO participle VALUES
236DROP TABLE IF EXISTS verb; 258DROP TABLE IF EXISTS verb;
237CREATE TABLE verb( 259CREATE TABLE verb(
238 verb varchar(128), -- REL 10 260 verb varchar(128), -- REL 10
239 conj char(2), -- REL 9 261 conj char(32), -- REL 9
240 augment char(1), 262 augment char(1),
241 accmap char(7), 263 accmap char(7),
242 suffix_aor_path varchar(2), 264 suffix_aor_path varchar(2),
diff --git a/data/irregular-verbs.xml b/data/irregular-verbs.xml
index d056f7d..697b2cd 100644
--- a/data/irregular-verbs.xml
+++ b/data/irregular-verbs.xml
@@ -295,7 +295,7 @@
295 <root theme="aor">δωσ</root> 295 <root theme="aor">δωσ</root>
296 </act> 296 </act>
297 </v> 297 </v>
298 298<!--
299 <v> 299 <v>
300 <a>έρχομαι</a> 300 <a>έρχομαι</a>
301 <c>A</c> 301 <c>A</c>
@@ -320,7 +320,21 @@
320 <root theme="sub">ερθ</root> 320 <root theme="sub">ερθ</root>
321 </pas> 321 </pas>
322 </v> 322 </v>
323 323-->
324
325 <v>
326 <a>έρχομαι</a>
327 <c>A-depon</c>
328 <act>
329 <root theme="aor">έρθ</root>
330 </act>
331 <pas>
332 <root theme="aor">ήρθ</root>
333 <root theme="sub">ερθ</root>
334 </pas>
335 </v>
336
337
324<!-- FIXME 338<!-- FIXME
325 έρχομαι 339 έρχομαι
326 κάθομαι 340 κάθομαι
diff --git a/scm/conjugator.scm b/scm/conjugator.scm
index c2c2171..7783d3a 100644
--- a/scm/conjugator.scm
+++ b/scm/conjugator.scm
@@ -1,6 +1,7 @@
1(use-modules (ellinika elmorph) 1(use-modules (ellinika elmorph)
2 (ellinika i18n) 2 (ellinika i18n)
3 (ellinika cgi) 3 (ellinika cgi)
4 (ellinika tenses)
4 (xmltools dict) 5 (xmltools dict)
5 (gamma sql)) 6 (gamma sql))
6 7
@@ -170,6 +171,16 @@ WHERE verb='" verb "' AND voice='" voice "' AND thema='" thema "'")))
170 (thema-aoristoy-mesapathitikis root))) 171 (thema-aoristoy-mesapathitikis root)))
171 (else 172 (else
172 #f)))) 173 #f))))
174 ((string=? (verb-info #:conj vinfo) "A-depon")
175 (let ((root (verb-A-root elverb)))
176 (cond
177 ((string=? thema "pres")
178 (verb-info-set! #:attested vinfo 'root)
179 root)
180 ((or (string=? thema "aor") (string=? thema "sub"))
181 #f) ; FIXME
182 (else
183 #f))))
173 ((string=? (verb-info #:conj vinfo) "B1") 184 ((string=? (verb-info #:conj vinfo) "B1")
174 (let ((root (if (elstr-suffix? elverb "άω") 185 (let ((root (if (elstr-suffix? elverb "άω")
175 (elstr-trim elverb -2) 186 (elstr-trim elverb -2)
@@ -295,6 +306,7 @@ WHERE c.conj='" conj "' AND c.voice='" voice "' AND c.mood='" mood
295 (+ (- len syl) 1)))) 306 (+ (- len syl) 1))))
296 307
297(define (apply-flect conj vinfo verb) 308(define (apply-flect conj vinfo verb)
309; (format #t "VINFO ~A~%" vinfo)
298 (let ((root (verb-info #:root vinfo)) 310 (let ((root (verb-info #:root vinfo))
299 (suffix (let ((s (conj-info #:suffix conj))) 311 (suffix (let ((s (conj-info #:suffix conj)))
300 (if s 312 (if s
@@ -344,12 +356,17 @@ WHERE c.conj='" conj "' AND c.voice='" voice "' AND c.mood='" mood
344 #f) 356 #f)
345 ((char-numeric? acc)