Epsaly オブジェクトのメンバー関数 (2)

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

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

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


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

関数名 概要説明
ExecCmd テキストエディタのコマンドを実行
OpenFile 起動コマンド行でファイルを開く
WindowCount 編集テキストの総数を取得
GetWindowId 編集ウィンドウの識別値を取得
GetFileName 編集ファイル名等を取得
TargetWindow 操作対象の編集ウィンドウを取得/設定
ActiveWindow アクティブ編集ウィンドウを設定
GetHist 各種履歴の文字列/要素数を取得
SetFindCond 検索条件を設定
SetReplCond 置換条件を設定
SetTintSpec 着色形態の設定
GetTintSpec 着色形態の取得
DefTintId デフォールトの汎用着色番号の設定/取得
EnvNameId 個別環境の参照名、主題名、環境番号を返す
EnvValue 環境設定値の設定/取得
EnvApply 指定環境の適用/保存
Report レポートウィンドウに着色文字列を出力
Help Epsaly のヘルプを表示
Speak 読み上げの開始/中断/一時停止等
TraceSpeaking 読み上げ状況の確認
Dictate 聞き取りの開始/終了

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

ExecCmd( id, name, file )
機能:テキストエディタのコマンドを実行します。
説明:

テキストエディタのコマンドは、基本的に、環境設定で機能割り当てできるように なっていますが、このうちのほとんどのコマンドは、本関数で実行することができます。

引数の id には、コマンドの識別値を指定します。 大抵のコマンドは、この id の指定だけで済みます。 この値は、インクルードファイル EditCmds.mh を 見れば分かりますが、このファイル内には、もう少し便利なマクロが定義されています。 例えば、選択範囲の半角空白をタブに変換するのに、
  ::Epsaly.ExecCmd( 248 );
と書く代わりに、マクロを使って、
  #SpaceToTab;
と書くことができます。なお、このマクロを使う時は、 それより前に(通常はプログラムの最初に)、
  #include <EditCmds.mh>
を書いておく必要があります。

引数の name には、登録名を指定します。この指定が必要なのは、ユーザーが登録した 拡張コマンドを実行する場合だけです。例えば、
  ::Epsaly.ExecCmd( 10, "ユーザーメニュー(1)" );
のようになります。これは、マクロを使えば、
  #ExtUserMenu( "ユーザーメニュー(1)" );
と書くことができます。

引数の file には、ファイル名を指定します。この指定が必要なのは、慣用語句入力を 実行する場合だけです。この場合、name には、項目名を指定します。例えば、
  ::Epsaly.ExecCmd( 13, "標題部挿入( *.h 用 )", "C.ptx" ); のようになります。これは、マクロを使えば、
  #ExtInputPhrase( "標題部挿入( *.h 用 )", "C.ptx" );
と書くことができます。

本関数の返値は、正常終了時、null 以外に、不正終了時、null になります。

参考: EditCmds.mh で定義済のマクロをここで幾つか紹介します。
#FileNew 新規ファイルを開く
#FileOpenDialog 「開く」ダイアログを表示
#FileSave 保存
#FileSaveAsDialog 「名前を付けて保存」ダイアログ
#FileClose 閉じる
#MoveToPrevLine カーソルを1行上へ移動
#MoveToNextLine カーソルを1行下へ移動
#MoveToPrevChar カーソルを1字左へ移動
#MoveToNextChar カーソルを1字右へ移動
#MoveToLineTop カーソルを表示行頭へ移動
#MoveToLineEnd カーソルを表示行末へ移動
#MoveToTextTop カーソルを先頭行へ移動
#MoveToTextEnd カーソルを最後行へ移動
#MoveToNextWordTop カーソルを次の単語先頭へ移動
#MoveToPrevWordTop カーソルを前の単語先頭へ移動
#SelectCancel 選択状態を解除
#SelectLine 現カーソル位置の論理行を選択
#SelectAll テキストの全範囲を選択
#SelectTerm 所定範囲(単語等)を選択
#SelectSwapEdges 選択範囲の始点と終点を反転
#Cut 切り取り
#Copy コピー
#CutAppend 切り取り追加
#CopyAppend コピー追加
#Paste 貼り付け
#PasteAsRect 矩形貼り付け
#CutLine 現論理行を切り取り
#CopyLine 現論理行をコピー
#CutAppendLine 現論理行を切り取り追加
#CopyAppendLine 現論理行をコピー追加
#DeleteNextChar 次の1字を削除
#DeletePrevChar 前の1字を削除
#DeleteLine 現論理行を削除
#DeleteLineLeftHalf 現論理行頭までを削除
#DeleteLineRightHalf現論理行末までを削除
#DeleteWord 現単語を削除
#ClearAll 全面クリア
#InsertNewLine 改行を挿入
#InsertEmptyLine 空行を挿入
#InsertDupLine 現在行の複製化
#IncIndent 選択範囲のインデントを増やす
#DecIndent 選択範囲のインデントを減らす
#LowerToUpper 選択範囲の英字を大文字に変換
#UpperToLower 選択範囲の英字を小文字に変換
#HankToZenk 選択範囲の半角を全角に変換
#ZenkToHank 選択範囲の全角を半角に変換
#HiraToKata 選択範囲のひらかなをカタカナに変換
#KataToHira 選択範囲のカタカナをひらかなに変換
#SpaceToTab 選択範囲の半角空白をタブに変換
#TabToSpace 選択範囲のタブを半角空白に変換
#AppendLineEndCode 選択範囲の折り返し行末に改行付加
#RemoveLineEndCode 選択範囲の改行コードを除去
#RemoveBlanksAtLineEnd選択範囲の行末の空白を除去
#RemoveHTMLTags 選択範囲のHTMLタグを除去
#Undo 元に戻す
#Redo やり直し
#FindDialog 検索ダイアログボックスを表示
#ReplaceDialog 置換ダイアログボックスを表示
#GrepDialog Grepダイアログボックスを表示
#FindNext 順方向に次候補を検索
#FindPrev 逆方向に次候補を検索
#ReplaceSelText 選択範囲の文字列を置換文字列に変換
#ReplaceAndFind 選択範囲を置換してから次候補を検索
#ReplaceAll 全候補を置換
#JumpToTagTarget タグジャンプ
#MarkSet 現在行にマークを設定
#MarkReset 現在行のマークを解除
#MarkFlip 現在行のマーク設定を反転
#MarkResetAll 現テキスト内の全マークを解除
#MarkJumpToNext 次のマーク行へ移動
#MarkJumpToPrev 前のマーク行へ移動
#MarkListDialog マーク一覧ダイアログボックス
#WindowHSplit ウィンドウを左右2分割
#WindowVSplit ウィンドウを上下2分割
#WindowUnsplit ウィンドウの分割解除
#WindowActivateNext 次のウィンドウをアクティブに
#WindowActivatePrev 前のウィンドウをアクティブに
#WindowMaxWidth ウィンドウの表示幅を最大に
#WindowMaxHeight ウィンドウの表示高を最大に
#WindowShow ウィンドウを表示状態にする
#WindowHide ウィンドウを隠蔽状態にする
#SwitchOverwriteMode挿入/上書きの切り換え
#SwitchNoWritingMode書き込み許可/禁止の切り換え
#SwitchFreeCursorModeフリーカーソル ON/OFF 切り換え
#ResetEditingState 未編集状態化
OpenFile( cmds )
機能: 本エディタの起動コマンドの実行でファイルを開きます。
説明:

