14 Commits

Author SHA1 Message Date
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
bradley.richins
d8dbc66b27 Added/Changed tests
Changed or added the fallowing tests
TestPortal2Galactic:
	P2gc("41EDF9554C2F")

TestGalactic2portal:
	Gc2p("042F:0079:0D55:006A", 1)
	Gc2p("042E:0078:0D53:01ED", 4)

TestKorvax2Eng:
	Korvax2Eng("rodiashikhv")
	Korvax2Eng("KIHTYOMOLES")
	Korvax2Eng("Zelidovoso")
	Eng2Korvax("contraband")
	Eng2Korvax("CONTRABAND")
	Eng2Korvax("Contraband")
2020-10-21 11:36:20 -06:00
bradley.richins
08ed8866d0 Improved translations
Upper case and CAPLOCK words are now properly translated

Began prepering code for rewrite
TODO:   make code reusable\
	add support for:
		Gek
		Vykeen
		Atlas

added some annotations
2020-10-21 11:28:26 -06:00
bradley.richins
620d0ef9de Improved Galactic coords to protal code conversion
Removed un-needed error check

Added ability to pick planet id (0-6)
   Gc2p(gc string) ->> Gc2p(gc string, p int)
2020-10-21 11:26:54 -06:00
bradley.richins
312d38ac6d Updated: add package module github.com/nfnt/resize 2020-10-20 19:17:54 -06:00
bradley.richins
4aec0e4e9a Auto resize image to 768x64
Using http://github.com/nfnt/resize to resize banners
2020-10-20 19:15:06 -06:00
bradley.richins
4f1002ee2d Optimized 2020-10-20 16:23:57 -06:00
8 changed files with 321 additions and 138 deletions

View File

@@ -37,8 +37,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())
} }
``` ```
@@ -104,12 +105,12 @@ This function takes only 1 parameter and returns a string
**Example:** **Example:**
```golang ```golang
fmt.Println(Korvax2Eng("eapoluch")) fmt.Println(Translate{"KIHTYOMOLES"}.Kor2Eng())
``` ```
Output: Output:
``emergency`` ``CONTRABAND``
### Translate English to Korvax with Eng2Korvax() ### Translate English to Korvax with Eng2Korvax()
@@ -120,12 +121,13 @@ 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``
## License ## License
[MIT](COPYING) [MIT](COPYING)

View File

@@ -70,22 +70,23 @@ func P2gc(p string) (gc string, err error) {
/* /*
Gc2p - Galactic coordinates to portal code Gc2p - Galactic coordinates to portal code
Requires 1 string and returns a string and error Requires 1 string and 1 int returns a string and error
var gc string var gc string
Galactic address (ex. 042F:0079:0D55:006A) Galactic address (ex. 042F:0079:0D55:006A)
var p int
Planet ID [1-6]
Return var string Return var string
Portal Glyph hex string 12 chars in len (ex. 006afa556c30) Portal Glyph hex string 12 chars in len (ex. 006afa556c30)
*/ */
func Gc2p(gc string) (portalcode string, err error) { func Gc2p(gc string, p int) (portalcode string, err error) {
if err != nil {
panic(err)
}
/*TODO: add option for Planet choice (1-6)*/
// split and store string // split and store string
// coords[0] == X; coords[1] == Y coords[2] == Z; // coords[0] == X; coords[1] == Y coords[2] == Z;
// coords[3] == SSI coords[4] == P // coords[3] == SSI coords[4] == P
coords := strings.Split(gc+":1", ":") if p > 6 {
p = 1
}
nustring := fmt.Sprintf("%s:%d", gc, p)
coords := strings.Split(nustring, ":")
for n := 0; n < len(coords); n++ { for n := 0; n < len(coords); n++ {
portalcode = portalcode + coords[n] portalcode = portalcode + coords[n]
} }

View File

@@ -7,6 +7,8 @@ import (
"os" "os"
"strconv" "strconv"
"github.com/nfnt/resize"
gim "github.com/ozankasikci/go-image-merge" gim "github.com/ozankasikci/go-image-merge"
) )
@@ -24,6 +26,8 @@ func CreateBanner(portalhex string, savename string, vopt int) {
var err error var err error
var GlyphHex [12]int64 var GlyphHex [12]int64
var glyphImg [12]string var glyphImg [12]string
var vert int
var horz int
// Setup temp dir // Setup temp dir
tempdir, err := ioutil.TempDir("", "nmslib-") tempdir, err := ioutil.TempDir("", "nmslib-")
@@ -71,25 +75,27 @@ func CreateBanner(portalhex string, savename string, vopt int) {
{ImageFilePath: tempdir + "/" + glyphImg[8]}, {ImageFilePath: tempdir + "/" + glyphImg[9]}, {ImageFilePath: tempdir + "/" + glyphImg[8]}, {ImageFilePath: tempdir + "/" + glyphImg[9]},
{ImageFilePath: tempdir + "/" + glyphImg[10]}, {ImageFilePath: tempdir + "/" + glyphImg[11]}, {ImageFilePath: tempdir + "/" + glyphImg[10]}, {ImageFilePath: tempdir + "/" + glyphImg[11]},
} }
if vopt == 1 {
// Merge images horizontally if vopt == 1 { // set vertical rendering
rgba, err := gim.New(grids, 1, 12).Merge() vert, horz = 1, 12
if err != nil { } else { // set horizontal rendering (default)
panic(err) vert, horz = 12, 1
} }
// save the output to png
fmt.Printf("Saving %s to %s in vertical format\n", portalhex, savename) // create new image from grids
file, err := os.Create(savename) rgba, err := gim.New(grids, vert, horz).Merge()
err = png.Encode(file, rgba)
} else {
// Merge images vertically
rgba, err := gim.New(grids, 12, 1).Merge()
if err != nil { if err != nil {
panic(err) panic(err)
} }
// Resize banner 768x64
nuimg := resize.Resize(768, 64, rgba, resize.Lanczos3)
// save the output to png // save the output to png
fmt.Printf("Saving %s to %s\n", portalhex, savename) fmt.Printf("Saving %s to %s\n", portalhex, savename)
file, err := os.Create(savename) file, err := os.Create(savename)
err = png.Encode(file, rgba) err = png.Encode(file, nuimg)
if err != nil {
fmt.Println(err)
} }
} }

