Apsaly オブジェクトのメンバー関数 (1)

 Apsalyオブジェクトのメンバー関数は、 次のように、3グループに分類されています。

(1)現編集ウィンドウを対象とする関数
(2)全編集ウィンドウ共通の関数
(3)プロジェクト関連の関数

 ここでは、このうち(1)のグループの関数について、詳しく説明します。


■メンバー関数一覧(1)

関数名 概要説明
MoveTo 指定位置にカーソルを移動
Insert 挿入(自動字下げなし)
InsertInd 挿入(自動字下げあり)
InsertRect 矩形状に挿入
Overwrite 上書き
Replace 選択範囲のテキストと置換
SetSelText 選択範囲のテキストを設定
Enclose 選択範囲を指定文字列で囲う
Delete 指定位置までを削除
UndoBlockBegin「元に戻す」範囲の開始
UndoBlockEnd 「元に戻す」範囲の終了
SelectChars 文字範囲を選択
SelectLines 行範囲を選択
SelectRect 矩形範囲を選択
SelectOff 範囲選択を解除
GetSelType 範囲選択の形態を取得
GetSelSize 選択範囲のサイズを取得
GetSelText 選択範囲の文字列を取得
GetSelRange 選択範囲の情報を取得
GetAllSize 編集テキストの総サイズを取得
GetAllText 編集テキストを全て取得
GetLineSize 行のサイズを取得
GetLineText 行の文字列を取得
GetLineCond 行の状態を取得
GetPartSize 部分サイズを取得
GetPartText 部分文字列を取得
GetTerm 所定区間の文字列を取得
GetChar 文字を取得
EvalTxpos テキスト内の指定位置を評価
MaxLineNo 最大行数(全行数)を取得
MaxColumn 折り返し桁数を取得/設定
TabColumn タブ間隔桁数を取得/設定
CharXd 1桁分の画素数を取得
FreeCursor フリーカーソル状態を設定/取得
IME IMEを操作
MarkLine 行マークを設定/取得
FindFwd 順行検索
FindBwd 逆行検索
FindAround 周辺検索
MakeFold 折り畳む
PresetFold 折り目を付ける
OpenFold 折り畳みを開く
CloseFold 折り目を閉じる
ResetFold 折り畳みを解除する
PopupMenu ポップアップメニューを表示
GetEvent イベント(キー入力等)を取得
ExecKeyCmd 指定キーのコマンドを実行
GetKeyCmd 指定キーのコマンドを取得
Sync テキストエディタとの同期を取る
Lock 現対象のテキストをロック
Unlock 現対象のテキストのロックを解除
GetWindowCond 現編集ウィンドウの状態(状況)を取得
SetWindowCond 現編集ウィンドウの状態(状況)を設定
TintSelText 選択範囲の着色または着色解除
GetTintInfo 指定位置の着色情報を取得

■メンバー関数詳説(1)

MoveTo( ... )
機能:指定された位置へカーソルを移動します。
説明: 本関数の引数は、「編集テキスト内の位置を 規定するリレー型関数」を使って指定します。
本関数は、この引数で指定された位置へカーソルを移動します。
本関数の返値は、カーソルの移動先の「文字コードインデックス」になります。
用例:

・第 100 行目へ移動:
  ::Apsaly.MoveTo( 100'LineNo );

・第 200 行、40 桁目へ移動:
  ::Apsaly.MoveTo( 200'LineNo, 40'Column );

・現位置から 3 論理行だけ先へ移動:
  ::Apsaly.MoveTo( 3'LLn );

・現位置から 1 字前へ移動:
  ::Apsaly.MoveTo( -1'DKn );

・次の表示行の先頭から 5 単語目へ移動:
  ::Apsaly.MoveTo( 1'VLn, 4'LWn );

・論理行インデックスが 123 の行の行頭へ移動:
  ::Apsaly.MoveTo( 123'LLi, 'LineTop );

・現カーソル行を画面上端から 3 行目にシフト:
  ::Apsaly.MoveTo( 3'SLn );

Insert( s, p )
機能: 指定された文字列を現カーソル位置に挿入します。
説明:
引数 s は、挿入する文字列を指定します。この関数の実行時に、選択範囲があると、 その範囲の文字列が削除されてから、s の文字列が挿入されます。 この挿入では、s の文字列内に改行コードがあっても、 それに対する自動字下げ(オートインデント)は行なわれません。
引数 p は、挿入後のカーソル位置を指定します。p の指定には、次の場合があります。
 省略の場合:

挿入文字列の末尾

 数値の場合:

p = 0: 挿入文字列の先頭
p > 0: 挿入文字列の先頭から p バイト目
p < 0: 挿入文字列の末尾( p の値は任意 )

 文字列の場合:

文字列 s 内で文字列 p が最初に見つかる位置。
なお、文字列 s が挿入される時には、その中で最初に見つかった文字列 p の部分は除外されます。 例えば、s が "ABC!XYZ" で、p が "!" の場合、"ABCXYZ" が挿入されて、 カーソルは、ABC と XYZ の間に移動します。

本関数の返値は、正常終了の時に、挿入した文字列のバイト数になり、不正終了時に、 null になります。

用例:

  ::Apsaly.Insert( "Hello, world" );
この実行では、現カーソル位置に "Hello, world" という文字列が挿入され、 カーソルはこの文字列の末尾に行きます。

  ::Apsaly.Insert( "Hello, world\n", 0 );
この実行では、"Hello, world" に LF 単独の改行コードが付いた文字列が挿入され、 カーソルはこの文字列の先頭に行きます。

  ::Apsaly.Insert( "Hello, @world\r\n", "@" );
この実行では、"Hello, world" に CR/LF の改行コードが付いた文字列が挿入され、 カーソルはこの文字列内の world の先頭に行きます。

InsertInd( s, p )
機能: 指定された文字列を現カーソル位置に自動字下げを伴って挿入します。
説明: この関数の引数と返値は、Insert 関数と同じです。
本関数の挿入では、文字列 s 内に改行コードがあると、それに対応する 自動字下げ(オートインデント)が行なわれます。
本関数の実行時に、選択範囲があると、まずその範囲の文字列が削除されてから、 本挿入が行なわれます。
用例: 次のようなテキストがあるとします。
    if( A == B )
    ┃
    X = Y + Z;
このテキストの各行は、TAB インデントされていて、┃ は、現カーソル位置を示す ものとします。ここで、
  ::Apsaly.InsertInd( "{\r\n\tA = 1;\r\n\tB = 2;\r\n}" );
を実行すると、このテキストは、
    if( A == B )
    {
        A = 1;
        B = 2;
    }┃
    X = Y + Z;
となります。ちなみに、
    if( A == B )  ┃
    X = Y + Z;
という状態で、同スクリプトを実行すると、
    if( A == B )  {
        A = 1;
        B = 2;
    }┃
    X = Y + Z;
となります。
InsertRect( s, p )
機能: 指定された文字列を現カーソル位置に矩形状に挿入します。
説明: この関数の引数と返値は、Insert 関数と同じです。
本関数の挿入では、文字列 s 内の改行コードを、矩形内の各行の区切りとして扱います。 この改行コードは、実際には挿入されません。
本関数の実行時に、選択範囲があると、まずその範囲の文字列が削除されてから、 本挿入が行なわれます。
用例: 次のようなテキストがあるとします。
  ABCDEFGH
  abcdefgh
  12345678
ここで、カーソルが、1 行目の E の位置にあるとします。
 ::Apsaly.InsertRect( "--X--\n--Y--\n--Z--\n" );
を実行すると、このテキストは、
  ABCD--X--EFGH
  abcd--Y--efgh
  1234--Z--5678
となります。
Overwrite( s, p )
機能: 指定された文字列を現カーソル位置に上書きします。
説明: この関数の引数と返値は、Insert 関数と同じです。
本関数の上書きでは、 単純に上書きする文字と上書きされる文字を1字ごとに入れ替えるのではなく、 基本的に、上書き文字列の書き込みによって、それ以降の文字の表示位置が、 ズレないようになっています。
本関数の実行時に、選択範囲があると、まずその範囲の文字列が削除されてから、 上書きが行なわれます。
用例: 次のようなテキストがあるとします。
  あいうえお
  かきくけこ
  さしすせそ
ここで、カーソルが、1 行目の「う」の前にあるとします。
 ::Apsaly.Overwrite( "-ABC-\r\n-XYZ-" );
を実行すると、このテキストは、
  あい-ABC-
  -XYZ- けこ
  さしすせそ
となります。
Replace( s, p )
機能: 指定された文字列を選択範囲のテキストと置換します。
説明: この関数の引数と返値は、Insert 関数と同じです。
本関数の実行時点で、矩形範囲が選択されていれば、 本関数は、InsertRect 関数と同じ機能を果たします。 さもなければ、本関数は、Insert 関数と同じ機能を果たします。
用例: 次のように矩形範囲選択されたテキストがあるとします。
  111222333
  AAABBBCCC
  アアアイイイウウウ
ここで、
 ::Apsaly.Replace( "--X--\n--Y--\n--Z--\n" );
を実行すると、このテキストは、次のようになります。
  111--X--333
  AAA--Y--CCC
  アアア--Z--ウウウ
SetSelText( s )
機能: 指定された文字列を選択範囲のテキストとして設定します。
説明:

引数 s は、挿入する文字列を指定します。 本関数では、基本的に、挿入された文字列が、選択状態になります。 なお、引数 s は、空文字列でも構いませんが、非文字列の場合は不正になります。

本関数の実行時に、選択範囲がある場合:

選択範囲の文字列が、s の文字列に置き換わります。 その際、範囲選択の形態と方向は、変わりません。 矩形範囲が選択されていると、その範囲内の各行の選択部は、 文字列 s 内の各改行コードで区切られる部分に置き換わります。 この改行コードは、区切りの役目を果たすだけで、 実際に挿入されるわけではありません。


本関数の実行時に、選択範囲がない場合:

引数 s の文字列が現カーソル位置に単純に挿入されます。 その時、その文字列は、文字範囲選択された状態になります。

本関数の返値は、正常終了の時に、挿入した文字列のバイト数になります。 不正終了時は、null になります。

用例: 次のように、矩形範囲選択されているテキストがあるとします。
  111222333
  AAABBBCCC
  アアアイイイウウウ
ここで、
 ::Apsaly.SetSelText( "--X--\n--Y--\n--Z--\n" );
を実行すると、矩形選択範囲が次のように変わります。
  111--X--333
  AAA--Y--CCC
  アアア--Z--ウウウ

また、次のような範囲選択されていないテキストがあるとします。
  AAA┃BBB
ここで、┃ は、現カーソル位置を示します。この時、
 ::Apsaly.SetSelText( "--X--" );
を実行すると、このテキストは次のようになります。
  AAA--X--┃BBB
Enclose( a, b )
機能: 選択範囲のテキスト部を指定文字列で囲います。
説明:
引数 a は、左側の囲い文字列を指定します。
引数 b は、右側の囲い文字列を指定します。
いずれの引数も省略時には、空文字列に扱われます。
文字範囲が選択されている場合:

選択範囲の先頭に a の文字列が挿入され、 末尾に b の文字列が挿入されます。

行範囲が選択されている場合:

選択範囲の各行の先頭に a の文字列が挿入され、 末尾に b の文字列が挿入されます。

矩形範囲が選択されている場合:

選択範囲の各行の選択部の先頭に a の文字列が挿入され、 末尾に b の文字列が挿入されます。

範囲選択されていない場合:

現カーソル位置に、a と b の文字列が挿入されます。

本関数は、正常終了時に、挿入した文字列の総バイト数を返します。 不正終了時には、null を返します。
用例: 範囲選択の形態が違う場合に、
 ::Apsaly.Enclose( "≪-", "-≫" );
を実行した時、各結果がどうなるかを以下に示します。
文字範囲選択時:
1234567890 
ABCDEFGH 
アイウエオ

123≪-4567890 
ABCDEF-≫GH 
アイウエオ 
行範囲選択時:
12345678
ABC
あいうえお

≪-12345678-≫
≪-ABC-≫
≪-あいうえお-≫
矩形範囲選択時:
111222333
AAABBBCCC
アアアイイイウウウ

111≪-222-≫333
AAA≪-BBB-≫CCC
アアア≪-イイイ-≫ウウウ
範囲選択なし時:
ABC┃XYZABC≪-┃-≫XYZ
 ( 上記の ┃ は、カーソル位置を示す )
Delete( ... )
機能: 現カーソル位置から指定位置までの範囲を削除します。
説明: 本関数が削除する範囲は、
  現カーソル位置から
  引数で指定された位置まで
になります。
本関数の引数は、「編集テキスト内の位置を 規定するリレー型関数」を使って指定します。
引数なしにコールされた場合、選択範囲が削除されます。 引数も選択範囲もない場合は、特に何も行なわれません。
引数があって、選択範囲もある場合、まず範囲選択が解除されてから、 本来の削除が行なわれます。
本関数は、正常終了時に、null 以外の値を返します。 不正終了時には、null を返します。
用例: ・選択範囲を削除:
  ::Apsaly.Delete();
・現カーソル位置から行末までを削除:
  ::Apsaly.Delete( 'LineEnd );
・現カーソル行を削除:
  ::Apsaly.MoveTo( 'LineTop );
  ::Apsaly.Delete( 'LineLim );
・現カーソル位置からテキスト先頭までを削除:
  ::Apsaly.Delete( 'TextTop );
・100 行目から 200 行目までを削除:
  ::Apsaly.MoveTo( 100'LineNo, 'LineTop );
  ::Apsaly.Delete( 200'LineNo, 'LineLim );
・現カーソル位置から次の1字を削除:
  ::Apsaly.Delete( 1'DKn );
UndoBlockBegin()
機能: 「元に戻す」範囲( Undo ブロック )を開始します。
説明: 編集テキストの内容を、スクリプトで変更した場合でも勿論、手動で変更した場合と同様に、 「元に戻す( Undo )」で復元することができます。 「元に戻す」範囲( Undo ブロック )を設定しておくと、 その範囲内で行なわれた一連の変更は、1回の「元に戻す( Undo )」でまとめて 復元できるようになります。
「元に戻す」範囲は、UndoBlockBegin() 関数の実行で開始し、UndoBlockEnd() 関数の実行で 終了します。この両関数は基本的に、ペアーで使います。この範囲が終了せずに、 スクリプトが終了しても、この範囲は自動的に終了します。 この範囲は、入れ子にはできません。
用例:

編集テキストに対して、以下の ・・・・・ のところで行なった変更は、 1回の「元に戻す( Undo )」で、まとめて復元されます。

  ::Apsaly.UndoBlockBegin();
    ・・・・・
  ::Apsaly.UndoBlockEnd();
UndoBlockEnd()
機能: 「元に戻す」範囲( Undo ブロック )を終了します。
説明: UndoBlockBegin() 関数参照。
用例: 次のスクリプトは、丸括弧付きの通し番号を、現カーソル行以降の 10 行の行頭に 付加しますが、このスクリプトで行なわれた変更は、 1回の「元に戻す( Undo )」で、全部まとめて復元されます。
  scope ::Apsaly
  {
      .UndoBlockBegin();
      .MoveTo( 'LineTop );
      for( i = 1 ; i <= 10 ; i++ )
      {
          .Insert( "(%i)"'fmt(i), 0 );
          .MoveTo( +1'LLn );
      }
      .UndoBlockEnd();
  }
SelectChars( ... )
機能: 指定位置から現カーソル位置までの文字範囲を選択します。
説明: 本関数が選択する文字範囲は、
  始点: 引数で指定された位置
  終点: 現カーソル位置
になります。
本関数の引数は、「編集テキスト内の位置を 規定するリレー型関数」を使って指定します。
本関数がコールされた時点で、既に選択範囲がある場合、 その範囲選択が解除されてから、本来の範囲選択が行なわれます。
引数なしにコールされた場合、現カーソル位置が、文字選択範囲の始点と終点になります。 これは、空の文字範囲が選択されている状態です。
本関数は、正常終了時、選択範囲の表示行数を返します。 不正終了時には、null を返します。
本関数が正常終了すると、文字範囲選択を継続する状態になります。 この状態で、カーソルを移動すると、文字範囲選択の始点は、変わりませんが、 その終点が、カーソルの移動先に変わります。 この状態は、範囲選択を解除すれば、解除されます。
用例: ・行頭から現カーソル位置までを選択:
  ::Apsaly.SelectChars( 'LineTop );
・テキスト末尾から現カーソル位置までを選択:
  ::Apsaly.SelectChars( 'TextEnd );
・現カーソル位置を始点に文字範囲選択を開始:
  ::Apsaly.SelectChars();
  // 以降、カーソル移動で、文字範囲選択の終点を変える
SelectLines( ... )
機能: 指定行から現カーソル行までの行範囲を選択します。
説明: 本関数が選択する行範囲は、
  開始: 引数で指定された位置の行
  終了: 現カーソル位置の表示行
になります。
本関数の引数は、「編集テキスト内の位置を 規定するリレー型関数」を使って指定します。
本関数がコールされた時点で、既に選択範囲がある場合、 その範囲選択が解除されてから、本来の範囲選択が行なわれます。
引数なしにコールされた場合、現カーソル位置の表示行のみが選択され、 これが、行選択範囲の開始行と終了行になります。
本関数は、正常終了時、選択範囲の表示行数を返します。 不正終了時には、null を返します。
本関数が正常終了すると、行範囲選択を継続する状態になります。 この状態で、カーソルを移動すると、行選択範囲の開始行は、変わりませんが、 その終了行が、カーソルの移動先の行に変わります。 この状態は、範囲選択を解除すれば、解除されます。
用例: ・テキスト先頭から現カーソル行までを選択:
  ::Apsaly.SelectLines( 'TextTop );
・現カーソル行以降の3論理行を選択:
  ::Apsaly.SelectLines( 3'LLn );
・100 〜 200 行を選択:
  ::Apsaly.MoveTo( 100'LineNo );
  ::Apsaly.SelectLines( 200'LineNo );
・現カーソル位置を起点に行範囲選択を開始:
  ::Apsaly.SelectLines();
  // 以降、カーソル移動で、行範囲選択の終了行を変える
SelectRect( ... )
機能: 指定位置から現カーソル位置までの矩形範囲を選択します。
説明: 本関数が選択する矩形範囲は、
  始点: 引数で指定された位置
  終点: 現カーソル位置
になります。
本関数の引数は、「編集テキスト内の位置を 規定するリレー型関数」を使って指定します。
引数で指定される位置が、改行コード以降になる場合は、 フリーカーソル状態にしておく必要があります。
本関数がコールされた時点で、既に選択範囲がある場合、 その範囲選択が解除されてから、本来の範囲選択が行なわれます。
引数なしにコールされた場合、現カーソル位置が、矩形選択範囲の始点と終点になります。 これは、空の矩形範囲が選択されている状態です。
本関数は、正常終了時、選択範囲の表示行数を返します。 不正終了時には、null を返します。
本関数が正常終了すると、矩形範囲選択を継続する状態になります。 この状態で、カーソルを移動すると、矩形範囲選択の始点は、変わりませんが、 その終点が、カーソルの移動先に変わります。 この状態は、範囲選択を解除すれば、解除されます。
用例:

・テキスト先頭から現カーソル位置までの矩形範囲を選択:
  ::Apsaly.SelectRect( 'TextTop );

・カーソル移動で矩形範囲を選択:
   fs = ::Apsaly.FreeCursor(1);  // 現フリーカーソル状態取得
   ::Apsaly.FreeCursor(1);       // フリーカーソルON
   ::Apsaly.SelectRect();    // 現位置が矩形範囲選択の始点
     ・・・・・          // 矩形範囲選択の終点へカーソル移動
     ・・・・・          // 矩形選択範囲に対する何かの操作
   ::Apsaly.FreeCursor(fs);  // フリーカーソル状態の復元
SelectOff()
機能:範囲選択を解除します。
説明: 本関数は、範囲選択を解除した後、その直前の範囲選択状態を示す値を返します。 この値は、GetSelType() 関数の返値と同様です。
GetSelType()
機能:範囲選択の形態を返します。
説明: 本関数は、現在の範囲選択の形態を示す次の数値を返します。
 =0: 範囲選択なし
 =1: 文字範囲選択中
 =2: 行範囲選択中
 =3: 矩形範囲選択中
GetSelSize( Li )
機能: 選択範囲の全テキスト部、または、指定行の選択部の文字列のバイト数を返します。
説明: 引数 Li には、対象とする行の表示行インデックスを 指定します。
Li が省略時、選択範囲の全テキスト部のバイト数を返します。
Li の値が選択範囲内の場合、その表示行の選択部のバイト数を返します。
Li の値が選択範囲外の場合、0 を返します。
Li が不正時、null を返します。
注意: 返値は、本エディタの内部文字コードでのバイト数になります。
矩形選択範囲の全テキスト部が対象の場合( Li 省略時 )、 その範囲内の各行の選択部の末尾に改行コード (CR+LF) を付加したバイト数を返します。 つまり、
 返値 = 矩形選択範囲の全テキスト部自身のバイト数 +
     矩形選択範囲の表示行数 × 2
になります。
矩形選択範囲の指定行内の選択部が対象の場合( Li 指定時 )、 その選択部自身(その末尾に改行コードを付加しない)のバイト数を返します。
GetSelText( Li )
機能: 選択範囲の全テキスト部、または、指定行の選択部の文字列を返します。
説明: 引数 Li には、対象とする行の表示行インデックスを 指定します。
Li が省略時、選択範囲の全テキスト部の文字列を返します。
Li の値が選択範囲内の場合、その表示行の選択部の文字列を返します。
Li の値が選択範囲外の場合、空文字列を返します。
Li が不正時、null を返します。
注意: 矩形選択範囲の全テキスト部が対象の場合( Li 省略時 )、 その範囲内の各行の選択部の末尾に改行コード (CR+LF) を付加した文字列を返します。
矩形選択範囲の指定行内の選択部が対象の場合( Li 指定時 )、 その選択部自身(その末尾に改行コードを付加しない)の文字列を返します。
用例:
・選択範囲をコンソールウィンドウにプリント:
    print ::Apsaly.GetSelText();
・選択範囲をクリップボードにコピー:
    ::Clipboard.SetText( ::Apsaly.GetSelText() );
・選択範囲の「英小文字→英大文字」変換:
    ::Apsaly.SetSelText( ::Apsaly.GetSelText()'upper );
・選択範囲内の空白を除去:
    ::Apsaly.SetSelText( ::Apsaly.GetSelText()
        'subst( "[ \t ]", "" ) );
・選択範囲の各行頭に引用符を付加:
    ::Apsaly.SetSelText( ::Apsaly.GetSelText()
        'subst( "@(.*\n|.+$)", "> @1" ) );
GetSelRange( S, Li )
機能:選択範囲の情報を取得します。
説明: 引数 S には、取得情報の種別を指定します。
本関数は、下表の通り、S の値に応じて、選択範囲に関する情報を返します。
S返値
0最小と最大の表示行インデックス
1最小と上限の表示X座標
2最小と上限の文字コードインデックス
3始点と終点の表示行インデックス
4始点と終点の表示X座標
5始点と終点の文字コードインデックス
6最小と最大の外見行インデックス
7始点と終点の外見行インデックス
8最小の外見行インデックスと行数
9最小の表示行インデックスと行数

この返値は、2項値になります。2項値は、多重代入で取得します。例えば、次のようにします。

 ( MinVLi, MaxVLi ) = ::Apsaly.GetSelRange( 0 );

これで、選択範囲の最小と最大の表示行インデックスが、それぞれ、 MinVLi と MaxVLi という変数に代入されます。
他の S の値の場合の例も示すと、次のようになります。

 ( MinXs, LimXs )  = ::Apsaly.GetSelRange( 1 );
 ( MinCi, LimCi )  = ::Apsaly.GetSelRange( 2 );
 ( OrgVLi, CurVLi ) = ::Apsaly.GetSelRange( 3 );
 ( OrgXs, CurXs )  = ::Apsaly.GetSelRange( 4 );
 ( OrgCi, CurCi )  = ::Apsaly.GetSelRange( 5 );
 ( MinFLi, MaxFLi ) = ::Apsaly.GetSelRange( 6 );
 ( OrgFLi, CurFLi ) = ::Apsaly.GetSelRange( 7 );
 ( FLi, FLn )    = ::Apsaly.GetSelRange( 8 );
 ( VLi, VLn )    = ::Apsaly.GetSelRange( 9 );

上表で、「最小」「最大」「上限」の関係は、次の通りです。
  最小値 ≦ 範囲内の値 ≦ 最大値 < 上限値
通常、上限値 = 最大値 +1 になります。

「始点」は、その範囲選択の開始点でアンカー的ですが、「終点」は、 現カーソル位置に対応した流動的な端点です。そのため、これらの値の大小関係は、 範囲選択の状態に依存します。
X座標に関しては、'Xc 関数で説明しています。

引数 Li は、S=1 または S=2 の時に、選択範囲内の特定の行だけの情報を取得する場合に、 その行の表示行インデックスを指定します。 これ以外の場合、Li の指定は不用です。

補説: 範囲選択されていない時、本関数は、null を返します。
引数 S が省略された場合、S = 0 として扱います。
引数 Li の指定が不正(選択範囲外等)の時、null を返します。
S = 1, 4 の場合、本関数は、X座標を返しますが、行範囲選択時には、 あまり意味はありません。
GetAllSize( lnsz )
機能: 現編集テキストの総サイズを取得します。 また、全表示行の各サイズを配列として取得することができます。
説明: 本関数は、引数の有無とは無関係に、現編集テキストの総サイズ(バイト数)を返します。
引数 lnsz の指定がある場合、本関数は、その引数で指定された箱(変数)に、 全表示行の各サイズ(バイト数)を要素値とする純粋配列を設定します。 この配列の要素のデータ型は、'USHORT になります。また、 この配列のインデックスは、表示行インデックスに対応します。 なお、この配列は、引数 lnsz が箱の指定として無効な時には、設定されません。
ちなみに、各表示行のサイズは、GetLineSize() 関数で 取得できますが、全表示行のサイズを一気に取得する場合は、本 GetAllSize() を使う方が、 遥かに高速で便利です。
用例:

次のスクリプトは、現テキストのサイズをプリントします。
 print "現テキストサイズ: " : ::Apsaly.GetAllSize();

次のスクリプトを実行すると、LineCn という名前の箱(変数)に、 全表示行の各サイズを要素とする純粋配列が設定されます。
 ::Apsaly.GetAllSize( LineCn'new! );
ちなみに、LineCn'size / 2 の値は、全表示行数になります。

GetAllText()
機能:現編集テキストの全文字列を取得します。
用例: 次のスクリプトは、現編集テキスト内にある各英数単語の出現頻度をカウントして、 その結果をプリントします。
  txbuf = ::Buffer();
  txbuf.Write( ::Apsaly.GetAllText() );
  txbuf.Seek(0);
  count'cbox!;
  for( v = txbuf.Find( $"\w+" ) ;
       v >= 0 ;
       v = txbuf.FindNext() )
  {
      word = txbuf.FoundText();
      if( count[ word ]'exist? )
          count[ word ]++;
      else
          count[ word ] = 1;
  }
  count'qsort;
  for( p := count'first ; p'ref? ; p := count'next )
      print p : "\t" : p'name;
GetLineSize( ... )
機能: 指定された位置の行のサイズ(バイト数)を取得します。
説明: 本関数の引数は、「編集テキスト内の位置を 規定するリレー型関数」を使って指定します。
本関数は、この引数で指定された位置にある行の 文字列のサイズ(バイト数)を返します。 この行が論理行か表示行かは、引数の指定に依存します。 この行の末尾が改行コードなら、そのサイズも含みます。
用例:

・現カーソル行のサイズを取得:
  ::Apsaly.GetLineSize()

・次の表示行のサイズを取得:
  ::Apsaly.GetLineSize( +1'VLn )

・2行前の論理行のサイズを取得:
  ::Apsaly.GetLineSize( -2'LLn )

・現テキスト内の最長の論理行のサイズをプリント:
    MaxSize = 0;
    N = ::Apsaly.MaxLineNo(1);
    for( i = 0 ; i < N ; i++ )
    {
        CurSize = ::Apsaly.GetLineSize( i'LLi );
        if( MaxSize < CurSize )
            MaxSize = CurSize;
    }
    print MaxSize;
GetLineText( ... )
機能:指定された位置の行の文字列を取得します。
説明: 本関数の引数は、「編集テキスト内の位置を 規定するリレー型関数」を使って指定します。
本関数は、この引数で指定された位置にある行の文字列を返します。 この行が論理行か表示行かは、引数の指定に依存します。 この行の末尾が改行コードなら、それも含めて返します。
用例:

・現カーソル行の文字列を取得:
  ::Apsaly.GetLineText()

・次の論理行の文字列を取得:
  ::Apsaly.GetLineText( +1'LLn )

・3行前の表示行の文字列を取得:
  ::Apsaly.GetLineText( -3'VLn )

・現テキスト内で ABC を含む論理行をプリント:
    'match( "ABC" );
    N = ::Apsaly.MaxLineNo(1);
    for( i = 0 ; i < N ; i++ )
    {
        T = ::Apsaly.GetLineText( i'LLi );
        if( T'match >= 0 )
            print T :- ;
    }
GetLineCond( t, ... )
機能: 指定された行の状態を取得します。
説明: 引数 t には、取得する状態の種別を、下表の数値で指定します。
  0  変更の有無
  1  折り返し行か否か( 論理行の場合は、折り返し行の有無 )
  2  マークの有無
  3  折り畳みの中にある行か否か
  4  折り畳みで隠された行か否か
  5  空行(改行だけの行)か否か
  6  空白行(空または空白だけの行)か否か
  7  インデント(字下げ)の桁数
  8  論理行内の表示行数(=折り返し回数+1)
  9  論理行内の相対表示行インデックス( 論理行の場合、常に 0 )
 10  折り畳み段数( >0: 折り畳み深さ、<0: 展開レベル、= 0: 解除 )
 11  対象行を含む折り畳み部の表示行数
 12     〃   折り畳み部内での対象行の相対表示行インデックス
 13     〃   折り畳み部の総表示行数
 14     〃   折り畳み部の総論理行数
 15     〃   折り畳み部の総文字コード数
引数の ... には、「編集テキスト内の位置を 規定するリレー型関数」を使って、対象行を指定します。 なお、対象行が論理行か表示行かは、この指定に依存します。
引数 t の指定が、有無、〜か否か、の場合、結果は、それぞれ、1 か 0 で返します。 引数 t が省略時、0 の指定と解釈します。引数 t が不正時、-1 を返します。
用例:

・100 行目が変更されているか否か:
  ::Apsaly.GetLineCond( 0, 100'LineNo )

・現カーソル行が折り畳み行か否か:
  ::Apsaly.GetLineCond( 3 )

・次の外見行が空行か否か:
  ::Apsaly.GetLineCond( 5, +1'FLn )

・2行前の論理行の折り返し行数:
  ::Apsaly.GetLineCond( 8, -2'LLn )

・現テキスト内のマーク数をプリント:
    M = 0;
    N = ::Apsaly.MaxLineNo( 0 );
    for( i = 0 ; i < N ; i++ )
    {
        if( ::Apsaly.GetLineCond( 2, i'VLi ) )
            M++;
    }
    print M;
GetPartSize( ... )
機能: 指定された位置から現カーソル位置までのサイズ(バイト数)を取得します。
説明: 本関数の引数は、「編集テキスト内の位置を 規定するリレー型関数」を使って指定します。
本関数は、この引数で指定された位置から現カーソル位置までの間にある文字列の サイズ(バイト数)を返します。
用例:

・現カーソル位置から行末までのサイズを取得:
  ::Apsaly.GetPartSize( 'LineEnd )

・現カーソル位置からテキスト先頭までのサイズを取得:
  ::Apsaly.GetPartSize( 'TextTop )

・現カーソル位置から前の論理行の 8 桁目までのサイズを取得:
  ::Apsaly.GetPartSize( -1'LLn, 8'Column )

GetPartText( ... )
機能: 指定された位置から現カーソル位置までの文字列を取得します。
説明: 本関数の引数は、「編集テキスト内の位置を 規定するリレー型関数」を使って指定します。
本関数は、この引数で指定された位置から現カーソル位置までの間にある文字列を 返します。
用例:

・現カーソル位置から行頭までの文字列を取得:
  ::Apsaly.GetPartText( 'LineTop )

・現カーソル位置からテキスト末尾までの文字列を取得:
  ::Apsaly.GetPartText( 'TextEnd )

・現カーソル位置から次の論理行の 8 桁未満までの文字列を取得:
  ::Apsaly.GetPartText( +1'LLn, 8'Column )

GetTerm( ... )
機能: 指定された位置にある所定区間の文字列を取得します。
説明:

本関数の引数は、「編集テキスト内の位置を 規定するリレー型関数」を使って指定します。
本関数は、この引数で指定された位置にある所定区間の文字列を返します。
所定区間というのは、その位置の文字が、
  ・英単語構成文字( A-Z a-z 0-9 _ )
  ・ひらかな
  ・カタカナ
  ・漢字
  ・全角英数字
  ・全角空白
  ・半角空白
  ・半角カタカナ
のうちのどれかの場合、その位置の前後で、それと同種の文字が連続する範囲のことです。
また、その位置の文字が、
  ・半角括弧 ( ) { } [ ] < > 「 」
  ・全角括弧 ( ){ }[ ]〈 〉「 」
        〔 〕《 》『 』【 】<>
のうちのどれかの場合、それに対応する括弧で囲まれる範囲になります。
もし、その位置の文字が、上記以外の場合、空文字列を返します。

用例:

・現カーソル位置にある所定区間の文字列を取得:
  ::Apsaly.GetTerm()

・現在の行頭から 8 桁目にある所定区間の文字列を取得:
  ::Apsaly.GetTerm( 'LineTop, 8'Column )

GetChar( ... )
機能: 指定された位置にある1字の文字列を取得します。
説明: 本関数の引数は、「編集テキスト内の位置を 規定するリレー型関数」を使って指定します。
本関数は、この引数で指定された位置にある1字の文字列を返します。 この位置がテキスト末尾の場合は、空文字列を返します。
用例:

・現カーソル位置の1文字(の文字列)を取得:
  ::Apsaly.GetChar()

・現カーソル行の行頭の1文字(の文字列)を取得:
  ::Apsaly.GetChar( 'LineTop )

EvalTxpos( ... )
機能: テキスト内の指定位置を返します。
説明: 本関数の引数は、「編集テキスト内の位置を 規定するリレー型関数」を使って指定します。 本関数は、この引数列で規定された最終位置を返します。 この最終位置が、何の値になるかは、最後の引数に使われたリレー型関数に依存します。 その対応は、下表のようになります。
リレー型関数返値
'LineNo      行番号
'LLn, 'LLi    論理行インデックス
'VLn, 'VLi    表示行インデックス
'FLn, 'FLi    外見行インデックス
'Xc, 'Xd, 'Column 桁位置
'Ci        文字コードインデックス
'DCn, 'DKn, 'DWn      〃
'LCn, 'LKn, 'LWn      〃
'TextTop, 'TextEnd     〃
'LineTop, 'LineEnd     〃
'LineLim          〃
'SLn       画面最上行からの行位置
本関数は、論理行、表示行、外見行、桁位置、文字コードインデックスの相互変換や、 組み合せ演算等に使います。
用例:

・表示行インデックス i を論理行インデックス j に変換:
  j = ::Apsaly.EvalTxpos( i'VLi, 0'LLn );

・論理行インデックス i を外見行インデックス j に変換:
  j = ::Apsaly.EvalTxpos( i'LLi, 0'FLn );

・現カーソル行の次の表示行の行頭から 2 単語目の桁位置:
  ::Apsaly.EvalTxpos( +1'VLn, 'LineTop, +2'DWn, 0'Xd )

・100 行目の行頭から 12 字目の文字コードインデックス:
  ::Apsaly.EvalTxpos( 100'LineNo, 'LineTop, 12'DCn )

補説: 単に、現カーソル位置を取得するだけなら、本関数を使わなくても、 次のようにできます。

・現カーソル行の論理行インデックス:
  CurLLi = 'LLi;

・現カーソル行の外見行インデックス:
  CurFLi = 'FLi;

MaxLineNo( t )
機能:編集テキストの最大行数(全行数)を取得します。
説明: 引数 t は、次の値で行の単位を指定します。
  =0: 表示行
  =1: 論理行
  =2: 外見行
引数 t が省略された場合、環境設定の行番号欄で選ばれている方(表示行か論理行の どちらか)になります。
用例: 次のスクリプトは、現編集テキストの論理行数をプリントします。
 print ::Apsaly.MaxLineNo(1);
MaxColumn( n )
機能: 1行の最大桁数(折り返し桁数)を設定/取得します。
説明: 引数 n には、折り返し桁数を指定します。 この値の指定の仕方で、次のような動作が可能です。なお、いずれの場合でも、 折り返し桁数が変わった時には、画面が更新されます。 また、返値は、本関数実行後の折り返し桁数になります。
n > 0 の時:

折り返し桁数が、n の値に設定されます。設定可能な範囲は、20 〜 1024 桁です。

n = 0 の時:

現環境設定の値に合わせて折り返すように設定されます。

n < 0 の時:

n の値に関係なく、現ウィンドウ幅に合わせて折り返すように設定されます。

n 省略時:

折り返し桁数は設定せずに、現在の折り返し桁数を返します。

用例: 次のスクリプトを実行すると、現編集テキストは、80 桁目で折り返します。
 ::Apsaly.MaxColumn( 80 );
次のスクリプトを実行すると、現編集テキストの折り返しは、現環境設定の桁数に戻ります。
 ::Apsaly.MaxColumn( 0 );
TabColumn( N )
機能: タブ間隔の桁数を設定/取得します。
説明: 引数 N には、タブ間隔の桁数を指定します。 この値の指定の仕方で、次のような動作が可能です。なお、いずれの場合でも、 タブ間隔の桁数が変わった時には、画面が更新されます。
N > 0 の時:

全タブ間隔を N 桁に設定します。設定可能な範囲は、2 〜 80 桁です。 もし、N の値がこの範囲外なら、この範囲でカットされます。

N ≦ 0 の時:

タブ間隔を、現環境設定の桁数に設定します(戻します)。

N が純粋配列の時:

各タブ間隔の桁数を順に、その各要素の数値に設定します。 なお、この純粋配列は、1次元の LONG 形式が必須です。

N がコンテナ箱の時:

各タブ間隔の桁数を順に、その箱の中の各数値に設定します。

N 省略時:

タブ間隔は設定せずに、現在のタブ間隔の桁数を返します。


返値は、正常終了時、本関数実行後のタブ間隔の桁数になります。 これには、次の2通りの場合があります。
全タブ間隔で同じ桁数の場合:

その桁数の整数値を返します。

各タブ間隔で個別桁数の場合:

その各桁数の整数値を要素とする純粋配列を返します。

なお、異常終了時、返値は、null になります。

用例:

全タブ間隔を 8 桁に設定:
 ::Apsaly.TabColumn( 8 );

タブ間隔を、現環境設定に戻す:
 ::Apsaly.TabColumn( 0 );

各タブ間隔を 10,8,12,4 桁に設定:
 N = { 10,8,12,4 };
 ::Apsaly.TabColumn( N );

参考: 「タブ桁の一時変更」を行なう TabColumn.mc( 実用スクリプト集 )は、 本関数の使用例として非常に参考になります。
CharXd()
機能:あたりの画素数を返します。
補説: 本関数は、'Xc, 'Xd を 使う時などに必要になることがあります。
用例: ::Apsaly.MoveTo( ( ::Apsaly.CharXd() * 20 )'Xc );
FreeCursor( s )
機能:フリーカーソル状態を設定/取得します。
説明: 引数 s に応じて、フリーカーソル状態は、次のようになります。
  s ≠ 0: ON
  s = 0: OFF
  s 省略: 現状のまま
返値は、本関数実行後のフリーカーソル状態を示します。
  =0: OFF
  =1: ON
用例:

次のスクリプトは、選択範囲の各行(または現在行)の 80 桁目に縦の罫線文字「│」を挿入します。 80 桁未満で改行されている行にも対応できるように、 各行の 80 桁目へのカーソル移動は、フリーカーソル ON 状態で行なっています。 なお、本スクリプトの実行時には、折り返し桁が 81 桁以上になっている必要があります。

  'AddScope( ::Apsaly );
  if( GetSelType() > 0 )  // 範囲選択あり?
  {
      ( MinLi, MaxLi ) = GetSelRange( 0 );
      SelectOff();
  }
  else    // 範囲選択なし?
      MinLi = MaxLi = 'VLi;    // 現在行

  fc = FreeCursor();  // 現フリーカーソル状態を保管
  FreeCursor(1);      // フリーカーソル ON 状態にする
  UndoBlockBegin();
  for( Li = MinLi ; Li <= MaxLi ; Li++ )
  {
      MoveTo( Li'VLi, 80'Column );
      Insert( "│" );
  }
  UndoBlockEnd();
  FreeCursor( fc );   // 元のフリーカーソル状態に戻す
IME( cmd, prm )
機能: IMEを操作します。
説明:

引数 cmd は、IMEの操作を以下の数値で指定します。
  0  IME を OFF にする
  1  IME を ON にする
  2  IME の ON/OFF 状態を取得
  3  再変換を起動
  4  単語登録ダイアログボックスを表示
引数 prm は、次のようになります。
 cmd = 0,1,2 の時、不要
 cmd = 3 の時、再変換文字列(補説参照)
 cmd = 4 の時、登録単語

返値は、次のようになります。
 cmd = 0,1,3,4 の時、成否を示す真偽値
 cmd = 2 の時、IMEの現在の ON/OFF 状態
 cmd = それ以外の時、null

補説:

再変換の対象文字列は、次のようになります:
 引数 prm に指定されていれば、その文字列、さもなくて、
 選択範囲が有る場合、その範囲内の現カーソル行の文字列
 選択範囲が無い場合、現カーソル位置の前後からIMEが選定

用例:

・IMEを ON に設定:
  ::Apsaly.IME( 1 );

・IMEの再変換を起動:
  ::Apsaly.IME( 3 );

MarkLine( t, ... )
機能:行マークを設定/取得します。
説明: 引数 t は、下表の数値で、行マークの操作を指定します。
  0  通常マークを解除
  1  通常マークを設定
  2  通常マークの設定状態を反転
  3  通常マークを全て解除
  4  一時マークを解除
  5  一時マークを設定
  6  一時マークの設定状態を反転
  7  一時マークを全て解除
 -1  現在の行マーク状態を取得

引数 t が省略時は、-1 の指定として解釈します。
引数の ... には、「編集テキスト内の位置を 規定するリレー型関数」を使って、行マーク操作の対象行を指定します。 なお、引数 t が 3 または 7(全マーク解除)の時、引数 ... の指定は不要です。

返値は、以下の数値で、本関数実行後の対象行のマーク設定状態を示します。

  0  両マークとも無し
  1  通常マークのみ有り
  2  一時マークのみ有り
  3  両マークとも有
 -1  引数不正 or エラー
用例:

・現カーソル行に通常マークを設定:
  ::Apsaly.MarkLine( 1 )

・論理行インデックスが 120 の行に一時マークを設定:
  ::Apsaly.MarkLine( 5, 120'LLi );

・全ての一時マークを解除:
  ::Apsaly.MarkLine( 7 )

・230 行目の行マークの設定状態を取得:
  ::Apsaly.MarkLine( 230'LineNo );

FindFwd( string, mode, type )
機能: 現カーソル位置から指定文字列を指定モードで順行検索します。
説明:

引数 string と mode は、SetFindCond 関数と同じです。 string の指定がない時、現在の検索文字列が使用されます。 mode の指定がない時、現在の検索モードが使用されます。 同じ検索条件で何回も検索する場合は、最初に SetFindCond 関数で検索条件を設定しておいて、各回の検索では、 本関数を引数なしでコールする方が、毎回本関数で同じ検索条件を指定してコールする よりも速くなります。

引数 type は、置換のための検索を行なわせる時に、1 を指定します。 この引数は省略または 0 の指定で、通常の検索になり、置換のための検索は行ないません。 ちなみに、置換条件の設定は、SetReplCond 関数で行ないます。

本関数は、検索結果を示す整数値を返します。
検索に成功した時、返値は、0 以上の値になります。 正規表現で「一致パターン識別値」が規定されていて、 その部分に一致した場合、その識別値が返値になります。これは通常、正の値です。 もし、その部分に一致しないか、または、正規表現でなければ、返値は 0 になります。
検索に失敗した時、返値は、以下に示す負値になります。
  = -1: 一致なし
  = -2: 検索中断(ユーザー指令による)
  = -3: 正規表現が複雑過ぎ
  = -4: 致命的エラー発生
本エディタでは、検索は補助スレッドが行ないます。そのため、 このスレッドが他の作業中の時に、本関数を実行しても、検索は失敗します。 そのような場合、本関数は、適当な負の値( 現状、-99 )を返します。

用例:

・現検索条件で順行検索を実行:
  ::Apsaly.FindFwd();

・"ABC" を順行検索して選択:
  ::Apsaly.FindFwd( "ABC", "G" );

・"ABC" を含む行を順行検索:
  ::Apsaly.FindFwd( $"^.*ABC.*\n", "R" );

・一連の空白行を順行検索して選択:
  ::Apsaly.FindFwd( $"(^[ \t ]*\n)+", "RGE" );

FindBwd( string, mode, type )
機能: 現カーソル位置から指定文字列を指定モードで逆行検索します。
説明: 本関数の引数と返値は、FindFwd 関数と同じです。 両関数の違いは、検索方向が逆になる以外、特にありません。
用例:

・現検索条件で逆行検索を実行:
  ::Apsaly.FindBwd();

・"XYZ" を逆行検索して選択:
  ::Apsaly.FindBwd( "XYZ", "G" );

・空白を含まない行を逆行検索:
  ::Apsaly.FindBwd( $"^[^ \t \n]*\n", "R" );

FindAround( string, mode, bln, fln )
機能: 現カーソル位置周辺において指定文字列を指定モードで検索します。
説明: 本関数の引数 string, mode と返値は、FindFwd 関数と同じです。 但し、本関数では、検索条件が検索履歴に登録されません。
検索する周辺範囲は、引数の bln と fln で指定します。
引数 bln は、現在行から周辺範囲の最小行までの相対行数(表示行単位)を指定します。 この値が 0, -1, ... の時、周辺範囲の最小行はそれぞれ、現在行, 前行, ... となります。 この引数が省略時は、0 として扱います
引数 fln は、現在行から周辺範囲の最大行までの相対行数(表示行単位)を指定します。 この値が 0, +1, ... の時、周辺範囲の最大行はそれぞれ、現在行, 次行, ... となります。 この引数が省略時は、0 として扱います。
補説:

本関数の検索で一致する文字列部分は、その先頭から末尾までのどこかに、現カーソル位置が 必ず含まれます。

用例:

現在行において現在位置の前後で漢字とひらかなから成る文字列部を選択:
  ::Apsaly.FindAround( $"[\K\H]+", "RG" );

MakeFold( ... , ln )
機能: 指定された行範囲を折り畳みます。
説明: 引数 ... は、「編集テキスト内の位置を 規定するリレー型関数」を使って、折り畳み範囲の開始行を指定します。
引数 ln は、折り畳み範囲の行数(外見行単位)を指定します( ln < 0 で逆方向の行数指定)。
本関数は、これらの引数で指定された行範囲を折り畳みます。 但し、各種の制約上、実際に折り畳まれるのは、 その指定範囲と若干異なる場合があります。 この詳細は、下記の「補説」で説明しています。
返値は、実際に折り畳んだ外見行数になります。なお、異常終了時は、-1 が返ります。
補説:

現状、折り畳みは、論理行単位で、 2行以上の外見行に対してだけで行なえます。 そのため、引数で指定された行範囲が、この制約に合わない場合、次のように補正されます。 まず、折り畳みの開始行が、既に折り畳まれている中にある行に指定された場合、 実際の開始行は、その行が含まれる折り畳み行(外見行)に補正されます。 次に、折り畳み範囲の行数は、外見行単位で指定しますが、 その行範囲が、論理行単位になっていない場合、実際の行範囲は、 その指定範囲を含む最小の論理行単位の範囲に補正されます。 なお、補正された最終の行範囲に、外見行が2行以上なければ、折り畳みは行なわれません。

用例:

・100 行目以降 20 行分の外見行範囲を折り畳む:
  ::Apsaly.MakeFold( 100'LineNo, 20 );

・現カーソル行以降 10 行分の外見行範囲を折り畳む:
  ::Apsaly.MakeFold( 10 );

・現カーソル行以前 10 行分の外見行範囲を折り畳む:
  ::Apsaly.MakeFold( -10 );

PresetFold( ... , ln )
機能: 指定された行範囲に折り目を付けます。
説明: 引数 ... は、「編集テキスト内の位置を 規定するリレー型関数」を使って、折り目を付ける範囲の開始行を指定します。
引数 ln は、折り目を付ける範囲の行数(外見行単位)を指定します( ln < 0 で逆方向の行数指定)。
本関数は、これらの引数で指定された行範囲に折り目を付けます。 但し、各種の制約上、実際に折り目が付けられるのは、 その指定範囲と若干異なる場合があります。 これは、基本的に、折り畳みの範囲と同様です。 この詳細は、MakeFold() 関数の「補説」で説明しています。
返値は、実際に折り目を付けた外見行数になります。なお、異常終了時は、-1 が返ります。
用例:

・200 行目以降 40 行分の外見行範囲に折り目を付ける:
  ::Apsaly.PresetFold( 200'LineNo, 40 );

・現カーソル行以降 30 行分の外見行範囲に折り目を付ける:
  ::Apsaly.PresetFold( 30 );

OpenFold( ... , ln, dv )
機能: 指定の行範囲内にある各折り畳み行を指定段数だけ展開します。
説明: 引数 ... は、「編集テキスト内の位置を 規定するリレー型関数」を使って、展開範囲の開始行を指定します(「補注」参照)。
引数 ln は、展開範囲の行数(外見行単位)を指定します( ln < 0 で逆方向の行数指定)。
引数 dv は、展開する折り畳みの段数を指定します(「補注」参照)。
本関数は、指定された行範囲内にある各折り畳み行を 指定段数だけ展開します。
返値は、この展開で増えた外見行数になります。なお、異常終了時は、-1 が返ります。
補注:

引数 ... で指定された開始行が、既に折り畳まれている中にある行の場合、 その行が含まれる折り畳み行(外見行)が、実際の開始行になります。

引数 dv = 1 の時、指定行範囲内にある各折り畳み行だけが展開されます(その中にある 折り畳み行は展開されません)。 dv = 2 の時、各折り畳み行とその直下の各折り畳み行だけが展開されます。 以降、dv >= 3 の時も同様です。 dv 省略時は、全段、つまり、指定行範囲内にある全ての折り畳み行が、展開されます。

用例:

・100 行目以降 20 行分の外見行範囲内にある折り畳みを1段展開:
  ::Apsaly.OpenFold( 100'LineNo, 20, 1 );

・現カーソル行以降 50 行分の外見行範囲内にある折り畳みを全段展開:
  ::Apsaly.OpenFold( 50 );

CloseFold( ... , ln, dv )
機能: 指定の行範囲内にある折り畳み展開部を指定段数まで折り畳み直します。
説明: 引数 ... は、「編集テキスト内の位置を 規定するリレー型関数」を使って、対象範囲の開始行を指定します(「補注」参照)。
引数 ln は、対象範囲の行数(外見行単位)を指定します( ln < 0 で逆方向の行数指定)。
引数 dv は、折り畳み直す段数を指定します(「補注」参照)。

ln の絶対値 ≧ 2 の時、本関数は、対象範囲内に完全に含まれている各折り畳み展開部の 最内段(最も深く折り畳まれていた展開部)から順に外側の段に向かって、 指定段数だけ折り畳み直します。 なお、対象範囲内に部分的にしか含まれていない展開部は対象外になります。

ln の絶対値 ≦ 1 の時、本関数は、対象範囲(開始行の1行)を含む折り畳み展開部の 最内段(上記参照)から順に外側の段に向かって、指定段数だけ折り畳み直します。

返値は、実際に折り畳んだ外見行数になります。なお、異常終了時は、-1 が返ります。

補注:

引数 ... で指定された開始行が、既に折り畳まれている中にある行の場合、 その行が含まれる折り畳み行(外見行)が、実際の開始行になります。

引数 dv = 1 の時、対象の折り畳み展開部の最内段だけが折り畳み直されます。 dv = 2 の時、最内段とその次に外側の展開部が折り畳み直されます。 以降、dv >= 3 の時も同様です。 dv 省略時は、対象範囲内にある全ての深さの折り畳み展開部が、 折り畳み直されます。

用例:

・100 行目以降 20 行分の外見行範囲内にある折り畳み展開部を1段閉じる:
  ::Apsaly.CloseFold( 100'LineNo, 20, 1 );

・現カーソル行以降 30 行分の外見行範囲内にある折り畳み展開部を2段閉じる:
  ::Apsaly.OpenFold( 30, 2 );

・現カーソル行を含む折り畳み展開部を全段閉じる:
  ::Apsaly.CloseFold( 1 );

ResetFold( ... , ln, dv )
機能: 指定の行範囲内にある折り畳みを指定段数まで解除します。
説明: 引数 ... は、「編集テキスト内の位置を 規定するリレー型関数」を使って、対象範囲の開始行を指定します(「補注」参照)。
引数 ln は、対象範囲の行数(外見行単位)を指定します( ln < 0 で逆方向の行数指定)。
引数 dv は、解除する段数を指定します。なお、dv 省略時は、全段の指定になります。「補注」参照。

ln の絶対値 ≧ 2 の時、本関数は、指定行範囲内に含まれる各折り畳み行を指定段数だけ解除します。 また、その行範囲内に完全に含まれている各折り畳み展開部の 最内段(最も深く折り畳まれていた展開部)から順に外側の段に向かって、 指定段数だけその折り目を消します。 なお、対象行範囲内に部分的にしか含まれていない展開部の折り目は消しません。

ln の絶対値 ≦ 1 の時、本関数は、指定行範囲の開始行が折り畳み行なら、その行の折り畳みを 指定段数だけ解除します。さもなくて、その開始行が折り畳み展開部上なら、 その行を含む最内段(最も深く折り畳まれていた展開部)から順に外側の段に向かって、 指定段数だけその折り目を消します。

返値は、この解除によって増えた外見行数になります。なお、異常終了時は、-1 が返ります。

補注:

引数 ... で指定された開始行が、既に折り畳まれている中にある行の場合、 その行が含まれる折り畳み行(外見行)が、実際の開始行になります。

解除対象が折り畳み展開部の場合:

1段の解除では、対象の折り畳み展開部の最内段だけの折り目を消します。 2段の解除では、最内段とその次に外側の展開部の折り目を消します。 以降、3段以上の時でも同様です。 全段の解除では、対象の折り畳み展開部の全ての折り目を消します。

解除対象が折り畳み行の場合:

1段の解除では、その折り畳み行だけの折り畳みを解除します。 2段の解除では、その折り畳み行自身とその中の1段だけの折り畳みを解除します。 以降、3段以上の時でも同様です。 全段の解除では、その折り畳み行自身とそれに含まれる全ての折り畳みを解除します。

用例:

・100 行目以降 20 行分の外見行範囲内にある折り畳みを1段解除:
  ::Apsaly.ResetFold( 100'LineNo, 20, 1 );

・現カーソル行以降 30 行分の外見行範囲内にある折り畳みを2段解除:
  ::Apsaly.OpenFold( 30, 2 );

・現カーソル行の折り畳みを全段解除:
  ::Apsaly.ResetFold( 1 );

PopupMenu( pos, item, ... )
機能:ポップアップメニューを表示します。
説明: 引数 pos は、ポップアップメニューの表示位置を規定します。 この値が 0 なら、現マウス位置付近に表示され、1 なら、現カーソル位置付近に表示されます。
引数 item 以降は、メニュー項目を規定する任意個数の引数になります。 メニュー項目として、文字列を指定した場合、それがメニュー項目名になります。 null を指定した場合、セパレータになります。
階層構造のメニューの場合、サブメニュー節として、 その中のメニュー項目を含む複合箱を、引数に指定します。 その際、その複合箱の名称が、そのサブメニュー節の名称になります。
上記以外の種類の引数は、無視されますが、エラーになりません。

本関数の返値は、何番目のメニュー項目が選ばれたかを示す番号になります。 最初の項目が選ばれた時は 1 に、2番目の項目の時は 2 に、以降同様、になります。 セパレータとサブメニュー節が選ばれることはないので、 これは番号順位の対象ではありません。 階層構造のメニューでは、各節において、その節と同位の次項目よりも、 その節内の項目の方が、先番になります。
メニュー項目が選ばれなかった場合(例えば、ESC キー押下等でキャンセルされた場合)、 返値は、0 になります。 本関数が正常に終了しなっかた場合は、null が返ります。
用例: (1) ポップアップメニューを現マウス位置付近に表示
    id = ::Apsaly.PopupMenu( 0,
        "項目1",
        "項目2",
        "項目3",
         null,      // セパレータ
        "項目4" );
    print id;
(2) 階層構造のポップアップメニューを現カーソル位置付近に表示
    [ "項目3" ] =
        { "項目A", "項目B", null, "項目C" };
    id = ::Apsaly.PopupMenu( 1,
        "項目1",
        "項目2",
        [ "項目3" ],   // サブメニュー項目
        "項目4" );
    print id;
注意: 現状、スクリプト内であるスレッドがポップアップメニューを表示しても、 他のスレッドに実行権は譲渡されません。
GetEvent( msec, ex )
機能: キー入力、マウスクリック等のイベントを取得します。
説明: 編集ウィンドウ内で発生したキー入力やマウスクリック等の イベントは、通常、その内部で処理されます。 ところが、本関数を1度実行すると、その種のイベントは、 それ専用のFIFO( First-In First-Out: 先入れ先出し)型バッファに 格納されるようになります。 この状態は、現スクリプトが終了するまで続きます。 本関数は、このFIFOからイベントを1つ取り出して返します。

引数 ex が、省略/不正、または、偽と評価される値に指定された場合、 各イベントは、FIFOに格納されるだけで、そのイベントに対応する 本来の処理は行なわれません。
一方、引数 ex に、真と評価される値が指定された場合、 各イベントは、FIFOに格納されると同時に、それに対応する本来の処理も 行なわれます。

引数 msec には、イベント取得時の最大待ち時間(単位:ミリ秒)を指定します。 この値が 0 以下の場合は、待たずにその取得結果を即時に返します。 この引数が省略された場合は、イベントが取得されるまで待ち続けます。

イベントが正常に取得できた場合、本関数は、その内容を示す「イベント値」を 返します。これは、非0の整数値、または、文字列になります(詳細下記参照)。 本関数が、待ち時間なし( msec <= 0 )でコールされた時、イベントがなければ、 整数値の 0 が返されます。待ち時間あり( msec > 0 )でコールされた時、 その時間が経過してもイベントが入力されなかった場合は、null が返されます。

本関数が返す「イベント値」は、次のようになります。
 整数の場合:
   Bit31-24: イベント種別
    = 0: イベント無し
    = 1: キー押下
    = 2: キー離し
    = 3: マウスボタン押下
    = 4: マウスボタン離し
    = 5: マウスボタンダブルクリック
    =11: 音声認識終了
   Bit23-16 : 未使用(全ビット0)
   Bit15-0 : イベントコード
    キーイベントの場合
     Bit15: オートリピート状態
     Bit12: Altキー状態
     Bit11: Ctrlキー状態
     Bit10: Shiftキー状態
     Bit7-0: 仮想キーコード
    マウスイベントの場合
     Bit4: 中ボタン状態(現状対象外)
     Bit3: Ctrlキー状態
     Bit2: Shiftキー状態
     Bit1: 右ボタン状態
     Bit0: 左ボタン状態(現状対象外)
   上記規定以外のビットは全て0
 文字列の場合: キーボードから入力された文字列
   ・文字キーからはその1文字の文字列
   ・IME入力からは変換確定後の文字列
このイベント関連のマクロ定義は、インクルード フォルダ 内の Event.h というファイルにあります。 上記で、「仮想キーコード」というのは、キーボードの各キーを識別する ための Windows 共通のコードです。この関連のマクロ定義は、インクルード フォルダ 内の GkLib\GkKey.h にあります。

本関数ではまた、音声認識された文字列を取得するようになっています ( Dictate() 関数参照 )。 その場合、返値は、2項になります。その第1項は、その文字列自身で、 第2項は、整数値になります。これらは、例えば、次のようにして取得します。
  ( ev, tv ) = ::Apsaly.GetEvent();
第2項の整数値(上式で tv に代入される値)は、現状、0x0800???? になります。 本関数の返値が、音声認識の文字列でなければ、返値の第2項は無いので、 上式のようにした場合、tv の値は null になります。これによって、 返値が文字列の場合、キー入力の文字列なのか、音声認識の文字列なのかを、 区別できます。
なお、音声認識の終了は、前述の「イベント値」に、それを示すコードがあるので、 それで認知できます。
注意: 現状、マウスの左ボタンは、常時、通常操作が行なえるように、 イベントの取得対象にはなっていません。
補説: スクリプト内で、あるスレッドがイベント取得の待機状態になると、 他に実行可能なスレッドがあれば、そのうちの最高優先順位のスレッドに 実行権が譲渡されます。
用例:

次のスクリプトは、イベントを取得して、適当な文字列に変換して、 現カーソル位置に挿入する、という操作を、 ESC キーが押されるまで、続けます。

  'AddScope( ::Apsaly );
  UndoBlockBegin();
  Insert( "Event Input Start\r\n"  );
  for( ;; )
  {
      ev = GetEvent();    // イベント入力まで待機
      switch( ev'type )
      {
        case "integer":  s = "0x" + ev'x(8);  break;
        case "string":   s = ev'quote;        break;
        default:         continue;
      }
      Insert( s + "\r\n" );
      if( ev == 0x01`00`00`1B )   // ESC キー?
          break;
  }
  Insert( "Event Input End\r\n"  );
  UndoBlockEnd();

マルチスレッドで、イベント取得を行なう 例は、スクリプト標準フォルダ 内 の AutoScroll.mc にあります。

ExecKeyCmd( key )
機能: 指定されたキーに割り当てられているコマンドを実行します。
説明: 引数の key には、キーコードを指定します。この値のビット構成は、次のようになります。
  Bit7-0: 仮想キーコード
  Bit10:  Shiftキー状態( =0: OFF, =1: ON )
  Bit11:  Ctrlキー状態 ( 同上 )
  Bit12:  Altキー状態 ( 同上 )

このキーコード関連のマクロ定義は、本エディタのインストール フォルダ 内の Include\GkLib\GkKey.h に あります。

本関数の返値は、実行されたコマンドの識別値になります。 この値は、現状、どのインクルードファイルにもマクロ定義されていませんが、 EditCmds.h を見れば分かります。
なお、指定されたキーに割り当てられているコマンドがない場合、返値は、0 になります。

用例: #include <GkLib\GkKey.h>
::Apsaly.ExecKeyCmd( #KCF_CTRL + `V` );
GetKeyCmd( key )
機能: 指定されたキーに割り当てられているコマンドを取得します。
説明: 引数の key には、キーコードを指定します。この値のビット構成は、次のようになります。
  Bit7-0: 仮想キーコード
  Bit10:  Shiftキー状態( =0: OFF, =1: ON )
  Bit11:  Ctrlキー状態 ( 同上 )
  Bit12:  Altキー状態 ( 同上 )

このキーコード関連のマクロ定義は、本エディタのインストール フォルダ 内の Include\GkLib\GkKey.h に あります。

本関数は、指定されたキーに割り当てられているコマンドの識別値を返します。 但し、そのコマンドが無い場合には、0 以下の整数値を返します。
コマンドによっては、1個または2個のパラメータを伴う場合があります。 そのような場合、本関数は、そのパラメータも返します。そのため、一般的には、 本関数の返値は、次のようにして受け取ります。
 ( cmd, p1, p2 ) = ::Apsaly.GetKeyCmd( key );
これで、cmd にコマンド識別値、p1 に第1パラメータ、p2 に第2パラメータ、 が代入されます。なお、第1パラメータが無い時、p1 は null になり、 第2パラメータが無い時、p2 は null になります。

補説: 本関数が返すコマンドの識別値は、現状、どのインクルードファイルにもマクロ定義されていませんが、 EditCmds.h を見れば分かります。
Sync( msec )
機能: テキストエディタとの同期を取るための機能を提供します。
説明:

スクリプトの実行対象の編集ウィンドウで、例えば、ファイルを「開く」ダイアログ ボックスを表示している時には、スクリプトからのカーソル移動やテキスト編集等の コマンドは、受け付けられません。というよりも、その実行で例外が発生します。

この Sync 関数を使えば、テキストエディタがスクリプトからのコマンドを 受け付けられる状態になるまで待つことができます。また、待たずに、その状態を 取得することもできます。

引数の msec には、最大待ち時間(単位はミリ秒)を指定します。 msec の値が 0 以下なら、待たずに、現状態を即時に返します。 msec の指定がない場合、テキストエディタがコマンドの受け付け可能になるまで待ち 続けます。但し、同期不能の場合は、その状態を即時に返します。
 Sync 関数の返値は、次の通りです。
  +1: 同期成功(コマンド実行可能)
   0: 同期未完(まだ待機が必要)
  -1: 同期不能(もはや実行不能)
なお、同期不能は、スクリプトの実行対象の編集ウィンドウが閉じられてしまっている 等の原因に依ります。

用例: 例えば、「名前を付けて保存」のダイアログボックスを、
  #FileSaveAsDialog;
のマクロの実行で表示させた場合、スクリプトに制御が戻るのは、 そのダイアログボックスが閉じられてからではなく、その表示直後になります。 そのため、テキストエディタ関連のコマンドでなければ、 このダイアログボックス表示中でも実行可能ですが、 このダイアログボックスが閉じられるのと同期して、何かを行ないたい場合は、 その前に、
  ::Apsaly.Sync();
を実行しておく必要があります。
補説: スクリプト内で、あるスレッドが Sync() を実行して待機状態になると、 他に実行可能なスレッドがあれば、そのうちの最高優先順位のスレッドに 実行権が譲渡されます。
Lock()
機能:現対象のテキストをロックします。
説明:

スクリプトの実行対象の編集テキストは、通常、 スクリプトの実行中でも手動で操作できるようになっています。 この Lock 関数を実行すると、その対象のテキストをロックして、 スクリプト以外では、何も操作できなくします。

このロックは、カウンタで管理されています。 このカウンタは、最初は0に初期化されていて、Lock() を実行すると1つ増加し、 Unlock() を実行すると1つ減少します。このカウンタの値が、1以上か否かで、 ロックの ON/OFF が制御されます。このカウンタの値は、負にはなりません。 スクリプトの実行が終了すると無条件に、このカウンタは0にリセットされて、 ロックは解除されます。

プログラムミス等で、万が一、ロックしたまま、スクリプトの実行が終らなくなってしまった場合、 Breakキー(Ctrl+Pauseキー)の操作で、スクリプトを強制終了させることができます。

用例:::Apsaly.Lock();
Unlock()
機能:現対象のテキストのロックを解除します。
説明:Lock 関数の説明参照。
用例:::Apsaly.Unlock();
GetWindowCond( type )
機能: 現操作対象の編集ウィンドウの状態(状況)を取得します。
説明: 引数 type には、取得する状態(状況)の種別を指定します。 これには、今のところ、次の4種類があります。
 type = 1: 現カーソルの矩形(スクリーン座標系)
     2: 現編集ウィンドウの矩形(スクリーン座標系)
     3: 現編集ウィンドウのタイトル
     4: ウィンドウ描画更新可否状態( =0:禁止, =1:許可 )
本関数の返値は、矩形の場合、多項になります。 具体的には、各種別で、次のように取得します。
  ( Xo, Yo, Xd, Yd ) = .GetWindowCond( 1 );
  ( Xo, Yo, Xd, Yd ) = .GetWindowCond( 2 );
  title = .GetWindowCond( 3 );
  state = .GetWindowCond( 4 );
ここで、Xo, Yo は、矩形の左上隅のX座標とY座標、 Xd, Yd は、矩形の幅と高さ、の整数値になります。
title は、文字列になります。
state は、真偽値( = 1 or 0 )になります。
SetWindowCond( type, s )
機能: 現操作対象の編集ウィンドウの状態(状況)を設定します。
説明:

引数 type には、設定する状態(状況)の種別を指定します。 これには、今のところ、次の2種類があります。

 type = 3: 現編集ウィンドウのタイトル
     4: ウィンドウ描画更新可否状態( =0:禁止, =1:許可 )
引数 s には、type に対応する値を指定します:
 タイトルの場合、その文字列を指定します。
 可否状態の場合、その真偽値( = 1 or 0 )を指定します。

本関数の返値は、正常終了時、次のようになります。
 type = 3: type の値自身( = 3 )
     4: その実行結果の状態( = 1 or 0 )
不正終了時は、null が返ります。

補説:

現編集ウィンドウのタイトルは、本関数で変更しても、 スクリプトが終了した時点で、元の内容に戻ります。

ウィンドウ描画更新可否状態は、スクリプトの一連の処理の途中で画面が 逐次更新されないようにする場合に、その間だけ一時的に禁止します。 こうしておくと、画面更新処理の時間が省かれるので、実行時間が短縮されます。 この禁止状態を解除すると、その時点で、それまでに変更されていた内容が 一気に描画されます。 なお、この禁止状態は、スクリプトで解除していなくても、 スクリプトが終了した時点で、自動的に解除されます。

用例: ::Apsaly.SetWindowCond( 3, "〜〜 実行中 〜〜" );
::Apsaly.SetWindowCond( 4, 0 );   // ウィンドウ更新一時禁止
TintSelText( i )
機能: 選択範囲を、指定の着色番号の形態に着色します。 または、選択範囲の着色を解除します。
説明: 引数 i には、着色番号を指定します。
この値が 1 〜 31 の時、その番号に対応する着色形態で着色します。
この値が 0 の時、選択範囲の着色を解除します。
この値が上記以外または省略時、本関数は特に何もしません。
本関数の返値は、次のようになります。
  = +1: 正常終了, = 0 : 無処理, = -1: エラー
なお、選択範囲は、本関数の実行後も、そのままになっています。 着色結果は、範囲選択を解除しないと、見られません。
用例:
::Apsaly.TintSelText( 5 );  // 選択範囲を 5 番目の形態で着色
::Apsaly.TintSelText( 0 );  // 選択範囲の着色を解除
GetTintInfo( ..., s )
機能: 引数で指定された位置の着色情報を取得します。
説明: 引数の ... は、「編集テキスト内の位置を 規定するリレー型関数」を使って、着色情報を取得する位置を指定します。
引数 s は、以下のように、どちらの着色情報を取得するかを指定します。
  =0: 汎用の着色情報(デフォールト)
  =1: 字句強調の着色情報
引数 s の省略時は、=0 として扱われます。
本関数が返す着色情報は、次の3種類の整数値になります。
・着色番号その区間が着色されていれば 1〜31、 無着色なら 0
・長さその区間の文字コード数
・位置その区間の開始位置を示す文字コードインデックス
これらの3値は、例えば、次のような多重代入で取得します。
  ( Id, Cn, Ci ) = ::Apsaly.GetTintInfo();
これで、現カーソル位置にある着色区間の着色番号、長さ、位置が、 それぞれ、Id, Cn, Ci という変数に代入されます。
用例:

現編集テキスト内にある全ての汎用着色区間を列挙:

  LimCi = ::Apsaly.GetAllSize();
  for( Ci = 0 ; Ci < LimCi ; Ci += Cn )
  {
      ( Id, Cn, Ci ) = ::Apsaly.GetTintInfo( Ci'Ci );
      if( Id != 0 )   // 着色あり?
          print Id, Cn, Ci;
  }
なお、サンプルスクリプトの EnumTints.mc は、各着色区間の文字列もプリントします。
補説: 着色番号に対応する着色形態(文字色、背景色、スタイル)は、GetTintSpec() 関数で取得できます。