本エディタを起動する時のコマンド引数については、 「起動コマンド引数」で説明していますが、 本 OpenFile 関数では、これらの引数の指定で、編集ファイルを開くことができます。
本関数の引数 cmds には、起動コマンド引数の文字列を指定します。 もし、この中に、ファイルの規定がない場合、「無題」ファイルが開かれます。
本関数の返値は、本関数が開いた編集ファイルの数になります。
本関数で編集ファイルを開くと、アクティブウィンドウが変わりますが、 現スクリプトの操作対象の編集ウィンドウは変わりません。

用例:

(1)「無題」ファイルを開く場合:
  ::Epsaly.OpenFile( "" );

(2) 特定のファイルを開いて、そのテキストの末尾にカーソルを移動する場合:
  ::Epsaly.OpenFile( "/je file.txt" );
 なお、この場合、ファイル名の指定が相対パスなので、カレントパスに注意する 必要があります。

(3) 複雑な条件でファイルを開く場合:
    ::Epsaly.OpenFile( 
        ##/e"C++" /zS /n1820 /i0 /o25 /k180 ##
        ##/+l+w-f+N+D+T+F+S3 /X21 /Y25 /W780 /H680 ##
        ##D:\Documents\Temp\Text1.txt## );

なお、##〜## の文字列表記に関しては、MikoScript の言語仕様を参照方。

WindowCount()
機能: 現在開かれている編集ウィンドウの個数を返します。
注意: この個数には、「スクリプトコンソールウィンドウ」や「Grep結果出力ウィンドウ」等も 含まれます。
GetWindowId( n, s, t )
機能:編集ウィンドウの識別値を取得します。
説明:

各編集ウィンドウは、それぞれ固有の識別値を持っています。 この識別値は、その編集ウィンドウが開かれる時に割り当てられ、 その編集ウィンドウが閉じるまで、その値は変わりません。 本エディタが存続中、1度割り当てられた識別値と同じ値が、 他の編集ウィンドウに再度割り当てられることはありません。 この識別値は、本エディタが存続中に開いた全ての編集ウィンドウにおいて、 それぞれ固有の値になります。なお、この識別値が、0 になることはありません。

各編集ウィンドウは、開かれた順番も管理されています。 例えば、編集ウィンドウAが開かれて、その次に編集ウィンドウBが開かれた場合、 順方向の順番は、編集ウィンドウA → 編集ウィンドウBになり、 逆方向の順番は、編集ウィンドウB → 編集ウィンドウAになります。

本関数は、引数で指定された順番または回数と起点に対応する編集ウィンドウの識別値を返します。 それに対応するウィンドウがなければ、0 を返します。

引数 s は、次の値で起点となる編集ウィンドウを指定します。

  =0: 現操作対象の編集ウィンドウ
  =1: 現アクティブウィンドウ
  =2: 最も新しい編集ウィンドウ
  =3: 最も古い編集ウィンドウ
この引数が省略された時は、s = 0 として扱われます。

引数 t が無効の場合:

引数 n は、起点の編集ウィンドウから何番目かを指定します。
  n > 0 の時、起点から順方向に +n 番目
  n < 0 の時、起点から逆方向に -n 番目
  n = 0 の時、起点自身
この引数が省略された時は、n = 0 として扱われます。

引数 t が有効の場合:

引数 t は、編集ウィンドウのファイル名(または、テキスト題名)を、ワイルドカードで指定します。 引数 n は、起点の編集ウィンドウから順に、各編集ウィンドウのファイル名(または、 テキスト題名)を、引数 t と比較していったときに何回目に一致するウィンドウが対象なのかを 指定します。
  n > 0 の時、起点から順方向に +n 回目
  n < 0 の時、起点から逆方向に -n 回目
  n = 0 の時、起点自身
この引数が省略された時は、n = 1 として扱われます。

用例: GetFileName, TargetWindow, ActiveWindow 関数の各用例参照。
補説: -Script- ウィンドウの識別値は必ず、1 になります。
-Report- ウィンドウの識別値は必ず、2 になります。
GetFileName( id, type )
機能:編集ファイル(またはテキスト)の名前を各種の形態で返します。
説明: 引数 id には、対象の編集ウィンドウの識別値を指定します。 引数 id が省略された場合、現操作対象の編集ウィンドウが対象になります。
引数 type には、取得したい名前の種類を、以下の数値で指定します。
 type = 0: フルパス名
    = 1: フォルダのフルパス名(末尾の \ なし)
    = 2: ファイル名のみ(拡張子あり)or テキスト題名
    = 3: ファイル名のみ(拡張子なし)or テキスト題名
    = 4: 拡張子(ピリオッドは含まない)
 type 省略の場合、=0 に解釈
ここで、「テキスト題名」というのは、対象が非実在ファイルの場合のタイトルになります。 例えば、「無題」「-Grep-」「-Script-」、プロジェクトのノードテキストのノード名 などが 該当します。
本関数は、引数 id の識別値に対応する編集ウィンドウが無い場合、null を返します。
用例: 次のスクリプトは、現在開いている編集ウィンドウの一覧を、 各編集ファイルのフルパス名で、開いた順(古→新の順)にプリントします。
  for( i = 0 ;; i++ )
  {
      if(( id = ::Epsaly.GetWindowId( i, 3 )) == 0 )
          break;
      print ::Epsaly.GetFileName( id );
  }
TargetWindow( id )
機能: スクリプトの操作対象の編集ウィンドウを設定/取得します。
説明: 本関数は、現スクリプトの操作対象の編集ウィンドウを、引数 id で指定された識別値の 編集ウィンドウに切り換えます。 この切り換えに成功すると、本関数は、その識別値を返します。 この値は、非0の整数値です。

引数 id に対応する編集ウィンドウが無い場合、例えば、id = 0 の場合、 現操作対象の編集ウィンドウは無しになります。 この場合、本関数の返値は、0 になります。

引数 id が省略された場合、特に何もせずに、 現操作対象の編集ウィンドウの識別値を返します。
補説: スクリプトの実行で、編集ウィンドウを開いても、そのウィンドウが自動的に、 現操作対象の編集ウィンドウに切り換るわけではありません。(用例参照)
スクリプトの実行で、現操作対象の編集ウィンドウを閉じると、 現操作対象の編集ウィンドウは無しになります。
用例: 次のスクリプトは、新規に編集ウィンドウを開いて、それを、 現操作対象の編集ウィンドウにして、「Hello!」という1行を 挿入します。
  #include <EditCmds.mh>
  #FileNew;
  ::Epsaly.TargetWindow( ::Epsaly.GetWindowId( 0, 2 ) );
  ::Epsaly.Insert( "Hello!\r\n" );
ActiveWindow( id )
機能: 指定された編集ウィンドウをアクティブウィンドウにします。
説明: 「アクティブウィンドウ」とは、簡単に言えば、 ユーザーの操作を受け付けている最前面のウィンドウのことです。 スクリプトの操作対象のウィンドウは、必ずしも、 アクティブウィンドウではありません。

本関数は、引数 id で指定された識別値の編集ウィンドウを、 アクティブウィンドウに設定します。
引数が省略された場合、現操作対象の編集ウィンドウを アクティブウィンドウに設定します。

本関数の返値は、アクティブウィンドウに設定した編集ウィンドウの 識別値になります。 引数 id に対応する編集ウィンドウが無くて、 アクティブウィンドウに設定できなかった場合は、0 を返します。

用例:

次のスクリプトは、現在開いている編集ウィンドウのうちのどれかに、 Hello.mc という名前の編集ファイルがあれば、 その編集ウィンドウをアクティブウィンドウに設定します。

  for( i = 0 ;; i++ )
  {
      if(( id = ::Epsaly.GetWindowId( i )) == 0 )
          break;
      if( ::Epsaly.GetFileName( id )
                 'wcmp( $"*\Hello.mc" ) == 0 )
      {
          ::Epsaly.ActiveWindow( id );
          break;
      }
  }
GetHist( h, i )
機能: 指定された履歴内に記録されている文字列、または、その履歴内の要素数を返します。
説明: 引数 h は、次のどれかの文字列で、履歴の種類を指定します。
  "clip"    : クリップボード
  "find"    : 検索文字列
  "repl"    : 置換文字列
  "file"    : 最近使ったファイル
  "path"    : 最近使ったフォルダ
  "session" : 最近使ったセッション
  "project" : 最近使ったプロジェクト
  "program" : 外部プログラムの実行コマンド
  "script"  : スクリプトの実行コマンド
  "g-file"  : Grepファイル
  "g-path"  : Grepフォルダ
  "ime"     : IME変換結果
  "yomi"    : IME変換よみ(変換前のカナ文字列)
引数 i は、その履歴内で対象とする要素のインデックスを指定します。 このインデックスの値は、その履歴内に n 個の要素がある場合、 0, 1, 2, ... n-1 が有効で、0 が最新、以降、古くなる順に対応します。

本関数の返値は、引数 h の履歴が有効な場合、次のようになります。
 引数 i が数値で、その値がインデックスとして、
   有効なら、その要素の文字列
   無効なら、空の文字列
 引数 i が省略/不正なら、その履歴の要素数

本関数は、引数 h が省略/不正の時、null を返えします。

用例: 次のスクリプトは、クリップボード履歴内の各要素の文字列をプリントします。
  N = ::Epsaly.GetHist( "clip" );
  for( i = 0 ; i < N ; i++ )
      print ::Epsaly.GetHist( "clip", i );
注意:

クリップボード履歴には、現状、本エディタがクリップボードに格納した 文字列(の先頭から最大で 1024 コードまで)だけが記録されています。 そのサイズを超える部分や、他のプログラムが格納した文字列は、 記録されていません。

IME変換よみの字種は、IMEよっては、半角カタカナの場合もあります。 これを全角ひらかなにするには、例えば、次のようにします。
  ::Epsaly.GetHist("yomi",0)'toZenk'toHira

SetFindCond( string, mode, type, hist )
機能: 検索条件(検索文字列と検索モード)を設定します。
説明:

引数 string は、検索文字列を指定します。 これには、正規表現も使用できます。
引数 mode は、検索モードの文字列を指定します。この文字列は、
  RWIZKDSGE@nX (但し n は数字 )
の文字を使って表わしますが、 この表記は、入力リストファイルフォーマットの 〈モード〉の部分と同じです。具体的には、検索モードのところで説明しています。 mode の指定がない場合、検索モードは、更新されずに、現設定のままになります。 全モードを OFF にするには、空文字列を指定します。

引数 type は、省略します。

引数 hist は、string が指定された場合、今回の検索条件(検索文字列と検索モード)を、 履歴に保存しない時に、真値(1)を指定し、履歴に保存する時に、偽値(0)を指定するか省略します。

本関数は、検索条件を設定するだけで、検索は行ないません。 この条件で、実際に検索を行なうには、FindFwd()FindBwd() 関数を実行する必要があります。 本関数が設定した検索条件は、「検索ダイアログボックス」等に反映されます。 そのため、検索文字列は、検索ダイアログボックスでの設定と同様に、1 字以上 400 字以下の制限があります。

本関数は、正常終了の時、0 を返します。
mode で正規表現が指定されている場合( つまり、mode 内に R の文字を含む場合 )、 string の文字列は、正規表現として解釈されますが、それに文法エラーがあると、 本関数は、その内容を示す正の整数値を返します。 この値は、次のようなビット構成で、各文法エラーの有無を示します。
  Bit-0  丸括弧の対応がとれていない
  Bit-1  モード指定の # に続く文字が不正
  Bit-2  参照指定の @ に続く文字が不正
  Bit-3  反復回数指定 {...} の記述が不正
  Bit-4  反復対象が不正
  Bit-5  文字集合 [...] の記述が不正
  Bit-6  先読み位置規定の #^ に続く文字が不正
  Bit-7  グループ照合の @[n] の記述が不正
  Bit-8  通過カウント演算の記述が不正
  Bit-9  特別パターン規定の記述が不正
  Bit-10 文字コード指定 \Xnnnn, \Jnnnn の値が不正
  その他のビットは、全て 0 です。
正規表現に文法エラーがあっても、適当に解釈されて、検索条件は設定(更新)されます。

本エディタでは、検索は補助スレッドが行ないます。そのため、 このスレッドが他の作業中の時に、本関数を実行しても、検索条件は正常に設定されません。 そのような場合、本関数は、適当な負の値( 現状、-99 )を返します。

用例:

・"ABC" という文字列を検索して選択する条件を設定:
  ::Epsaly.SetFindCond( "ABC", "G" );

・"ABC" という文字列を含む行を検索する条件を設定:
  ::Epsaly.SetFindCond( $"^.*ABC.*$", "R" );

・"イロハ" という文字列を、全角/半角、ひらかな/カタカナの区別なしに検索して 選択する条件を設定:
  ::Epsaly.SetFindCond( "イロハ", "ZKG" );

SetReplCond( string, mode, type, hist )
機能: 置換条件(置換文字列と置換モード)を設定します。
説明:

引数 string は、置換文字列を指定します。 これには、各種のメタ文字も使用できます。
引数 mode は、置換モードの文字列を指定します。この文字列は、
  CAM
の文字を使って表わしますが、 この表記は、入力リストファイルフォーマットの 〈モード〉の部分と同じです。具体的には、置換モードのところで説明しています。 mode の指定がない場合、置換モードは、更新されずに、現設定のままになります。 全モードを OFF にするには、空文字列を指定します。

引数 type は、省略します。

引数 hist は、string が指定された場合、今回の置換条件(置換文字列と置換モード)を、 履歴に保存しない時に、真値(1)を指定し、履歴に保存する時に、偽値(0)を指定するか省略します。

本関数は、置換条件を設定するだけで、置換は行ないません。 この条件で、実際に置換を行なうには、FindFwd()FindBwd() 関数を実行する必要があります。その際、当関数の 第3引数を 1 に指定して、置換のための検索を行なわせる必要があります。

本関数が設定した置換条件は、「置換ダイアログボックス」等に反映されます。 そのため、置換文字列は、置換ダイアログボックスでの設定と同様に、0 字以上 240 字以下の制限があります。

本関数は、正常終了の時、0 を返します。

本エディタでは、置換のための検索は補助スレッドが行ないます。そのため、 このスレッドが他の作業中の時に、本関数を実行しても、置換条件は正常に設定されません。 そのような場合、本関数は、適当な負の値( 現状、-99 )を返します。

用例:

・"XYZ" という文字列に置換する条件を設定:
  ::Epsaly.SetReplCond( "XYZ", "" );

・"ABC" という文字列を検索して、"XYZ" という文字列に置換(置換の際には確認ボックスを表示)
  ::Epsaly.SetFindCond( "ABC", "G" );
  ::Epsaly.SetReplCond( "XYZ", "C" );
  ::Epsaly.FindFwd( , , 1 );

・上のプログラムで置換条件を次のように変えると、全置換になる:
  ::Epsaly.SetReplCond( "XYZ", "A" );

SetTintSpec( i, fc, bc, style )
機能: 指定番号に対応する着色形態を設定します。
説明:

引数 i には、設定対象の着色番号を指定します。この値が、1 〜 31 の範囲内の時、 それに対応する着色の形態(文字色、背景色、スタイル)を設定できます。 一方、この値が、-1 の時、1 〜 31 の全着色形態を、 元の状態(本エディタが起動された時の状態)に戻します。 この場合、それ以外の引数の指定は、不用です。

引数 fc には、文字色を指定します。この値は、以下のビット構成の整数値で指定します。
  Bit-7〜0: 赤レベル( 256 段階 )
  Bit-15〜8: 緑レベル( 256 段階 )
  Bit-23〜16: 青レベル( 256 段階 )

引数 bc には、背景色を指定します。この値は、上記と同じビット構成の整数値です。

引数 style には、以下の各ビットを有する整数値を指定します。
  Bit-0: 文字を着色するか否か
  Bit-1: 背景を着色するか否か
  Bit-2: 太字にするか否か
  Bit-3: 下線を付けるか否か

本関数の返値は、次のように、着色形態の更新の有無を示します。
  = 1: 更新有り
  = 0: 更新無し

注意: 引数 fc, bc, style が、省略/不正時、それぞれの現在値が採用されます。
本関数は、着色形態を更新するだけで、画面は更新しません。 本関数の実行結果は、画面更新時に反映されます。
本関数で更新された着色形態は、本エディタ終了時に、所定のファイルに格納されます。
本関数では、字句強調の着色形態は設定できません。
用例:

・8 番目の着色形態を、文字色:赤、背景色:明紫、太字:なし、下線:なし に設定:
  ::Epsaly.SetTintSpec( 8, 0x0000FF, 0xFFD8FF, 0b0011 );

・10 番目の着色形態を、文字色:青、背景色:なし、太字:あり、下線:なし に設定:
  ::Epsaly.SetTintSpec( 10, 0xFF0000, , 0b0101 );

・全着色形態( 1 〜 31 番目)を、元の状態に戻す:
  ::Epsaly.SetTintSpec( -1 );

GetTintSpec( i, s )
機能: 指定番号に対応する着色形態を取得します。
説明: 引数 i は、着色番号を指定します。この値は、1 〜 31 の範囲が有効です。
引数 s は、以下のように、どちらの着色形態が対象かを指定します。
  =0: 汎用の着色形態(デフォールト)
  =1: 字句強調の着色形態
引数 s の省略時は、=0 として扱われます。
本関数は、その着色番号に対応する着色形態を、文字色、背景色、スタイルの3値で、 返します。これらの値のビット構成は、SetTintSpec() 関数 の場合と同じです。
なお、引数 i の指定が不正の時、本関数は、null を返します。
用例: 次のスクリプトは、5 番目の(汎用の)着色形態の文字色、背景色、スタイルを、 それぞれ、変数 fc, bc, style に取得して、プリントします。
  ( fc, bc, style ) = ::Epsaly.GetTintSpec( 5 );
  print fc'x(6), bc'x(6), style'b(4);
DefTintId( i, w )
機能: デフォールトの汎用着色番号を設定/取得します。
説明:

編集ウィンドウで挿入される文字の着色形態は、デフォールトの汎用着色番号で 規定されます。つまり、この着色番号を設定すると、それ以降に挿入される文字はすべて、 その着色形態になります。この着色番号は、各編集ウィンドウごとに個別に 設定できます。

引数 i には、着色番号を指定します。この値が 1 〜 31 の時、 今後挿入される文字は、その番号に対応する着色形態になります。
この値が 0 の時は、今後の挿入文字は、無着色になります。
この値が上記以外、または、省略なら、挿入文字の着色は、現状のまま変わりません。

引数 w には、本設定/取得の対象となる編集ウィンドウの識別番号を指定します。 (この識別番号に関しては、GetWindowId() 関数参照 ) この引数が省略/不正の時は、現操作中の編集ウィンドウが対象になります。

本関数の返値は、本処理の最終時点でのデフォールトの汎用着色番号になります。 但し、対象の編集ウィンドウない等の異常時には、-1 になります。

補説: 本関数で、-Script- や -Report- ウィンドウを対象にする場合、引数 w の値は、 それぞれ、1, 2 にします(GetWindowId() 関数の補説参照)。 その際、そのウィンドウが既に表示されている必要があります。
用例: 次のスクリプトを実行すると、現操作中の編集ウィンドウでは、それ以降、 黄緑色の背景で、深緑色の文字が、挿入されるようになります。(初期環境の場合)
  ::Epsaly.DefTintId( 5 );
次のスクリプトを実行すると、現操作中の編集ウィンドウでは、 それ以降挿入される文字の着色が解除されます。
  ::Epsaly.DefTintId( 0 );
次のスクリプトを実行すると、-Script- ウィンドウでは、それ以降、 ピンクの背景で、赤色の文字が、挿入されるようになります。(初期環境の場合)
  ::Epsaly.DefTintId( 4, 1 );
EnvNameId( n )
機能: 個別環境の名称や番号を返します。
説明:

本関数は、環境を識別する引数 n に応じて、以下のどれかの値を返します。
 @ 個別環境の 参照名, 主題名, 環境番号 の3値
 A 個別環境の識別番号の 最小値, 最大値 の2値
 B null

n > 0 の場合、一般グループの +n 番目の環境の @ を返します。

n < 0 の場合、特殊グループの -n 番目の環境の @ を返します。

n = 0 の場合、スクリプトの現操作対象の編集ウィンドウに適用されている環境の @ を返します。

n が文字列の場合、そのファイル名(非実在も可)に適用される環境の @ を返します。

n が省略の場合、A を返します。

n に対応する環境がない場合、Bを返します。

注意: 本関数の対象は、正規環境です。たとえ現在適用されている環境が一時環境であっても無関係です。
用例: 次のスクリプトは、現在登録されている全ての個別環境(一般と特殊)の 参照名、主題名、環境番号をプリントします。
  'AddScope( ::Epsaly );
  ( min, max ) = EnvNameId();
  for( N = min ; N <= max ; N++ )
  {
      if( N == 0 )
          continue;
      n = ( N < 0 ) ? ( min - N - 1 ) : N ;
      print EnvNameId( n );
  }
EnvValue( n, i, v1, v2, ... )
機能: 環境設定値を設定/取得します。なお、現版でできるのは主に色関係の値のみです。
説明:

引数 n は、環境番号を以下のように指定します。これは、n = 0 の場合を除いて、 EnvNameId() 関数の引数 n と同じです。
  = 0: 共通環境
  > 0: 一般グループの +n 番目の個別環境
  < 0: 特殊グループの -n 番目の個別環境

引数 i は、環境項目の番号を指定します。(詳細下記参照)

引数 v1, v2, ... を全て省略した場合、その環境項目の各値が返されます。

引数 v1, v2, ... のうちの1つ以上を指定した場合、その環境項目の値が設定されます。 省略されるか、null を指定された値は、現状のままです。 なお、本関数で環境設定値を変更しても、表示に即時反映されるわけではありません。 また、環境設定のファイルにも保存されません。 それを確実に行なうには、EnvApply() 関数の実行が必要です。

返値: 設定の場合、成功時は、真値(1)を返し、失敗時は、偽値(0) または null を返します。
取得の場合、成功時は、その環境項目の各値を返し、失敗時は、null を返します。
補説:

引数 i の環境項目の番号に対応する各値を、下表に示します。 なお、この表で「項番」は環境項目の番号のことです。 「 v1, v2, v3, v4 」は、設定の場合、引数 v1, v2, ... に対応し、取得の場合、返値に対応します。 空のマスは、その値が無いということです。

≪ 共通環境 ≫

項番種類v1v2v3
11カーソル色 IME 無効時 IME 有効時
12ステータスバー色特記文字 注記文字 補記文字
13タブボタン文字色非アクティブアクティブ変更あり
14タブボタン背景色非アクティブアクティブ

≪ 個別環境 ≫

項番種類v1v2v3v4
101通常テキスト色文字 背景
102選択範囲色 文字 背景
103カーソル行の色文字 背景 下線
104縦罫線色 タブ桁 折返し桁
105通常外領域色 塗り潰し
106折り畳み色 状態 背景 [...]
107特殊記号色 空白 改行 [EOF] 制御コード
108行番号文字色 無変更行変更行 折返し行折返変更行
109行番号背景色 非現在行現在行
110桁目盛り色 数字 目盛り線陰線
111桁目盛り色 背景 現在位置
112行マーク色 通常 一時

≪ 構文カラー強調表示(個別環境)≫

項番区間v1v2v3v4
1001〜1007無区間 文字色背景色スタイル項目名
1008 区間1【開始】 文字色背景色スタイル区間名
1009 区間1【終了】 文字色背景色スタイル
1010 区間1【不特定部】文字色背景色スタイル
1011〜1015区間1 文字色背景色スタイル項目名
1016 区間2【開始】 文字色背景色スタイル区間名
1017 区間2【終了】 文字色背景色スタイル
1018 区間2【不特定部】文字色背景色スタイル
1019〜1023区間2 文字色背景色スタイル項目名
1024 区間3【開始】 文字色背景色スタイル区間名
1025 区間3【終了】 文字色背景色スタイル
1026 区間3【不特定部】文字色背景色スタイル
1027〜1031区間3 文字色背景色スタイル項目名

上記の各色の値はどれも、32-bit 整数値で、0xIIBBGGRR のビット構成になっています。 ここで、RR, GG, BB は、それぞれ、赤、緑、青のレベルを示す 8-bit 値です。 II は、Windows のシステムカラーを指定する時に使います。II = 00 の時は、非システムカラーで、 II = 0x80 〜 0x98 の時に、それぞれ、システムカラー #0 〜 #24 を示します。 色値を設定する場合、II がシステムカラーの指定なら、BBGGRR の値は何でも構いません。 色値を取得する場合、II がシステムカラーの指定なら、BBGGRR はそのシステムカラーの値になっています。

構文カラー強調表示のスタイルは、次のようなビット構成の整数値になっています。
  bit-0: 文字色を変更する(1)/しない(0)
  bit-1: 背景色を変更する(1)/しない(0)
  bit-2: 太字にする(1)/しない(0)
  bit-3: 下線を付ける(1)/付けない(0)
  ( 残りの全ビットは 0 )

構文カラー強調表示の項目名と区間名は、現状、取得のみで、設定はできません。

注意: 本関数の対象は、正規環境です。たとえ現在適用されている環境が一時環境であっても無関係です。
用例: 次のスクリプトは、環境設定の各色の値を取得して、それを反転して設定します。 この実行で、表示は即時更新されますが、環境設定のファイルには書き込まれません。 なお、システムカラーの反転では、そのRGB値の反転が設定されるので、 それはもはやシステムカラーではなくなります。
    'AddScope( ::Epsaly );
  // 共通環境
    n = 0;
    for( i = 11 ; i <= 14 ; i++ )
        call INV_COLORS;
  // 個別環境
    ( min, max ) = EnvNameId();
    for( n = min ; n <= max ; n++ )
    {
        if( n == 0 )
            continue;
        for( i = 101 ; i <= 112 ; i++ )
            call INV_COLORS;
        // 構文カラー強調表示色
        for( i = 1001 ; i <= 1031 ; i++ )
        {
            ( v1, v2 ) = EnvValue( n, i );
            if( v1 == null || v2 == null )
                continue;
            EnvValue( n, i,
                v1 & 0x00FFFFFF ^ 0x00FFFFFF,
                v2 & 0x00FFFFFF ^ 0x00FFFFFF );
        }
    }
    EnvApply( "new" );
    return;

  INV_COLORS:
    ( v1, v2, v3, v4 ) = EnvValue( n, i );
    if( v1 != null )  v1 = v1 & 0x00FFFFFF ^ 0x00FFFFFF;
    if( v2 != null )  v2 = v2 & 0x00FFFFFF ^ 0x00FFFFFF;
    if( v3 != null )  v3 = v3 & 0x00FFFFFF ^ 0x00FFFFFF;
    if( v4 != null )  v4 = v4 & 0x00FFFFFF ^ 0x00FFFFFF;
    EnvValue( n, i, v1, v2, v3, v4 );
    back;
EnvApply( e )
機能: 指定された環境を適用して、画面を更新します。
説明:

引数 e に、以下の文字列のどれかを指定すると、それに対応する環境が適用されて、 画面が更新されます。
  "reg" : 正規環境
  "tmp" : 一時環境
  "new" : スクリプトで変更した環境
引数 e はまた、以下の指定をすることもできます。
  "save": スクリプトで変更した環境を適用して、
      環境設定の正規のデータファイルに保存

返値: 成功の時、真値(1)を返し、失敗の時、偽値(0)を返します。
用例: スクリプトで変更した環境を適用して、それに準じた画面にするには、次のようにします。
  ::Epsaly.EnvApply( "new" );
スクリプトで変更した環境を適用して、それに準じた画面にするだけでなく、 そのデータをファイルに保存するには、次のようにします。
  ::Epsaly.EnvApply( "save" );
スクリプトで変更した環境を、元の正規環境に戻すには、次のようにします。
  ::Epsaly.EnvApply( "reg" );
Report( text, tint )
機能: レポートウィンドウの末尾に着色付テキストを挿入します。
説明:

レポートウィンドウは、スクリプトから各種の処理結果を出力するための編集ウィンドウで、 -Report- というタイトルになっています。 このウィンドウは、スクリプトコンソールウィンドウ( -Script- というタイトルのウィンドウ)と 若干似ていますが、スクリプトからは、通常の編集ウィンドウと同様の扱いができます。

引数 text には、挿入するテキストを指定します。
引数 tint には、挿入するテキストの着色番号を指定します。
引数 tint の値が 1 〜 31 の時、それに対応する着色形態で、 引数 text の文字列が挿入されます。
引数 tint の値が 0 の時、無着色で、引数 text の文字列が挿入されます。
引数 tint の値がそれ以外の時、または、省略された時、 デフォールトの汎用着色番号( DefTintId() 関数参照 ) に対応する着色形態で、挿入されます。

本関数は、指定されたテキストを正常に挿入した時に、正の整数値を返します。 また、挿入テキストが無いか、無指定の時に、0 を返します。 もしエラーになれば、負の整数値を返します。

補説: レポートウィンドウは、本関数の実行時に、表示されていなければ、無条件に表示されます。 ちなみに、引数なしに本関数をコールした場合でも、そうなります。
用例: 次のスクリプトを実行すると、レポートウィンドウの末尾に、背景が黄緑色で文字が深緑色の 「Hello, world」という文字列が改行付きで挿入されます。(初期環境の場合)
  ::Epsaly.Report( "Hello, world.\r\n", 5 );
Help( page )
機能: 指定ページの Epsaly のヘルプを表示します。
説明:

引数 page には、ヘルプのページを規定する文字列を指定します。 これは、そのページが格納されているファイル名になります。 例えば、「プロジェクト管理」は、"Project.html" という名前のファイルに 格納されています。

ページ内の特定場所を表示するには、ファイル名の直後に「#名前」を付けます。 この名前は、<A NAME="..."> で設定されている ... の部分の文字列になります。 例えば、スクリプトの「カーソル移動」関数のところは、 "ScriptMxObjFncG1.html#MoveTo" と指定します。

各ページが格納されているファイル名や、ページ内の特定場所を示す名前については、 ここでは明記しませんが、Epsaly のホームページで、対象となるところのハイパーリンクを見ると分かります。

引数 page を省略すると、先頭ページが表示されます。

返値は、ヘルプが正常に表示された時、真値(1)に、さもなければ、偽値(0) になります。

用例: 次のスクリプトを実行すると、「プロジェクト管理」のページの「プロジェクトツリーの操作」 というところのヘルプが表示されます。
  ::Epsaly.Help( "Project.html#TreeHandling" );
Speak( text, flags )
機能: テキストを音声で読み上げます。また、その中断/一時停止/再開を行ないます。
説明:

引数 text に文字列が指定された場合、それに対応する読み上げを開始します。

引数 text に次の数値が指定された場合、それに対応する制御を行ないます。

 =0: 読み上げを中断(順番待ちのものも全て)
 =1: 読み上げを一時停止
 =2: 読み上げを再開(一時停止解除)

引数 flags は、下記のビットが 1 の時に、それに対応する意味を持ちます。 下記以外のビットには特別な意味はありません。

bit-2:text はファイル名で、そのファイルの内容を、 読み上げ文字列として扱う
bit-3:読み上げ文字列内の XML タグを有効にする(一時的)
bit-4:読み上げ文字列内の XML タグを無効にする
bit-5:読み上げ文字列内の XML タグを有効にする(恒久的)
bit-6:読み上げ文字列内の区読点も読み上げる

引数 flags が省略/不正時、flags = 0 と同等です。その場合、 XML タグは、text の最初の文字が、< の時のみ、有効(一時的)です。 なお、XML タグについては、下記の補説で説明します。

本関数の返値は、次のようになります。

正常終了時:
 > 0: 発声ストリーム識別番号(下記参照)
 = 0: 音声出力なし(読み上げの中断等の場合)
エラー時:
 = -1: 音声合成エンジンが未搭載 or 準備エラー
 = -3: 読み上げ実行エラー
 = -4: 待ち行列が満杯
 = -5: 読み上げテキスト処理エラー
 = -6: 引数不正

 本関数で、読み上げを開始した時、本関数は、その読み上げが完了するのを待たずに、 即時に戻って来ます。その際、前回の読み上げが終っていなければ、今回の読み上げは、 待ち行列に入れられます。本関数の返値が「発声ストリーム識別番号(上記参照)」の場合、 その値は、その時点での待ち行列の順位になります。

 本関数で開始した読み上げが、完了するのを待つには、TraceSpeaking() 関数を使います。また、この関数で、 現在の読み上げが、対象の文字列内のどの位置まで進んでいるのかを知ることができます。

 読み上げの「中断」は、即時に行なわれますが、「一時停止」は、 適当な区切り(通常、単語の境目)で行なわれます。

 読み上げの「一時停止」に関しては、次の点に留意する必要があります。 「一時停止」中に、新たに読み上げを開始しても、それは待ち行列に入ります。 「一時停止」中に「一時停止」を行なった場合、 それと同じ回数分の「再開」を行なって初めて、一時停止状態が解除されます。 「一時停止」状態は、現スクリプトの終了後も継続します。 「一時停止」状態は、読み上げの「中断」で解消されます。

補説:

 読み上げ対象の文字列内に、XML タグを介入させることによって、 読み上げの 速度, 音量, 音高 などだけではなく、さまざまな指定が できるようになっています。⇒ 参照

 XML タグの効果は、「一時的」と「恒久的」の場合があります。 これは、引数 flags で指定できます。 一時的の場合、本関数の実行に対してのみ有効です。 恒久的の場合、本エディタを終了するまで、その効果が継続します。

 引数 text をファイル名として、そのファイルの内容を読み上げる 場合( 引数 flags の bit-2 が 1 の時 )、そのテキストの文字コード符号化方式は、 基本的には、使用する音声合成エンジンに依存します。 標準的には、BOM 付きの UTF-16(LE) や UTF-8 なら支障なさそうです。

用例:

次のスクリプトを実行すると、「コンニチワ」と発声します。

  ::Epsaly.Speak( "今日は" );

次のスクリプトは、読み上げを中断します。

  ::Epsaly.Speak( 0 );

次のスクリプトは、通常の半分の音量で読み上げます。

  ::Epsaly.Speak( $'<volume level="50">'
        "This volume level is 50%." );
注意:

 本関数で読み上げを行なうには、SAPI 5 対応の音声合成エンジンが インストールされている必要があります。ちなみに、Windows 7 以降では、 日本語の音声合成エンジンが、標準で搭載されているPCが多いようです。 英語を読み上げるには、英語の音声合成エンジンが必要です。 ( ⇒ 参照

TraceSpeaking( s )
機能: テキストの読み上げ状況を確認します。
説明:

引数 s には、読み上げ状況を取得する対象の「発声ストリーム 識別番号」( Speak() 関数の返値参照 )を指定します。 この引数が、省略/不正の時は、現発声ストリームを対象とします。

本関数の返値は、次のようになります。

 >= 0: 現在読み上げ中のテキスト内の位置
 = -1: 未だ発声待ち状態
 = -2: 対象の発声ストリーム無し or 既に発声終了

 ここで、テキスト内の位置というのは、読み上げ中のテキストの先頭からの 文字数になります。これは、バイト数でも、文字コードインデックス値でもありません。

用例:

次のスクリプトは、読み上げを開始してから、その読み上げが終了するまで待ちます。

  ::Epsaly.Speak( "Hello, I'm glad to speak." );
  while( ::Epsaly.TraceSpeaking() != -2 )
      'sleep(10);

なお、このように、本関数で読み上げ状況をポーリングする場合、 無駄なCPU時間を浪費しないように、必ず 'sleep を行なう必要があります。

次のスクリプトは、現カーソル行の先頭から行末までを、読み上げます。 その際、現読み上げ位置に、カーソルが逐次移動します。

  text = ::Epsaly.GetLineText();
  if( ! text )
      return;
  if( ::Epsaly.Speak( text ) <= 0 )
      return;
  cur_li = 'LLi;  // 発声対象の論理行インデックス
  pre_ki = -1;    // 前回の読み上げ位置
  for( ;; 'sleep(10) )
  {
      switch( cur_ki = ::Epsaly.TraceSpeaking() )
      {
        case -1:  continue;   // 発声開始待ち
        case -2:  quit;       // 発声終了
        default:  break;      // 発声中
      }
      if( cur_ki > pre_ki )
      {
          ::Epsaly.MoveTo( cur_li'LLi, cur_ki'LKn );
          pre_ki = cur_ki;
      }
  }
  ::Epsaly.MoveTo( 'LineEnd );
注意: Speak() 関数の「注意」に同じ。
Dictate( s )
機能: 入力された音声を聞き取ってテキストに変換します。 あるいは、聞き取りを終了します。
説明:

引数 s には、次のどれかの数値を指定します。

 s = 0:  聞き取り終了
 s = 1:  聞き取り開始(A)
 s = 2:  聞き取り開始(B)

聞き取り開始(A)と(B)は、どちらも、音声認識エンジンを起動します。 その時、聞き取りの状況を示すダイアログボックスが表示されます。 音声認識エンジンは、入力音声に対する聞き取りが確定すると、 その認識結果を、本エディタに通知します。

聞き取り開始(A)の場合、その認識結果は、現スクリプトにイベントとして 送られます。これをスクリプトで取得するには、 GetEvent() 関数を使います。

聞き取り開始(B)の場合、その認識結果は、現編集テキストのカーソル位置に 挿入されます。なお、挿入位置直前と、認識結果の文字列の先頭で、 英数字が連続する場合には見にくくなるので、その間に空白が自動的に挿入されます。

聞き取りの終了は、本関数で行なうか、または、上記ダイアログボックス内の 「終了」ボタンを押します。

引数 s が、省略/上記以外/不正の時は、何も行なわずに、 現在の聞き取り状態を返します。

本関数の返値は、次のようになります。

 =  0:  聞き取りは、行なわれていない
 =  1:  聞き取り実行中(A)
 =  2:  聞き取り実行中(B)
 = -1:  聞き取り実行不能(音声認識エンジン未搭載等)

聞き取り実行中(A)と(B)は、それぞれ、上記の聞き取り開始(A)と(B)に 対応します。

用例:

次のスクリプトを実行すると、聞き取りが開始されて、その認識が確定するごとに、 その結果の文字列が、現カーソル位置に挿入されます。

  ::Epsaly.Dictate(2);

次のスクリプトは、聞き取りを開始して、その認識が確定するごとに、 その結果の文字列を、コンソールウィンドウにプリントします。

  #include <Event.mh>
  if( ::Epsaly.Dictate(1) < 0 )
      return;
  for( ;; )
  {
      ( ev, tv ) = ::Epsaly.GetEvent();
      if( ev'type == "string"  &&  tv != null )
          print ev;
      else
      if( #IsSpRecoEndEvent( ev ) )
          break;  // 聞き取りダイアログでの終了時
  }
注意:

 本関数で聞き取りを行なうには、SAPI 5 対応の音声認識エンジンが インストールされている必要があります。ちなみに、Windows 7 以降では、 日本語の音声認識エンジンが、標準で搭載されているPCが多いようです。 英語を聞き取るには、英語の音声認識エンジンが必要です。 ( ⇒ 参照