Skip to content

Commit 3fdaacd

Browse files
committed
新增驼峰命名解析翻译
优化剪切板内容解析
1 parent 192cad0 commit 3fdaacd

4 files changed

Lines changed: 67 additions & 27 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ Usage of devc:
3838
-tran
3939
[翻译工具] 开启自动检测翻译,关键字翻译将关闭
4040
-w
41-
[翻译工具] 将翻译内容写入剪切板
41+
[翻译工具|关键字翻译] 将翻译内容写入剪切板
4242
```
4343

4444
[**注意**]:关键字翻译和翻译工具命令不能同时,同时使用优先翻译工具,未指定参数默认关键字翻译

internal/classify_text.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,11 @@ func IsCamelCase(text string) bool {
3737
if !match {
3838
// 大驼峰
3939
re = regexp.MustCompile(`^[A-Z][a-z]+(?:[A-Z][a-z]*)+$`)
40-
return re.MatchString(text)
40+
match = re.MatchString(text)
41+
}
42+
if !match {
43+
// 下划线
44+
match = isSnakeCase(text)
4145
}
4246
return match
4347
}
@@ -123,9 +127,6 @@ func ClassifyText(text string) int {
123127
} else if IsCamelCase(text) {
124128
fmt.Println("驼峰命名")
125129
return CAMEL_CASE
126-
} else if isSnakeCase(text) {
127-
fmt.Println("下划线命名")
128-
return SNAKE_CASE
129130
} else if IsCodeSnippet(text) {
130131
fmt.Println("代码片段")
131132
return CODE_SNIPPET

internal/content.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"os"
1414
"path/filepath"
1515
"strings"
16+
"unicode"
1617
)
1718

1819
// ToCamelCase 驼峰命名,返回内容 Chinese character|ChineseCharacter|chineseCharacter|chinese_character
@@ -38,6 +39,27 @@ func ToCamelCase(content string) string {
3839
return strings.Join(result, "|")
3940
}
4041

42+
// CamelToWord 驼峰命名转单词
43+
func CamelToWord(s string) string {
44+
// 下划线命名
45+
if strings.Contains(s, "_") {
46+
return strings.Join(strings.Split(s, "_"), " ")
47+
}
48+
var result strings.Builder
49+
for i, r := range s {
50+
// 如果是大写字母,且不是第一个字符,则在前面加上空格
51+
if unicode.IsUpper(r) {
52+
if i > 0 {
53+
result.WriteRune(' ')
54+
}
55+
result.WriteRune(unicode.ToLower(r))
56+
} else {
57+
result.WriteRune(r)
58+
}
59+
}
60+
return result.String()
61+
}
62+
4163
// AppendFile 追加写入
4264
func AppendFile(path, content string) {
4365
file, err := os.OpenFile(path, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644)

main.go

Lines changed: 39 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -20,26 +20,25 @@ import (
2020

2121
// 中文字符长度,需要乘 3,中文占 3 个字节
2222
// ==================== 命令行参数
23-
var top = flag.Bool("top", false, "[窗口] 置顶当前 CMD 窗口")
24-
var han = flag.Int("han", 4, "[关键字翻译] 汉语关键字长度,默认支持4个汉字,最少2个汉字。例如:订单编号、订单状态、创建时间")
25-
var hump = flag.Int("hump", 1, "[关键字翻译] 将翻译内容写入剪切板,命名规则:1.大驼峰 2.小驼峰 3.下划线")
26-
var tran = flag.Bool("tran", false, "[翻译工具] 开启自动检测翻译,关键字翻译将关闭")
27-
var w = flag.Bool("w", false, "[翻译工具] 将翻译内容写入剪切板")
23+
var top bool
24+
var han int
25+
var hump int
26+
var tran bool
27+
var w bool
2828

2929
var dicts []string
3030

3131
var devPath = "./"
3232

3333
func init() {
34+
flag.BoolVar(&top, "top", false, "[窗口] 置顶当前 CMD 窗口")
35+
flag.IntVar(&han, "han", 4, "[关键字翻译] 汉语关键字长度,默认支持4个汉字,最少2个汉字。例如:订单编号、订单状态、创建时间")
36+
flag.IntVar(&hump, "hump", 1, "[关键字翻译] 将翻译内容写入剪切板,命名规则:1.大驼峰 2.小驼峰 3.下划线")
37+
flag.BoolVar(&tran, "tran", false, "[翻译工具] 开启自动检测翻译,关键字翻译将关闭")
38+
flag.BoolVar(&w, "w", false, "[翻译工具|关键字翻译] 将翻译内容写入剪切板")
3439
// 解析命令行参数
3540
flag.Parse()
3641

37-
// 打印参数值
38-
//fmt.Println("top:", *top)
39-
//fmt.Println("han:", *han)
40-
//fmt.Println("hump:", *hump)
41-
//fmt.Println("tran:", *tran)
42-
4342
// 应用程序数据的存储目录
4443
devPath = os.Getenv("DEVC")
4544
if len(devPath) == 0 {
@@ -65,31 +64,33 @@ func writeHistory(content string) {
6564

6665
func main() {
6766
// 置顶窗口
68-
if *top {
67+
if top {
6968
internal.TopUp()
7069
}
71-
length := *han
70+
length := han
7271
if length < 2 {
7372
length = 2
7473
}
74+
7575
// 临时写入
7676
tempWrite := ""
77+
tempData := ""
7778
// 开始监听
7879
watch := internal.Watch()
7980
for data := range watch {
8081
// 跳过空内容、跳过写入剪切板内容
81-
if len(strings.TrimSpace(data)) == 0 || strings.Contains(tempWrite, data) || tempWrite == data {
82+
if len(strings.TrimSpace(data)) == 0 || strings.Contains(tempWrite, data) || tempWrite == data || strings.Contains(tempData, data) || tempData == data {
8283
continue
8384
}
84-
8585
// 历史记录
8686
go writeHistory(data)
87+
tempData = data
8788

88-
if *tran {
89+
if tran {
8990
translate := internal.Translate(data)
9091
fmt.Println("原文->", data)
9192
fmt.Println("翻译->", translate)
92-
if *w && len(translate) > 0 {
93+
if w && len(translate) > 0 {
9394
err := internal.SetClipboardData(translate)
9495
if err != nil {
9596
fmt.Println("写入失败")
@@ -103,26 +104,42 @@ func main() {
103104
line := internal.FindDict(data, dicts)
104105
if len(line) > 0 {
105106
fmt.Println("缓存->" + line)
106-
tempWrite = internal.SetData(line, *hump)
107+
if w {
108+
tempWrite = internal.SetData(line, hump)
109+
}
107110
} else if len(data) <= length*3 {
108111
translate := internal.Translate(data)
109112
if len(translate) > 0 {
110113
line = fmt.Sprintf("%s|%s\n", data, internal.ToCamelCase(translate))
111114
fmt.Print("翻译->" + line)
112115
go internal.SaveDicts(devPath, line)
113116
dicts = append(dicts, line)
114-
tempWrite = internal.SetData(line, *hump)
117+
if w {
118+
tempWrite = internal.SetData(line, hump)
119+
}
115120
}
116121
}
117122
} else if textType == internal.ENGLISH { // 英文
118123
line := internal.FindDict(data, dicts)
119124
if len(line) > 0 {
120125
fmt.Println("缓存->" + line)
121-
tempWrite = internal.SetData(line, *hump)
126+
if w {
127+
tempWrite = internal.SetData(line, hump)
128+
}
122129
} else {
123130
translate := internal.Translate(data)
124-
fmt.Println("中文->", data)
125-
fmt.Println("英文->", translate)
131+
fmt.Println("英文->", data)
132+
fmt.Println("中文->", translate)
133+
}
134+
} else if textType == internal.CAMEL_CASE { // 驼峰
135+
word := internal.CamelToWord(data)
136+
line := internal.FindDict(data, dicts)
137+
fmt.Println("格式转换->" + word)
138+
if len(line) > 0 {
139+
fmt.Println("字典缓存->" + strings.Split(line, "|")[0])
140+
} else {
141+
translate := internal.Translate(word)
142+
fmt.Println("转换翻译->", translate)
126143
}
127144
} else {
128145
fmt.Println("排除内容->" + data)

0 commit comments

Comments
 (0)