diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-06-11 13:45:35 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-06-11 13:45:35 +0300 |
commit | 169d0e2887a40e4d845efcaa1e46ec49d02421b7 (patch) | |
tree | c15cbf4bd8b94bd86b4da7253acd1a43e96f57e0 | |
parent | a1a5b7ddd6c3c0532c37551b24fd573a554ac181 (diff) | |
download | ellinika-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.struct | 44 | ||||
-rw-r--r-- | data/irregular-verbs.xml | 18 | ||||
-rw-r--r-- | scm/conjugator.scm | 61 | ||||
-rw-r--r-- | src/ellinika/elmorph.c | 18 | ||||
-rw-r--r-- | src/ellinika/elmorph.h | 1 | ||||
-rw-r--r-- | src/ellinika/syllabificator.c | 4 |
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 | ||
31 | DROP TABLE IF EXISTS conjugation; | 31 | DROP TABLE IF EXISTS conjugation; |
32 | CREATE TABLE conjugation( | 32 | CREATE 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 | ||
49 | DROP TABLE IF EXISTS participle; | 49 | DROP TABLE IF EXISTS participle; |
50 | CREATE TABLE participle ( | 50 | CREATE 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 | ||
216 | INSERT INTO participle VALUES | 238 | INSERT INTO participle VALUES |
217 | -- Συζυγία Α' | 239 | -- Συζυγία Α' |
@@ -236,7 +258,7 @@ INSERT INTO participle VALUES | |||
236 | DROP TABLE IF EXISTS verb; | 258 | DROP TABLE IF EXISTS verb; |
237 | CREATE TABLE verb( | 259 | CREATE 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) |