11 Commits

Author SHA1 Message Date
Bradley Richins
5f4414df03 Update README.md 2020-10-28 16:38:05 +00:00
bradley.richins
57a1d729dd added .gitlab-ci.yml 2020-10-28 10:10:08 -06:00
bradley.richins
67db2e32ef Updated README.md 2020-10-24 10:38:28 -06:00
bradley.richins
2bb7ca6ccd Updated Recources
Improved/Fixed CSV formatting issues
2020-10-23 12:19:49 -06:00
bradley.richins
2610d98ae1 Updated Translation tests 2020-10-23 12:19:16 -06:00
bradley.richins
32d533ff61 Added supprot for Gek, Vykeen and Atlas
Eng2Atl & Atl2Eng - NEW
Eng2Gek & Gek2Eng - NEW
Eng2Vyk & Vyk2Eng - NEW
Eng2Kor & Kor2Eng
2020-10-23 12:15:34 -06:00
bradley.richins
ac68a20697 Updated recources
korvax-lang.csv
glyphs/GLYPH-0.png
glyphs/GLYPH-1.png
glyphs/GLYPH-2.png
glyphs/GLYPH-3.png
glyphs/GLYPH-4.png
glyphs/GLYPH-5.png
glyphs/GLYPH-6.png
glyphs/GLYPH-7.png
glyphs/GLYPH-8.png
glyphs/GLYPH-9.png
glyphs/GLYPH-A.png
glyphs/GLYPH-B.png
glyphs/GLYPH-C.png
glyphs/GLYPH-D.png
glyphs/GLYPH-E.png
glyphs/GLYPH-F.png

atlas-lang.csv  - NEW
gek-lang.csv    - NEW
vykeen-lang.csv - NEW
2020-10-23 09:48:14 -06:00
bradley.richins
0b90141dcd Updated README.md
https://gitlab.com/bradley.richins/nmslib/-/tree/develop#translate-korvax-to-english-with-korvax2eng
https://gitlab.com/bradley.richins/nmslib/-/tree/develop#translate-english-to-korvax-with-eng2korvax

