1- package sec64
1+ package encode
22
33import (
4- "fmt"
54 "strings"
5+
6+ "github.com/codeharik/secretary/utils"
67)
78
89var (
@@ -20,104 +21,83 @@ var (
2021 **/
2122
2223 // ABCDEFGHIJKLMNOPQRSTUVWXYZ | [{}]
23- ASCII = []byte (`~abcdefghijklmnopqrstuvwxyz0123456789=+-*/\%^<>!?@#$&(),;:'"_. N` )
24- SEC64 = []byte (`-abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWX._+` )
24+ ASCII64 = []byte (`~abcdefghijklmnopqrstuvwxyz0123456789=+-*/\%^<>!?@#$&(),;:'"_. N` )
25+ SEC64 = []byte (`-abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWX._+` )
2526 // 0123456789012345678901234567890123456789012345678901234567890123
2627)
2728
28- type Sec64 struct {
29- index byte
30- char byte
31- }
32-
3329var (
34- Ascii2Sec [256 ]Sec64
35- Sec2Ascii [256 ]Sec64
30+ ASCII64Index = [256 ]byte {}
31+ SEC64Index = [256 ]byte {}
3632)
3733
3834func init () {
39- ASCII [63 ] = '\n'
35+ ASCII64 [63 ] = '\n'
4036
41- for i := range Ascii2Sec {
42- Sec2Ascii [i ] = Sec64 { index : 0 , char : '~' }
43- Ascii2Sec [i ] = Sec64 { index : 0 , char : '-' }
37+ for i := range ASCII64Index {
38+ ASCII64Index [i ] = 0
39+ SEC64Index [i ] = 0
4440 }
45- for i := 1 ; i < 63 ; i ++ {
46- Ascii2Sec [ASCII [i ]] = Sec64 {index : byte (i ), char : SEC64 [i ]}
47- Sec2Ascii [SEC64 [i ]] = Sec64 {index : byte (i ), char : ASCII [i ]}
41+
42+ for i := 1 ; i < 64 ; i ++ {
43+ ASCII64Index [ASCII64 [i ]] = byte (i )
44+ SEC64Index [SEC64 [i ]] = byte (i )
4845 }
4946 for c := 'A' ; c <= 'Z' ; c ++ {
50- Ascii2Sec [c ] = Sec64 { index : byte (c - 'A' + 1 ), char : SEC64 [ c - 'A' + 1 ]}
47+ ASCII64Index [c ] = byte (c - 'A' + 1 )
5148 }
5249 brackets := map [rune ]rune {'[' : '(' , ']' : ')' , '{' : '(' , '}' : ')' , '|' : '\\' }
5350 for k , v := range brackets {
54- Ascii2Sec [k ] = Ascii2Sec [v ]
55- }
56-
57- Sec2Ascii ['+' ] = Sec64 {index : 63 , char : '\n' }
58- Ascii2Sec ['\n' ] = Sec64 {index : 63 , char : '+' }
59-
60- for i := 0 ; i < 128 ; i ++ {
61- c := rune (i )
62- fmt .Printf (
63- "%3d %-7q A2S: %-4d %-4q S2A: %-4d %-4q\n " ,
64- i , c ,
65- Ascii2Sec [c ].index , Ascii2Sec [c ].char , Sec2Ascii [c ].index , Sec2Ascii [c ].char ,
66- )
51+ ASCII64Index [k ] = ASCII64Index [v ]
6752 }
68- fmt .Println ()
69- fmt .Println (string (SEC64 ))
70- fmt .Println (string (ASCII ))
7153}
7254
7355func AsciiToSec64 (str string ) string {
74- enc := make ([] byte , len ( str ))
75- for i := 0 ; i < len (str ); i ++ {
76- enc [ i ] = Ascii2Sec [ str [ i ]]. char
77- }
78- return string ( enc )
56+ return string ( utils . Map (
57+ [] byte (str ),
58+ func ( c byte ) byte {
59+ return SEC64 [ ASCII64Index [ c ]]
60+ }) )
7961}
8062
81- func AsciiToIndex (str string ) []byte {
82- enc := make ([] byte , len ( str ))
83- for i := 0 ; i < len (str ); i ++ {
84- enc [ i ] = Ascii2Sec [ str [ i ]]. index
85- }
86- return enc
63+ func Ascii64ToIndex (str string ) []byte {
64+ return utils . Map (
65+ [] byte (str ),
66+ func ( c byte ) byte {
67+ return ASCII64Index [ c ]
68+ })
8769}
8870
89- func IndexToAscii (indexes []byte ) string {
90- str := make ([]byte , len (indexes ))
91- for i := 0 ; i < len (indexes ); i ++ {
92- str [i ] = ASCII [indexes [i ]]
93- // fmt.Printf("%-3d %-3d %-3q %-3d\n", i, indexes[i], string(str[i]), str[i])
94- }
95- fmt .Println ()
96- return string (str )
71+ func IndexToAscii64 (indexes []byte ) string {
72+ return string (utils .Map (
73+ indexes ,
74+ func (i byte ) byte {
75+ return ASCII64 [i ]
76+ }))
9777}
9878
9979func Sec64ToAscii (str string ) string {
100- dec := make ([] byte , len ( str ))
101- for i := 0 ; i < len (str ); i ++ {
102- dec [ i ] = Sec2Ascii [ str [ i ]]. char
103- }
104- return string ( dec )
80+ return string ( utils . Map (
81+ [] byte (str ),
82+ func ( c byte ) byte {
83+ return ASCII64 [ SEC64Index [ c ]]
84+ }) )
10585}
10686
10787func Sec64ToIndex (str string ) []byte {
108- dec := make ([] byte , len ( str ))
109- for i := 0 ; i < len (str ); i ++ {
110- dec [ i ] = Sec2Ascii [ str [ i ]]. index
111- }
112- return dec
88+ return utils . Map (
89+ [] byte (str ),
90+ func ( c byte ) byte {
91+ return SEC64Index [ c ]
92+ })
11393}
11494
11595func IndexToSec64 (indexes []byte ) string {
116- str := make ([] byte , len ( indexes ))
117- for i := 0 ; i < len ( indexes ); i ++ {
118- str [ i ] = SEC64 [ indexes [ i ]]
119- }
120- return string ( str )
96+ return string ( utils . Map (
97+ indexes ,
98+ func ( i byte ) byte {
99+ return SEC64 [ i ]
100+ }) )
121101}
122102
123103func AsciiToSec64Expand (str string ) string {
0 commit comments