5
go.mod
View File

@@ -2,4 +2,7 @@ module gitlab.com/bradley.richins/nmslib
go 1.15 go 1.15
require github.com/ozankasikci/go-image-merge v0.2.2 require (
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646
github.com/ozankasikci/go-image-merge v0.2.2
)

2
go.sum
View File

@@ -1,2 +1,4 @@
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/ozankasikci/go-image-merge v0.2.2 h1:K370BLLTIsamwjAeViiPntf7GiG3h9pXzDmxXCbN8/0= github.com/ozankasikci/go-image-merge v0.2.2 h1:K370BLLTIsamwjAeViiPntf7GiG3h9pXzDmxXCbN8/0=
github.com/ozankasikci/go-image-merge v0.2.2/go.mod h1:NQ2aN0b21buFx3p+5x4dZrKuPSLh2uBukK7F30BrYTo= github.com/ozankasikci/go-image-merge v0.2.2/go.mod h1:NQ2aN0b21buFx3p+5x4dZrKuPSLh2uBukK7F30BrYTo=

228
lang.go
View File

@@ -8,90 +8,184 @@ import (
"strings" "strings"
) )
// KorvaxWord - set up structure of a word iteration /*
type korvaxWord struct { Translate words
english string */
korvax string type Translate struct {
kwcaps string word string
kwallcaps 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
acpword string // ALL CAPITALIZED WORD
} }
/* /*
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-") tempdir, err := ioutil.TempDir("", "nmslib-")
if err != nil { if err != nil {
panic(err) panic(err)
} }
defer os.RemoveAll(tempdir) defer os.RemoveAll(tempdir) // Clean up temp files
data, err := Asset("korvax-lang.csv") // extract language file from resources.go
data, err := Asset(lagcsv)
if err != nil { if err != nil {
panic(err) panic(err)
} }
err = ioutil.WriteFile(tempdir+"/korvax-lang.csv", []byte(data), 0644)
csvFile, err := os.Open(tempdir + "/korvax-lang.csv") // wirte extracted data to temp dir
err = ioutil.WriteFile(tempdir+"/"+lagcsv, []byte(data), 0644)
csvFile, err := os.Open(tempdir + "/" + lagcsv)
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
defer csvFile.Close() 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)
} }
for _, line := range csvlines { return csvlines
klang := korvaxWord{
english: line[0],
korvax: line[1],
kwcaps: line[2],
kwallcaps: line[3],
}
if kvwrd == klang.korvax {
return klang.english
} else if kvwrd == klang.korvax {
return strings.Title(strings.ToLower(klang.english))
} else if kvwrd == klang.kwallcaps {
return strings.ToUpper(klang.english)
}
}
return "*\\Kzzzzzzt\\*" // word not found default
}
/*
Eng2Korvax - Convert (some) english words to Korvax
*/
func Eng2Korvax(enwrd string) string {
tempdir, err := ioutil.TempDir("", "nmslib")
if err != nil {
panic(err)
}
defer os.RemoveAll(tempdir)
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)
}
defer csvFile.Close()
csvlines, err := csv.NewReader(csvFile).ReadAll()
if err != nil {
fmt.Println(err)
}
for _, line := range csvlines {
klang := korvaxWord{
english: line[0],
korvax: line[1],
kwcaps: line[2],
kwallcaps: line[3],
}
if enwrd == klang.english {
return klang.korvax
}
}
return "*\\Kzzzzzzt\\*" // word not found default
} }

