Skip to content

Commit 4e9223f

Browse files
committed
feat(banner): randomize character set between Katakana, Cyrillic, and Greek on each run
1 parent 2da7079 commit 4e9223f

1 file changed

Lines changed: 13 additions & 3 deletions

File tree

internal/banner/banner.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,15 @@ var quotesList = []Quote{
5252
{Text: "Information wants to be free.", Author: "Stewart Brand"},
5353
}
5454

55-
// Character set matching JS RETICLE_CHARS — 20 katakana + 16 hex digits.
56-
var matrixChars = []rune("アイウエオカキクケコサシスセソタチツテト0123456789ABCDEF")
55+
// charSets contains alternate character sets for the reticle animation.
56+
// One is chosen at random each run.
57+
var charSets = [][]rune{
58+
[]rune("アイウエオカキクケコサシスセソタチツテト0123456789ABCDEF"), // Katakana
59+
[]rune("АБВГДЕЖЗИКЛМНОПРСТУФ0123456789ABCDEF"), // Cyrillic
60+
[]rune("ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥ0123456789ABCDEF"), // Greek
61+
}
62+
63+
var matrixChars []rune
5764

5865
const (
5966
reticleWidth = 80
@@ -89,11 +96,14 @@ type reticleChar struct {
8996
var reticleChars []reticleChar
9097

9198
func init() {
99+
matrixChars = charSets[mathrand.Intn(len(charSets))] // #nosec G404 -- decorative
92100
reticleChars = generateReticle()
93101
}
94102

95103
func isWide(r rune) bool {
96-
return r >= 0x30A0 && r <= 0x30FF
104+
return (r >= 0x30A0 && r <= 0x30FF) || // Katakana
105+
(r >= 0x4E00 && r <= 0x9FFF) || // CJK
106+
(r >= 0xAC00 && r <= 0xD7AF) // Hangul
97107
}
98108

99109
func visibleWidth(s string) int {

0 commit comments

Comments
 (0)