mirror of
https://github.com/cjdenio/crossword.git
synced 2026-10-03 11:06:19 +00:00
fix text encoding
This commit is contained in:
4 files changed
+46
-27
No files matched your search
@@ -1,3 +1,5 @@
|
|||||||
module github.com/cjdenio/crossword
|
module github.com/cjdenio/crossword
|
||||||
|
|
||||||
go 1.25.0
|
go 1.25.0
|
||||||
|
|
||||||
|
require golang.org/x/text v0.41.0
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
golang.org/x/text v0.41.0 h1:vz/seA0lnX87Othu2f/0L24RcgrXD9/YFTSuGjj3rH8=
|
||||||
|
golang.org/x/text v0.41.0/go.mod h1:jvf1O8ajNzZqhSrQBPbutR/EB83Cc0CFrezNQIwbb5M=
|
||||||
@@ -6,6 +6,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"slices"
|
"slices"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/cjdenio/crossword/puz"
|
"github.com/cjdenio/crossword/puz"
|
||||||
)
|
)
|
||||||
@@ -100,24 +101,22 @@ func main() {
|
|||||||
|
|
||||||
fmt.Printf("TITLE: %s\n", puzzle.Title)
|
fmt.Printf("TITLE: %s\n", puzzle.Title)
|
||||||
fmt.Printf("AUTHOR: %s\n", puzzle.Author)
|
fmt.Printf("AUTHOR: %s\n", puzzle.Author)
|
||||||
|
fmt.Println(RenderPuzzle(puzzle.Solution, puzzle.Width, puzzle.Height, puzzle.Clues[0].Cells, 1))
|
||||||
fmt.Println(RenderPuzzle(puzzle.State, puzzle.Width, puzzle.Height, puzzle.Clues[0].Cells, 1))
|
|
||||||
|
|
||||||
// j, _ := json.Marshal(puzzle)
|
|
||||||
// fmt.Println(string(j))
|
|
||||||
// for _, clue := range puzzle.Clues {
|
|
||||||
// if clue.Direction == puz.DirectionAcross {
|
|
||||||
// fmt.Printf(". %d-across: %s: %s\n", clue.Number, clue.Clue, clue.Solution)
|
|
||||||
// } else {
|
|
||||||
// fmt.Printf(". %d-down: %s: %s\n", clue.Number, clue.Clue, clue.Solution)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
fmt.Printf("%s\n", puzzle.Copyright)
|
fmt.Printf("%s\n", puzzle.Copyright)
|
||||||
// for {
|
|
||||||
// n, _ := os.Stdin.Read(make([]byte, 1))
|
selectedCell := 1
|
||||||
// if n > 0 {
|
|
||||||
// return
|
for {
|
||||||
// }
|
time.Sleep(500 * time.Millisecond)
|
||||||
// }
|
|
||||||
|
fmt.Printf("\x1b[%dA", puzzle.Height+6)
|
||||||
|
fmt.Print("\x1b[J")
|
||||||
|
|
||||||
|
fmt.Printf("TITLE: %s\n", puzzle.Title)
|
||||||
|
fmt.Printf("AUTHOR: %s\n", puzzle.Author)
|
||||||
|
fmt.Println(RenderPuzzle(puzzle.Solution, puzzle.Width, puzzle.Height, puzzle.Clues[selectedCell].Cells, 1))
|
||||||
|
fmt.Printf("%s\n", puzzle.Copyright)
|
||||||
|
|
||||||
|
selectedCell++
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+24
-8
@@ -7,6 +7,8 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"math"
|
"math"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"golang.org/x/text/encoding/charmap"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Direction int
|
type Direction int
|
||||||
@@ -65,6 +67,20 @@ func startOfAcrossClue(puzzle string, width, index int) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func readText(b *bufio.Reader) (string, error) {
|
||||||
|
text, err := b.ReadString(0x00)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
decoded, err := charmap.ISO8859_1.NewDecoder().String(text[:len(text)-1])
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return decoded, nil
|
||||||
|
}
|
||||||
|
|
||||||
func ParsePuz(file []byte) (*Puzzle, error) {
|
func ParsePuz(file []byte) (*Puzzle, error) {
|
||||||
// read magic bytes
|
// read magic bytes
|
||||||
magic := string(file[2:14])
|
magic := string(file[2:14])
|
||||||
@@ -92,32 +108,32 @@ func ParsePuz(file []byte) (*Puzzle, error) {
|
|||||||
// read text
|
// read text
|
||||||
buf := bufio.NewReader(bytes.NewReader(file[stateEnd:]))
|
buf := bufio.NewReader(bytes.NewReader(file[stateEnd:]))
|
||||||
|
|
||||||
title, err := buf.ReadString(0x00)
|
title, err := readText(buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
puzzle.Title = title[:len(title)-1]
|
puzzle.Title = title
|
||||||
|
|
||||||
author, err := buf.ReadString(0x00)
|
author, err := readText(buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
puzzle.Author = author[:len(author)-1]
|
puzzle.Author = author
|
||||||
|
|
||||||
copyright, err := buf.ReadString(0x00)
|
copyright, err := readText(buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
puzzle.Copyright = copyright[:len(copyright)-1]
|
puzzle.Copyright = copyright
|
||||||
|
|
||||||
// read clues
|
// read clues
|
||||||
clues := make([]string, 0, puzzle.ClueCount)
|
clues := make([]string, 0, puzzle.ClueCount)
|
||||||
for range puzzle.ClueCount {
|
for range puzzle.ClueCount {
|
||||||
clue, err := buf.ReadString(0x00)
|
clue, err := readText(buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
clues = append(clues, clue[:len(clue)-1])
|
clues = append(clues, clue)
|
||||||
}
|
}
|
||||||
|
|
||||||
// assign clue numbers
|
// assign clue numbers
|
||||||
|
|||||||
Reference in new issue
Block a user