-
Notifications
You must be signed in to change notification settings - Fork 0
/
strings.go
125 lines (116 loc) · 2.94 KB
/
strings.go
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package ralphred
import (
"crypto/md5"
"crypto/sha1"
"crypto/sha256"
"crypto/sha512"
"fmt"
"strings"
)
type StringConversion struct {
Description string
Convert func(string) string
}
var string_conversions = map[string]StringConversion{
"length": {
Description: "Return the length of the string",
Convert: func(input_string string) string {
return fmt.Sprintf("%d", len(input_string))
},
},
"words": {
Description: "Return the number of words in the string",
Convert: func(input_string string) string {
return fmt.Sprintf("%d", len(strings.Fields(input_string)))
},
},
"lower": {
Description: "Return the string lower cased",
Convert: func(input_string string) string {
return strings.ToLower(input_string)
},
},
"title": {
Description: "Return the string title cased",
Convert: func(input_string string) string {
return strings.Title(strings.ToLower(input_string))
},
},
"upper": {
Description: "Return the string upper cased",
Convert: func(input_string string) string {
return strings.ToUpper(input_string)
},
},
"pymod": {
Description: "Convert filepath to python module path",
Convert: func(input_string string) string {
no_slashes := strings.Replace(input_string, "/", ".", -1)
return strings.TrimSuffix(no_slashes, ".py")
},
},
"unpymod": {
Description: "Convert python module path to filepath",
Convert: func(input_string string) string {
return strings.Replace(input_string, ".", "/", -1) + ".py"
},
},
"md5": {
Description: "Return md5 hash of the string",
Convert: func(input_string string) string {
return hashString(md5.New(), input_string)
},
},
"sha1": {
Description: "Return sha1 hash of the string",
Convert: func(input_string string) string {
return hashString(sha1.New(), input_string)
},
},
"sha256": {
Description: "Return sha256 hash of the string",
Convert: func(input_string string) string {
return hashString(sha256.New(), input_string)
},
},
"sha512": {
Description: "Return 512 hash of the string",
Convert: func(input_string string) string {
return hashString(sha512.New(), input_string)
},
},
}
func stringCommands() []AlfredItem {
helpText := make([]AlfredItem, len(string_conversions))
i := 0
for command, converter := range string_conversions {
helpText[i] = AlfredItem{
UID: command,
Title: command,
Subtitle: converter.Description,
Arg: []string{command + " "},
Autocomplete: command,
}
i++
}
return helpText
}
func stringCommand(args []string) ([]AlfredItem, error) {
if len(args) == 0 {
return stringCommands(), nil
}
if len(args) == 1 {
return []AlfredItem{}, nil
}
subcmd := args[0]
input_string := strings.Join(args[1:], " ")
result := "Unknown string subcommand"
converter, exists := string_conversions[subcmd]
if exists {
result = converter.Convert(input_string)
}
resp := []AlfredItem{
alfredItemFromString(result, false),
}
return resp, nil
}