From 543b8a04841f1e4f526b1b12e329e9ec2a9d3063 Mon Sep 17 00:00:00 2001 From: Sergey Poznyakoff Date: Sun, 13 Feb 2005 23:07:13 +0000 Subject: Added to the repository git-svn-id: file:///home/puszcza/svnroot/ellinika/trunk@299 941c8c0f-9102-463b-b60b-cd22ce0e6858 --- cgi-bin/nea.cgi.in | 149 ++++++++++++++++++ data/eg11.xml | 24 +++ data/eg8.xml | 438 +++++++++++++++++++++++++++++++++++++++++++++++++++++ data/eg9.xml | 239 +++++++++++++++++++++++++++++ ellinika/cgi.scmi | 109 +++++++++++++ 5 files changed, 959 insertions(+) create mode 100644 cgi-bin/nea.cgi.in create mode 100644 data/eg11.xml create mode 100644 data/eg8.xml create mode 100644 data/eg9.xml create mode 100644 ellinika/cgi.scmi diff --git a/cgi-bin/nea.cgi.in b/cgi-bin/nea.cgi.in new file mode 100644 index 0000000..56e8bc5 --- /dev/null +++ b/cgi-bin/nea.cgi.in @@ -0,0 +1,149 @@ +#! =GUILE_BINDIR=/guile -s +=AUTOGENERATED= +!# +;;;; Greek Dictionary Web Engine +;;;; Copyright (C) 2004, 2005 Sergey Poznyakoff +;;;; +;;;; This program is free software; you can redistribute it and/or modify +;;;; it under the terms of the GNU General Public License as published by +;;;; the Free Software Foundation; either version 2 of the License, or +;;;; (at your option) any later version. +;;;; +;;;; This program is distributed in the hope that it will be useful, +;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;;; GNU General Public License for more details. +;;;; +;;;; You should have received a copy of the GNU General Public License +;;;; along with this program; if not, write to the Free Software +;;;; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +;;;; + +;;; Tailor this statement to your needs if necessary. +;=GUILE_COMMENT=;(set! %load-path (cons "=GUILE_SITE=" %load-path)) + +(use-modules (www cgi) + (gamma sql) + (gamma gettext) + (xmltools dict) + (ellinika xlat) + (ellinika cgi)) +(cgi:init) + +(ellinika-cgi-init) + +(define (summary) + (let ((conn (sql-connect + sql-iface sql-host sql-port sql-database + sql-username sql-password))) + (cond + (conn + (let ((result (sql-query conn "SELECT date,header,ident FROM news ORDER BY date"))) + (cond + ((null? result) + (display "
No news
")) + (else + (display "\n") + (for-each + (lambda (entry) + (display "\n") + (display "") + (display "\n") + (display "\n")) + result) + (display "
") + (display (list-ref entry 0)) + (display "") + (display (list-ref entry 1)) + (display "
")))) + (sql-connect-close conn)) + (else + (format #t "

~A

\n" + "ΣΦΆΛΜΑ: σύνδεση με το λέξικο απέτυχε."))))) + +(define (main) + (cond + ((cgi:value "id") => + (lambda (id) + (let ((conn (sql-connect + sql-iface sql-host sql-port sql-database + sql-username sql-password))) + (cond + (conn + (let ((result (sql-query conn + (string-append + "SELECT date,header,text FROM news WHERE ident=" + id)))) + (if (null? result) + (format #t "

No item found

\n") + (for-each + (lambda (item) + (format #t "~A\n" (car item)) + (display "\n") + (display (cadr item)) + (display "") + + (display "
") + (display (caddr item))) + result)))) + (else + (format #t "

~A

