aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2011-06-21 12:13:02 +0300
committerSergey Poznyakoff <gray@gnu.org.ua>2011-06-21 12:13:02 +0300
commit119c79bd50659612a9126f6793bd57b48792cb11 (patch)
tree2c282cd1010fd9c913a3aade777f8c9dd8c8ed3b
parentcc53aa452ef0caca75931a126860500d3bd67f04 (diff)
downloadellinika-119c79bd50659612a9126f6793bd57b48792cb11.tar.gz
ellinika-119c79bd50659612a9126f6793bd57b48792cb11.tar.bz2
Accept multiple suffixes.
* data/irregular-verbs.xml: Update. * scm/verbop.scm: Allow for multiple suffixes. * src/ellinika/conjugator.scm: Accept multiple suffixes. Fix accent settings. * src/cgi-bin/conj.scm4: Minor changes.
-rw-r--r--data/irregular-verbs.xml46
-rw-r--r--scm/verbop.scm57
-rw-r--r--src/cgi-bin/conj.scm412
-rw-r--r--src/ellinika/conjugator.scm147
4 files changed, 169 insertions, 93 deletions
diff --git a/data/irregular-verbs.xml b/data/irregular-verbs.xml
index 67d4126..312987e 100644
--- a/data/irregular-verbs.xml
+++ b/data/irregular-verbs.xml
@@ -201,7 +201,8 @@
201 <v> 201 <v>
202 <a>βαστώ</a> 202 <a>βαστώ</a>
203 <c>B1</c> 203 <c>B1</c>
204 <suffix>ηξ</suffix> <!-- also αξ --> 204 <suffix>ηξ</suffix>
205 <suffix>αξ</suffix>
205 </v> 206 </v>
206 207
207 <v> 208 <v>
@@ -514,11 +515,54 @@
514 </v> 515 </v>
515 516
516 <v> 517 <v>
518 <a>μπορώ</a>
519 <c>B2</c>
520 <suffix>εσ</suffix>
521 <pas/>
522 </v>
523
524 <v>
517 <a>ξέρω</a> 525 <a>ξέρω</a>
518 <c>A</c> 526 <c>A</c>
519 <augment>η</augment> 527 <augment>η</augment>
520 </v> 528 </v>
521 529
530 <!-- Unfinished -->
531 <v>
532 <a>πάω</a>
533 <c>B1</c>
534 <act>
535 <ind>
536 <t name="Ενεστώτας">
537 <p n="s" p="1" prop="true">πάω</p>
538 <p n="s" p="3" prop="true">πάει</p>
539 <p n="p" p="1" prop="true">πάμε</p>
540 <p n="p" p="3" prop="true">πάνε,παν</p>
541 </t>
542 <t name="Παρατατικός">
543 <prop name="stem">πήγαιν</prop>
544 <prop name="class">A</prop>
545 </t>
546 <t name="Αόριστος">
547 <suffix/>
548 </t>
549 </ind>
550 <sub>
551 <t name="Ενεστώτας">
552 <prop name="stem">πήγαιν</prop>
553 <prop name="class">A</prop>
554 </t>
555 <t name="Αόριστος">
556 <prop name="stem">πά</prop>
557 <prop name="class">A</prop>
558 <suffix/>
559 </t>
560 </sub>
561 <stem theme="aor">πηγ</stem>
562 </act>
563 <pas/>
564 </v>
565
522 <v> 566 <v>
523 <a>παθαίνω</a> 567 <a>παθαίνω</a>
524 <c>A</c> 568 <c>A</c>
diff --git a/scm/verbop.scm b/scm/verbop.scm
index 464c384..0ad0f90 100644
--- a/scm/verbop.scm
+++ b/scm/verbop.scm
@@ -175,7 +175,15 @@ exec ${GUILE-guile} -l $0 -c "(apply $main (command-line))" "$@"
175(define (verb-set what val) 175(define (verb-set what val)
176 (if (null? verbdef) 176 (if (null? verbdef)
177 (verb-init)) 177 (verb-init))
178 (list-set! verbdef (verbdef:index what) val)) 178 (let ((val (cond
179 ((not (eq? what #:suffix))
180 val)
181 ((list-ref verbdef (verbdef:index what)) =>
182 (lambda (entry)
183 (cons val entry)))
184 (else
185 (list val)))))
186 (list-set! verbdef (verbdef:index what) val)))
179 187
180(define (verb-init) 188(define (verb-init)
181 (set! verbdef (make-list 9 #f)) 189 (set! verbdef (make-list 9 #f))
@@ -331,27 +339,31 @@ VALUES (~Q,~Q,~Q,~Q)"
331; (format #t "MOOD ~A~%" mood-ref) 339; (format #t "MOOD ~A~%" mood-ref)
332 (for-each 340 (for-each
333 (lambda (tense-name) 341 (lambda (tense-name)
334 (let* ((tense (or (assoc tense-name (cdr mood-ref)) 342 (let* ((tense
335 (begin 343 (or (assoc tense-name (cdr mood-ref))
336 (append! 344 (begin
337 mood-ref 345 (append!
338 (list 346 mood-ref
339 (cons tense-name 347 (list
340 (append 348 (cons tense-name
341 (make-list 6 #f) 349 (append
342 (list 350 (make-list 6 #f)
343 (cons "default" #t)))))) 351 (list
344; (format #t "NM ~A~%" mood-ref) 352 (cons "default" #t))))))
345 (assoc tense-name 353; (format #t "NM ~A~%" mood-ref)
346 (cdr mood-ref))))) 354 (assoc tense-name
355 (cdr mood-ref)))))
347 (prop (begin 356 (prop (begin
348; (format #t "TENSE ~A~%" tense) 357; (format #t "TENSE ~A~%" tense)
349 (list-tail tense 7)))) 358 (list-tail tense 7))))
350; (format #t "PROP ~A ~A~%" tense prop) 359; (format #t "PROP ~A ~A~%" tense prop)
351 (if (not (assoc attr prop)) 360 (if (not (assoc attr prop))
352 (append! tense 361 (for-each
353 (list 362 (lambda (value)
354 (cons attr value)))))) 363 (append! tense
364 (list
365 (cons attr value))))
366 (if (list? value) value (list value))))))
355 (cdr mood-tenses)))) 367 (cdr mood-tenses))))
356 mtlist))))) 368 mtlist)))))
357 attrlist)) 369 attrlist))
@@ -506,12 +518,7 @@ VALUES (~Q,~Q,~Q,~Q)"
506 (tag attr text) 518 (tag attr text)
507 (cond 519 (cond
508 ((xmltrans:parent? "v") 520 ((xmltrans:parent? "v")
509 (cond 521 (verb-set #:suffix text))
510 ((verb-get #:suffix)
511 (xmltrans:parse-error #f "Suffix was already defined")
512 (mark-invalid))
513 (else
514 (verb-set #:suffix text))))
515 ((xmltrans:parent? "t") 522 ((xmltrans:parent? "t")
516 (set! tense-prop (cons (cons "suffix" text) tense-prop))) 523 (set! tense-prop (cons (cons "suffix" text) tense-prop)))
517 (else 524 (else
diff --git a/src/cgi-bin/conj.scm4 b/src/cgi-bin/conj.scm4
index 1894485..a8d84f1 100644
--- a/src/cgi-bin/conj.scm4
+++ b/src/cgi-bin/conj.scm4
@@ -105,10 +105,10 @@ ifelse(IFACE,[CGI],(cgi:init))
105 (cdr tense)))) 105 (cdr tense))))
106 (display "<th>") 106 (display "<th>")
107 (cond 107 (cond
108 ((not (member 'root att)) 108 ((not (member 'stem att))
109 (display "<a href=\"#root-na\">?</a>&nbsp;") 109 (display "<a href=\"#stem-na\">?</a>&nbsp;")
110 (if (not (member 'root unattested)) 110 (if (not (member 'stem unattested))
111 (set! unattested (cons 'root unattested))))) 111 (set! unattested (cons 'stem unattested)))))
112 (display tense-name) 112 (display tense-name)
113 (display "</th>") 113 (display "</th>")
114 (newline))) 114 (newline)))
@@ -145,7 +145,7 @@ ifelse(IFACE,[CGI],(cgi:init))
145 (fold 145 (fold
146 (lambda (elt prev) 146 (lambda (elt prev)
147 (if prev 147 (if prev
148 (string-append prev "," elt) 148 (string-append prev ",<br>" elt)
149 elt)) 149 elt))
150 #f 150 #f
151 lst)) 151 lst))
@@ -385,7 +385,7 @@ ifelse(IFACE,[CGI],(cgi:init))
385 (print-footnote "class-na" "*" 385 (print-footnote "class-na" "*"
386 "Conjugation class of this verb is not attested")) 386 "Conjugation class of this verb is not attested"))
387 ((root) 387 ((root)
388 (print-footnote "root-na" "?" 388 (print-footnote "stem-na" "?"
389 (_ "Το θέμα αυτού του χρόνου δεν επιβεβαιώνεται από τη βάση δεδοµένων"))))) 389 (_ "Το θέμα αυτού του χρόνου δεν επιβεβαιώνεται από τη βάση δεδοµένων")))))
390 unattested) 390 unattested)
391 (display "</div>")) 391 (display "</div>"))
diff --git a/src/ellinika/conjugator.scm b/src/ellinika/conjugator.scm
index 536b48e..bffc6be 100644
--- a/src/ellinika/conjugator.scm
+++ b/src/ellinika/conjugator.scm
@@ -46,6 +46,8 @@
46 (list-set! verb 1 value)) 46 (list-set! verb 1 value))
47 ((#:attested) 47 ((#:attested)
48 (list-set! verb 3 (append (list-ref verb 3) (list value)))) 48 (list-set! verb 3 (append (list-ref verb 3) (list value))))
49 ((#:proplist)
50 (list-set! verb 2 value))
49 (else 51 (else
50 (let ((container (assoc key (list-ref verb 2))) 52 (let ((container (assoc key (list-ref verb 2)))
51 (value (if (and (eq? key #:stem) (not (list? value))) 53 (value (if (and (eq? key #:stem) (not (list? value)))
@@ -78,8 +80,7 @@
78 ;; FIXME: deponentia? 80 ;; FIXME: deponentia?
79 (else "A"))) 81 (else "A")))
80 82
81(define (create-basic-verb-info verb proplist . rest) 83(define (create-basic-verb-info verb . rest)
82; (format #t "PROPLIST ~A~%" proplist)
83 (let ((vdb (if (null? rest) 84 (let ((vdb (if (nu