From 00411f015cf35d8cef8d5352a013500b34feca6f Mon Sep 17 00:00:00 2001 From: "bradley.richins" Date: Thu, 22 Oct 2020 13:11:03 -0600 Subject: [PATCH] Complete redesign of lang.go Some code is now reusable - openCSV() - toKor() - toEng() the new translation syantax is ```golang korvax := Translate{"Contraband"} fmt.Println(korvax.Eng2Kor()) // or fmt.Println(Translate{"KIHTYOMOLES"}.Kor2Eng()) ``` output: `Zelidovoso` --- lang.go | 162 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 86 insertions(+), 76 deletions(-) diff --git a/lang.go b/lang.go index aa6226b..8a480cc 100644 --- a/lang.go +++ b/lang.go @@ -8,8 +8,15 @@ import ( "strings" ) -// translate - set up structure of a word iteration -type translate struct { +/* +Translate words +*/ +type Translate struct { + word string +} + +// trans - set up structure of a word iteration +type trans0 struct { english string // english word word string // no caps word capword string // Capitalized word @@ -17,9 +24,77 @@ type translate struct { } /* -Korvax2Eng - Translate a Korvax word to English +Kor2Eng translate korvax word to english word */ -func Korvax2Eng(kvwrd string) string { +func (t Translate) Kor2Eng() (returnstring string) { + csvlines := openCSV("korvax-lang.csv") + for range csvlines { + returnstring = (toEng(t, csvlines)) + } + return +} + +/* +Eng2Kor translate english word to korvax word +*/ +func (t Translate) Eng2Kor() (returnstring string) { + csvlines := openCSV("korvax-lang.csv") + for range csvlines { + returnstring = (toKor(t, csvlines)) + } + return +} + +func toEng(t Translate, csvlines [][]string) string { + returnstring := "*\\Kzzzzzzt\\*" // word not found default + for _, line := range csvlines { + lang := trans0{ + english: strings.ToLower(line[0]), + word: strings.ToLower(line[1]), + capword: strings.ToLower(line[2]), + acpword: strings.ToLower(line[3]), + } + // check translate struct for value + if strings.ToLower(t.word) == lang.word { + returnstring = lang.english + } else if strings.ToLower(t.word) == lang.capword { + returnstring = strings.Title(strings.ToLower(lang.english)) + } else if strings.ToLower(t.word) == lang.acpword { + returnstring = strings.ToUpper(lang.english) + } + } + return returnstring +} + +func toKor(t Translate, csvlines [][]string) string { + returnstring := "*\\Kzzzzzzt\\*" // word not found default + for _, line := range csvlines { + lang := trans0{ + english: line[0], + word: line[1], + capword: line[2], + acpword: line[3], + } + if t.word == lang.english { + if lang.word != "" { + returnstring = lang.word + } + } + if t.word == strings.Title(strings.ToLower(lang.english)) { + if lang.capword != "" { + returnstring = strings.Title(strings.ToLower(lang.capword)) + } + } + if t.word == strings.ToUpper(lang.english) { + if lang.acpword != "" { + returnstring = strings.ToUpper(lang.acpword) + } + } + } + return returnstring +} + +func openCSV(lagcsv string) [][]string { // create temp dir tempdir, err := ioutil.TempDir("", "nmslib-") if err != nil { @@ -28,88 +103,23 @@ func Korvax2Eng(kvwrd string) string { defer os.RemoveAll(tempdir) // Clean up temp files // extract language file from resources.go - data, err := Asset("korvax-lang.csv") + data, err := Asset(lagcsv) if err != nil { panic(err) } + // wirte extracted data to temp dir - err = ioutil.WriteFile(tempdir+"/korvax-lang.csv", []byte(data), 0644) - csvFile, err := os.Open(tempdir + "/korvax-lang.csv") + err = ioutil.WriteFile(tempdir+"/"+lagcsv, []byte(data), 0644) + csvFile, err := os.Open(tempdir + "/" + lagcsv) if err != nil { fmt.Println(err) } defer csvFile.Close() // close language file when finished + + // read csv file from memory csvlines, err := csv.NewReader(csvFile).ReadAll() if err != nil { fmt.Println(err) } - // loop through language data and assign to translate strut - for _, line := range csvlines { - lang := translate{ - english: strings.ToLower(line[0]), - word: strings.ToLower(line[1]), - capword: strings.ToLower(line[2]), - acpword: strings.ToLower(line[3]), - } - // check translate struct for value - if strings.ToLower(kvwrd) == lang.word { - return lang.english - } else if strings.ToLower(kvwrd) == lang.capword { - return strings.Title(strings.ToLower(lang.english)) - } else if strings.ToLower(kvwrd) == lang.acpword { - return strings.ToUpper(lang.english) - } - } - return "*\\Kzzzzzzt\\*" // word not found default -} - -/* -Eng2Korvax - Convert (some) english words to Korvax -*/ -func Eng2Korvax(enwrd string) string { - // setup temp dir - tempdir, err := ioutil.TempDir("", "nmslib") - if err != nil { - panic(err) - } - defer os.RemoveAll(tempdir) // clean up temp files - - data, err := Asset("korvax-lang.csv") - if err != nil { - panic(err) - } - err = ioutil.WriteFile(tempdir+"/korvax-lang.csv", []byte(data), 0644) - csvFile, err := os.Open(tempdir + "/korvax-lang.csv") - if err != nil { - fmt.Println(err) - } - csvlines, err := csv.NewReader(csvFile).ReadAll() - if err != nil { - fmt.Println(err) - } - for _, line := range csvlines { - lang := translate{ - english: line[0], - word: line[1], - capword: line[2], - acpword: line[3], - } - if enwrd == lang.english { - if lang.word != "" { - return lang.word - } - } - if enwrd == strings.Title(strings.ToLower(lang.english)) { - if lang.capword != "" { - return strings.Title(strings.ToLower(lang.capword)) - } - } - if enwrd == strings.ToUpper(lang.english) { - if lang.acpword != "" { - return strings.ToUpper(lang.acpword) - } - } - } - csvFile.Close() - return "*\\Kzzzzzzt\\*" // word not found default + return csvlines }