aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cgi-bin/conj.scm42
-rw-r--r--src/ellinika/conjugator.scm142
-rwxr-xr-xsrc/ellinika/tests/conj-test39
-rw-r--r--src/ellinika/tests/conj/anoigv.scm1
-rw-r--r--src/ellinika/tests/conj/bastav.scm3
-rw-r--r--src/ellinika/tests/conj/lev.scm10
-rw-r--r--src/ellinika/tests/conj/milav.scm5
-rw-r--r--src/ellinika/tests/conj/ntynv.scm1
-rw-r--r--src/ellinika/tests/conj/pav.scm7
-rw-r--r--src/ellinika/tests/samples/aggelv28
-rw-r--r--src/ellinika/tests/samples/agv28
-rw-r--r--src/ellinika/tests/samples/anebainv28
-rw-r--r--src/ellinika/tests/samples/anoigv28
-rw-r--r--src/ellinika/tests/samples/apomenv28
-rw-r--r--src/ellinika/tests/samples/aresv28
-rw-r--r--src/ellinika/tests/samples/ballv28
-rw-r--r--src/ellinika/tests/samples/bastav49
-rw-r--r--src/ellinika/tests/samples/bastv49
-rw-r--r--src/ellinika/tests/samples/bgainv28
-rw-r--r--src/ellinika/tests/samples/blepv28
-rw-r--r--src/ellinika/tests/samples/briskv28
-rw-r--r--src/ellinika/tests/samples/denv28
-rw-r--r--src/ellinika/tests/samples/diabazv28
-rw-r--r--src/ellinika/tests/samples/eimai28
-rw-r--r--src/ellinika/tests/samples/erxomai37
-rw-r--r--src/ellinika/tests/samples/exv28
-rw-r--r--src/ellinika/tests/samples/kauomai28
-rw-r--r--src/ellinika/tests/samples/kremav32
-rw-r--r--src/ellinika/tests/samples/lev36
-rw-r--r--src/ellinika/tests/samples/milav32
-rw-r--r--src/ellinika/tests/samples/nikav32
-rw-r--r--src/ellinika/tests/samples/nikv32
-rw-r--r--src/ellinika/tests/samples/ntynv28
-rw-r--r--src/ellinika/tests/samples/pav2
-rw-r--r--src/ellinika/tests/samples/phgainv28
-rw-r--r--src/ellinika/tests/samples/pinv28
-rw-r--r--src/ellinika/tests/samples/trabav49
-rw-r--r--src/ellinika/tests/samples/uelv28
38 files changed, 1032 insertions, 60 deletions
diff --git a/src/cgi-bin/conj.scm4 b/src/cgi-bin/conj.scm4
index a8d84f1..83fb846 100644
--- a/src/cgi-bin/conj.scm4
+++ b/src/cgi-bin/conj.scm4
@@ -381,13 +381,13 @@ ifelse(IFACE,[CGI],(cgi:init))
(for-each
(lambda (flag)
(case flag
((class)
(print-footnote "class-na" "*"
"Conjugation class of this verb is not attested"))
- ((root)
+ ((stem)
(print-footnote "stem-na" "?"
(_ "Το θέμα αυτού του χρόνου δεν επιβεβαιώνεται από τη βάση δεδοµένων")))))
unattested)
(display "</div>"))
(define (conj-html)
diff --git a/src/ellinika/conjugator.scm b/src/ellinika/conjugator.scm
index bffc6be..eae4ad0 100644
--- a/src/ellinika/conjugator.scm
+++ b/src/ellinika/conjugator.scm
@@ -34,13 +34,13 @@
;; (class verb flag assoc)
;; class - Verb class
;; verb - the verb itself
;; properties - associative list of properties
;; attested
-(define (verb-set! verb key value)
+(define (vinfo-set! verb key value)
; (format #t "VERB ~A KEY ~A VALUE ~A~%" verb key value)
(case key
((#:conj)
(list-set! verb 0 value))
((#:verb)
(list-set! verb 1 value))
@@ -57,13 +57,13 @@
(set-cdr! container value)
(list-set! verb 2 (append (list-ref verb 2)
(list
(cons key value)))))))))
-(define (verb-get verb key)
+(define (vinfo-get verb key)
(case key
((#:conj)
(list-ref verb 0))
((#:verb)
(list-ref verb 1))
((#:attested)
@@ -100,14 +100,14 @@
(list (car rest) verb '() '())))))
(define (load-proplist vinfo voice mood tense)
(let ((verbprop (ellinika:sql-query
"SELECT property,value FROM verbtense WHERE \
verb=\"~A\" AND voice=\"~A\" AND mood=\"~A\" AND tense=\"~A\""
- (verb-get vinfo #:verb) voice mood tense)))
- (verb-set!
+ (vinfo-get vinfo #:verb) voice mood tense)))
+ (vinfo-set!
vinfo #:proplist
(let loop ((inlist (if (null? verbprop)
'()
(map
(lambda (elt)
(let ((name (car elt))
@@ -191,12 +191,17 @@ verb=\"~A\" AND voice=\"~A\" AND mood=\"~A\" AND tense=\"~A\""
(elstr-append stem
(elstr-slice stem-aor -2 1)
"φτ"))
(else
(elstr-append stem "ηθ")))))
+(define (thema-aoristou-prostaktikhs stem)
+ (if (elstr-suffix? stem "β" "γ" "θ" "ν")
+ (elstr-append stem "ε")
+ stem))
+
(define (lookup-verb-info verb voice thema)
(ellinika:sql-query
"SELECT stem FROM irregular_stem \
WHERE verb=\"~A\" AND voice=\"~A\" AND thema=\"~A\""
verb voice thema))
@@ -207,66 +212,72 @@ WHERE verb=\"~A\" AND voice=\"~A\" AND thema=\"~A\""
((elstr-suffix? verb "ομαι")
(elstr-trim verb -4))
(else
(throw 'conjugator-error 'conjugator-error-input
"cannot handle ~A" (list (force-string verb))))))
+;; FIXME: Use vinfo #:verb instead of the verb argument.
(define (complement-verb-info vinfo verb voice thema)
; (format #t "COMPLEMENT ~A~%" vinfo)
(let ((elverb (string->elstr verb))
(result (let ((tmpres (lookup-verb-info verb voice thema)))
(if (and (null? tmpres) (string=? thema "sub"))
(lookup-verb-info verb voice "aor")
tmpres))))
- (verb-set! vinfo #:stem
+ (vinfo-set! vinfo #:stem
(cond
((not (null? result))
- (verb-set! vinfo #:attested 'stem)
+ (vinfo-set! vinfo #:attested 'stem)
(map car result))
- ((string=? (verb-get vinfo #:conj) "A")
+ ((string=? (vinfo-get vinfo #:conj) "A")
(let ((stem (verb-A-stem elverb)))
(cond
((string=? thema "pres")
- (verb-set! vinfo #:attested 'stem)
+ (vinfo-set! vinfo #:attested 'stem)
stem)
((or (string=? thema "aor") (string=? thema "sub"))
- (if (string=? voice "act")
- (elstr-thema-aoristoy stem)
- (thema-aoristoy-mesapathitikis-A stem)))
+ (cond
+ ((string=? voice "act")
+ (elstr-thema-aoristoy stem))
+ ((string=? voice "pas")
+ (thema-aoristoy-mesapathitikis-A stem))
+ (else
+ (throw 'conjugator-error 'conjugator-error-db
+ "invalid voice ~A" (list voice)))))
(else
#f))))
- ((string=? (verb-get vinfo #:conj) "A-depon")
+ ((string=? (vinfo-get vinfo #:conj) "A-depon")
(let ((stem (verb-A-stem elverb)))
(cond
((string=? thema "pres")
- (verb-set! vinfo #:attested 'stem)
+ (vinfo-set! vinfo #:attested 'stem)
stem)
((or (string=? thema "aor") (string=? thema "sub"))
#f) ; FIXME
(else
#f))))
- ((string=? (verb-get vinfo #:conj) "B1")
+ ((string=? (vinfo-get vinfo #:conj) "B1")
(let ((stem (if (elstr-suffix? elverb "άω")
(elstr-trim elverb -2)
(elstr-trim elverb -1))))
(cond
((or (string=? voice "act") (string=? thema "pres"))
- (verb-set! vinfo #:attested 'stem)
+ (vinfo-set! vinfo #:attested 'stem)
stem)
((or (string=? thema "aor") (string=? thema "sub"))
(map
(lambda (aor)
(thema-aoristoy-mesapathitikis-B stem aor))
- (conjugate verb "act" "ind" "Αόριστος")))
+ (conjugate vinfo "act" "ind" "Αόριστος")))
(else
#f))))
- ((string=? (verb-get vinfo #:conj) "B2")
+ ((string=? (vinfo-get vinfo #:conj) "B2")
(let ((stem (elstr-trim elverb -1)))
(cond
((or (string=? voice "act") (string=? thema "pres"))
- (verb-set! vinfo #:attested 'stem)
+ (vinfo-set! vinfo #:attested 'stem)
stem)
((or (string=? thema "aor") (string=? thema "sub"))
(elstr-append stem "ηθ")) ;; FIXME: guesswork
(else
#f))))
(else
@@ -340,70 +351,70 @@ AND c.tense=\"~A\" AND c.flect = f.ident ORDER by fold"
(len (elstr-number-of-syllables str)))
(if (= syl 0)
syl
(+ (- len syl) 1))))
;; (define (get-property conj vinfo key default)
-;; (if ((override (verb-get vinfo
+;; (if ((override (vinfo-get vinfo
;; (symbol->keyword
;; (string->symbol
;; (string-append
;; (symbol->string (keyword->symbol key))
;; "-override"))))))
;; (if override
;; (let ((t (conj-info key conj)))
;; (if t
-;; (or (verb-get vinfo key)
+;; (or (vinfo-get vinfo key)
;; t)
-;; (or (verb-get vinfo key)
+;; (or (vinfo-get vinfo key)
;; (conj-info key conj)
;; default))))))
(define (get-suffix conj vinfo)
- (let ((ret (let ((override (verb-get vinfo #:override)))
+ (let ((ret (let ((override (vinfo-get vinfo #:override)))
(if (and override
(member "suffix" override))
(let ((t (conj-info #:suffix conj)))
(if t
- (or (verb-get vinfo #:suffix)
+ (or (vinfo-get vinfo #:suffix)
t)
""))
- (or (verb-get vinfo #:suffix)
+ (or (vinfo-get vinfo #:suffix)
(conj-info #:suffix conj)
"")))))
(if (list? ret) ret (list ret))))
(define (get-accmap conj vinfo)
- (let ((override (verb-get vinfo #:override)))
+ (let ((override (vinfo-get vinfo #:override)))
(if (and override
(member "accmap" override))
(let ((t (conj-info #:accmap conj)))
(if t
- (or (verb-get vinfo #:accmap)
+ (or (vinfo-get vinfo #:accmap)
t)))
- (or (verb-get vinfo #:accmap)
+ (or (vinfo-get vinfo #:accmap)
(conj-info #:accmap conj)
"000000"))))
(define (apply-flect conj vinfo verb stem suffix)
; (format #t "VINFO ~A~%" vinfo)
(let ((accmap (string->list (get-accmap conj vinfo)))
(augment ""))
; (format #t "STEM ~A, ACCMAP ~S, SUFFIX: ~A~%" stem accmap suffix)
(cond
((> (length accmap) 6)
(set! accmap (list-head accmap 6))
- (set! augment (or (verb-get vinfo #:augment) "ε"))))
-; (format #t "AUGMENT ~A ~A~%" vinfo (verb-get vinfo #:augment))
+ (set! augment (or (vinfo-get vinfo #:augment) "ε"))))
+; (format #t "AUGMENT ~A ~A~%" vinfo (vinfo-get vinfo #:augment))
(let ((forms
(map
(lambda (flect acc person)
(cond
- ((verb-get vinfo (symbol->keyword
+ ((vinfo-get vinfo (symbol->keyword
(string->symbol
(number->string person)))) =>
(lambda (personal-form)
personal-form))
((not flect) #f)
((char=? acc #\0)
@@ -465,44 +476,51 @@ AND c.tense=\"~A\" AND c.flect = f.ident ORDER by fold"
(string-append
(conj-info #:particle conj) " " (force-string w))
#f))
forms)
(map force-string forms)))))
-(define (individual-verb verb voice mood tense)
+(define (individual-verb vinfo voice mood tense)
(let ((res (ellinika:sql-query
"SELECT f.sing1,f.sing2,f.sing3,f.plur1,f.plur2,f.plur3\
FROM individual_verb i,verbflect f\
WHERE i.verb=\"~A\" AND i.voice=\"~A\" AND i.mood=\"~A\"\
AND i.tense=\"~A\" AND i.ident=f.ident"
- verb voice mood tense)))
- (if (not (null? res))
- (append (car res)
+ (vinfo-get vinfo #:verb) voice mood tense)))
+ (if (null? res)
+ #f
+ (map
+ (lambda (elt)
+ (append
+ elt
(list "I"
- '(class stem)))
- #f)))
+ '(class stem))))
+ res))))
(define (merge-conjugated-forms lista listb)
(map
(lambda (a b)
(or a b))
lista listb))
-(define (conjugate verb voice mood tense . rest)
+(define (conjugate vinfo voice mood tense . rest)
(cond
- ((individual-verb verb voice mood tense) =>
+ ((individual-verb vinfo voice mood tense) =>
(lambda (res)
- (list res)))
+ res))
(else
- (let* ((vinfo (load-verb-info verb voice mood tense))
- (conj-list (get-conj-info (or
- (verb-get vinfo #:class)
- (verb-get vinfo #:conj))
+ (let ((vinfo (copy-tree vinfo)))
+ (if (not (member #:noload rest))
+ (load-proplist vinfo voice mood tense))
+; (format #t "VINFO ~A~%" vinfo)
+ (let ((conj-list (get-conj-info (or
+ (vinfo-get vinfo #:class)
+ (vinfo-get vinfo #:conj))
voice mood tense))
- (verb (force-string (verb-get vinfo #:verb))))
- (format #t "VINFO ~A~%" vinfo)
+ (verb (force-string (vinfo-get vinfo #:verb))))
+; (format #t "VINFO ~A~%" vinfo)
(if (not conj-list)
(list (list #f #f #f #f #f #f #f #f))
(map car
(fold
(lambda (elt prev)
; (format #t "ELT ~A~%" elt)
@@ -532,13 +550,13 @@ AND c.tense=\"~A\" AND c.flect = f.ident ORDER by fold"
(let ((t (conjugation:table x)))
(if t
(cons
(list-ref t 2)
(conjugation:attested x))
#f)))
- (conjugate verb voice "sub" "Αόριστος"
+ (conjugate vinfo voice "sub" "Αόριστος"
#:nopart)))
(part (conj-info #:particle conj))
(fold-id (conj-info #:fold conj)))
(fold
(lambda (param prev)
(if (not param)
@@ -555,19 +573,21 @@ AND c.tense=\"~A\" AND c.flect = f.ident ORDER by fold"
(elstr->string
(if part
(elstr-append part " " aux " "
aparemfato)
(elstr-append aux " " aparemfato)))))
(conjugation:table
- (car (conjugate (conj-info #:aux conj)
+ (car (conjugate
+ (conjugator:open-verb
+ (conj-info #:aux conj))
"act" "ind"
(conj-info #:auxtense conj))))
- (string->list (or (verb-get vinfo #:accmap)
+ (string->list (or (vinfo-get vinfo #:accmap)
(conj-info #:accmap conj)
"000000")))
- (list (verb-get vinfo #:conj)
+ (list (vinfo-get vinfo #:conj)
attested))
fold-id)
prev))))
prev
aparemfato-list)))
((and (string=? (conj-info #:thema conj) "synt")
@@ -583,19 +603,20 @@ AND c.tense=\"~A\" AND c.flect = f.ident ORDER by fold"
(elstr->string (elstr-append part " " t)))
(list-head tenses 6))
(list-tail tenses 6))
(conj-info #:fold conj))
prev))
prev
- (conjugate verb voice "ind"
- (conj-info #:auxtense conj)))))
+ (conjugate vinfo voice "ind"
+ (conj-info #:auxtense conj) #:noload))))
(else
(let ((vinfo (copy-tree vinfo)))
- (if (verb-get vinfo #:stem)
- (verb-set! vinfo #:attested 'stem)
- (let ((thema (string-split (conj-info #:thema conj) #\:)))
+ (if (vinfo-get vinfo #:stem)
+ (vinfo-set! vinfo #:attested 'stem)
+ (let ((thema (string-split
+ (conj-info #:thema conj) #\:)))
; (format #t "THEMA ~A~%" thema)
(complement-verb-info vinfo verb
(if (null? (cdr thema))
voice
(car (cdr thema)))
(car thema))))
@@ -605,26 +626,29 @@ AND c.tense=\"~A\" AND c.flect = f.ident ORDER by fold"
(append
(fold
(lambda (stem prev)
(cons
(cons
(append (apply-flect conj vinfo verb stem suffix)
- (list (verb-get vinfo #:conj)
- (verb-get vinfo #:attested)))
+ (list (vinfo-get vinfo #:conj)
+ (vinfo-get vinfo #:attested)))
(conj-info #:fold conj))
prev))
'()
- (verb-get vinfo #:stem))
+ (vinfo-get vinfo #:stem))
prev))
prev
(get-suffix conj vinfo))))))
'()
- conj-list))))))))
+ conj-list)))))))))
+
+(define-public (conjugator:open-verb verb)
+ (create-basic-verb-info verb))
(define-public (conjugator verb voice mood tense)
- (conjugate verb voice mood tense))
+ (conjugate (conjugator:open-verb verb) voice mood tense))
(define-public (conjugation:table conj)
(cond
((not conj)
#f)
(else
diff --git a/src/ellinika/tests/conj-test b/src/ellinika/tests/conj-test
new file mode 100755
index 0000000..fbacae1
--- /dev/null
+++ b/src/ellinika/tests/conj-test
@@ -0,0 +1,39 @@
+#! /bin/sh
+
+testdir=conj.dir
+failures=0
+
+testcon() {
+ if guile -s conj/$1.scm | diff -pu samples/$1 - > $testdir/$1.diff
+ then
+ status=PASS
+ rm $testdir/$1.diff
+ else
+ status=FAIL
+ failures=1
+ fi
+ echo "$1: $status"
+}
+
+if ! test -d $testdir; then
+ mkdir $testdir || exit 2
+fi
+
+if test $# -gt 0; then
+ for verb in $*
+ do
+ testcon $verb
+ done
+else
+ find samples -type f -printf '%f\n' |
+ while read verb
+ do
+ testcon $verb
+ done
+fi
+
+if test $failures -eq 0; then
+ rmdir $testdir
+fi
+
+exit $failures
diff --git a/src/ellinika/tests/conj/anoigv.scm b/src/ellinika/tests/conj/anoigv.scm
index 4ba6e12..cb42dba 100644
--- a/src/ellinika/tests/conj/anoigv.scm
+++ b/src/ellinika/tests/conj/anoigv.scm
@@ -1,3 +1,4 @@
(use-modules ((ellinika test-conjugation)))
(test-conjugation:verb "ανοίγω")
+;(test-conjugation:tense "ανοίγω" "pas" "imp" "Αόριστος")
diff --git a/src/ellinika/tests/conj/bastav.scm b/src/ellinika/tests/conj/bastav.scm
new file mode 100644
index 0000000..bdf5a5d
--- /dev/null
+++ b/src/ellinika/tests/conj/bastav.scm
@@ -0,0 +1,3 @@
+(use-modules ((ellinika test-conjugation)))
+
+(test-conjugation:verb "βαστάω")
diff --git a/src/ellinika/tests/conj/lev.scm b/src/ellinika/tests/conj/lev.scm
new file mode 100644
index 0000000..c42ad93
--- /dev/null
+++ b/src/ellinika/tests/conj/lev.scm
@@ -0,0 +1,10 @@
+(use-modules ((ellinika test-conjugation)))
+
+(test-conjugation:verb "λέω")
+;(test-conjugation:tense "λέω" "pas" "ind" "Αόριστος")
+;(test-conjugation:tense "λέω" "act" "ind" "Ενεστώτας")
+;(test-conjugation:tense "λέω" "act" "ind" "Παρακείμενος")
+;(test-conjugation:tense "λέω" "act" "ind" "Μέλλοντας διαρκείας")
+;(test-conjugation:tense "λέω" "act" "ind" "Παρατατικός")
+;(test-conjugation:tense "λέω" "pas" "ind" "Μέλλοντας στιγμιαίος")
+;(test-conjugation:tense "λέω" "pas" "imp" "Αόριστος") \ No newline at end of file
diff --git a/src/ellinika/tests/conj/milav.scm b/src/ellinika/tests/conj/milav.scm
new file mode 100644
index 0000000..413dd72
--- /dev/null
+++ b/src/ellinika/tests/conj/milav.scm
@@ -0,0 +1,5 @@
+(use-modules ((ellinika test-conjugation)))
+
+(test-conjugation:verb "μιλάω")
+;(test-conjugation:tense "μιλάω" "act" "ind" "Μέλλοντας διαρκείας")
+;(test-conjugation:tense "μιλάω" "act" "ind" "Ενεστώτας")
diff --git a/src/ellinika/tests/conj/ntynv.scm b/src/ellinika/tests/conj/ntynv.scm
index 1fd1545..42ba15b 100644
--- a/src/ellinika/tests/conj/ntynv.scm
+++ b/src/ellinika/tests/conj/ntynv.scm
@@ -1,3 +1,4 @@
(use-modules (ellinika test-conjugation))
(test-conjugation:verb "ντύνω")
+;(test-conjugation:tense "ντύνω" "act" "imp" "Αόριστος") \ No newline at end of file
diff --git a/src/ellinika/tests/conj/pav.scm b/src/ellinika/tests/conj/pav.scm
new file mode 100644
index 0000000..d438e56
--- /dev/null
+++ b/src/ellinika/tests/conj/pav.scm
@@ -0,0 +1,7 @@
+(use-modules ((ellinika test-conjugation)))
+
+;(test-conjugation:verb "πάω")
+(test-conjugation:tense "πάω" "act" "ind" "Ενεστώτας")
+;(test-conjugation:tense "πάω" "act" "ind" "Μέλλοντας στιγμιαίος")
+;(test-conjugation:tense "πάω" "act" "sub" "Ενεστώτας")
+;(test-conjugation:tense "πάω" "act" "sub" "Αόριστος")
diff --git a/src/ellinika/tests/samples/aggelv b/src/ellinika/tests/samples/aggelv
new file mode 100644
index 0000000..348ac81
--- /dev/null
+++ b/src/ellinika/tests/samples/aggelv
@@ -0,0 +1,28 @@
+αγγέλω Ενεργητηκή φωνή/Οριστική/Ενεστώτας: (αγγέλω αγγέλεις αγγέλει αγγέλουμε αγγέλετε αγγέλουν(ε))
+αγγέλω Ενεργητηκή φωνή/Οριστική/Παρατατικός: (άγγελα άγγελες άγγελε αγγέλαμε αγγέλατε άγγελαν)
+αγγέλω Ενεργητηκή φωνή/Οριστική/Μέλλοντας διαρκείας: (θα αγγέλω θα αγγέλεις θα αγγέλει θα αγγέλουμε θα αγγέλετε θα αγγέλουν(ε))
+αγγέλω Ενεργητηκή φωνή/Οριστική/Αόριστος: (άγγειλα άγγειλες άγγειλε αγγείλαμε αγγείλατε άγγειλαν)
+αγγέλω Ενεργητηκή φωνή/Οριστική/Παρακείμενος: (έχω αγγείλει έχεις αγγείλει έχει αγγείλει έχουμε αγγείλει έχετε αγγείλει έχουν(ε) αγγείλει)
+αγγέλω Ενεργητηκή φωνή/Οριστική/Υπερσυντέλικος: (είχα αγγείλει είχες αγγείλει είχα αγγείλει είχαμε αγγείλει είχατε αγγείλει είχαν αγγείλει)
+αγγέλω Ενεργητηκή φωνή/Οριστική/Συντελεσμένος μέλλοντας: (θα έχω αγγείλει θα έχεις αγγείλει θα έχει αγγείλει θα έχουμε αγγείλει θα έχετε αγγείλει θα έχουν(ε) αγγείλει)
+αγγέλω Ενεργητηκή φωνή/Οριστική/Μέλλοντας στιγμιαίος: (θα αγγείλω θα αγγείλεις θα αγγείλει θα αγγείλουμε θα αγγείλετε θα αγγείλουν(ε))
+αγγέλω Ενεργητηκή φωνή/Υποτακτική/Ενεστώτας: (να αγγέλω να αγγέλεις να αγγέλει να αγγέλουμε να αγγέλετε να αγγέλουν(ε))
+αγγέλω Ενεργητηκή φωνή/Υποτακτική/Αόριστος: (να αγγείλω να αγγείλεις να αγγείλει να αγγείλουμε να αγγείλετε να αγγείλουν(ε))
+αγγέλω Ενεργητηκή φωνή/Υποτακτική/Παρακείμενος: (να έχω αγγείλει να έχεις αγγείλει να έχει αγγείλει να έχουμε αγγείλει να έχετε αγγείλει να έχουν(ε) αγγείλει)
+αγγέλω Ενεργητηκή φωνή/Προστακτική/Ενεστώτας: (#f άγγελε #f #f αγγέλετε #f)
+αγγέλω Ενεργητηκή φωνή/Προστακτική/Αόριστος: (#f άγγειλε #f #f αγγείλτε #f)
+αγγέλω Ενεργητηκή φωνή/Προστακτική/Παρακείμενος: (#f να έχεις αγγείλει #f #f να έχετε αγγείλει #f)
+αγγέλω Μεσοπαθητική φωνή/Οριστική/Ενεστώτας: (αγγέλομαι αγγέλεσαι αγγέλεται αγγελόμαστε αγγέλεστε αγγέλονται)
+αγγέλω Μεσοπαθητική φωνή/Οριστική/Παρατατικός: (αγγελομούν αγγελοσούν αγγελόταν αγγελόμαστε αγγελόσαστε αγγέλονταν)
+αγγέλω Μεσοπαθητική φωνή/Οριστική/Μέλλοντας διαρκείας: (θα αγγέλομαι θα αγγέλεσαι θα αγγέλεται θα αγγελόμαστε θα αγγέλεστε θα αγγέλονται)
+αγγέλω Μεσοπαθητική φωνή/Οριστική/Αόριστος: !(αγγέλθηκα αγγέλθηκες αγγέλθηκε αγγελθήκαμε αγγελθήκατε αγγέλθηκαν)
+αγγέλω Μεσοπαθητική φωνή/Οριστική/Παρακείμενος: !(έχω αγγελθεί έχεις αγγελθεί έχει αγγελθεί έχουμε αγγελθεί έχετε αγγελθεί έχουν(ε) αγγελθεί)
+αγγέλω Μεσοπαθητική φωνή/Οριστική/Υπερσυντέλικος: !(είχα αγγελθεί είχες αγγελθεί είχα αγγελθεί είχαμε αγγελθεί είχατε αγγελθεί είχαν αγγελθεί)
+αγγέλω Μεσοπαθητική φωνή/Οριστική/Συντελεσμένος μέλλοντας: !(θα έχω αγγελθεί θα έχεις αγγελθεί θα έχει αγγελθεί θα έχουμε αγγελθεί θα έχετε αγγελθεί θα έχουν(ε) αγγελθεί)
+αγγέλω Μεσοπαθητική φωνή/Οριστική/Μέλλοντας στιγμιαίος: !(θα αγγελθώ θα αγγελθείς θα αγγελθεί θα αγγελθούμε θα αγγελθείτε θα αγγελθούν(ε))
+αγγέλω Μεσοπαθητική φωνή/Υποτακτική/Ενεστώτας: (να αγγέλομαι να αγγέλεσαι να αγγέλεται να αγγελόμαστε να αγγέλεστε να αγγέλονται)
+αγγέλω Μεσοπαθητική φωνή/Υποτακτική/Αόριστος: !(να αγγελθώ να αγγελθείς να αγγελθεί να αγγελθούμε να αγγελθείτε να αγγελθούν(ε))
+αγγέλω Μεσοπαθητική φωνή/Υποτακτική/Παρακείμενος: !(να έχω αγγελθεί να έχεις αγγελθεί να έχει αγγελθεί να έχουμε αγγελθεί να έχετε αγγελθεί να έχουν(ε) αγγελθεί)
+αγγέλω Μεσοπαθητική φωνή/Προστακτική/Ενεστώτας: (#f να αγγέλεσαι #f #f να αγγέλεστε #f)
+αγγέλω Μεσοπαθητική φωνή/Προστακτική/Αόριστος: !(#f αγγείλου #f #f αγγελθείτε #f)
+αγγέλω Μεσοπαθητική φωνή/Προστακτική/Παρακείμενος: !(#f να έχεις αγγελθεί #f #f να έχετε αγγελθεί #f)
diff --git a/src/ellinika/tests/samples/agv b/src/ellinika/tests/samples/agv
new file mode 100644
index 0000000..0fd9fa1
--- /dev/null
+++ b/src/ellinika/tests/samples/agv
@@ -0,0 +1,28 @@
+άγω Ενεργητηκή φωνή/Οριστική/Ενεστώτας: (άγω άγεις άγει άγουμε άγετε άγουν(ε))
+άγω Ενεργητηκή φωνή/Οριστική/Παρατατικός: (έαγα έαγες έαγε άγαμε άγατε έαγαν)
+άγω Ενεργητηκή φωνή/Οριστική/Μέλλοντας διαρκείας: (θα άγω θα άγεις θα άγει θα άγουμε θα άγετε θα άγουν(ε))
+άγω Ενεργητηκή φωνή/Οριστική/Αόριστος: (ήγαγα ήγαγες ήγαγε ηγάγαμε ηγάγατε ήγαγαν)
+άγω Ενεργητηκή φωνή/Οριστική/Παρακείμενος: (έχω αγάγει έχεις αγάγει έχει αγάγει έχουμε αγάγει έχετε αγάγει έχουν(ε) αγάγει)
+άγω Ενεργητηκή φωνή/Οριστική/Υπερσυντέλικος: (είχα αγάγει είχες αγάγει είχα αγάγει είχαμε αγάγει είχατε αγάγει είχαν αγάγει)
+άγω Ενεργητηκή φωνή/Οριστική/Συντελεσμένος μέλλοντας: (θα έχω αγάγει θα έχεις αγάγει θα έχει αγάγει θα έχουμε αγάγει θα έχετε αγάγει θα έχουν(ε) αγάγει)
+άγω Ενεργητηκή φωνή/Οριστική/Μέλλοντας στιγμιαίος: (θα αγάγω θα αγάγεις θα αγάγει θα αγάγουμε θα αγάγετε θα αγάγουν(ε))
+άγω Ενεργητηκή φωνή/Υποτακτική/Ενεστώτας: (να άγω να άγεις να άγει να άγουμε να άγετε να άγουν(ε))
+άγω Ενεργητηκή φωνή/Υποτακτική/Αόριστος: (να αγάγω να αγάγεις να αγάγει να αγάγουμε να αγάγετε να αγάγουν(ε))
+άγω Ενεργητηκή φωνή/Υποτακτική/Παρακείμενος: (να έχω αγάγει να έχεις αγάγει να έχει αγάγει να έχουμε αγάγει να έχετε αγάγει να έχουν(ε) αγάγει)
+άγω Ενεργητηκή φωνή/Προστακτική/Ενεστώτας: (#f άγε #f #f άγετε #f)
+άγω Ενεργητηκή φωνή/Προστακτική/Αόριστος: (#f άγαγε #f #f αγάγτε #f)
+άγω Ενεργητηκή φωνή/Προστακτική/Παρακείμενος: (#f να έχεις αγάγει #f #f να έχετε αγάγει #f)
+άγω Μεσοπαθητική φωνή/Οριστική/Ενεστώτας: (άγομαι άγεσαι άγεται αγόμαστε άγεστε άγονται)
+άγω Μεσοπαθητική φωνή/Οριστική/Παρατατικός: (αγομούν αγοσούν αγόταν αγόμαστε αγόσαστε άγονταν)
+άγω Μεσοπαθητική φωνή/Οριστική/Μέλλοντας διαρκείας: (θα άγομαι θα άγεσαι θα άγεται θα αγόμαστε θα άγεστε θα άγονται)
+άγω Μεσοπαθητική φωνή/Οριστική/Αόριστος: (άχθηκα άχθηκες άχθηκε αχθήκαμε αχθήκατε άχθηκαν)
+άγω Μεσοπαθητική φωνή/Οριστική/Παρακείμενος: (έχω αχθεί έχεις αχθεί έχει αχθεί έχουμε αχθεί έχετε αχθεί έχουν(ε) αχθεί)
+άγω Μεσοπαθητική φωνή/Οριστική/Υπερσυντέλικος: (είχα αχθεί είχες αχθεί είχα αχθεί είχαμε αχθεί είχατε αχθεί είχαν αχθεί)
+άγω Μεσοπαθητική φωνή/Οριστική/Συντελεσμένος μέλλοντας: (θα έχω αχθεί θα έχεις αχθεί θα έχει αχθεί θα έχουμε αχθεί θα έχετε αχθεί θα έχουν(ε) αχθεί)
+άγω Μεσοπαθητική φωνή/Οριστική/Μέλλοντας στιγμιαίος: (θα αχθώ θα αχθείς θα αχθεί θα αχθούμε θα αχθείτε θα αχθούν(ε))
+άγω Μεσοπαθητική φωνή/Υποτακτική/Ενεστώτας: (να άγομαι να άγεσαι να άγεται να αγόμαστε να άγεστε να άγονται)
+άγω Μεσοπαθητική φωνή/Υποτακτική/Αόριστος: (να αχθώ να αχθείς να αχθεί να αχθούμε να αχθείτε να αχθούν(ε))
+άγω Μεσοπαθητική φωνή/Υποτακτική/Παρακείμενος: (να έχω αχθεί να έχεις αχθεί να έχει αχθεί να έχουμε αχθεί να έχετε αχθεί να έχουν(ε) αχθεί)
+άγω Μεσοπαθητική φωνή/Προστακτική/Ενεστώτας: (#f να άγεσαι #f #f να άγεστε #f)
+άγω Μεσοπαθητική φωνή/Προστακτική/Αόριστος: (#f ήγαγου #f #f αχθεί