feat: Support specifying Rime config directory via command args
This commit is contained in:
parent
77a762b7d0
commit
0460c173aa
@ -68,6 +68,11 @@ SORT:
|
|||||||
}
|
}
|
||||||
|
|
||||||
func areYouOK() {
|
func areYouOK() {
|
||||||
|
if rime.AutoConfirm {
|
||||||
|
fmt.Println("Auto confirm enabled. Skipping prompt.")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
fmt.Println("Are you OK:")
|
fmt.Println("Are you OK:")
|
||||||
var isOK string
|
var isOK string
|
||||||
_, _ = fmt.Scanf("%s", &isOK)
|
_, _ = fmt.Scanf("%s", &isOK)
|
||||||
|
@ -28,7 +28,7 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// 初始化特殊词汇列表、需要注音列表、错别字列表、拼音列表
|
// 初始化特殊词汇列表、需要注音列表、错别字列表、拼音列表
|
||||||
func init() {
|
func initCheck() {
|
||||||
// 特殊词汇列表,不进行任何检查
|
// 特殊词汇列表,不进行任何检查
|
||||||
specialWords.Add("狄尔斯–阿尔德反应")
|
specialWords.Add("狄尔斯–阿尔德反应")
|
||||||
specialWords.Add("特里斯坦–达库尼亚")
|
specialWords.Add("特里斯坦–达库尼亚")
|
||||||
@ -102,7 +102,7 @@ func init() {
|
|||||||
text, code := parts[0], parts[1]
|
text, code := parts[0], parts[1]
|
||||||
hanPinyin[text] = append(hanPinyin[text], code)
|
hanPinyin[text] = append(hanPinyin[text], code)
|
||||||
}
|
}
|
||||||
// 给 hanPinyin 补充不再字表的读音,和过滤列表 hanPinyinFilter
|
// 给 hanPinyin 补充不在字表的读音,和过滤列表 hanPinyinFilter
|
||||||
file4, err := os.Open(汉字拼音映射TXT)
|
file4, err := os.Open(汉字拼音映射TXT)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalln(err)
|
log.Fatalln(err)
|
||||||
|
@ -118,7 +118,17 @@ type schema struct {
|
|||||||
file *os.File
|
file *os.File
|
||||||
}
|
}
|
||||||
|
|
||||||
var doublePinyin = schema{
|
var (
|
||||||
|
doublePinyin schema
|
||||||
|
doublePinyinFlypy schema
|
||||||
|
doublePinyinMSPY schema
|
||||||
|
doublePinyinSogou schema
|
||||||
|
doublePinyinZiGuang schema
|
||||||
|
doublePinyinABC schema
|
||||||
|
)
|
||||||
|
|
||||||
|
func initSchemas() {
|
||||||
|
doublePinyin = schema{
|
||||||
name: "cn_en_double_pinyin",
|
name: "cn_en_double_pinyin",
|
||||||
desc: "自然码双拼",
|
desc: "自然码双拼",
|
||||||
combinationType: "unique",
|
combinationType: "unique",
|
||||||
@ -170,9 +180,9 @@ var doublePinyin = schema{
|
|||||||
"in": "n",
|
"in": "n",
|
||||||
"ian": "m",
|
"ian": "m",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
var doublePinyinFlypy = schema{
|
doublePinyinFlypy = schema{
|
||||||
name: "cn_en_flypy",
|
name: "cn_en_flypy",
|
||||||
desc: "小鹤双拼",
|
desc: "小鹤双拼",
|
||||||
combinationType: "unique",
|
combinationType: "unique",
|
||||||
@ -224,9 +234,9 @@ var doublePinyinFlypy = schema{
|
|||||||
"iao": "n",
|
"iao": "n",
|
||||||
"ian": "m",
|
"ian": "m",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
var doublePinyinMSPY = schema{
|
doublePinyinMSPY = schema{
|
||||||
name: "cn_en_mspy",
|
name: "cn_en_mspy",
|
||||||
desc: "微软双拼",
|
desc: "微软双拼",
|
||||||
combinationType: "unique",
|
combinationType: "unique",
|
||||||
@ -279,9 +289,9 @@ var doublePinyinMSPY = schema{
|
|||||||
"in": "n",
|
"in": "n",
|
||||||
"ian": "m",
|
"ian": "m",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
var doublePinyinSogou = schema{
|
doublePinyinSogou = schema{
|
||||||
name: "cn_en_sogou",
|
name: "cn_en_sogou",
|
||||||
desc: "搜狗双拼",
|
desc: "搜狗双拼",
|
||||||
combinationType: "unique",
|
combinationType: "unique",
|
||||||
@ -334,9 +344,9 @@ var doublePinyinSogou = schema{
|
|||||||
"in": "n",
|
"in": "n",
|
||||||
"ian": "m",
|
"ian": "m",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
var doublePinyinZiGuang = schema{
|
doublePinyinZiGuang = schema{
|
||||||
name: "cn_en_ziguang",
|
name: "cn_en_ziguang",
|
||||||
desc: "紫光双拼",
|
desc: "紫光双拼",
|
||||||
combinationType: "unique",
|
combinationType: "unique",
|
||||||
@ -388,9 +398,9 @@ var doublePinyinZiGuang = schema{
|
|||||||
"ui": "n",
|
"ui": "n",
|
||||||
"un": "m",
|
"un": "m",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
var doublePinyinABC = schema{
|
doublePinyinABC = schema{
|
||||||
name: "cn_en_abc",
|
name: "cn_en_abc",
|
||||||
desc: "智能 ABC 双拼",
|
desc: "智能 ABC 双拼",
|
||||||
combinationType: "unique",
|
combinationType: "unique",
|
||||||
@ -442,6 +452,7 @@ var doublePinyinABC = schema{
|
|||||||
"ui": "m",
|
"ui": "m",
|
||||||
"un": "n",
|
"un": "n",
|
||||||
},
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// CnEn 从 others/cn_en.txt 生成全拼和各个双拼的中英混输词库
|
// CnEn 从 others/cn_en.txt 生成全拼和各个双拼的中英混输词库
|
||||||
|
18
others/script/rime/dir_linux.go
Normal file
18
others/script/rime/dir_linux.go
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
//go:build linux
|
||||||
|
// +build linux
|
||||||
|
|
||||||
|
package rime
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
"os/user"
|
||||||
|
"path/filepath"
|
||||||
|
)
|
||||||
|
|
||||||
|
func getRimeDirForPlatform() string {
|
||||||
|
u, err := user.Current()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
return filepath.Join(u.HomeDir, ".config", "rime")
|
||||||
|
}
|
@ -5,26 +5,14 @@ package rime
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
"os/user"
|
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// 获取 macOS/Windows Rime 配置目录
|
// 获取 macOS Rime 配置目录
|
||||||
func getRimeDir() string {
|
func getRimeDirForPlatform() string {
|
||||||
var dir string
|
|
||||||
switch runtime.GOOS {
|
|
||||||
case "darwin": // macOS
|
|
||||||
u, err := user.Current()
|
u, err := user.Current()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalln(err)
|
log.Fatalln(err)
|
||||||
}
|
}
|
||||||
dir = filepath.Join(u.HomeDir, "Library/Rime")
|
return filepath.Join(u.HomeDir, "Library/Rime")
|
||||||
// case "windows": // Windows
|
|
||||||
// dir = getWeaselDir()
|
|
||||||
default:
|
|
||||||
log.Fatalf("Unsupported OS: %s so far", runtime.GOOS)
|
|
||||||
}
|
|
||||||
|
|
||||||
return dir
|
|
||||||
}
|
}
|
||||||
|
@ -7,31 +7,11 @@ import (
|
|||||||
"golang.org/x/sys/windows/registry"
|
"golang.org/x/sys/windows/registry"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"os/user"
|
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// 获取 macOS/Windows Rime 配置目录
|
// 获取 Windows Rime 配置目录
|
||||||
func getRimeDir() string {
|
func getRimeDirForPlatform() string {
|
||||||
var dir string
|
|
||||||
switch runtime.GOOS {
|
|
||||||
case "darwin": // macOS
|
|
||||||
u, err := user.Current()
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalln(err)
|
|
||||||
}
|
|
||||||
dir = filepath.Join(u.HomeDir, "Library/Rime")
|
|
||||||
case "windows": // Windows
|
|
||||||
dir = getWeaselDir()
|
|
||||||
default:
|
|
||||||
log.Fatalf("Unsupported OS: %s so far", runtime.GOOS)
|
|
||||||
}
|
|
||||||
|
|
||||||
return dir
|
|
||||||
}
|
|
||||||
|
|
||||||
func getWeaselDir() string {
|
|
||||||
keyPath := `Software\Rime\Weasel`
|
keyPath := `Software\Rime\Weasel`
|
||||||
valueName := "RimeUserDir"
|
valueName := "RimeUserDir"
|
||||||
|
|
||||||
|
@ -238,7 +238,7 @@ var onlyOne = map[string]string{
|
|||||||
"给": "gei",
|
"给": "gei",
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func initPinyin() {
|
||||||
// 从 base、ext 准备结巴的词典和词组拼音映射
|
// 从 base、ext 准备结巴的词典和词组拼音映射
|
||||||
for _, dictPath := range []string{BasePath, ExtPath} {
|
for _, dictPath := range []string{BasePath, ExtPath} {
|
||||||
file, err := os.Open(dictPath)
|
file, err := os.Open(dictPath)
|
||||||
|
@ -2,6 +2,7 @@ package rime
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
mapset "github.com/deckarep/golang-set/v2"
|
mapset "github.com/deckarep/golang-set/v2"
|
||||||
"log"
|
"log"
|
||||||
@ -22,7 +23,30 @@ type lemma struct {
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
mark = "# +_+" // 词库中的标记符号,表示从这行开始进行检查或排序
|
mark = "# +_+" // 词库中的标记符号,表示从这行开始进行检查或排序
|
||||||
RimeDir = getRimeDir() // Rime 配置目录
|
RimeDir string
|
||||||
|
EmojiMapPath string
|
||||||
|
EmojiPath string
|
||||||
|
HanziPath string
|
||||||
|
BasePath string
|
||||||
|
ExtPath string
|
||||||
|
TencentPath string
|
||||||
|
HanziSet mapset.Set[string]
|
||||||
|
BaseSet mapset.Set[string]
|
||||||
|
ExtSet mapset.Set[string]
|
||||||
|
TencentSet mapset.Set[string]
|
||||||
|
需要注音TXT string
|
||||||
|
错别字TXT string
|
||||||
|
汉字拼音映射TXT string
|
||||||
|
AutoConfirm bool
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// 定义命令行参数
|
||||||
|
flag.StringVar(&RimeDir, "rime_path", "", "Specify the Rime configuration directory")
|
||||||
|
flag.BoolVar(&AutoConfirm, "auto_confirm", false, "Automatically confirm the prompt")
|
||||||
|
flag.Parse()
|
||||||
|
|
||||||
|
RimeDir = getRimeDir(RimeDir) // Rime 配置目录
|
||||||
|
|
||||||
EmojiMapPath = filepath.Join(RimeDir, "others/emoji-map.txt")
|
EmojiMapPath = filepath.Join(RimeDir, "others/emoji-map.txt")
|
||||||
EmojiPath = filepath.Join(RimeDir, "opencc/emoji.txt")
|
EmojiPath = filepath.Join(RimeDir, "opencc/emoji.txt")
|
||||||
@ -40,7 +64,24 @@ var (
|
|||||||
需要注音TXT = filepath.Join(RimeDir, "others/script/rime/需要注音.txt")
|
需要注音TXT = filepath.Join(RimeDir, "others/script/rime/需要注音.txt")
|
||||||
错别字TXT = filepath.Join(RimeDir, "others/script/rime/错别字.txt")
|
错别字TXT = filepath.Join(RimeDir, "others/script/rime/错别字.txt")
|
||||||
汉字拼音映射TXT = filepath.Join(RimeDir, "others/script/rime/汉字拼音映射.txt")
|
汉字拼音映射TXT = filepath.Join(RimeDir, "others/script/rime/汉字拼音映射.txt")
|
||||||
)
|
|
||||||
|
initCheck()
|
||||||
|
initSchemas()
|
||||||
|
initPinyin()
|
||||||
|
}
|
||||||
|
|
||||||
|
func getRimeDir(rimePath string) string {
|
||||||
|
if rimePath != "" {
|
||||||
|
absPath, err := filepath.Abs(rimePath)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to get absolute path: %v", err)
|
||||||
|
}
|
||||||
|
// 使用传入的路径
|
||||||
|
return absPath
|
||||||
|
}
|
||||||
|
|
||||||
|
return getRimeDirForPlatform()
|
||||||
|
}
|
||||||
|
|
||||||
// 将所有词库读入 set,供检查或排序使用
|
// 将所有词库读入 set,供检查或排序使用
|
||||||
func readToSet(dictPath string) mapset.Set[string] {
|
func readToSet(dictPath string) mapset.Set[string] {
|
||||||
|
Loading…
Reference in New Issue
Block a user