Word のオートコレクト機能は、スペルミスを修正するためのものだけど、それを、入力支援に使うこともできる。ただ、登録や管理が面倒なので、マクロやデータの直接編集などで対応できないかと、いろいろ考えてはいる(Wordのオートコレクトで用語変換)。
そちらの方は、まだ進捗がないのだけど、EmEditorの
スニペット機能なら、登録や管理がもう少し楽な気がして、ちょっとやってみた。
スニペットも、ふつうは個別に登録していくのだけど、インポート/エクスポート機能があるので、このあたりで工夫できそうだ。試しに、今登録してあるスニペットデータをエクスポートしてみると、比較的単純なフォーマットになっている。なので、用語集のような簡単なデータを、スニペットのインポート用データに変換する方針でやってみた。
EmEditorのマクロ(JavaScript)を使ってもよいのだけど、どうせJavaScriptならということで、WSH上でやってみることにした。JavaScriptもWSHも勉強しはじめたところなので、「マンガで分かる JavaScriptプログラミング講座」(
25)のコードを読みながら、というか、そこに載っているコードを修正して、なんとか動くものができた。
WSH用のスクリプトは、単に、VBScript だけとか、Jscript (JavaScript) だけでも書けるが、ファイルの関連付けなどで不具合が起きないように、講座では、"sample.wsf"から、"cmnFunc.js" を利用するやり方が紹介されている。簡単なコードなんだろうけど、自分にはまだ難しいので、"cmnFunc.js"をそのまま使わせてもらい、"sample.wsf"を修正することにした(ファイル名"snpgen.wsf")。
エラー処理もテストも不十分なので、公開するようなものではないのだけど、自分用のメモということで(笑)
[snpgen.wsf]
<job id="main">
<script language="JavaScript" src="cmnFunc.js"></script>
<script language="JavaScript">
// グローバル変数
var args; // 引数
var dropFilePath = ""; // ドロップ ファイルのパス
var dropFileStr = ""; // ドロップ ファイルの中身の文字列
// メイン ルーチン
init(); // 初期化処理
main(); // メイン処理
// 初期化処理
function init() {
args = WScript.Arguments; // 引数のオブジェクト
if (args.length >= 1) {
dropFilePath = args(0);
dropFileStr = cmnFunc.readFile(dropFilePath);
}
}
// メイン処理
function main() {
if (dropFilePath == "") {
WScript.Echo("ドロップ ファイルなし");
} else {
var i, j, wkstr, pwkstr, pwlen, opstr, opfn, wfpath, tempstr, namelet, nameflgm;
var opH1 ="<?xml version=\"1.0\"?>\n<!--EmEditor Snippets file-->\n<Snippets>\n<SnippetTree>\n\t<Folder Name="
var opH2 = " Flags=\"1\" ConfigEdit=\"\" ConfigMacro=\"\" ConfigsAssociate=\"\">\n";
var opM1 ="\t\t<Item Name=\""
var opM2 ="\" Flags=\"4\" ConfigEdit=\"\" ConfigMacro=\"\" ConfigsAssociate=\"\\\" Text=\"";
var opM3 ="\" Trigger=\"";
var opM4 ="\" Tip=\"\" ShortcutKey=\"0\" ShortcutVirt=\"0\"/>\n"
var opT ="\t"+"</Folder>"+"\n"+"</SnippetTree>\n</Snippets>";
namelet = dropFilePath.split(".");
nameflgm = namelet[0].split("\\");
opfn = nameflgm[nameflgm.length - 1];
wfpath = namelet[0] +".eesnip"
opstr = opH1 + "\"" + opfn + "\"" +opH2;
pwkstr = (dropFileStr + " ").split("\n");
pwlen = pwkstr.length;
wkstr = new Array(pwlen);
for(i = 0; i < pwlen; i++) {
wkstr[i]=pwkstr[i].split("\t");
tempstr = wkstr[i][1];
wkstr[i][1] = tempstr.slice(0, tempstr.length-1);
opstr = opstr + opM1 + wkstr[i][0] + opM2 + wkstr[i][1] + opM3 + wkstr[i][0] + opM4;
}
opstr = opstr + opT;
cmnFunc.writeFile(wfpath, opstr);
}
}
</script>
</job>
お見苦しいコードで恐縮です。。
で、用語集のような元ファイルを、snpgen.wsfのアイコンにドラッグ&ドロップすると、スニペットデータが出来る(上記講座の"cmnFunc.js"も予めダウンロードしておく必要があります)。
元ファイルというのは、タブ区切りのテキストファイルで、例えば、
[test.txt]
tpi
(タブ)the present invention
1e
(タブ) first embodiment
2e
(タブ) second embodiment
3e
(タブ) third embodiment
wrt
(タブ) with reference to
iaw
(タブ) in accordance with
という感じ。各行の先頭に、トリガの符号を入れ、タブを打ってから、変換後の語句を入れ、行末に改行コード(当たり前か…)。なお、最終行の行末には、改行コードを入れない「仕様」になっています(苦笑)
このtest.txtを、snpgen.wsfにドラッグ&ドロップすると、こんなのが出来る。
[test.eesnip]
<?xml version="1.0"?>
<!--EmEditor Snippets file-->
<Snippets>
<SnippetTree>
<Folder Name="test" Flags="1" ConfigEdit="" ConfigMacro="" ConfigsAssociate="">
<Item Name="tpi" Flags="4" ConfigEdit="" ConfigMacro="" ConfigsAssociate="\" Text="the present invention" Trigger="tpi" Tip="" ShortcutKey="0" ShortcutVirt="0"/>
<Item Name="1e" Flags="4" ConfigEdit="" ConfigMacro="" ConfigsAssociate="\" Text="first embodiment" Trigger="1e" Tip="" ShortcutKey="0" ShortcutVirt="0"/>
<Item Name="2e" Flags="4" ConfigEdit="" ConfigMacro="" ConfigsAssociate="\" Text="second embodiment" Trigger="2e" Tip="" ShortcutKey="0" ShortcutVirt="0"/>
<Item Name="3e" Flags="4" ConfigEdit="" ConfigMacro="" ConfigsAssociate="\" Text="third embodiment" Trigger="3e" Tip="" ShortcutKey="0" ShortcutVirt="0"/>
<Item Name="wrt" Flags="4" ConfigEdit="" ConfigMacro="" ConfigsAssociate="\" Text="with reference to" Trigger="wrt" Tip="" ShortcutKey="0" ShortcutVirt="0"/>
<Item Name="iaw" Flags="4" ConfigEdit="" ConfigMacro="" ConfigsAssociate="\" Text="in accordance with" Trigger="iaw" Tip="" ShortcutKey="0" ShortcutVirt="0"/>
</Folder>
</SnippetTree>
</Snippets>
この test.eesnipを、EmEditorのスニペットインポート機能で取り込む。
すると、"tpi"+tab と打つだけで、"the present invention"と自動変換される。
それから、特許の場合には、構成要素に参照番号がついたものを入力することが多いので、それに特化したものも作った。
[snppat.wsf]
<job id="main">
<script language="JavaScript" src="cmnFunc.js"></script>
<script language="JavaScript">
// グローバル変数
var args; // 引数
var dropFilePath = ""; // ドロップ ファイルのパス
var dropFileStr = ""; // ドロップ ファイルの中身の文字列
// メイン ルーチン
init(); // 初期化処理
main(); // メイン処理
// 初期化処理
function init() {
args = WScript.Arguments; // 引数のオブジェクト
if (args.length >= 1) {
dropFilePath = args(0);
dropFileStr = cmnFunc.readFile(dropFilePath);
}
}
// メイン処理
function main() {
if (dropFilePath == "") {
WScript.Echo("ドロップ ファイルなし");
} else {
var i, j, wkstr, pwkstr, pwlen, opstr, opfn, wfpath, tempstr, namelet, nameflgm;
var opH1 ="<?xml version=\"1.0\"?>\n<!--EmEditor Snippets file-->\n<Snippets>\n<SnippetTree>\n\t<Folder Name="
var opH2 = " Flags=\"1\" ConfigEdit=\"\" ConfigMacro=\"\" ConfigsAssociate=\"\">\n";
var opM1 ="\t\t<Item Name=\""
var opM2 ="\" Flags=\"4\" ConfigEdit=\"\" ConfigMacro=\"\" ConfigsAssociate=\"\\\" Text=\"";
var opM3 ="\" Trigger=\"";
var opM4 ="\" Tip=\"\" ShortcutKey=\"0\" ShortcutVirt=\"0\"/>\n"
var opT ="\t"+"</Folder>"+"\n"+"</SnippetTree>\n</Snippets>";
namelet = dropFilePath.split(".");
nameflgm = namelet[0].split("\\");
opfn = nameflgm[nameflgm.length - 1];
wfpath = namelet[0]+".eesnip"
opstr = opH1 + "\""+ opfn + "\""+opH2;
pwkstr = (dropFileStr + " ").split("\n");
pwlen = pwkstr.length;
wkstr = new Array(pwlen);
for(i = 0; i < pwlen; i++) {
wkstr[i]=pwkstr[i].split("\t");
tempstr = wkstr[i][1];
wkstr[i][1] = tempstr.slice(0, tempstr.length-1);
opstr = opstr + opM1+wkstr[i][0]+opM2+wkstr[i][1]+" "+wkstr[i][0]+opM3+wkstr[i][0]+opM4;
}
opstr = opstr + opT;
cmnFunc.writeFile(wfpath, opstr);
}
}
</script>
</job>
元データのサンプルは、こんな感じ。
[test2.txt]
100
(タブ) information processing apparatus
110
(タブ) imaging device
120
(タブ) A/D converter
130
(タブ) controller
これを、 snppat.wsfにドラッグ&ドロップすると、
[test2.eesnp]
<?xml version="1.0"?>
<!--EmEditor Snippets file-->
<Snippets>
<SnippetTree>
<Folder Name="test2" Flags="1" ConfigEdit="" ConfigMacro="" ConfigsAssociate="">
<Item Name="100" Flags="4" ConfigEdit="" ConfigMacro="" ConfigsAssociate="\" Text="information processing apparatus 100" Trigger="100" Tip="" ShortcutKey="0" ShortcutVirt="0"/>
<Item Name="110" Flags="4" ConfigEdit="" ConfigMacro="" ConfigsAssociate="\" Text="imaging device 110" Trigger="110" Tip="" ShortcutKey="0" ShortcutVirt="0"/>
<Item Name="120" Flags="4" ConfigEdit="" ConfigMacro="" ConfigsAssociate="\" Text="A/D converter 120" Trigger="120" Tip="" ShortcutKey="0" ShortcutVirt="0"/>
<Item Name="130" Flags="4" ConfigEdit="" ConfigMacro="" ConfigsAssociate="\" Text="controller 130" Trigger="130" Tip="" ShortcutKey="0" ShortcutVirt="0"/>
</Folder>
</SnippetTree>
</Snippets>
が出来る。これを、EmEditorにインポートすると、"100"+tab と打つだけで、"information processing apparatus 100" と、名称+参照符号の形式で入力される。
インポートしたスニペットは、1つのスニペットフォルダにまとまっているので、参照番号用のスニペットのように、案件単位でしか使わないものは、フォルダ単位ですぐに削除できるので、管理が簡単。
こんな稚拙なコードではなくて(笑)、標準でサポートしてもらえるといいんだけど。