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
**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 also translates known Korvax words to English and back.
- Gek, Vykeen, etc will be added in the future
NMSlib also translates in game languages to english.
## Installation
@@ -37,8 +40,9 @@ func main() {
nmslib.CreateBanner(portalcode, "NewLennon.png", 0)
fmt.Println(nmslib.Korvax2Eng("eapoluch"))
fmt.Println(nmslib.Eng2Korvax("emergency"))
fmt.Println(Translate{"KIHTYOMOLES"}.Kor2Eng())
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()
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
@@ -80,7 +84,7 @@ Output:
### 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
@@ -95,21 +99,30 @@ Output:
``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
* korvaxword: Any known Korvaxen word (ex. eapoluch)
* Word: Any known Atlas word (ex. Paka)
**Example:**
```golang
fmt.Println(Korvax2Eng("eapoluch"))
fmt.Println(Translate{"Paka"}.Atl2Eng())
```
Output:
``emergency``
``Awake``
### Translate English to Korvax with Eng2Korvax()
@@ -120,12 +133,32 @@ This function takes only 1 parameter and returns a string
**Example:**
```golang
fmt.Println(Eng2Korvax("emergency"))
korvax := Translate{"Contraband"}
fmt.Println(korvax.Eng2Kor())
```
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
[MIT](COPYING)

228
lang.go
View File

@@ -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,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
tempdir, err := ioutil.TempDir("", "nmslib-")
if err != nil {
@@ -28,88 +169,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
}

View File

@@ -33,9 +33,9 @@ func TestGalactic2portal(t *testing.T) {
panic(err)
}
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 {
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)
@@ -50,68 +50,35 @@ func TestGalactic2portal(t *testing.T) {
}
func TestCreateBanner(t *testing.T) {
fmt.Printf("Testing CreateBanner: ")
fmt.Printf("\nTesting CreateBanner: ")
CreateBanner("006afa556c30", "/tmp/Test.png", 0)
}
func TestKorvax2Eng(t *testing.T) {
want := Korvax2Eng("rodiashikhv")
if want != "contraband" {
t.Errorf("Testing Korvax2eng(\"rodiashikhv\"): got %q, want: %q.\n", want, "contraband")
func TestTranslate(t *testing.T) {
want := Translate{"Paka"}
if want.Atl2Eng() != "Awake" {
t.Errorf("\nTesting Translate{\"Paka\"}.Atl2Eng(): got %q, want: %q.\n", want.Atl2Eng(), "Awake")
} 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")
if want != "CONTRABAND" {
t.Errorf("Testing Korvax2eng(\"KIHTYOMOLES\"): got %q, want: %q.\n", want, "CONTRABAND")
want = Translate{"Aqo"}
if want.Vyk2Eng() != "Foes" {
t.Errorf("Testing Translate{\"Aqo\"}.Vyk2Eng(): got %q, want: %q.\n", want.Vyk2Eng(), "Foes")
} 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 = Korvax2Eng("Zelidovoso")
if want != "Contraband" {
t.Errorf("Testing Korvax2eng(\"Zelidovoso\"): got %q, want: %q.\n", want, "Contraband")
want = Translate{"Alinichel"}
if want.Kor2Eng() != "Emergency" {
t.Errorf("Testing Translate{\"Alinichel\"}.Kor2Eng(): got %q, want: %q.\n", want.Kor2Eng(), "Emergency")
} 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")
}
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: ")
fmt.Printf("\nTesting complete.\nStatus: ")
}

File diff suppressed because one or more lines are too long