aboutsummaryrefslogtreecommitdiff
path: root/src/ellinika
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2011-06-20 17:06:59 +0300
committerSergey Poznyakoff <gray@gnu.org.ua>2011-06-20 17:06:59 +0300
commitb6bbb4f2cf0144aa58701cd2b46277838743a277 (patch)
tree1e9bcd3bd7871f2d38ee804b8d803f85317c788b /src/ellinika
parent554d5663361e1506a757e7639524ce4d461d043c (diff)
downloadellinika-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.scm41
-rw-r--r--src/ellinika/sql.scm2
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

Return to:

Send suggestions and report system problems to the System administrator.