https://gitlab.com/bradley.richins/nmslib/-/tree/develop#usage
2020-10-22 13:43:26 -06:00
bradley.richins
5bc5711f09 Updated README.md
https://gitlab.com/bradley.richins/nmslib/-/tree/develop#translate-korvax-to-english-with-korvax2eng
https://gitlab.com/bradley.richins/nmslib/-/tree/develop#translate-english-to-korvax-with-eng2korvax
2020-10-22 13:38:16 -06:00
bradley.richins
00411f015c 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`
2020-10-22 13:11:03 -06:00
bradley.richins
ab9799b273 Rewrite on all lang translation tests 2020-10-22 13:10:59 -06:00
5 changed files with 300 additions and 146 deletions

9
.gitlab-ci.yml Normal file
View File

@@ -0,0 +1,9 @@
stages:
- test
test:
stage: test
image: golang:1.15.3
script:
- go test

View File

@@ -1,9 +1,12 @@
# NMSlib # NMSlib
**master Branch** : ![](https://gitlab.com/bradley.richins/nmslib/badges/master/pipeline.svg)
**develop Branch** : ![](https://gitlab.com/bradley.richins/nmslib/badges/develop/pipeline.svg)
NMSlib is a GoLang package for dealing with converting Galactic coordinates to Portal codes and vice versa. NMSlib is a GoLang package for dealing with converting Galactic coordinates to Portal codes and vice versa.
NMSlib also translates known Korvax words to English and back. NMSlib also translates in game languages to english.
- Gek, Vykeen, etc will be added in the future
## Installation ## Installation
@@ -37,8 +40,9 @@ func main() {
nmslib.CreateBanner(portalcode, "NewLennon.png", 0) nmslib.CreateBanner(portalcode, "NewLennon.png", 0)
fmt.Println(nmslib.Korvax2Eng("eapoluch")) fmt.Println(Translate{"KIHTYOMOLES"}.Kor2Eng())
fmt.Println(nmslib.Eng2Korvax("emergency")) korvax := Translate{"Contraband"}
fmt.Println(korvax.Eng2Kor())
} }
``` ```
@@ -63,7 +67,7 @@ nmslib.CreateBanner("006afa556c30", "NewLennon.png", 0)
### Converting Portal code to Galactic address with P2gc() ### Converting Portal code to Galactic address with P2gc()
This function only takes 1 parameter and returns a string This function only takes 1 parameter and returns a string and error
* portalcode: 12 char hex string of portal glyphs * portalcode: 12 char hex string of portal glyphs
@@ -80,7 +84,7 @@ Output:
### Converting Galactic coordinates to Portal codes with Gc2p() ### Converting Galactic coordinates to Portal codes with Gc2p()
This function only takes 1 parameter and returns a string This function only takes 1 parameter and returns a string and error
* galacticaddress: 16 char 4 block hex address * galacticaddress: 16 char 4 block hex address
@@ -95,21 +99,30 @@ Output:
``006AFA556C30`` ``006AFA556C30``
### Translate Korvax to English with Korvax2Eng() ## Translate Words
Supported languages
- Korvax
- Gek
- Vy'keen
- Atlas
### Translate Atlas to English with Atl2Eng()
This function takes only 1 parameter and returns a string This function takes only 1 parameter and returns a string
* korvaxword: Any known Korvaxen word (ex. eapoluch) * Word: Any known Atlas word (ex. Paka)
**Example:** **Example:**
```golang ```golang
fmt.Println(Korvax2Eng("eapoluch")) fmt.Println(Translate{"Paka"}.Atl2Eng())
``` ```
Output: Output:
``emergency`` ``Awake``
### Translate English to Korvax with Eng2Korvax() ### Translate English to Korvax with Eng2Korvax()
@@ -120,12 +133,32 @@ This function takes only 1 parameter and returns a string
**Example:** **Example:**
```golang ```golang
fmt.Println(Eng2Korvax("emergency")) korvax := Translate{"Contraband"}
fmt.Println(korvax.Eng2Kor())
``` ```
Output: Output:
``eapoluch`` ``Zelidovoso``
### Language commands
Gek:
- ``Translate{word}.Gek2Eng()``
- ``Translate{word}.Eng2Gek()``
Korvax:
- ``Translate{word}.Kor2Eng()``
- ``Translate{word}.Eng2Kor()``
Vy'keen:
- ``Translate{word}.Vyk2Eng()``
- ``Translate{word}.Eng2Vyk()``
Atlas:
- ``Translate{word}.Atl2Eng()``
- ``Translate{word}.Eng2Atl()``
## License ## License
[MIT](COPYING) [MIT](COPYING)

228
lang.go
View File

@@ -8,8 +8,15 @@ import (
"strings" "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 english string // english word
word string // no caps word word string // no caps word
capword string // Capitalized word capword string // Capitalized word
@@ -17,9 +24,143 @@ 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 = (toNMS(t, csvlines))
}
return
}
/*
Gek2Eng translate Gek word to english word
*/
func (t Translate) Gek2Eng() (returnstring string) {
csvlines := openCSV("gek-lang.csv")
for range csvlines {
returnstring = (toEng(t, csvlines))
}
return
}
/*
Eng2Gek translate english word to Gek word
*/
func (t Translate) Eng2Gek() (returnstring string) {
csvlines := openCSV("gek-lang.csv")
for range csvlines {
returnstring = (toNMS(t, csvlines))
}
return
}
/*
Vyk2Eng translate vykeen word to english word
*/
func (t Translate) Vyk2Eng() (returnstring string) {
csvlines := openCSV("vykeen-lang.csv")
for range csvlines {
returnstring = (toEng(t, csvlines))
}
return
}
/*
Eng2Vyk translate english word to vykeen word
*/
func (t Translate) Eng2Vyk() (returnstring string) {
csvlines := openCSV("vykeen-lang.csv")
for range csvlines {
returnstring = (toNMS(t, csvlines))
}
return
}
/*
Atl2Eng translate Atlas word to english word
*/
func (t Translate) Atl2Eng() (returnstring string) {
csvlines := openCSV("atlas-lang.csv")
for range csvlines {
returnstring = (toEng(t, csvlines))
}
return
}
/*
Eng2Atl translate english word to Atlas word
*/
func (t Translate) Eng2Atl() (returnstring string) {
csvlines := openCSV("atlas-lang.csv")
for range csvlines {
returnstring = (toNMS(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 toNMS(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 // create temp dir
tempdir, err := ioutil.TempDir("", "nmslib-") tempdir, err := ioutil.TempDir("", "nmslib-")
if err != nil { if err != nil {
@@ -28,88 +169,23 @@ func Korvax2Eng(kvwrd string) string {
defer os.RemoveAll(tempdir) // Clean up temp files defer os.RemoveAll(tempdir) // Clean up temp files
// extract language file from resources.go // extract language file from resources.go
data, err := Asset("korvax-lang.csv") data, err := Asset(lagcsv)
if err != nil { if err != nil {
panic(err) panic(err)
} }
// wirte extracted data to temp dir // wirte extracted data to temp dir
err = ioutil.WriteFile(tempdir+"/korvax-lang.csv", []byte(data), 0644) err = ioutil.WriteFile(tempdir+"/"+lagcsv, []byte(data), 0644)
csvFile, err := os.Open(tempdir + "/korvax-lang.csv") csvFile, err := os.Open(tempdir + "/" + lagcsv)
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
defer csvFile.Close() // close language file when finished defer csvFile.Close() // close language file when finished
// read csv file from memory
csvlines, err := csv.NewReader(csvFile).ReadAll() csvlines, err := csv.NewReader(csvFile).ReadAll()
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
// loop through language data and assign to translate strut return csvlines
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
} }

View File

@@ -33,9 +33,9 @@ func TestGalactic2portal(t *testing.T) {
panic(err) panic(err)
} }
if want != "106AFA556C30" { if want != "106AFA556C30" {
t.Errorf("Testing Gc2p(\"042F:0079:0D55:006A\"): got %q, want: %q.\n", want, "106AFA556C30") t.Errorf("\nTesting Gc2p(\"042F:0079:0D55:006A\"): got %q, want: %q.\n", want, "106AFA556C30")
} else { } else {
fmt.Printf("Testing Gc2p(\"042F:0079:0D55:006A\"): got: %q, want: %q.\n", want, "106AFA556C30") fmt.Printf("\nTesting Gc2p(\"042F:0079:0D55:006A\"): got: %q, want: %q.\n", want, "106AFA556C30")
} }
want, err = Gc2p("042E:0078:0D53:01ED", 4) want, err = Gc2p("042E:0078:0D53:01ED", 4)
@@ -50,68 +50,35 @@ func TestGalactic2portal(t *testing.T) {
} }
func TestCreateBanner(t *testing.T) { func TestCreateBanner(t *testing.T) {
fmt.Printf("Testing CreateBanner: ") fmt.Printf("\nTesting CreateBanner: ")
CreateBanner("006afa556c30", "/tmp/Test.png", 0) CreateBanner("006afa556c30", "/tmp/Test.png", 0)
} }
func TestKorvax2Eng(t *testing.T) { func TestTranslate(t *testing.T) {
want := Korvax2Eng("rodiashikhv") want := Translate{"Paka"}
if want != "contraband" { if want.Atl2Eng() != "Awake" {
t.Errorf("Testing Korvax2eng(\"rodiashikhv\"): got %q, want: %q.\n", want, "contraband") t.Errorf("\nTesting Translate{\"Paka\"}.Atl2Eng(): got %q, want: %q.\n", want.Atl2Eng(), "Awake")
} else { } else {
fmt.Printf("Testing Korvax2eng(\"rodiashikhv\"): got %q, want: %q.\n", want, "contraband") fmt.Printf("\nTesting Translate{\"Paka\"}.Atl2Eng(): got %q, want: %q.\n", want.Atl2Eng(), "Awake")
}
want = Translate{"hofsos"}
if want.Gek2Eng() != "answer" {
t.Errorf("Testing Translate{\"hofsos\"}.Gek2Eng(): got %q, want: %q.\n", want.Gek2Eng(), "answer")
} else {
fmt.Printf("Testing Translate{\"hofsos\"}.Gek2Eng(): got %q, want: %q.\n", want.Gek2Eng(), "answer")
} }
want = Korvax2Eng("KIHTYOMOLES") want = Translate{"Aqo"}
if want != "CONTRABAND" { if want.Vyk2Eng() != "Foes" {
t.Errorf("Testing Korvax2eng(\"KIHTYOMOLES\"): got %q, want: %q.\n", want, "CONTRABAND") t.Errorf("Testing Translate{\"Aqo\"}.Vyk2Eng(): got %q, want: %q.\n", want.Vyk2Eng(), "Foes")
} else { } else {
fmt.Printf("Testing Korvax2eng(\"KIHTYOMOLES\"): got %q, want: %q.\n", want, "CONTRABAND") fmt.Printf("Testing Translate{\"Aqo\"}.Vyk2Eng(): got %q, want: %q.\n", want.Vyk2Eng(), "Foes")
} }
want = Translate{"Alinichel"}
want = Korvax2Eng("Zelidovoso") if want.Kor2Eng() != "Emergency" {
if want != "Contraband" { t.Errorf("Testing Translate{\"Alinichel\"}.Kor2Eng(): got %q, want: %q.\n", want.Kor2Eng(), "Emergency")
t.Errorf("Testing Korvax2eng(\"Zelidovoso\"): got %q, want: %q.\n", want, "Contraband")
} else { } else {
fmt.Printf("Testing Korvax2eng(\"Zelidovoso\"): got %q, want: %q.\n", want, "Contraband") fmt.Printf("Testing Translate{\"Alinichel\"}.Kor2Eng(): got %q, want: %q.\n", want.Kor2Eng(), "Emergency")
} }
fmt.Printf("\nTesting complete.\nStatus: ")
want = Korvax2Eng("notaword")
if want != "*\\Kzzzzzzt\\*" {
t.Errorf("Testing Korvax2eng(\"notaword\"): got %q, want: %q.\n", want, "*\\Kzzzzzzt\\*")
} else {
fmt.Printf("Testing Korvax2eng(\"notaword\"): got %q, want: %q.\n", want, "*\\Kzzzzzzt\\*")
}
}
func TestEng2Korvax(t *testing.T) {
want := Eng2Korvax("contraband")
if want != "rodiashikhv" {
t.Errorf("Testing Eng2Korvax(\"contraband\"): got %q, want: %q.\n", want, "rodiashikhv")
} else {
fmt.Printf("Testing Eng2Korvax(\"contraband\"): got %q, want: %q.\n", want, "rodiashikhv")
}
want = Eng2Korvax("CONTRABAND")
if want != "KIHTYOMOLES" {
t.Errorf("Testing Eng2Korvax(\"CONTRABAND\"): got %q, want: %q.\n", want, "KIHTYOMOLES")
} else {
fmt.Printf("Testing Eng2Korvax(\"CONTRABAND\"): got %q, want: %q.\n", want, "KIHTYOMOLES")
}
want = Eng2Korvax("Contraband")
if want != "Zelidovoso" {
t.Errorf("Testing Eng2Korvax(\"Contraband\"): got %q, want: %q.\n", want, "Zelidovoso")
} else {
fmt.Printf("Testing Eng2Korvax(\"Contraband\"): got %q, want: %q.\n", want, "Zelidovoso")
}
want = Eng2Korvax("notaword")
if want != "*\\Kzzzzzzt\\*" {
t.Errorf("Testing Eng2Korvax(\"notaword\"): got %q, want: %q.\n", want, "*\\Kzzzzzzt\\*")
} else {
fmt.Printf("Testing Eng2Korvax(\"notaword\"): got %q, want: %q.\n", want, "*\\Kzzzzzzt\\*")
}
fmt.Printf("Testing: ")
} }

File diff suppressed because one or more lines are too long