first commit
authorGabriel Pérez-Cerezo <gabriel@gpcf.eu>
Thu, 17 Dec 2015 16:26:30 +0000 (17:26 +0100)
committerGabriel Pérez-Cerezo <gabriel@gpcf.eu>
Thu, 17 Dec 2015 16:26:30 +0000 (17:26 +0100)
TODO.txt [new file with mode: 0644]
example.voc [new file with mode: 0644]
favicon.png [new file with mode: 0644]
logo.png [new file with mode: 0644]
voctrainer.css [new file with mode: 0644]
voctrainer.py [new file with mode: 0755]

diff --git a/TODO.txt b/TODO.txt
new file mode 100644 (file)
index 0000000..d9233f9
--- /dev/null
+++ b/TODO.txt
@@ -0,0 +1,11 @@
+Time-stamp: "2015-12-16 23:18:10 gpcf"
+Zeug, was wir noch hinzufügen sollten:
+* Konjugationen abfragen
+* Vokabellisten als TeX zum Drucken exportieren
+* Benutzerfreundlicheres Dateiformat, d.h. eines, was nicht schon für den Computer "vorgekaut" ist.
+* Hübschere Benutzeroberfläche
+* Ranglisten
+* Lokalisierung (andere Sprachen außer Deutsch für die Benutzeroberfläche)
+* Überarbeitung der Punktevergabe
+
+
diff --git a/example.voc b/example.voc
new file mode 100644 (file)
index 0000000..75a23b1
--- /dev/null
@@ -0,0 +1,5 @@
+Hallo;o;Hola
+Tag;m;día
+Stunde;f;hora
+Nachmittag;f;tarde
+Jahr;m;año
\ No newline at end of file
diff --git a/favicon.png b/favicon.png
new file mode 100644 (file)
index 0000000..603caf3
Binary files /dev/null and b/favicon.png differ
diff --git a/logo.png b/logo.png
new file mode 100644 (file)
index 0000000..85cdb74
Binary files /dev/null and b/logo.png differ
diff --git a/voctrainer.css b/voctrainer.css
new file mode 100644 (file)
index 0000000..1bb6094
--- /dev/null
@@ -0,0 +1,20 @@
+h1#title {
+    color: darkblue;
+    padding-left: 2.5em;
+}
+div#header {
+    background-color: #afe;
+    position: absolute;
+    top:0px;
+    left: 0px;
+    width: 100%;
+    height: 4em;
+    padding: 1em;
+}
+body {
+    margin: 1.5em;
+    margin-top: 6.5em;
+}
+footer {
+    margin-top: 1em;
+}
\ No newline at end of file
diff --git a/voctrainer.py b/voctrainer.py
new file mode 100755 (executable)
index 0000000..c2f849b
--- /dev/null
@@ -0,0 +1,129 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+import os
+#print("Hello World")
+import cgi
+import cgitb
+from difflib import SequenceMatcher as match
+cgitb.enable()
+from glob import glob
+#print "200 Ok"
+def footer ():
+    print """<footer>Vokabeltrainer Copyright &copy; 2015 Gabriel
+Pérez-Cerezo<br>Freie Software, lizensiert unter der
+MIT-Lizenz<br>
+Der Vokabeltrainer ist noch lange nicht fertig: siehe <a href="/TODO.txt">unsere Liste</a>
+an Sachen, die wir gerne hätten.<br>
+Fehlermeldungen bitte an gabriel -arroba- gpcf -punto- eu</footer></body></html>"""
+def header (title="") :
+    if title :
+        title = "– " + title
+    print '''    <!DOCTYPE html>
+    <head><title>Vokabeltrainer %s</title>
+ <META HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8"  />
+ <meta name="google" content="notranslate" />
+  <link rel="icon" type="image/png" href="/favicon.png" />
+  <link rel="stylesheet" type="text/css" href="/voctrainer.css" />
+</head>
+    <body>
+<div id="header">
+<a href="/voctrainer.py/" ><img style="float:left; width:4em;" src="/logo.png" alt="Vokabeltrainer logo"></a><h1 id="title">Vokabeltrainer</h1>
+</div>
+''' % title
+def check (sol, user) :
+    if not user :
+        print "<b>Keine Daten eingesendet!</b><br>"
+        return 0
+    print "<table><tr><td>Deutsch<td>Artikel<td>Punkte<td>Wort<td>Lösung<td>Punkte</tr>"
+    reachable = 0
+    reached = 0
+    for i in user.keys() :
+        print "<tr><td>",i
+        if sol[i][0] in "mf":
+            reachable +=1
+            print "<td>"
+            if sol[i][0]=="m" :
+                print "El"
+            else:
+                print "La"
+            print "<td>"
+            if sol[i][0]==user[i][0]:
+                print "1"
+                reached +=1
+            else :
+                print "0"
+        else :
+            print "<td>-<td>-"
+        print "<td>", user[i][1] #Eingabe
+        print "<td>", sol[i][1], "<td>" # Lösung
+        reachable +=1
+        if match(None, sol[i][1].lower(), user[i][1]).ratio() > 0.9 :
+            print "1"
+            reached +=1
+        else:
+            print "0"
+        print "</tr>"
+    print "</table>"
+    print "Du hast %d von %d Punkten erreicht. Das Enstpricht %d%%" %(reached, reachable, reached*100/reachable)
+
+print ("Content-Type: text/html; charset=UTF-8\n")
+try:
+    url=os.environ["PATH_INFO"]
+except:
+    url="/"
+themata = glob("*.voc")
+if url == "" or url == "/" :
+    header()
+    print "<h2>Bitte wähle ein Thema aus:</h2>"
+    for thema in themata:
+        print "<a href=\"%s\" >%s</a>" % (thema, thema.replace(".voc",""))
+    footer()
+    exit()
+if url[1:] in themata :
+    header(url[1:])
+    print "<h2>Test %s</h2>" % (url[1:])
+    print "<br>"
+    print '<form action="send%s" name="test" >' % url[1:]
+    data = open(url[1:], "r")
+    for line in data :
+        ln = line.split(";")
+        print "Deutsch: %s" % ln[0],
+        if ln[1] in "mf" : # word is a noun
+            print '''<input type="radio" name="%s_g" value="m">El
+            <input type="radio" name="%s_g" value="f">La</option></select>''' % (ln[0], ln[0])
+        print '<input name="%s">' % ln[0]
+        print "<br>"
+    print '<input type="submit" value="Absenden!"></form>'
+    footer()
+if url[1:].startswith("send") :
+#    print "you sent it"
+    form = cgi.FieldStorage()
+    f=url[5:]
+    header("Auswertung zu %s" % f)
+    print "<h2>Auswertung</h2>"
+    data = open(f, "r")
+    dt = {}
+    ut = {} # User solutions
+    for line in data :
+        ln = line.split(";")
+        dt[ln[0].strip()]=(ln[1].strip(),ln[2].strip())
+    for i in form :
+        if i.endswith("_g") :
+            # Gender
+            j = i[:-2]
+            if j in dt :
+                if not j in ut :
+                    ut[j]=[form.getfirst(i,"0")]
+                else :
+                    ut[j][0] = form.getfirst(i,"0")
+        elif i in dt.keys() :
+            ans = form.getfirst(i, "0").strip().lower()
+            if not i in ut :
+                ut[i] = [None, ans]
+            else :
+                ut[i].append(ans)
+
+    check(dt, ut)
+    print '<br>&larr;<a href="%s"> Zurück zum Test</a>' % f
+    footer()
+