rime 输入法添加词库的代码运行报错,哪位老大给修改下啊 Topic is solved

遇到了问题?请先进行搜索(中文和英文),然后在此提问

Moderators: tmplinshi, arcticir

zyd82128

rime 输入法添加词库的代码运行报错,哪位老大给修改下啊  Topic is solved

25 Dec 2023, 08:09

Code: Select all

#SingleInstance Force
;添加选中内容到词库
F9::
add2Rime()
return

;添加选中单词到词库
;我词库分为单字fpSingle(常用字,可能会添加生僻字)、自带词组(不动)、用户词组fpUser(大部分修改)、英语fpEng(常用英语和【U盘】这样的词组)
add2Rime()
{
    ;用户目录 dirUser
    if !DirExist(dirUser := RegRead("HKEY_CURRENT_USER\Software\Rime\Weasel", "RimeUserDir"))
    {
        msgbox("用户目录不存在")
        return
    }
    fpSingle := dirUser . "\wubi86.hy.dict.yaml" ;单字词库
    fpUser := dirUser . "\wubi86.user.dict.yaml" ;用户词库
    fpEng := dirUser . "\wubi86.eng.dict.yaml" ;英语词库
    ;软件安装目录 dirSoft(里面有 WeaselServer.exe 和 WeaselDeployer.exe)
    if !DirExist(dirSoft := RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Rime\Weasel", "WeaselRoot"))
    {
        msgbox("软件安装目录不存在")
        return
    }
    ;复制选中内容
    clipSave := ClipboardAll
    clipboard := ""
    send("{ctrl down}c{ctrl up}")
    if !ClipWait(0.5)
    {
        msgbox("没复制到内容",,262144)
        clipboard := clipSave
        return
    }
    ;过滤无效内容
    if !strlen(word := trim(clipboard, "`t`r`n ")) ;空白内容
        return
    if (word ~= "(\w\W|\W\w)") ;【U盘】这种词不处理
        return
    ;开始处理
    if (word ~= "^\w+$" && FileExist(fpEng)) ;全字母(【U盘】这种手动添加)
        FileAppend(format("{1}`t{2}`r`n", word,StrLower(substr(word,1,4))), fpEng, "utf-8")
    else ;中文
    {
        bm := this.getCode(word) ;若有问题 getCode 会直接退出
        if (strlen(word) > 1) ;多字
        {
            if !FileExist(fpUser)
            {
                msgbox(format("词库不存在`n{1}", fpUser))
                return
            }
            if (FileRead(fpUser, "utf-8") ~= "`n" . word . "`t")
            {
                msgbox("已存在词组")
                return
            }
            FileAppend(format("{1}`t{2}`t9`r`n", word,bm), fpUser, "utf-8")
        }
        else
        {
            if !FileExist(fpSingle)
            {
                msgbox(format("单字词库不存在`n{1}", fpSingle))
                return
            }
            if (FileRead(fpSingle, "utf-8") ~= "`n" . word . "`t")
            {
                msgbox("已存在单字")
                return
            }
            FileAppend(format("{1}`t{2}`r`n", word,bm), fpSingle, "utf-8")
        }
    }
    if !ProcessExist("WeaselServer.exe")
        run(dirSoft . "\WeaselServer.exe")
    run(format("{1}\WeaselDeployer.exe /deploy", dirSoft))
}

getCode(word) ;获取中文词组的86五笔编码
{
    if !(word ~= "^[\x{4E00}-\x{9FA5}]")
        _Debug.msgExit(word . "`n要求全中文", A_LineFile, A_LineNumber)
    ;修改4字以上的词组
    if (strlen(word) >4)
        word := substr(word,1,3) . substr(word,-1)
    SplitPath(A_LineFile, , dir)
    strAll := FileRead(dir . "\86五笔单字码表.txt")
    arr := []
    loop parse, word
    {
        RegExMatch(strAll, "i)\w+(?= " . A_LoopField . ")", m)
        arr.push(m[0])
    }
    if (strlen(word) == 1)
        return arr[1]
    if (strlen(word) == 2)
        return substr(arr[1], 1, 2) . substr(arr[2], 1, 2)
    else if (strlen(word) == 3)
        return substr(arr[1], 1, 1) . substr(arr[2], 1, 1) . substr(arr[3], 1, 2)
    else
        return substr(arr[1], 1, 1) . substr(arr[2], 1, 1) . substr(arr[3], 1, 1) . substr(arr[4], 1, 1)
}

Return to “请求帮助”

Who is online

Users browsing this forum: No registered users and 55 guests