View File

@@ -15,64 +15,70 @@ func TestPortal2Galactic(t *testing.T) {
} else { } else {
fmt.Printf("Testing P2gc(\"006afa556c30\"): got: %q, want: %q.\n", want, "042F:0079:0D55:006A") fmt.Printf("Testing P2gc(\"006afa556c30\"): got: %q, want: %q.\n", want, "042F:0079:0D55:006A")
} }
want, err = P2gc("41EDF9554C2F")
if err != nil {
panic(err)
}
if want != "042E:0078:0D53:01ED" {
t.Errorf("Testing P2gc(\"41EDF9554C2F\"): got %q, want: %q.\n", want, "042E:0078:0D53:01ED")
} else {
fmt.Printf("Testing P2gc(\"41EDF9554C2F\"): got: %q, want: %q.\n", want, "042E:0078:0D53:01ED")
}
} }
func TestGalactic2portal(t *testing.T) { func TestGalactic2portal(t *testing.T) {
want, err := Gc2p("042F:0079:0D55:006A") want, err := Gc2p("042F:0079:0D55:006A", 1)
if err != nil { if err != nil {
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("044B:0081:0D68:0096") want, err = Gc2p("042E:0078:0D53:01ED", 4)
if err != nil { if err != nil {
panic(err) panic(err)
} }
if want != "109602569C4C" { if want != "41EDF9554C2F" {
t.Errorf("Testing Gc2p(\"044B:0081:0D68:0096\"): got %q, want: %q.\n", want, "109602569C4C") t.Errorf("Testing Gc2p(\"042E:0078:0D53:01ED\"): got %q, want: %q.\n", want, "41EDF9554C2F")
} else { } else {
fmt.Printf("Testing Gc2p(\"044B:0081:0D68:0096\"): got: %q, want: %q.\n", want, "109602569C4C") fmt.Printf("Testing Gc2p(\"042E:0078:0D53:01ED\"): got: %q, want: %q.\n", want, "41EDF9554C2F")
} }
} }
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("eapoluch") want := Translate{"Paka"}
if want != "emergency" { if want.Atl2Eng() != "Awake" {
t.Errorf("Testing Korvax2eng(\"eapoluch\"): got %q, want: %q.\n", want, "emergency") t.Errorf("\nTesting Translate{\"Paka\"}.Atl2Eng(): got %q, want: %q.\n", want.Atl2Eng(), "Awake")
} else { } else {
fmt.Printf("Testing Korvax2eng(\"eapoluch\"): got %q, want: %q.\n", want, "emergency") 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("notaword") want = Translate{"Aqo"}
if want != "*\\Kzzzzzzt\\*" { if want.Vyk2Eng() != "Foes" {
t.Errorf("Testing Korvax2eng(\"notaword\"): got %q, want: %q.\n", want, "*\\Kzzzzzzt\\*") t.Errorf("Testing Translate{\"Aqo\"}.Vyk2Eng(): got %q, want: %q.\n", want.Vyk2Eng(), "Foes")
} else { } else {
fmt.Printf("Testing Korvax2eng(\"notaword\"): got %q, want: %q.\n", want, "*\\Kzzzzzzt\\*") fmt.Printf("Testing Translate{\"Aqo\"}.Vyk2Eng(): got %q, want: %q.\n", want.Vyk2Eng(), "Foes")
} }
} want = Translate{"Alinichel"}
if want.Kor2Eng() != "Emergency" {
func TestEng2Korvax(t *testing.T) { t.Errorf("Testing Translate{\"Alinichel\"}.Kor2Eng(): got %q, want: %q.\n", want.Kor2Eng(), "Emergency")
want := Eng2Korvax("emergency") } else {
if want != "eapoluch" { fmt.Printf("Testing Translate{\"Alinichel\"}.Kor2Eng(): got %q, want: %q.\n", want.Kor2Eng(), "Emergency")
t.Errorf("Testing Eng2Korvax(\"emergency\"): got %q, want: %q.\n", want, "eapoluch") }
} else { fmt.Printf("\nTesting complete.\nStatus: ")
fmt.Printf("Testing Eng2Korvax(\"emergency\"): got %q, want: %q.\n", want, "eapoluch")
}
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