diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-06-20 17:06:59 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-06-20 17:06:59 +0300 |
commit | b6bbb4f2cf0144aa58701cd2b46277838743a277 (patch) | |
tree | 1e9bcd3bd7871f2d38ee804b8d803f85317c788b /src/ellinika | |
parent | 554d5663361e1506a757e7639524ce4d461d043c (diff) | |
download | ellinika-b6bbb4f2cf0144aa58701cd2b46277838743a277.tar.gz ellinika-b6bbb4f2cf0144aa58701cd2b46277838743a277.tar.bz2 |
Allow for alternative stems in a same tense.
* data/irregular-verbs.xml: Add alternative passive aorist stem
for "lev".
* scm/verbop.scm (conjugation-set): When setting #:root,
keep a list of alternative stems.
(flush-mood): Update for changes in #:root storage.
* src/cgi-bin/conj.scm4 (show-best-matches): If only one
match is produced, show it immediately.
* src/ellinika/conjugator.scm: Allow for multiple stems.
* src/ellinika/sql.scm (->string): Bugfix.
Diffstat (limited to 'src/ellinika')
-rw-r--r-- | src/ellinika/conjugator.scm | 41 | ||||
-rw-r--r-- | src/ellinika/sql.scm | 2 |
2 files changed, 31 insertions, 12 deletions
diff --git a/src/ellinika/conjugator.scm b/src/ellinika/conjugator.scm index 0abec8d..f70e20c 100644 --- a/src/ellinika/conjugator.scm +++ b/src/ellinika/conjugator.scm @@ -49,3 +49,6 @@ (else - (let ((container (assoc key (list-ref verb 2)))) + (let ((container (assoc key (list-ref verb 2))) + (value (if (and (eq? key #:root) (not (list? value))) + (list value) + value))) (if container @@ -103,4 +106,5 @@ verb=\"~A\" AND voice=\"~A\" AND mood=\"~A\" AND tense=\"~A\"" verb voice mood tense))) - (create-basic-verb-info verb - (if (null? verbprop) + (create-basic-verb-info + verb + (let loop ((inlist (if (null? verbprop) '() @@ -116,4 +120,15 @@ verb=\"~A\" AND voice=\"~A\" AND mood=\"~A\" AND tense=\"~A\"" value)))) - verbprop))))) - + verbprop))) + (rootlist '()) + (outlist '())) +; (format #t "ARGS: ~A/~A/~A~%" inlist rootlist outlist) + (cond + ((null? inlist) + (if (null? rootlist) + outlist + (cons (cons #:root rootlist) outlist))) + ((eq? (caar inlist) #:root) + (loop (cdr inlist) (cons (cdar inlist) rootlist) outlist)) + (else + (loop (cdr inlist) rootlist (cons (car inlist) outlist)))))))) @@ -194,3 +209,3 @@ WHERE verb=\"~A\" AND voice=\"~A\" AND thema=\"~A\"" (verb-set! vinfo #:attested 'root) - (caar result)) + (map car result)) ((string=? (verb-get vinfo #:conj) "A") @@ -359,6 +374,5 @@ AND c.tense=\"~A\" AND c.flect = f.ident ORDER by fold" -(define (apply-flect conj vinfo verb) +(define (apply-flect conj vinfo verb root) ; (format #t "VINFO ~A~%" vinfo) - (let ((root (verb-get vinfo #:root)) - (suffix (get-suffix conj vinfo)) + (let ((suffix (get-suffix conj vinfo)) (accmap (string->list (get-accmap conj vinfo))) @@ -554,5 +568,8 @@ AND i.tense=\"~A\" AND i.ident=f.ident" ; (format #t "VINFO ~A~%" vinfo) + + (fold + (lambda (stem prev) (cons (cons - (append (apply-flect conj vinfo verb) + (append (apply-flect conj vinfo verb stem) (list (verb-get vinfo #:conj) @@ -560,3 +577,5 @@ AND i.tense=\"~A\" AND i.ident=f.ident" (conj-info #:fold conj)) - prev))))) + prev)) + prev + (verb-get vinfo #:root)))))) '() diff --git a/src/ellinika/sql.scm b/src/ellinika/sql.scm index 5867d28..f281847 100644 --- a/src/ellinika/sql.scm +++ b/src/ellinika/sql.scm @@ -46,3 +46,3 @@ ((number? arg) (number->string arg)) - ((bool? arg) (if arg "true" "false")) + ((boolean? arg) (if arg "true" "false")) (else |