aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2011-06-07 22:15:26 +0300
committerSergey Poznyakoff <gray@gnu.org.ua>2011-06-07 22:19:26 +0300
commit2bae7da012e2125762855ce014e63345ecbbbb18 (patch)
tree61faec7672937f8fc420310da0ff531ce9c6a6bb
parent79447034e393dc5c7f01f3ec0ca1de7ded4f15e6 (diff)
downloadellinika-2bae7da012e2125762855ce014e63345ecbbbb18.tar.gz
ellinika-2bae7da012e2125762855ce014e63345ecbbbb18.tar.bz2
Improve conjugator
* data/dbverb.struct: Remove individual verb definitions. * data/irregular-verbs.xml: New file. * scm/verbop.scm: New file. * scm/Makefile.am: Add rules for verbop. * scm/conjugator.scm: Various fixes. * src/ellinika/elmorph.c (elstr-accent-position): Fix handling of string arguments. (_elstr_set_accent): Fix error message. (elstr-set-accent-character) (elstr-set-accent-character!): New functions.
-rw-r--r--data/dbverb.struct101
-rw-r--r--data/irregular-verbs.xml641
-rw-r--r--scm/.gitignore2
-rw-r--r--scm/Makefile.am7
-rw-r--r--scm/conjugator.scm189
-rw-r--r--scm/verbop.scm676
-rw-r--r--src/ellinika/elmorph.c66
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;
32CREATE TABLE conjugation( 32CREATE TABLE conjugation(
33 conj char(2), -- REL 9 33 conj char(2), -- REL 9
34 voice enum('act','pas'), -- Ενεργητηκή/Μεσοπαθητική 34 voice enum('act','pas'), -- Ενεργητηκή/Μεσοπαθητική
35 mode enum('ind','sub','imp'), 35 mood enum('ind','sub','imp'),
36 tense varchar(128), 36 tense varchar(128),
37 thema enum('pres','aor','sub','synt'), -- Ενεστώτα, Αόριστου, υποτακτικής, syntethic 37 thema enum('pres','aor','sub','synt'), -- Ενεστώτα, Αόριστου, υποτακτικής, syntethic
38 suffix char(32), 38 suffix char(32),
@@ -43,7 +43,7 @@ CREATE TABLE conjugation(
43 auxtense char(32), 43 auxtense char(32),
44 KEY (conj), 44 KEY (conj),
45 KEY (voice), 45 KEY (voice),
46 KEY (mode) 46 KEY (mood)
47); 47);
48 48
49DROP TABLE IF EXISTS participle; 49DROP TABLE IF EXISTS participle;
@@ -243,98 +243,21 @@ CREATE TABLE verb(
243 INDEX(verb) 243 INDEX(verb)
244); 244);
245 245
246DROP TABLE IF EXISTS irregular_root;
247CREATE TABLE irregular_root(
248 verb varchar(128),
249 voice enum('act','pas'), -- Ενεργητηκή/Μεσοπαθητική
250 thema enum('pres','aor','sub'), -- Αόριστος/Υποτακτική
251 root varchar(128)
252);
253
254INSERT INTO verb VALUES
255('βρίσκω', 'A', NULL, '000000', NULL),
256('θέλω','A','η',NULL, NULL),
257('έχω','A',NULL,'000000', NULL),
258('ξέρω','A','η',NULL, NULL),
259('κρεμάω','B1',NULL,NULL,"ασ"),
260('κρεμώ','B1',NULL,NULL,"ασ"),
261('κιτάω','B1',NULL,NULL,"αξ"),
262('κιτώ','B1',NULL,NULL,"αξ"),
263('τραβάω','B1',NULL,NULL,"ηξ"),
264('τραβώ','B1',NULL,NULL,"ηξ"),
265('νικώ','B1',NULL,NULL,NULL)
266;
267
268INSERT INTO irregular_root VALUES
269('βρίσκω','act','aor','βρήκ'),
270('βρίσκω','act','sub','βρ'),
271('βρίσκω','pas','aor','βρέθ'),
272('βρίσκω','pas','sub','βρέθ'),
273('θέλω','act','aor','θέλησ')
274;
275
276DROP TABLE IF EXISTS individual_verb; 246DROP TABLE IF EXISTS individual_verb;
277CREATE TABLE individual_verb( 247CREATE TABLE individual_verb(
278 verb varchar(128), 248 verb varchar(128),
279 voice enum('act','pas'), -- Ενεργητηκή/Μεσοπαθητική 249 voice enum('act','pas'),
280 mode enum('ind','sub','imp'), 250 mood enum('ind','sub','imp'),
281 tense varchar(128), 251 tense varchar(128),
282 ident int(32), 252 ident int(32),
283 INDEX(verb,voice,mode,tense) 253 INDEX(verb,voice,mood,tense)
284); 254);
285 255
286INSERT INTO individual_verb VALUES 256DROP TABLE IF EXISTS irregular_root;
287("είμαι", "act", "ind", "Ενεστώτας", 100), 257CREATE TABLE irregular_root(
288("είμαι", "act", "ind", "Παρατατικός", 101), 258 verb varchar(128),
289("είμαι", "act", "ind", "Μέλλοντας διαρκείας", 102), 259 voice enum('act','pas'), -- Ενεργητηκή/Μεσοπαθητική
290("είμαι", "act", "ind", "Αόριστος", 0), 260 thema enum('pres','aor','sub'), -- Αόριστος/Υποτακτική
291("είμαι", "act", "ind", "Παρακείμενος", 0), 261 root varchar(128)
292("είμαι", "act", "ind", "Υπερσυντέλικος", 0), 262);
293("είμαι", "act", "ind", "Συντελεσμένος μέλλοντας", 0),
294("είμαι", "act", "ind", "Μέλλοντας στιγμιαίος", 0),
295("είμαι", "act", "sub", "Ενεστώτας", 103),
296("είμαι", "act", "sub", "Αόριστος", 0),
297("είμαι", "act", "sub", "Παρακείμενος", 0),
298("είμαι", "act", "imp", "Ενεστώτας", 104),
299("είμαι", "act", "imp", "Αόριστος", 0),
300("είμαι", "act", "imp", "Παρακείμενος", 0),
301("είμαι", "pas", "ind", "Ενεστώτας", 0),
302("είμαι", "pas", "ind", "Παρατατικός", 0),
303("είμαι", "pas", "ind", "Μέλλοντας διαρκείας", 0),
304("είμαι", "pas", "ind", "Αόριστος", 0),
305("είμαι", "pas", "ind", "Παρακείμενος", 0),
306("είμαι", "pas", "ind", "Υπερσυντέλικος", 0),
307("είμαι", "pas", "ind", "Συντελεσμένος μέλλοντας", 0),
308("είμαι", "pas", "ind", "Μέλλοντας στιγμιαίος", 0),
309("είμαι", "pas", "sub", "Ενεστώτας", 0),
310("είμαι", "pas", "sub", "Αόριστος", 0),
311("είμαι", "pas", "sub", "Παρακείμενος", 0),
312("είμαι", "pas", "imp", "Ενεστώτας", 0),
313("είμαι", "pas", "imp", "Αόριστος", 0),
314("είμαι", "pas", "imp", "Παρακείμενος", 0),
315 263
316("έχω", "act", "ind", "Παρατατικός", 105),
317("έχω", "act", "ind", "Αόριστος", 0),
318("έχω", "act", "ind", "Παρακείμενος", 0),
319("έχω", "act", "ind", "Υπερσυντέλικος", 0),
320("έχω", "act", "ind", "Συντελεσμένος μέλλοντας", 0),
321("έχω", "act", "ind", "Μέλλοντας στιγμιαίος", 0),
322("έχω", "act", "sub", "Αόριστος", 0),
323("έχω", "act", "sub", "Παρακείμενος", 0),
324("έχω", "act", "imp", "Αόριστος", 0),
325("έχω", "act", "imp", "Παρακείμενος", 0),
326("έχω", "pas", "ind", "Παρατατικός", 0),
327("έχω", "pas", "ind", "Μέλλοντας διαρκείας", 0),
328("έχω", "pas", "ind", "Αόριστος", 0),
329("έχω", "pas", "ind", "Παρακείμενος", 0),
330("έχω", "pas", "ind", "Υπερσυντέλικος", 0),
331("έχω", "pas", "ind", "Συντελεσμένος μέλλοντας", 0),
332("έχω", "pas", "ind", "Μέλλοντας στιγμιαίος", 0),
333("έχω", "pas", "sub", "Ενεστώτας", 0),
334("έχω", "pas", "sub", "Αόριστος", 0),
335("έχω", "pas", "sub", "Παρακείμενος", 0),
336("έχω", "pas", "imp", "Ενεστώτας", 0),
337("έχω", "pas", "imp", "Αόριστος", 0),
338("έχω", "pas", "imp", "Παρακείμενος", 0),
339("βρίσκω", "act", "imp", "Αόριστος", 106)
340;
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 @@
1<i>
2 <v>
3 <a>είμαι</a>
4 <c>I</c>
5 <act>
6 <ind>
7 <t name="Ενεστώτας">
8 <p n="s" p="1">είμαι</p>
9 <p n="s" p="2">είσαι</p>
10 <p n="s" p="3">είναι</p>
11 <p n="p" p="1">είμαστε</p>
12 <p n="p" p="2">είστε,είσαστε</p>
13 <p n="p" p="3">είναι</p>
14 </t>
15 <t name="Παρατατικός">
16 <p n="s" p="1">ήμουν(α)</p>
17 <p n="s" p="2">ήσουν(α)</p>
18 <p n="s" p="3">ήταν(ε)</p>
19 <p n="p" p="1">ήμαστε,ήμασταν</p>
20 <p n="p" p="2">ήσαστε,ήσασταν</p>
21 <p n="p" p="3">ήταν(ε)</p>
22 </t>
23 <t name="Μέλλοντας διαρκείας">
24 <p n="s" p="1">θα είμαι</p>
25 <p n="s" p="2">θα είσαι</p>
26 <p n="s" p="3">θα είναι</p>
27 <p n="p" p="1">θα είμαστε</p>
28 <p n="p" p="2">θα είστε,θα είσαστε</p>
29 <p n="p" p="3">θα είναι</p>
30 </t>
31 <t name="Αόριστος" />
32 <t name="Παρακείμενος"/>
33 <t name="Υπερσυντέλικος"/>
34 <t name="Συντελεσμένος μέλλοντας"/>
35 <t name="Μέλλοντας στιγμιαίος"/>
36 </ind>
37 <sub>
38 <t name="Ενεστώτας">
39 <p n="s" p="1">να είμαι</p>
40 <p n="s" p="2">να είσαι</p>
41 <p n="s" p="3">να είναι</p>
42 <p n="p" p="1">να είμαστε</p>
43 <p n="p" p="2">να είστε,θα είσαστε</p>
44 <p n="p" p="3">να είναι</p>
45 </t>
46 <t name="Αόριστος" />
47 <t name="Παρακείμενος"/>
48 </sub>
49 <imp>
50 <t name="Ενεστώτας">
51 <p n="s" p="2">να είσαι</p>
52 <p n="p" p="2">να είστε</p>
53 </t>
54 <t name="Αόριστος" />
55 <t name="Παρακείμενος"/>
56 </imp>
57 </act>
58
59 <pas>
60 <ind>
61 <t name="Ενεστώτας"/>
62 <t name="Παρατατικός"/>
63 <t name="Μέλλοντας διαρκείας"/>
64 <t name="Αόριστος" />
65 <t name="Παρακείμενος"/>
66 <t name="Υπερσυντέλικος"/>
67 <t name="Συντελεσμένος μέλλοντας"/>
68 <t name="Μέλλοντας στιγμιαίος"/>
69 </ind>
70 <sub>
71 <t name="Ενεστώτας"/>
72 <t name="Αόριστος" />
73 <t name="Παρακείμενος"/>
74 </sub>
75 <imp>
76 <t name="Ενεστώτας"/>
77 <t name="Αόριστος" />