// skkeuc version 0.01 /** Project X0213のフォーマットで書かれたEUC→Unicode変換ファイルから、 SKKSプラグイン用のEUC変換テーブルを作成します。 手元にファイルがなければ自動的にProject X0213のホームページからダウ ンロードして改造したファイルを作成します。 プラグイン用の変換テーブルは、1行だけのパワー型ドスコイ文字列形式で す。U+A000〜U+D7FFを圧縮に使用します。行が長過ぎてエディタでは編集で きないかもしれないけど、分類上はテキストファイルです。心は乙女。 【マッピングについて】 このプログラムを使うと、iconv互換マッピングの変換テーブルを生成でき ます。つまりCorvusSKKと同じ動きになります。イヤッホウ! 他のマッピングを利用したい場合は、ソース先頭のURLを変更するか、この プログラムと同じフォルダに"skkeuc.txt"のファイル名でファイルを用意し てください。 "skkeuc.txt"が存在する場合はダウンロードせずファイルの内容をそのまま 利用します。とりあえず1回実行すれば自動的に"skkeuc.txt"が生成される ので、適当にメモ帳などで編集してから再実行すると楽です。 【導入方法】 0. 事前にSKKFEPβ0+9i以降の文字コード変換プラグインをインストールし ておいてください。プラグインのみが入った状態だと、内蔵の変換テーブル (Windows互換マッピング)が使用されます。 1. このファイルを「名前をつけて保存」で適当なフォルダ上にダウンロー ドしておきます。 2. エクスプローラからこのファイルをダブルクリックして実行します。実 行すると、フォルダ内に乙女……テキストファイルが2つモリっと増えます。 3. SKKFEPのインストーラを起動し、「辞書フォルダ」ボタンを押して辞書 フォルダを開き、2で生成されたファイルの片方の"!euc.txt"を辞書フォル ダにコピー(既に古い定義がある場合は上書き)してください。利用をやめる 場合は削除してください。 4. SKKFEPのインストーラで「リフレッシュ」を押すか、「メンテ」を2回押 すか、またはOSを再起動して辞書プロセスの再構築を行えば任務完了です。 【その他】 コマンドラインから実行することでファイル名を直接指定できます。 cscript skkeuc.js [ファイル名] このプログラムはCC0 PUBLIC DOMAINです。 */ U = "http://x0213.org/codetable/euc-jis-2004-std.txt" // U = "http://coexe.web.fc2.com/euc-jis-2004-windows.txt" // U = "http://coexe.web.fc2.com/euc-jis-2004-iconv.txt" I = "skkeuc.txt" O = "!euc.txt" W = WScript, A = W.Arguments, X = ActiveXObject, F = new X("Scripting.FileSystemObject") // 入力 if (A.length) I = A(0) else if (!F.FileExists(I)) D(U, I), d = L(I).replace(/\r\n/g, "\n"), /0xA1B1\tU\+FFE3/.test(d) || (d = "## これは改造版です\n## 改造元: " + U + "\n\n" + d .replace(/(0xA1B1\tU\+)203E/, "$1FFE3") .replace(/(0xA1EF\tU\+)00A5/, "$1FFE5")), S(I, d.replace(/\n/g, "\r\n")) z = L(I).split(/\r\n|\n/g), c = [] // 解析 for (l in z) { l = z[l].split(/[ \t]+/) if (l.length < 2 || !/^U\+/.test(l[1])) continue i = parseInt(l[0].slice(2), 16) - 41377 if (i < 0) continue i = ((i > 55555 ? 94 : 0) + (i >> 8 & 255)) * 94 + (i & 255) if (i > 17671) continue l = (l[1].slice(2) + "+0").split("+"), c[i] = parseInt(l[1] + l[0], 16) } // 変換 for (d = "\uFEFF", o = String.fromCharCode, l = i = 0; i < 17672; i++) { if (a = c[i]) { if (l) d += o(l + 40960), l = 0 d += a >> 21 ? " " + o(a & 65535) + o(a >> 16) : a >> 16 ? o((a >> 10) + 55232) + o(a & 1023 | 56320) : o(a) } else l++ } // 出力 S(O, d, 1) /// ダウンロード function D(u, f, h) { try { h = new X("MSXML2.XMLHTTP"), h.Open("GET", u, 0), h.Send(), u = h.Status } catch (e) {} if (u == 200) with (new X("ADODB.Stream")) { Type = 1, Open(), Write(h.ResponseBody), SaveToFile(f, 2) } } /// ロード function L(f, a) { with (new X("ADODB.Stream")) { Charset = "iso-8859-1", Open(), LoadFromFile(f), a = ReadText(2), Close(), Charset = a == "\xFF\xFE" ? "utf-16" : "_autodetect", Open(), LoadFromFile(f), a = ReadText(-1), Close() } return a } /// セーブ function S(f, a, t) { f = F.CreateTextFile(f, 1, t), f.Write(a), f.Close() }