diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-06-21 12:13:02 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-06-21 12:13:02 +0300 |
commit | 119c79bd50659612a9126f6793bd57b48792cb11 (patch) | |
tree | 2c282cd1010fd9c913a3aade777f8c9dd8c8ed3b | |
parent | cc53aa452ef0caca75931a126860500d3bd67f04 (diff) | |
download | ellinika-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.xml | 46 | ||||
-rw-r--r-- | scm/verbop.scm | 57 | ||||
-rw-r--r-- | src/cgi-bin/conj.scm4 | 12 | ||||
-rw-r--r-- | src/ellinika/conjugator.scm | 147 |
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> ") | 109 | (display "<a href=\"#stem-na\">?</a> ") |
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 |