\n" + "ΣΦΆΛΜΑ: σύνδεση με το λέξικο απέτυχε.")))))))) + + +(define explist + (list (cons "@@program-name@@" (lambda (id) + (make-cgi-name nea-cgi-path))) + (cons "@@main@@" main) + (cons "@@summary@@" summary))) + +; FIXME: Again, share it with dict.cgi +(define (expand-template template) + (let loop ((template template)) + (cond + ((string-index template #\@) => + (lambda (w) + (display (substring template 0 w)) + (if (and (< (+ w 2) (string-length template)) + (char=? (string-ref template (1+ w)) #\@)) + (let ((end-pos (string-index template #\@ (+ w 2)))) + (if (and end-pos + (< (1+ end-pos) (string-length template)) + (char=? (string-ref template (1+ end-pos)) #\@)) + (let* ((name (substring template w (+ end-pos 2))) + (entry (assoc name explist))) + (cond + (entry + ((cdr entry)) + (loop (substring template (+ end-pos 2)))) + (else + (display "@@") + (loop (substring template (+ w 2)))))) + (begin + (display "@") + (loop (substring template (+ w 1)))))) + (begin + (display "@") + (loop (substring template (1+ w))))))) + (else + (display template))))) + +(define (dict-html) + (do ((line (read-line) (read-line))) + ((eof-object? line) #f) + (expand-template line))) + +;;; Main +(display "Content-type: text/html; charset=utf-8\r\n\r\n") + +(with-input-from-file + (template-file target-language nea-template-file-name) + dict-html) + + +;;;; Local variables: +;;;; mode: Scheme +;;;; buffer-file-coding-system: utf-8 +;;;; End: diff --git a/data/eg11.xml b/data/eg11.xml new file mode 100644 index 0000000..45348eb --- /dev/null +++ b/data/eg11.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/data/eg8.xml b/data/eg8.xml new file mode 100644 index 0000000..e71df6f --- /dev/null +++ b/data/eg8.xml @@ -0,0 +1,438 @@ + + + + + + + + + εργάζομαι +

μετ.

+ работать + δουλεύω +
+ + + ετοιμάζω +

μετ.

+ готовить +
+ + + πετυχαίνω +

+ встречать, находить (случайно) +

+

+ достигать цели, иметь успех. η παράσταση πέτυχε спектакль удался + удаваться +

+
+ + + τελειώνω +

μετ.

+ заканчивать +
+ + + δουλεύω +

αμετ.

+ работать +
+ + + μαζεύω +

μετ.

+ собирать +
+ + + γνωρίζω +

μετ.

+ знакомить + знать + узнавать +
+ + + κουράζω +

αμετ.

+ уставать +
+ + + δυσκολεύω +

μετ.

+ затруднять, осложнять +
+ + + αναγνωρίζω +

μετ.

+ узнавать + признавать +
+ + + οικογένεια +

η

+ семья +
+ + + μέλος +

το

+ член +
+ + + χρονιά +

η

+ время + год + χρόνος +
+ + + μηχάνημα +

το

+ устройство + механизм + прибор +
+ + + ηλεκτρονικός +

επίθ.

+ электронный +
+ + + σχολή +

η

+ школа + училище + факультет +
+ + + μηχανικός +

επίθ.

+ Механический +
+ + + συνεργείο +

το

+ бригада, артель + мастерская, цех +
+ + + βιοτεχνία +

η

+ ремесленное производство +
+ + + σύνταξη +

η

+ редактирование + составление + пенсия + синтаксис +
+ + + ένσημο +

το

+ гербовая марка +
+ + + οικιακός +

ο

+ домашний, относящийся к дому + τα οικιακά домашние заботы +
+ + + νιάτα +

τα

+ молодость + να χαρής τα ~ σου ... умоляю ... + τα ~ και τα γρόσια δεν κρύβονται посл. молодость и деньги + не скроешь +
+ + + λεβέντης +

ο

+ молодец + богатырь +
+ + + ελιά +

η

+ маслина +
+ + + χτίστης +

ο

+ строитель, каменщик + перен. создатель, творец +
+ + + χωριό +

το

+ деревня, село +
+ + + αργία +

η

+ выходной + нерабочий день +
+ + + Νομική +

η

+ Юридический факультет +
+ + + εστιατόριο +

το

+ ресторан + столовая +
+ + + φωτογραφία +

η

+ фотография +
+ + + πρόσωπο +

το

+ лицо (также перен.) +
+ + + συμμαθητής +

ο

+ соученик + συμμαθήτρια +
+ + + συμμαθήτρια +

η

+ соученица +
+ + + εργοστάσιο +

το

+ завод + фабрика +
+ + + + δάσκαλος +

ο

+ учитель + δασκάλα +
+ + + δασκάλα +

η

+ учительница +
+ + + καθηγητής +

ο

+ преподаватель + профессор +
+ + + βιβλιοπώλης +

ο

+ продавец книг +
+ + + επιχειρηματίας +

ο

+ предприниматель, делец +
+ + + ηλεκτρολόγος +

