10 Commits

Author SHA1 Message Date
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
bradley.richins
f291891139 Temp directory renamed to nms-{SEED} 2020-10-20 15:14:42 -06:00
bradley.richins
230cefb85d Temp files are now stored in system temp dir 2020-10-20 14:47:04 -06:00
bradley.richins
84df8142c6 Updated 2020-10-20 14:45:49 -06:00
bradley.richins
38e45c4f60 Minnor change
Renamed strut Korvaxlang to KorvaxWord and
English > english
KorvaxWord > korvax
KWCaps > kwcaps
KWALLCAPS > kwallcaps
2020-10-20 12:43:19 -06:00
7 changed files with 346 additions and 305 deletions

View File

@@ -70,22 +70,23 @@ func P2gc(p string) (gc string, err error) {
/*
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
Galactic address (ex. 042F:0079:0D55:006A)
var p int
Planet ID [1-6]
Return var string
Portal Glyph hex string 12 chars in len (ex. 006afa556c30)
*/
func Gc2p(gc string) (portalcode string, err error) {
if err != nil {
panic(err)
}
/*TODO: add option for Planet choice (1-6)*/
func Gc2p(gc string, p int) (portalcode string, err error) {
// split and store string
// coords[0] == X; coords[1] == Y coords[2] == Z;
// 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++ {
portalcode = portalcode + coords[n]
}

View File

@@ -7,6 +7,8 @@ import (
"os"
"strconv"
"github.com/nfnt/resize"
gim "github.com/ozankasikci/go-image-merge"
)
@@ -24,6 +26,16 @@ func CreateBanner(portalhex string, savename string, vopt int) {
var err error
var GlyphHex [12]int64
var glyphImg [12]string
var vert int
var horz int
// Setup temp dir
tempdir, err := ioutil.TempDir("", "nmslib-")
if err != nil {
panic(err)
}
defer os.RemoveAll(tempdir)
// verify len of portalhex
if len(portalhex) == 12 {
// get hex value from each digit in given string to an array of int64
@@ -35,7 +47,7 @@ func CreateBanner(portalhex string, savename string, vopt int) {
}
// assign image location of its glyph hex value to an array of strings
for j := 0; j < len(glyphImg); j++ {
glyphImg[j] = fmt.Sprintf("tmp.nmslib/glyphs/GLYPH-%X.png", GlyphHex[j])
glyphImg[j] = fmt.Sprintf("glyphs/GLYPH-%X.png", GlyphHex[j])
}
// pull images need from glyph.go and saved them to ./glyphs/
for k := 0; k < len(glyphImg); k++ {
@@ -43,49 +55,47 @@ func CreateBanner(portalhex string, savename string, vopt int) {
if err != nil {
panic(err)
}
_, err2 := os.Stat("tmp.nmslib/glyphs")
_, err2 := os.Stat(tempdir + "/glyphs/")
if os.IsNotExist(err2) {
errDir := os.MkdirAll("tmp.nmslib/glyphs", 0755)
errDir := os.MkdirAll(tempdir+"/glyphs", 0755)
if errDir != nil {
panic(errDir)
}
}
err = ioutil.WriteFile(glyphImg[k], []byte(data), 0644)
err = ioutil.WriteFile(tempdir+"/"+glyphImg[k], []byte(data), 0644)
}
}
// load images for processing using github.com/ozankasikci/go-image-merge
grids := []*gim.Grid{
{ImageFilePath: glyphImg[0]}, {ImageFilePath: glyphImg[1]},
{ImageFilePath: glyphImg[2]}, {ImageFilePath: glyphImg[3]},
{ImageFilePath: glyphImg[4]}, {ImageFilePath: glyphImg[5]},
{ImageFilePath: glyphImg[6]}, {ImageFilePath: glyphImg[7]},
{ImageFilePath: glyphImg[8]}, {ImageFilePath: glyphImg[9]},
{ImageFilePath: glyphImg[10]}, {ImageFilePath: glyphImg[11]},
{ImageFilePath: tempdir + "/" + glyphImg[0]}, {ImageFilePath: tempdir + "/" + glyphImg[1]},
{ImageFilePath: tempdir + "/" + glyphImg[2]}, {ImageFilePath: tempdir + "/" + glyphImg[3]},
{ImageFilePath: tempdir + "/" + glyphImg[4]}, {ImageFilePath: tempdir + "/" + glyphImg[5]},
{ImageFilePath: tempdir + "/" + glyphImg[6]}, {ImageFilePath: tempdir + "/" + glyphImg[7]},
{ImageFilePath: tempdir + "/" + glyphImg[8]}, {ImageFilePath: tempdir + "/" + glyphImg[9]},
{ImageFilePath: tempdir + "/" + glyphImg[10]}, {ImageFilePath: tempdir + "/" + glyphImg[11]},
}
if vopt == 1 {
// Merge images horizontally
rgba, err := gim.New(grids, 1, 12).Merge()
if err != nil {
panic(err)
}
// save the output to png
fmt.Printf("Saving %s to %s in vertical format\n", portalhex, savename)
file, err := os.Create(savename)
err = png.Encode(file, rgba)
} else {
// Merge images vertically
rgba, err := gim.New(grids, 12, 1).Merge()
if err != nil {
panic(err)
}
// save the output to png
fmt.Printf("Saving %s to %s\n", portalhex, savename)
file, err := os.Create(savename)
err = png.Encode(file, rgba)
if vopt == 1 { // set vertical rendering
vert, horz = 1, 12
} else { // set horizontal rendering (default)
vert, horz = 12, 1
}
// remove glyphs folder to keep it clean
errDir := os.RemoveAll("tmp.nmslib/glyphs")
if errDir != nil {
panic(errDir)
// create new image from grids
rgba, err := gim.New(grids, vert, horz).Merge()
if err != nil {
panic(err)
}
// Resize banner 768x64
nuimg := resize.Resize(768, 64, rgba, resize.Lanczos3)
// save the output to png
fmt.Printf("Saving %s to %s\n", portalhex, savename)
file, err := os.Create(savename)
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
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/go.mod h1:NQ2aN0b21buFx3p+5x4dZrKuPSLh2uBukK7F30BrYTo=

140
lang.go
View File

@@ -8,73 +8,58 @@ import (
"strings"
)
/*
Korvaxlang - set up structure of a word iteration
*/
type Korvaxlang struct {
English string
KorvaxWord string
KWCaps string
KWALLCAPS string
// translate - set up structure of a word iteration
type translate struct {
english string // english word
word string // no caps word
capword string // Capitalized word
acpword string // ALL CAPITALIZED WORD
}
/*
Korvax2Eng - convert known korvax words into english
Korvax2Eng - Translate a Korvax word to English
*/
func Korvax2Eng(kvwrd string) string {
data, err := Asset("tmp.nmslib/korvax-lang.csv")
// create temp dir
tempdir, err := ioutil.TempDir("", "nmslib-")
if err != nil {
panic(err)
}
_, err2 := os.Stat("tmp.nmslib/")
if os.IsNotExist(err2) {
errDir := os.MkdirAll("tmp.nmslib/", 0755)
if errDir != nil {
panic(errDir)
}
defer os.RemoveAll(tempdir) // Clean up temp files
// extract language file from resources.go
data, err := Asset("korvax-lang.csv")
if err != nil {
panic(err)
}
err = ioutil.WriteFile("tmp.nmslib/korvax-lang.csv", []byte(data), 0644)
csvFile, err := os.Open("tmp.nmslib/korvax-lang.csv")
// wirte extracted data to temp dir
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()
defer csvFile.Close() // close language file when finished
csvlines, err := csv.NewReader(csvFile).ReadAll()
if err != nil {
fmt.Println(err)
}
for _, line := range CsvLines {
klang := Korvaxlang{
English: line[0],
KorvaxWord: line[1],
KWCaps: line[2],
KWALLCAPS: line[3],
// 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]),
}
if kvwrd == klang.KorvaxWord {
errDir := os.RemoveAll("tmp.nmslib")
if errDir != nil {
panic(errDir)
}
return klang.English
} else if kvwrd == klang.KWCaps {
errDir := os.RemoveAll("tmp.nmslib")
if errDir != nil {
panic(errDir)
}
return strings.Title(strings.ToLower(klang.English))
} else if kvwrd == klang.KWALLCAPS {
errDir := os.RemoveAll("tmp.nmslib")
if errDir != nil {
panic(errDir)
}
return strings.ToUpper(klang.English)
// 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)
}
}
// remove recource folder to keep it clean
errDir := os.RemoveAll("tmp.nmslib")
if errDir != nil {
panic(errDir)
}
return "*\\Kzzzzzzt\\*" // word not found default
}
@@ -82,46 +67,49 @@ func Korvax2Eng(kvwrd string) string {
Eng2Korvax - Convert (some) english words to Korvax
*/
func Eng2Korvax(enwrd string) string {
data, err := Asset("tmp.nmslib/korvax-lang.csv")
// setup temp dir
tempdir, err := ioutil.TempDir("", "nmslib")
if err != nil {
panic(err)
}
_, err2 := os.Stat("tmp.nmslib/")
if os.IsNotExist(err2) {
errDir := os.MkdirAll("tmp.nmslib/", 0755)
if errDir != nil {
panic(errDir)
}
defer os.RemoveAll(tempdir) // clean up temp files
data, err := Asset("korvax-lang.csv")
if err != nil {
panic(err)
}
err = ioutil.WriteFile("tmp.nmslib/korvax-lang.csv", []byte(data), 0644)
csvFile, err := os.Open("tmp.nmslib/korvax-lang.csv")
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()
csvlines, err := csv.NewReader(csvFile).ReadAll()
if err != nil {
fmt.Println(err)
}
for _, line := range CsvLines {
klang := Korvaxlang{
English: line[0],
KorvaxWord: line[1],
KWCaps: line[2],
KWALLCAPS: line[3],
for _, line := range csvlines {
lang := translate{
english: line[0],
word: line[1],
capword: line[2],
acpword: line[3],
}
if enwrd == klang.English {
errDir := os.RemoveAll("tmp.nmslib")
if errDir != nil {
panic(errDir)
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)
}
return klang.KorvaxWord
}
}
// remove recource folder to keep it clean
errDir := os.RemoveAll("tmp.nmslib")
if errDir != nil {
panic(errDir)
}
csvFile.Close()
return "*\\Kzzzzzzt\\*" // word not found default
}

View File

@@ -15,10 +15,20 @@ func TestPortal2Galactic(t *testing.T) {
} else {
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) {
want, err := Gc2p("042F:0079:0D55:006A")
want, err := Gc2p("042F:0079:0D55:006A", 1)
if err != nil {
panic(err)
}
@@ -28,14 +38,14 @@ func TestGalactic2portal(t *testing.T) {
fmt.Printf("Testing 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 {
panic(err)
}
if want != "109602569C4C" {
t.Errorf("Testing Gc2p(\"044B:0081:0D68:0096\"): got %q, want: %q.\n", want, "109602569C4C")
if want != "41EDF9554C2F" {
t.Errorf("Testing Gc2p(\"042E:0078:0D53:01ED\"): got %q, want: %q.\n", want, "41EDF9554C2F")
} 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")
}
}
@@ -45,11 +55,25 @@ func TestCreateBanner(t *testing.T) {
}
func TestKorvax2Eng(t *testing.T) {
want := Korvax2Eng("eapoluch")
if want != "emergency" {
t.Errorf("Testing Korvax2eng(\"eapoluch\"): got %q, want: %q.\n", want, "emergency")
want := Korvax2Eng("rodiashikhv")
if want != "contraband" {
t.Errorf("Testing Korvax2eng(\"rodiashikhv\"): got %q, want: %q.\n", want, "contraband")
} else {
fmt.Printf("Testing Korvax2eng(\"eapoluch\"): got %q, want: %q.\n", want, "emergency")
fmt.Printf("Testing Korvax2eng(\"rodiashikhv\"): got %q, want: %q.\n", want, "contraband")
}
want = Korvax2Eng("KIHTYOMOLES")
if want != "CONTRABAND" {
t.Errorf("Testing Korvax2eng(\"KIHTYOMOLES\"): got %q, want: %q.\n", want, "CONTRABAND")
} else {
fmt.Printf("Testing Korvax2eng(\"KIHTYOMOLES\"): got %q, want: %q.\n", want, "CONTRABAND")
}
want = Korvax2Eng("Zelidovoso")
if want != "Contraband" {
t.Errorf("Testing Korvax2eng(\"Zelidovoso\"): got %q, want: %q.\n", want, "Contraband")
} else {
fmt.Printf("Testing Korvax2eng(\"Zelidovoso\"): got %q, want: %q.\n", want, "Contraband")
}
want = Korvax2Eng("notaword")
@@ -61,11 +85,25 @@ func TestKorvax2Eng(t *testing.T) {
}
func TestEng2Korvax(t *testing.T) {
want := Eng2Korvax("emergency")
if want != "eapoluch" {
t.Errorf("Testing Eng2Korvax(\"emergency\"): got %q, want: %q.\n", want, "eapoluch")
want := Eng2Korvax("contraband")
if want != "rodiashikhv" {
t.Errorf("Testing Eng2Korvax(\"contraband\"): got %q, want: %q.\n", want, "rodiashikhv")
} else {
fmt.Printf("Testing Eng2Korvax(\"emergency\"): got %q, want: %q.\n", want, "eapoluch")
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")
@@ -74,5 +112,6 @@ func TestEng2Korvax(t *testing.T) {
} 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