diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-06-15 10:05:10 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-06-15 10:24:46 +0300 |
commit | bb9dd8a54a96307aad7bf976f1736d20c70d43e3 (patch) | |
tree | df632e2c76facc932c4c34978eba4b9ae4cb0354 /src/ellinika | |
parent | a27881a1c5bd7d8f8f42cd6526adf80815acfe63 (diff) | |
download | ellinika-bb9dd8a54a96307aad7bf976f1736d20c70d43e3.tar.gz ellinika-bb9dd8a54a96307aad7bf976f1736d20c70d43e3.tar.bz2 |
Implement web conjugator.
* src/cgi-bin/.gitignore: Update.
* src/cgi-bin/Makefile.am: Build conj,cgi
* src/cgi-bin/conj.scm4: New file.
* src/cgi-bin/dict.scm4 (protect): Move to cgi.scm, function
cgi-protect-quotes. All uses updated.
* src/ellinika/cgi.scm4 (cgi-protect-quotes): New function.
* src/ellinika/Makefile.am (guile_DATA): Add conjugator.scm
* src/ellinika/conjugator.scm: Minor fixes.
* src/ellinika/sql.scm (->string): Fix typo.
* src/ellinika/tenses.scm (ellinika-conjugation-term-transtab): New var.
(ellinika-conjugation-term): New function.
* src/ellinika/test-conjugation.scm: Use ellinika-conjugation-term instead
of (term).
* xml/lingua.conf.in (install-conj): New macro.
* xml/pl/ellinika.xml (GUILE): Call install-conj.
* xml/pl/rhmata.xml: Define conjugator template page.
Diffstat (limited to 'src/ellinika')
-rw-r--r-- | src/ellinika/Makefile.am | 3 | ||||
-rw-r--r-- | src/ellinika/cgi.scm4 | 15 | ||||
-rw-r--r-- | src/ellinika/conjugator.scm | 36 | ||||
-rw-r--r-- | src/ellinika/sql.scm | 2 | ||||
-rw-r--r-- | src/ellinika/tenses.scm | 13 | ||||
-rw-r--r-- | src/ellinika/test-conjugation.scm | 14 |
6 files changed, 51 insertions, 32 deletions
diff --git a/src/ellinika/Makefile.am b/src/ellinika/Makefile.am index 581a537..01534c0 100644 --- a/src/ellinika/Makefile.am +++ b/src/ellinika/Makefile.am @@ -25,3 +25,4 @@ guile_DATA=\ tenses.scm\ - sql.scm + sql.scm\ + conjugator.scm diff --git a/src/ellinika/cgi.scm4 b/src/ellinika/cgi.scm4 index c7fbdb6..8cbfeca 100644 --- a/src/ellinika/cgi.scm4 +++ b/src/ellinika/cgi.scm4 @@ -167,2 +167,17 @@ THUNK. +;; Protect occurences of " in a string. +;; Usual backslash escapes do not work in INPUT widgets, so I +;; change all quotation marks to " +;; Possibly not the better solution, though... +(define-public (cgi-protect-quotes string) + (list->string + (apply append + (map + (lambda (x) + (if (eq? x #\") + (list #\& #\# #\3 #\4 #\;) + (list x))) + (string->list string))))) + + ;;; End of cgi.scmi diff --git a/src/ellinika/conjugator.scm b/src/ellinika/conjugator.scm index 0079d12..41575c2 100644 --- a/src/ellinika/conjugator.scm +++ b/src/ellinika/conjugator.scm @@ -79,19 +79,19 @@ ; (format #t "PROPLIST ~A~%" proplist) - (let ((class (if (null? rest) - "" - (string-append - " AND conj=\"" (utf8-escape (car rest)) "\"")))) - (let ((vdb (ellinika:sql-query - "SELECT conj FROM verbclass WHERE verb=\"~A\"~A" - verb class))) - (cond - ((and vdb (not (null? vdb))) - (list (caar vdb) verb proplist '(class))) - ((elstr-suffix? verb "άω") - (create-basic-verb-info (elstr-append - (elstr-trim verb -2) "ώ") "B1")) - ((null? rest) - (list (guess-verb-class verb) verb proplist '())) - (else - (list (car rest) verb '() '())))))) + (let ((vdb (if (null? rest) + (ellinika:sql-query + "SELECT conj FROM verbclass WHERE verb=\"~A\"" + verb) + (ellinika:sql-query + "SELECT conj FROM verbclass WHERE verb=\"~A\" AND conj=~Q" + verb (car rest))))) + (cond + ((and vdb (not (null? vdb))) + (list (caar vdb) verb proplist '(class))) + ((elstr-suffix? verb "άω") + (create-basic-verb-info (elstr-append + (elstr-trim verb -2) "ώ") proplist "B1")) + ((null? rest) + (list (guess-verb-class verb) verb proplist '())) + (else + (list (car rest) verb '() '()))))) @@ -183,3 +183,3 @@ WHERE verb=\"~A\" AND voice=\"~A\" AND thema=\"~A\"" (define (complement-verb-info vinfo verb voice thema) -; (format #t "COMPLEMENT ~A~%" thema) +; (format #t "COMPLEMENT ~A~%" vinfo) (let ((elverb (string->elstr verb)) diff --git a/src/ellinika/sql.scm b/src/ellinika/sql.scm index f49ddf1..5867d28 100644 --- a/src/ellinika/sql.scm +++ b/src/ellinika/sql.scm @@ -44,3 +44,3 @@ ((string? arg) arg) - ((elstr? arg) (elstr->string? arg)) + ((elstr? arg) (elstr->string arg)) ((number? arg) (number->string arg)) diff --git a/src/ellinika/tenses.scm b/src/ellinika/tenses.scm index f830870..137cfff 100644 --- a/src/ellinika/tenses.scm +++ b/src/ellinika/tenses.scm @@ -37,2 +37,13 @@ "Παρακείμενος")))) -
\ No newline at end of file + +(define-public ellinika-conjugation-term-transtab + '(("act" . "Ενεργητηκή φωνή") + ("pas" . "Μεσοπαθητική φωνή") + ("ind" . "Οριστική") + ("sub" . "Υποτακτική") + ("imp" . "Προστακτική"))) + +(define-public (ellinika-conjugation-term x) + (or (assoc-ref ellinika-conjugation-term-transtab x) x)) + + diff --git a/src/ellinika/test-conjugation.scm b/src/ellinika/test-conjugation.scm index 055138b..1504553 100644 --- a/src/ellinika/test-conjugation.scm +++ b/src/ellinika/test-conjugation.scm @@ -29,12 +29,2 @@ -(define transtab - '(("act" . "Ενεργητηκή φωνή") - ("pas" . "Μεσοπαθητική φωνή") - ("ind" . "Οριστική") - ("sub" . "Υποτακτική") - ("imp" . "Προστακτική"))) - -(define (term x) - (or (assoc-ref transtab x) x)) - (define-public (test-conjugation:tense verb voice mood tense) @@ -42,3 +32,5 @@ (lambda (result) - (format #t "~A ~A/~A/~A: " verb (term voice) (term mood) tense) + (format #t "~A ~A/~A/~A: " verb + (ellinika-conjugation-term voice) + (ellinika-conjugation-term mood) tense) (let ((conj (conjugation:table result))) |