ο

+ электрик +
+ + + ηλεκτρονικός +

ο

+ электронщик +
+ + + τεχνίτης +

ο

+ ремесленник + мастер +
+ + + επιστήμπνας +

ο

+ учёный +
+ + + ράφτης +

ο

+ портной +
+ + + μαραγκός + ξυλουργός +

ο

+ столяр + плотник + ξυλουργός +
+ + + επιπλοποιός +

ο

+ мебельщик +
+ + + γεωργός +

ο

+ крестьянин + земледелец + αγρότης +
+ + + κτηνοτρόφος +

ο

+ скотовод +
+ + + καλλιτέχνης +

ο

+ художник +
+ + + διμοσιογράφος +

ο

+ журналист +
+ + + ελαιοχρωματιστής +

ο

+ маляр +
+ + + μηχανικός +

ο,η

+ инженер +
+ + + μοδίστρα +

η

+ швея +
+ + + μαγείρισσα +

η

+ повариха + кухарка +
+ + + οικοδόμος +

ο

+ строитель +
+ + + αγρότης +

ο

+ крестьянин + αγρότισσα +
+ + + αγρότισσα +

η

+ крестьянка +
+ + + φοιτητής +

ο

+ ученик +
+ + + τραπεζικός +

ο

+ банковский служащий +
+ + + αρηιτέκτονας +

ο

+ архитектор +
+ + + στέλεχος +

ο

+ руководитель + деятель + πλ. кадры +
+ +
+ +
+
+ + + + + + + diff --git a/data/eg9.xml b/data/eg9.xml new file mode 100644 index 0000000..075ac47 --- /dev/null +++ b/data/eg9.xml @@ -0,0 +1,239 @@ + + + + + + + + + + πληθαίνω +

+ умножать, увеличивать +

+

+ умножаться + разможаться +

+
+ + + έρχομαι + αόρ. ήλθα, ήρθα - μελλ. θα έλθω, έρθω - προστ. έλα, έλατε +

αμετ.

+ идти одкуда-л., приходить, прибывать, приезжать +
+ + + εγκαθιστώ + αόρ. ςγκατέστησα +

μετ.

+ устраивать, определять + поселять + назначать +
+ + + πιστεύω +

αμετ.

+ верить + полагать, считать +
+ + + αντιμετωπίζω +

μετ.

+ противостоять, давать отпор +
+ + + χάνω +

+ терять +

+

+ проиграть, потерпеть поражение +

+
+ + + προσλαμβάνω + αόρ. προσέλαβα, παθ.αόρ. προσλήφθηκα +

μετ.

+ брать, принимать (на работу и т.п.) + принимать (цвет и т.п.). ~ ύφος принимать позу + воспринимать +
+ + + αναλαμβάνω + αόρ. ανέλαβα, παθ.αόρ. ανελήφθηκα +

+ поднимать, брать в руки + брать, принимать на себя (обязанности и т.п.) + приступать к чему-л., браться за что-л. + взять обратно, вынуть (вклад и т.п.) +

+

+ выздоравливать, поправляться, приходить в себя + оживляться (о рынке и т.п.) +

+
+ + + ενδιαφέρω + только ενεστ. и παρατ. +

+ интересовать, заинтересовывать, занимать +

+

+ представлять интерес, иметь значение +

+
+ + + μισθός +

ο

+ зарплата +
+ + + συνθήκη +

η

+ условие, договор, соглашение +
+ + + εργασία +

η

+ труд, работа +
+ + + γεωπόνος +

ο

+ агроном + +
+ + + ανεργία +

η

+ безработица +
+ + + γραφείο +

το

+ бюро, контора + письменный стол + рабочий кабинет +
+ + + πόλη +

η

+ город +
+ + + αφεντικό +

το

+ хозяин, начальник +
+ + + οικοδομή +

η

+ стройка +
+ + + μεροκάματο +

το

+ дневной заработок +
+ + + τέλος +

το

+ конец +
+ + + φύλακας +

ο

+ сторож +
+ + + δύσκολος +

επίθ.

+ сложный +
+ + + σημαντικός +

επίθ.

+ значительный, важный +
+ + + επαρχιακός +

επίθ.

+ провинциальный +
+ + + γεωργικός +

επίθ.

+ сельскохозяйственный +
+ + + σκληρός +

επίθ.

