/* mozcの絵文字辞書をSKK辞書に変換する https://raw.githubusercontent.com/google/mozc/master/src/data/emoji/emoji_data.tsv をダウンロードしてこのプログラムで変換すべし。 */ F = new ActiveXObject("Scripting.FileSystemObject") /// mozcの絵文字辞書をSKK辞書に変換する /** @note 註釈に「日本語」だけを使うと形状や色の情報が足りず不便なため、 DoCoMo→au→SoftBank→日本語の順で最初に見つけた説明を採用する。 */ function convert_emoji(dict, filename) { function rep(s, a, b) { var i, c = s.split("") for (i in c) if ((n = a.indexOf(c[i])) + 1) c[i] = b.charAt(n) return c.join("") } var a, l, t, i, c, d = {}, z = "+−()0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdez", h = "+-()0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdez" // 入力 with (new ActiveXObject("ADODB.Stream")) { Charset = "iso-8859-1" Open() LoadFromFile(dict) t = ReadText(2) Close() Charset = "utf-8" // ADODB.Streamの自動認識が効かない……だと…… Open() LoadFromFile(dict) a = ReadText(-1).split(/\r|\n|\r\n/) Close() } // 抽出 for (l in a) { l = a[l] if (l.charAt(0) == "#") continue t = l.split("\t") if (t[1] && t[6]) { s = t[6].split(" ") for (i in s) { i = rep(s[i], z + "/!?", h + "/!?").replace(/ヴ/g, "う゛").toLowerCase() if (i == "・") continue // SKK的に問題があるエントリを除外・補正 if (i == "#") continue // 「むかっ」で代用 if (i == "eめーる") continue // 「めーる」で代用 if (i == "tしゃつ") continue // 「しゃつ」で代用 if (i == "ー") i = "-" c = "" if (t[9]) c = t[9] // DoCoMo else if (t[11]) c = t[11] // au else if (t[10]) c = t[10] // SoftBank else if (t[8]) c = t[8] // 日本語 c = rep(c, z + "アンテナマーク", h + "アンテナマーク").replace(/(\w)!/g, "$1!") c = c ? t[1] + ";" + c : t[1] if (i in d) d[i] += "/" + c else d[i] = c } } } // 構築 a = [] for (t in d) a.push(t + " /" + d[t] + "/") a.sort() // 出力 with (F.CreateTextFile(filename, 1, 1)) { WriteLine(";; 絵文字辞書 https://raw.githubusercontent.com/google/mozc/master/src/data/emoji/emoji_data.tsv") WriteLine(";; okuri-ari entries.") WriteLine(";; okuri-nasi entries.") WriteLine(a.join("\r\n")) Close() } } convert_emoji("emoji_data.tsv", "skk-x-emoji.txt")