ActiveX スクリプト言語仕様(Epsaly関連)


 本エディタは、Windows の ActiveX Scripting Host 機能を実装することによって、 ActiveX Scripting Engine が利用できるようになっています。 このスクリプトエンジンには、Windows 標準で、VBScript と JScript があります。 また、Perl や Ruby 等でも、このエンジンとしてインストールできるものがあります。

 これらのスクリプトを使えば、比較的簡単にプログラムが作成できるだけでなく、 Windows の各種のCOM(コンポーネント・オブジェクト・モデル)も活用できます。 これによって、例えば、Excel や Word 等を操作することもできます。

 本エディタでは、ActiveX Scripting Engine を起動した際に、「Epsaly」という名前の オブジェクトを、そのスクリプトエンジンに自動的に組み込みます。そのため、 そのオブジェクトが最初からあるものとして、プログラムが書けます。 この Epsaly オブジェクトは、スクリプトから、本エディタにアクセスする時に使います。 以下に、このオブジェクトについて説明します。

■ Epsaly オブジェクト

 Epsaly オブジェクトには、ActiveX スクリプトから、本テキストエディタを操作する ための各種のプロパティとメソッドが、装備されています。

 このオブジェクトを通して、カーソル移動、範囲選択、文字列挿入等の基本操作 だけでなく、機能割り当て可能なコマンドなら基本的にどれでも実行できるように なっています。さらに、一連の編集操作を1つの Undo ブロックにまとめることもでます。 しかし、現状、スクリプトを起動した編集ウィンドウに対してだけしか行なえません。

 なお、このオブジェクトは、MikoScript に組み込まれている Epsaly オブジェクト との互換性はありません。それぞれ、独自の仕様になっています。

 次に、Epsaly オブジェクトのプロパティとメソッドの一覧を示します。


プロパティ 概要説明
CurLineNo 現カーソル位置の表示行番号を取得/設定
CurColumn 現カーソル位置の表示桁番号を取得/設定
MaxLineNo 現編集テキストの全表示行数を取得
MaxColumn 現編集テキストの折り返し桁数を取得/設定
SelText 選択範囲の文字列を取得/設定
SelType 選択範囲の形態を取得/設定
SelLineNo 選択範囲の始点の表示行番号を取得
SelColumn 選択範囲の始点の表示桁番号を取得
CurLineText現カーソル位置の表示行の文字列を取得
CurTerm 現カーソル位置の所定区間の文字列を取得
CurChar 現カーソル位置の文字を取得
FreeCursor フリーカーソル状態を取得/設定
FileName 現編集ファイルのフルパス名を取得
UndoBlock Undo ブロックの開始/終了状態を取得/設定

メソッド 概要説明
MoveTo 指定の表示行と表示桁へカーソルを移動
Insert 指定の文字列を現位置に挿入(自動字下げなし)
InsertInd 指定の文字列を現位置に挿入(自動字下げあり)
InsertRect 指定の文字列を現位置に矩形状に挿入
Overwrite 指定の文字列を現位置に上書き
ExecCmd 指定番号のテキスト編集コマンドを実行
print 指定の文字列をコンソールウィンドウに出力


● Epsaly オブジェクトの簡易表記方法

 Epsaly オブジェクトを使う箇所が多いスクリプトを書く場合、各所で Epsaly と 表記するのは面倒なので、これを回避する方法について説明します。

(A)JScript の場合

 本説明では、次のスクリプトを例にします。 ここでは、Epsaly が、4 箇所で使われています。 ちなみに、これは、現カーソル行をコメント化(行頭に // を挿入)して、 次行の先頭へカーソルを移動するスクリプトです。これを再実行していけば、 任意の行範囲をコメント化できます。

    Epsaly.CurColumn = 1;
    Epsaly.Insert( "//" );
    Epsaly.MoveTo( Epsaly.CurLineNo + 1, 1 );

(1)with 文で、次のようにすれば、Epsaly は 1 箇所で済みます。

    with( Epsaly )
    {
        CurColumn = 1;
        Insert( "//" );
        MoveTo( CurLineNo + 1, 1 );
    }

(2)Epsaly オブジェクトへの参照を適当な変数に代入してそれを代用します。 例えば、次のようにすれば、Epsaly は e で代用できます。

    e = Epsaly;
    e.CurColumn = 1;
    e.Insert( "//" );
    e.MoveTo( e.CurLineNo + 1, 1 );

(B)VBScript の場合

 Set ステートメントで、JScript の場合の(2)と同様にします。 そうすれば、上例のスクリプトは、次のように書けます。

    Set e = Epsaly
    e.CurColumn = 1
    e.Insert "//"
    e.MoveTo e.CurLineNo + 1, 1


■補足説明

 ActiveX Scripting Engine は、通常、DLL(ダイナミック・リンク・ライブラリ)として、 提供されています。これは、Epsaly エディタ本体に、最初からリンクされるのではなく、 その使用時に、動的にリンクされます。そのため、 最初の ActiveX スクリプトの起動には、若干時間がかかります。しかし、2回目以降は、 高速に起動されます。もし、ActiveX スクリプトを最初から全く使わなければ、 このDLLはリンクされないので、その分のメモリー等のリソースが、節約されます。


 ActiveX Scripting Engine の起動関連情報は、所定の規約で、レジストリーに 保管されています。ActiveX Scripting Host 側は、それを読み出して使うわけですが、 なかには、その規約通りになっていない場合があります。例えば、ActivePerl では、 通常の手順では、スクリプトファイルの拡張子から、そのスクリプトエンジンの所在を 辿れないようです。これはこちらのミスかもしれませんが、とりあえず、その対策として、 .pls という拡張子を、無条件に ActivePerl のスクリプトエンジンに対応させています。 Perl の拡張子は、通常、.pl のようですが、本エディタのスクリプトエンジンとして使う 場合は、.pls にする必要があります。


 Windows 標準の VBScript と JScript 以外の ActiveX Scripting Engine は、現状、 ActivePerl で簡単な動作確認をした程度に留まっています。基本的に、 Windows Scripting Host( Wscript.exe )で正常に動作するスクリプトエンジンなら、 本エディタでも大丈夫だと思われますが、サポートは致しかねています。