/* SKK辞書から漢字を含む変換候補を抽出し「漢漢俺俺」辞書を作成する。 『お前がいま感じている漢字は精神的漢直の一種だ。しずめる方法は俺が知っている。俺に任せろ。』 【使用法】 1. まるっとSKKFEP最新版をインストールする (またはskk-dict.txtの名前でL辞書をカレントに置く) 2. 本スクリプトを実行するとカレントディレクトリにファイルが生成される 3. 生成されたskk-kanji.txtを辞書フォルダへ SKKFEP虚数バージョン8以降(対動的補完探索空間制限装置解除版)の漢直設定と組み合わせて使うこと。 このスクリプトはCC0 PUBLIC DOMAINです。 */ X = ActiveXObject F = new X("Scripting.FileSystemObject") S = new X("WScript.Shell") /// 単語を抽出してSKK辞書を構築 function create_kanji(dict, kanji, limit) { // 文字コードを変換し行単位に分割 var a with (new ActiveXObject("ADODB.Stream")) { Type = 2 Charset = "iso-8859-1" Open() LoadFromFile(dict) var t = ReadText(2) Close() Charset = t == "\xFF\xFE" ? "utf-16" : "_autodetect" Open() LoadFromFile(dict) a = ReadText(-1).split(/\r|\n|\r\n/) Close() } // 漢字を含む単語を抽出 var d = {} if (!limit) limit = 4 // 文字数指定省略時は4文字以上 for (var l in a) { if (a[l].charAt(0) == ";") continue var z = a[l].split(" ")[0] if (z.indexOf("#") + 1 || z.indexOf(">") + 1) continue if (z.match(/[a-z]$/)) continue // 送りありエントリをテキトーに除外 z = a[l].split("/") // concat?こまけぇこたぁいいんだよ outer: for (var n = 1; n < z.length - 1; n++) { var s = z[n] if (s.indexOf(";") < 0) s = s.replace(/\s/g, "") if (s.indexOf("?") + 1) continue // 出力結果に「自信」を持たせる var x = s.split(";")[0] if (x.length < limit) continue // 文字数が足りなければ除外 var t = 0; for (var i = 0; i < x.length; i++) { var c = x.charCodeAt(i) if (0x3400 <= c && c < 0xFB00) t++ } if (t == 0) continue // 漢字っぽくなければ除外 if (!(x in d) || d[x].length < s.length) d[x] = s } } // 整形してソート a = [] for (var t in d) a.push(t + " /" + d[t] + "/") a.sort() // OS内部形式(UTF-16リトルエンディアンBOMありCRLF改行)で出力 with (F.CreateTextFile(kanji, true, true)) { Write(a.join("\r\n")) Close() } } B = S.ExpandEnvironmentStrings("%windir%\\IME\\SKK0\\DICTS\\") L = [ B + "skk-dict.txt", B + "SKK-JISYO.L", "skk-dict.txt" ] for (i in L) !F.FileExists(L[i]) || create_kanji(L[i], "skk-kanji.txt")