Browse Source

Updated ansi-to-go.py to ansi-to-go.go

Steve Thielemann 3 years ago
parent
commit
68e1e2f240
2 changed files with 105 additions and 0 deletions
  1. 101 0
      ansi-to-go/ansi-to-go.go
  2. 4 0
      ansi-to-go/go.mod

+ 101 - 0
ansi-to-go/ansi-to-go.go

@@ -0,0 +1,101 @@
+package main
+
+import (
+	"bufio"
+	"flag"
+	"fmt"
+	"log"
+	"os"
+	"strings"
+)
+
+func hexout(text string) {
+	for _, b := range []byte(text) {
+		fmt.Printf("%02x ", b)
+	}
+	fmt.Println("")
+
+}
+
+func repr_line(line string) string {
+	output := ""
+
+	for _, ch := range []byte(line) {
+		switch {
+		case ch == '\'':
+			output += "\\'"
+		case ch == '"':
+			output += "\\\""
+		case ch == '\\':
+			output += "\\\\"
+		case ch < byte(0x20) || ch > byte(0x7e):
+			output += fmt.Sprintf("\\x%02x", ch)
+		default:
+			output += string(ch)
+		}
+	}
+	return output
+}
+
+func readfile(filename string) {
+	var basename string
+	var lines []string
+
+	idx := strings.LastIndex(filename, "/")
+	basename = filename[idx+1:]
+
+	idx = strings.Index(basename, ".")
+	basename = basename[:idx]
+
+	file, err := os.Open(filename)
+	if err != nil {
+		log.Panicf("Open(%s): %s\n", filename, err)
+	}
+
+	defer file.Close()
+
+	// Read the lines
+	scanner := bufio.NewScanner(file)
+	for scanner.Scan() {
+		line := scanner.Text()
+		lines = append(lines, line)
+	}
+
+	// Ok, is what we have usable, or did it mangle up our Latin1 text?
+	// hexout(lines[0])
+
+	fmt.Printf("func ANSI%s() [%d]string {\n", strings.Title(basename), len(lines))
+	// insert CP437_to_Unicode in here, if needed.
+	fmt.Printf("  data := [%d]string {\n", len(lines))
+	for _, line := range lines {
+		fmt.Printf("    \"%s\",\n", repr_line(line))
+	}
+	fmt.Println("  }")
+	fmt.Println("  if door.Unicode {")
+	fmt.Println("    for idx := range lines {")
+	fmt.Println("      data[idx] = door.CP437_to_Unicode(data[idx])")
+	fmt.Println("    }")
+	fmt.Println("  }")
+	fmt.Println("  return data")
+	fmt.Printf("}\n\n")
+}
+
+func main() {
+	var defaultPackage string = "main"
+
+	flag.StringVar(&defaultPackage, "p", "main", "Package name to use")
+	flag.Parse()
+
+	if flag.NArg() == 0 {
+		fmt.Println("ANSI (CP437) to go converter.")
+		fmt.Println("No ANSI filenames given.")
+		flag.PrintDefaults()
+		os.Exit(2)
+	}
+
+	fmt.Printf("package %s\n\n", defaultPackage)
+	fmt.Printf("import (\n  \"red-green/door\"\n  )\n\n")
+	for _, filename := range flag.Args() {
+		readfile(filename)
+	}
+}

+ 4 - 0
ansi-to-go/go.mod

@@ -0,0 +1,4 @@
+module red-green/ansi-to-go
+
+go 1.17
+