add basic files
This commit is contained in:
parent
8eb68e4720
commit
d62f5d9952
4 changed files with 201 additions and 0 deletions
BIN
data/dict.db
Normal file
BIN
data/dict.db
Normal file
Binary file not shown.
160
main.go
Normal file
160
main.go
Normal file
|
@ -0,0 +1,160 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"io/ioutil"
|
||||
/*"encoding/json"*/
|
||||
"fmt"
|
||||
"regexp"
|
||||
"html/template"
|
||||
"log"
|
||||
"net/http"
|
||||
"database/sql"
|
||||
_ "github.com/mattn/go-sqlite3"
|
||||
|
||||
)
|
||||
|
||||
type Entry struct {
|
||||
ErrorMsg string
|
||||
SearchResult string
|
||||
Esp string
|
||||
Eng string
|
||||
}
|
||||
/*
|
||||
type Pronouns struct {
|
||||
Prons []string `json:"pronouns"`
|
||||
}*/
|
||||
|
||||
|
||||
func index(writer http.ResponseWriter, request *http.Request) {
|
||||
// message := []byte("Hello, web!")
|
||||
tmpl, err := os.Open("template/index.htm")
|
||||
check(err)
|
||||
|
||||
tmpl_content , err := ioutil.ReadAll(tmpl)
|
||||
check(err)
|
||||
fmt.Fprint(writer, string(tmpl_content))
|
||||
|
||||
// ins := Ins{author: "Tan Kian-ting", age: 30}
|
||||
// err = tmpl.Execute()
|
||||
// _, err := writer.Write(message)
|
||||
check(err)
|
||||
}
|
||||
|
||||
func check(err error) {
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func contain(slice []string, str string) bool{
|
||||
for _, item := range slice{
|
||||
if item == str{
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func get_lemma(str string) string{
|
||||
verb_ptn := regexp.MustCompile(`(?P<Stem>[\-a-zA-Z]+?)(?P<Suffix>((ant|int|ont)(an?|ajn?|on?|ojn?|e))|as|is|os|u|i|us)$`)
|
||||
noun_ptn := regexp.MustCompile(`(?P<Stem>[\-a-zA-Z]+?)(?P<Suffix>(on?|ojn?))$`)
|
||||
adj_ptn := regexp.MustCompile(`(?P<Stem>[\-a-zA-Z]+?)(?P<Suffix>(an?|ajn?))$`)
|
||||
|
||||
var lemma string
|
||||
verb_match := verb_ptn.FindStringSubmatch(str)
|
||||
noun_match := noun_ptn.FindStringSubmatch(str)
|
||||
adj_match := adj_ptn.FindStringSubmatch(str)
|
||||
|
||||
if verb_match != nil {
|
||||
lemma = verb_match[1] + "i"
|
||||
} else if noun_match != nil {
|
||||
lemma = noun_match[1] + "o"
|
||||
} else if adj_match != nil {
|
||||
lemma = adj_match[1] + "a"
|
||||
} else{
|
||||
lemma = str
|
||||
}
|
||||
|
||||
return lemma
|
||||
|
||||
}
|
||||
|
||||
|
||||
func result_esp(result string, writer http.ResponseWriter, request *http.Request){
|
||||
|
||||
db, err := sql.Open("sqlite3", "data/dict.db")
|
||||
check(err)
|
||||
|
||||
|
||||
var pron_slice []string
|
||||
|
||||
res, err := db.Query("SELECT * FROM Pronoun")
|
||||
check(err)
|
||||
|
||||
for res.Next(){
|
||||
var esp_pron string
|
||||
err = res.Scan(&esp_pron)
|
||||
pron_slice = append(pron_slice, esp_pron)
|
||||
|
||||
}
|
||||
|
||||
|
||||
var lemma string
|
||||
|
||||
if contain(pron_slice, result) != true{
|
||||
lemma = get_lemma(result) // estas -> esti
|
||||
//fmt.Println(lemma)
|
||||
// if it's a pronoun, let lemma as a result
|
||||
} else{
|
||||
lemma = result
|
||||
}
|
||||
|
||||
|
||||
res, err = db.Query("SELECT * FROM Dict where Esperanto=?", lemma)
|
||||
check(err)
|
||||
|
||||
var entry Entry
|
||||
|
||||
entry.ErrorMsg = "找不到 " + result + " 的詞條,請重新尋找。" // preset it.
|
||||
for res.Next() {
|
||||
var esperanto string
|
||||
var english string
|
||||
err = res.Scan(&esperanto, &english)
|
||||
check(err)
|
||||
// total_result := esperanto + "\n" + english
|
||||
|
||||
|
||||
|
||||
entry.SearchResult = result
|
||||
entry.Esp = esperanto
|
||||
entry.Eng = english
|
||||
entry.ErrorMsg = ""
|
||||
|
||||
}
|
||||
|
||||
tmpl, err := template.ParseFiles("template/result.htm")
|
||||
check(err)
|
||||
err = tmpl.Execute(writer, entry)
|
||||
// _, err = writer.Write([]byte(total_result))
|
||||
check(err)
|
||||
}
|
||||
|
||||
|
||||
func result(writer http.ResponseWriter, request *http.Request) {
|
||||
// message := []byte("Hello, web!")
|
||||
result := request.FormValue("word")
|
||||
lang := request.FormValue("lang_select")
|
||||
|
||||
if lang == "esp"{
|
||||
result_esp(result, writer, request)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
http.HandleFunc("/index.html", index)
|
||||
http.HandleFunc("/result.html", result)
|
||||
err := http.ListenAndServe("localhost:8080", nil)
|
||||
log.Fatal(err)
|
||||
}
|
18
template/index.htm
Normal file
18
template/index.htm
Normal file
|
@ -0,0 +1,18 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>A mirror ESPDIC, an Esperanto-English Dictionary</title>
|
||||
</head>
|
||||
<body>
|
||||
<form action="/result.html" method="GET">
|
||||
<div>
|
||||
Search words or meaning:<br/>
|
||||
<input type="text" name="word"></div>
|
||||
Language:
|
||||
<input type="radio" id="radio_esp" name="lang_select" value="esp" checked><label for="esp">Esperanto</label>
|
||||
<input type="radio" id="radio_esp" name="lang_select" value="eng"><label for="eng">English</label>
|
||||
<div><input type="submit"></div>
|
||||
</form>
|
||||
|
||||
<div id="copyright">Dictionary copyright is shown <a href="https://github.com/Yoxem/Esperanto-English-Dict-Website/blob/main/README.md">here</a>.</div>
|
||||
</body>
|
||||
</html>
|
23
template/result.htm
Normal file
23
template/result.htm
Normal file
|
@ -0,0 +1,23 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>A mirror ESPDIC, an Esperanto-English Dictionary. Search of {{.SearchResult}}</title>
|
||||
</head>
|
||||
<body>
|
||||
<form action="/result.html" method="GET">
|
||||
<div>
|
||||
Search words or meaning:<br/>
|
||||
<input type="text" name="word"></div>
|
||||
Language:
|
||||
<input type="radio" id="radio_esp" name="lang_select" value="esp" checked><label for="esp">Esperanto</label>
|
||||
<input type="radio" id="radio_esp" name="lang_select" value="eng"><label for="eng">English</label>
|
||||
<div><input type="submit"></div>
|
||||
</form>
|
||||
<hr/>
|
||||
|
||||
<div id="error">{{.ErrorMsg}}</div>
|
||||
<div id="esperanto">{{.Esp}}</div>
|
||||
<div id="english">{{.Eng}}</div>
|
||||
|
||||
<div id="copyright">Dictionary copyright is shown <a href="https://github.com/Yoxem/Esperanto-English-Dict-Website/blob/main/README.md">here</a>.</div>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in a new issue