+ твёрдый, жёсткий + жестокий, бессердечный + трудный, тяжёлый +
+ + + άδικα +

επίρρ.

+ напрасно, зря + несправедливо +
+ + + δοκιμαστικός +

επίθ.

+ испытательный, опытный, экспериментальный +
+ + + παραπάνω +

+ выше, дальше + больше ~ από сверх, кроме +

+

+ избыток, излишек + με το ~ чересчур, слишком +

+
+
+
+ + + + + + + diff --git a/ellinika/cgi.scmi b/ellinika/cgi.scmi new file mode 100644 index 0000000..604d71b --- /dev/null +++ b/ellinika/cgi.scmi @@ -0,0 +1,109 @@ +;;;; -*- scheme -*- +=AUTOGENERATED= +;;;; Greek Dictionary Web Engine +;;;; Copyright (C) 2005 Sergey Poznyakoff +;;;; +;;;; This program is free software; you can redistribute it and/or modify +;;;; it under the terms of the GNU General Public License as published by +;;;; the Free Software Foundation; either version 2 of the License, or +;;;; (at your option) any later version. +;;;; +;;;; This program is distributed in the hope that it will be useful, +;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;;; GNU General Public License for more details. +;;;; +;;;; You should have received a copy of the GNU General Public License +;;;; along with this program; if not, write to the Free Software +;;;; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +;;;; + +(define-module (ellinika cgi)) + +(use-modules (www cgi) + (gamma gettext)) + +;;; User-definable variables +(define-public base-dir "=PREFIX=") +(define-public html-dir "=HTMLDIR=") +(define-public sysconf-dir "=SYSCONFDIR=") +(define-public locale-dir "=LOCALEDIR=") +(define-public ref-loc #f) + +(define-public dict-cgi-path "cgi-bin/dict.cgi") +(define-public nea-cgi-path "cgi-bin/nea.cgi") ;; Path to the cgi (relative + ;; to the Base HREF) + +(define-public config-file-name "ellinika.conf") +(define-public dict-template-file-name "dict.html") +(define-public nea-template-file-name "nea.html") +(define-public target-language "el_GR") + +(define-public word-forms-reference '()) + +(define-public sql-iface "mysql") ;; SQL interface ("mysql" or "postgres") +(define-public sql-host "localhost") ;; SQL server hostname or a path to the UNIX + ;; socket +(define-public sql-port 3306) ;; SQL port number (0 for sockaddr_un + ;; connection) +(define-public sql-database "ellinika") ;; Name of the database +(define-public sql-username "gray") ;; Database user name +(define-public sql-password "") ;; Password for that user name + +(define-public match-list-columns 4) ;; Number of colums in fuzzy search output +;;; End of user-definable variables + +(define-public (language-code lang) + (cond + ((string-index lang #\_) => + (lambda (len) + (substring lang 0 len))) + (else + lang))) + +(define-public (template-file lang template-file-name) + (string-append html-dir "/" (language-code lang) "/" template-file-name)) + +(define-public (make-cgi-name cgi-path . rest) + (apply + string-append + (cons + cgi-path + (let ((arglist (let ((lang (cgi:value "LANG"))) + (do ((ilist (if lang + (cons "LANG" (cons lang rest)) + rest) (cdr ilist)) + (i 1 (1+ i)) + (olist '())) + ((null? ilist) (if (null? olist) + olist + (reverse (cdr olist)))) + (set! olist (cons (car ilist) olist)) + (set! olist (cons + (if (odd? i) "=" "&") + olist)))))) + (if (null? arglist) + arglist + (cons "?" arglist)))))) + +(define-public (ellinika-cgi-init template-file-name) + ;;; Load the site defaults + (let ((rc-file (string-append sysconf-dir "/" config-file-name))) + (if (file-exists? rc-file) + (load rc-file))) + +;;; Load the language-specific defaults + (cond + ((cgi:value "LANG") => + (lambda (x) + (if (and (file-exists? (template-file x template-file-name)) + (false-if-exception (setlocale LC_ALL x))) + (set! target-language x))))) + +;;; Initialize i18n + (setlocale LC_ALL target-language) + (bindtextdomain "=PACKAGE=" locale-dir) + (bind_textdomain_codeset "=PACKAGE=" "UTF-8") + (textdomain "=PACKAGE=")) + +;;; End of cgi.scmi -- cgit v1.2.1