char.go 2.9 KB
Newer Older
liming6's avatar
liming6 committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package utils

import (
	"slices"
	"strings"
)

type CharType byte

const (
	MW = `
⠀⠀|⠁⡇|⠂⡆|⠃⡇|⠄⡄|⠅⡇|⠆⡆|⠇⡇|⠈⢸|⠉⣿|⠊⣾|⠋⣿|⠌⣼|⠍⣿|⠎⣾|⠏⣿
⠐⢰|⠑⣷|⠒⣶|⠓⣷|⠔⣴|⠕⣷|⠖⣶|⠗⣷|⠘⢸|⠙⣿|⠚⣾|⠛⣿|⠜⣼|⠝⣿|⠞⣾|⠟⣿
⠠⢠|⠡⣧|⠢⣦|⠣⣧|⠤⣤|⠥⣧|⠦⣦|⠧⣧|⠨⢸|⠩⣿|⠪⣾|⠫⣿|⠬⣼|⠭⣿|⠮⣾|⠯⣿
⠰⢰|⠱⣷|⠲⣶|⠳⣷|⠴⣴|⠵⣷|⠶⣶|⠷⣷|⠸⢸|⠹⣿|⠺⣾|⠻⣿|⠼⣼|⠽⣿|⠾⣾|⠿⣿
⡀⡀|⡁⡇|⡂⡆|⡃⡇|⡄⡄|⡅⡇|⡆⡆|⡇⡇|⡈⣸|⡉⣿|⡊⣾|⡋⣿|⡌⣾|⡍⣿|⡎⣾|⡏⣿
⡐⣰|⡑⣷|⡒⣶|⡓⣷|⡔⣴|⡕⣷|⡖⣶|⡗⣷|⡘⣸|⡙⣿|⡚⣾|⡛⣿|⡜⣼|⡝⣿|⡞⣾|⡟⣿
⡠⣠|⡡⣧|⡢⣦|⡣⣧|⡤⣤|⡥⣧|⡦⣦|⡧⣧|⡨⣸|⡩⣿|⡪⣾|⡫⣿|⡬⣼|⡭⣿|⡮⣾|⡯⣿
⡰⣰|⡱⣷|⡲⣶|⡳⣷|⡴⣴|⡵⣷|⡶⣶|⡷⣷|⡸⣸|⡹⣿|⡺⣾|⡻⣿|⡼⣼|⡽⣿|⡾⣾|⡿⣿
⢀⢀|⢁⣇|⢂⣆|⢃⣇|⢄⣄|⢅⣇|⢆⣆|⢇⣇|⢈⢸|⢉⣿|⢊⣾|⢋⣿|⢌⣼|⢍⣿|⢎⣾|⢏⣿
⢐⢰|⢑⣷|⢒⣶|⢓⣷|⢔⣴|⢕⣷|⢖⣶|⢗⣷|⢘⢸|⢙⣿|⢚⣾|⢛⣿|⢜⣼|⢝⣿|⢞⣾|⢟⣿
⢠⢠|⢡⣧|⢢⣦|⢣⣧|⢤⣤|⢥⣧|⢦⣦|⢧⣧|⢨⢸|⢩⣿|⢪⣾|⢫⣿|⢬⣼|⢭⣿|⢮⣾|⢯⣿
⢰⢰|⢱⣷|⢲⣶|⢳⣷|⢴⣴|⢵⣷|⢶⣶|⢷⣷|⢸⢸|⢹⣿|⢺⣾|⢻⣿|⢼⣼|⢽⣿|⢾⣾|⢿⣿
⣀⣀|⣁⣇|⣂⣆|⣃⣇|⣄⣄|⣅⣇|⣆⣆|⣇⣇|⣈⣸|⣉⣿|⣊⣾|⣋⣿|⣌⣼|⣍⣿|⣎⣾|⣏⣿
⣐⣰|⣑⣷|⣒⣶|⣓⣷|⣔⣴|⣕⣷|⣖⣶|⣗⣷|⣘⣸|⣙⣿|⣚⣾|⣛⣿|⣜⣼|⣝⣿|⣞⣾|⣟⣿
⣠⣠|⣡⣧|⣢⣦|⣣⣧|⣤⣤|⣥⣧|⣦⣦|⣧⣧|⣨⣸|⣩⣿|⣪⣾|⣫⣿|⣬⣼|⣭⣿|⣮⣾|⣯⣿
⣰⣰|⣱⣷|⣲⣶|⣳⣷|⣴⣴|⣵⣷|⣶⣶|⣷⣷|⣸⣸|⣹⣿|⣺⣾|⣻⣿|⣼⣼|⣽⣿|⣾⣾|⣿⣿
`

	SpaceMW              = rune('⠀')
	FullMW               = rune('⣿')
	LeftFullMW           = rune('⡇')
	RightFullMW          = rune('⢸')
	OneThreeMW           = rune('⣸')
	CharLeft    CharType = 1 << 2
	CharRight   CharType = 1 << 1
	CharEmpty   CharType = 0
	CharFull    CharType = CharLeft + CharRight
)

var (
	MM          = Full()
	LeftOnlyMW  = []rune("⠁⠂⠄⡀⠃⡄⠆⠅⡁⡂⡆⠇⡃⡅⡇")
	RightOnlyMW = []rune("⠈⠐⠠⢀⠘⠰⠨⢈⢐⢠⢘⢨⠸⢰⢸")
)

func Full() map[rune]rune {
	result := make(map[rune]rune)
	str := strings.ReplaceAll(strings.ReplaceAll(strings.Trim(MW, "\n"), "|", ""), "\n", "")
	runes := []rune(str)
	l := len(runes) / 2
	for i := range l {
		k := runes[2*i]
		v := runes[2*i+1]
		if k != v {
			result[k] = v
		}
	}
	return result
}

func GetCharType(r rune) CharType {
	if r == ' ' || r == SpaceMW {
		return CharEmpty
	}
	if slices.Contains(LeftOnlyMW, r) {
		return CharLeft
	}
	if slices.Contains(RightOnlyMW, r) {
		return CharRight
	}
	return CharFull
}

func CharTypeOr(a, b CharType) CharType {
	return CharType(a | b)
}