編集テキスト内の位置を規定するリレー型関数

 ここでは、本エディタ関連の リレー型関数 について、詳しく説明します。


■リレー型関数一覧

関数名 概要説明
'LineNo 「行番号」属性の付加/現値取得
'LLi 「論理行インデックス」属性の付加/現値取得
'VLi 「表示行インデックス」属性の付加/現値取得
'FLi 「外見行インデックス」属性の付加/現値取得
'LLn 「相対論理行数」属性の付加
'VLn 「相対表示行数」属性の付加
'FLn 「相対外見行数」属性の付加
'Column 「桁番号」属性の付加/現値取得
'Xc 「X座標」属性の付加/現値取得
'Xd 「相対X座標」属性の付加
'Ci 「文字コードインデックス」属性の付加/現値取得
'DCn 「相対文字コード数」属性の付加
'DKn 「相対文字数」属性の付加
'DWn 「相対単語数」属性の付加
'LCn 「現行頭からの文字コード数」属性の付加/現値取得
'LKn 「現行頭からの文字数」属性の付加/現値取得
'LWn 「現行頭からの単語数」属性の付加
'TextTop「テキスト先頭」属性の付いた数値を返す(無対象)
'TextEnd「テキスト末尾」属性の付いた数値を返す(無対象)
'LineTop「行頭」属性の付いた数値を返す(無対象)
'LineEnd「行末」属性の付いた数値を返す(無対象)
'LineLim「行終端」属性の付いた数値を返す(無対象)
'WordTop「単語先頭」属性の付いた数値を返す(無対象)
'WordEnd「単語末尾」属性の付いた数値を返す(無対象)
'SLn 「画面最上行からの行位置」属性の付加/現値取得
'MP マウスポインタ位置の文字コードインデックスを返す
'AP アンカー位置の文字コードインデックスを返す
'VP 「視点位置」属性の付いた数値を返す
'TP 「着色位置」属性の付いた数値を返す
'ML 「マーク行」属性の付いた数値を返す

■リレー型関数詳説

'LineNo
説明:行番号」を示す属性を、対象の数値に付けて返します。 対象がなければ、現カーソル位置の「行番号」に、この属性を付けて返します。 この「行番号」の種別が、論理行か表示行かは、 「現位置」の行種別に依存します。 「行番号」の値は、1, 2, 3, ... で、それぞれ、第1、第2、第3、...番目の行に 対応します。
補説:現位置」の行は、 本「行番号」に応じて更新されます。 その値が有効範囲外なら、その最大/最小でカットされます。
現位置」の行種別と桁は、現状のままです。
用例:  ::Epsaly.MoveTo( 100'LineNo );
これを実行すると、カーソルが 100 行目に移動します。 この行番号が論理行か表示行かは、現環境設定に依存します。
'LLi
説明:論理行インデックス」を示す属性を、 対象の数値に付けて返します。 対象がなければ、現カーソル位置の「論理行インデックス」に、 この属性を付けて返します。
補説:現位置」の行は、 本「論理行インデックス」に応じて更新されます。 その値が有効範囲外なら、その最大/最小でカットされます。
現位置」の行種別は、論理行に更新されます。
現位置」の桁は、現状のままです。
用例:  ::Epsaly.MoveTo( 200'LLi );
これを実行すると、「論理行インデックス」が 200 の行にカーソルが移動します。
'VLi
説明:表示行インデックス」を示す属性を、 対象の数値に付けて返します。 対象がなければ、現カーソル位置の「表示行インデックス」に、 この属性を付けて返します。
補説:現位置」の行は、 本「表示行インデックス」に応じて更新されます。 その値が有効範囲外なら、その最大/最小でカットされます。
現位置」の行種別は、表示行に更新されます。
現位置」の桁は、現状のままです。
用例:  ::Epsaly.MoveTo( 200'VLi );
これを実行すると、「表示行インデックス」が 200 の行にカーソルが移動します。
'FLi
説明:外見行インデックス」を示す属性を、 対象の数値に付けて返します。 対象がなければ、現カーソル位置の「外見行インデックス」に、 この属性を付けて返します。
補説:現位置」の行は、 本「外見行インデックス」に応じて更新されます。 その値が有効範囲外なら、その最大/最小でカットされます。
現位置」の行種別は、現状のままです。
現位置」の桁も、現状のままです。
ちなみに、外見行インデックスは、折り畳みが現編集テキスト内に無ければ、 表示行インデックスと同じになります。
用例:  ::Epsaly.MoveTo( 120'FLi );
これを実行すると、「外見行インデックス」が 120 の行にカーソルが移動します。
'LLn
説明: 「(現位置からの)相対論理行数」を示す属性を、対象の数値に付けて返します。 対象が無い時は、null を返します。
補説:現位置」の行は、 本「(現位置からの)相対論理行数」に応じて更新されます。 その結果が有効範囲外なら、その最大/最小でカットされます。
現位置」の行種別は、論理行に更新されます。
現位置」の桁は、現状のままです。
用例:  ::Epsaly.MoveTo( 5'LLn );
これを実行すると、現論理行よりも5行先の論理行へカーソルが移動します。
'VLn
説明: 「(現位置からの)相対表示行数」を示す属性を、対象の数値に付けて返します。 対象が無い時は、null を返します。
補説:現位置」の行は、 本「(現位置からの)相対表示行数」に応じて更新されます。 その結果が有効範囲外なら、その最大/最小でカットされます。
現位置」の行種別は、表示行に更新されます。
現位置」の桁は、現状のままです。
用例:  ::Epsaly.MoveTo( -3'VLn );
これを実行すると、現表示行よりも3行前の表示行へカーソルが移動します。
'FLn
説明: 「(現位置からの)相対外見行数」を示す属性を、対象の数値に付けて返します。 対象が無い時は、null を返します。
補説:現位置」の行は、 本「(現位置からの)相対外見行数」に応じて更新されます。 その結果が有効範囲外なら、その最大/最小でカットされます。
現位置」の行種別は、現状のままです。
現位置」の桁も、現状のままです。
ちなみに、相対外見行数は、折り畳みが現編集テキスト内に無ければ、 相対表示行数と同じになります。
用例:  ::Epsaly.MoveTo( +10'FLn );
これを実行すると、現外見行よりも10行先の外見行へカーソルが移動します。
'Column
説明:桁番号」を示す属性を、対象の数値に付けて返します。 対象がなければ、現カーソル位置の「桁番号」に、この属性を付けて返します。
「桁番号」の起点は、環境設定の「桁目盛り」で、「桁番号の基点を0にする」の 指定が、ON なら 0 に、OFF なら 1 になります。
補説:現位置」の桁は、 本「桁番号」に応じて更新されます。 その値が有効範囲外なら、その最大/最小でカットされます。
現位置」の行と行種別は、現状のままです。
用例:  ::Epsaly.MoveTo( 40'Column );
これを実行すると、カーソルが 40 桁目に移動します。 この桁番号の基点が 0 か 1 かは、現環境設定に依存します。
'Xc
説明: 「(表示行の左端からの)X座標」を示す属性を、対象の数値に付けて返します。 対象がなければ、現カーソル位置の「表示行の左端からのX座標」に、 この属性を付けて返します。
このX座標の単位は画素数で、起点(表示行の先頭桁の左端位置)は 0 になります。 非等幅フォント(プロポーショナルフォント)使用時、各文字の位置は、 必ずしも桁位置に一致していません。そのような場合、 X座標を使うと、各文字の位置を厳密に規定できます。
補説:現位置」の桁は、 本「X座標」に応じて更新されます。 その値が有効範囲外なら、その最大/最小でカットされます。
現位置」の行と行種別は、現状のままです。
用例:  ::Epsaly.MoveTo( 320'Xc );
これを実行すると、カーソルは、移動可能な範囲内で、そのX座標が 320 に最も近くなる 位置へ移動します。
'Xd
説明:相対X座標」を示す属性を、対象の数値に付けて返します。 対象が無い時は、null を返します。 X座標に関しては、'Xc で説明している通りです。
補説:現位置」の桁は、 本「相対X座標」に応じて更新されます。 その結果が有効範囲外なら、その最大/最小でカットされます。
現位置」の行と行種別は、現状のままです。
用例:  ::Epsaly.MoveTo( 80'Xd );
これを実行すると、カーソルは、移動可能な範囲内で、X座標が現位置よりも 80 だけ 右の位置に最も近い位置へ移動します。
'Ci
説明:文字コードインデックス」を示す属性を、 対象の数値に付けて返します。対象がなければ、 現カーソル位置の「文字コードインデックス」に、 この属性を付けて返します。
補説:現位置」の行と桁は、 本「文字コードインデックス」に応じて更新されます。 その値が有効範囲外なら、その最大/最小でカットされます。
現位置」の行種別は、現状のままです。
用例:  ::Epsaly.MoveTo( 1200'Ci );
これを実行すると、カーソルは、編集テキストの先頭からの文字コード数が 1200 になる 文字位置へ移動します。
'DCn
説明: 「(現位置からの)相対文字コード数」を示す属性を、対象の数値に付けて返します。 対象が無い時は、null を返します。
補説:現位置」の行と桁は、 本「(現位置からの)相対文字コード数」に応じて更新されます。 その結果が有効範囲外なら、その最大/最小でカットされます。
現位置」の行種別は、現状のままです。
用例:  ::Epsaly.MoveTo( 8'DCn );
これを実行すると、カーソルは、現位置からの 8 文字コード先の文字位置へ移動します。
'DKn
説明: 「(現位置からの)相対文字数」を示す属性を、対象の数値に付けて返します。 対象が無い時は、null を返します。
補説:現位置」の行と桁は、 本「(現位置からの)相対文字数」に応じて更新されます。 その結果が有効範囲外なら、その最大/最小でカットされます。
現位置」の行種別は、現状のままです。
用例:  ::Epsaly.MoveTo( -3'DKn );
これを実行すると、カーソルは、現位置から 3 文字前の文字位置へ移動します。
'DWn
説明: 「(現位置からの)相対単語数」を示す属性を、対象の数値に付けて返します。 対象が無い時は、null を返します。
補説:現位置」の行と桁は、 本「(現位置からの)相対単語数」に応じて更新されます。 その結果が有効範囲外なら、その最大/最小でカットされます。
現位置」の行種別は、現状のままです。
用例:  ::Epsaly.MoveTo( 1'DWn );
これを実行すると、カーソルは、現位置から次の単語の先頭へ移動します。
'LCn
説明:(現行頭からの)相対文字コード数」を示す属性を、対象の数値に付けて返します。 対象が無い時は、現行頭から現位置までの文字コード数に、この属性を付けて返します。
この「現行頭」とは、「現位置」の行の先頭のことです。 この行が論理行か表示行かは、「現位置」の 行種別に依存します。
補説:現位置」の行と桁は、 本「(現行頭からの)相対文字コード数」に応じて更新されます。 その結果が有効範囲外なら、その最大/最小でカットされます。
現位置」の行種別は、現状のままです。
用例:  ::Epsaly.MoveTo( 24'LCn );
これを実行すると、カーソルは、現行頭からの文字コード数が 24 になる文字位置へ移動します。
'LKn
説明:(現行頭からの)相対文字数」を示す属性を、対象の数値に付けて返します。 対象が無い時は、現行頭から現位置までの文字数に、この属性を付けて返します。
この「現行頭」とは、「現位置」の行の先頭のことです。 この行が論理行か表示行かは、「現位置」の 行種別に依存します。
補説:現位置」の行と桁は、 本「(現行頭からの)相対文字数」に応じて更新されます。 その結果が有効範囲外なら、その最大/最小でカットされます。
現位置」の行種別は、現状のままです。
用例:  ::Epsaly.MoveTo( 10'LKn );
これを実行すると、カーソルは、現行頭からの文字数が 10 になる(つまり、 行頭から第11番目の)文字位置へ移動します。
'LWn
説明:(現行頭からの)相対単語数」を示す属性を、対象の数値に付けて返します。 対象が無い時は、現行頭から現位置までの単語数に、この属性を付けて返します。
この「現行頭」とは、「現位置」の行の先頭のことです。 この行が論理行か表示行かは、「現位置」の 行種別に依存します。
補説:現位置」の行と桁は、 本「(現行頭からの)相対単語数」に応じて更新されます。 その結果が有効範囲外なら、その最大/最小でカットされます。
現位置」の行種別は、現状のままです。
用例:  ::Epsaly.MoveTo( 2'LWn );
これを実行すると、カーソルは、現行頭からの単語数が 2 になる(つまり、 行頭から第3番目の)単語の先頭へ移動します。
'TextTop
説明:テキスト先頭」を示す属性を付けた数値を返します。 これは、その属性に意味があって、数値には意味がありません。 このリレー型関数の対象はありません。
補説:現位置」の行と桁は、 「テキスト先頭」に更新されます。
現位置」の行種別は、現状のままです。
用例:

 ::Epsaly.MoveTo( 'TextTop );
これを実行すると、カーソルは、現編集テキストの先頭へ移動します。

 ::Epsaly.MoveTo( 'TextTop, 8'DKn );
これを実行すると、カーソルは、現編集テキストの先頭からの文字数が 8 になる(つまり、 第 9 番目の)文字位置へ移動します。

'TextEnd
説明:テキスト末尾」を示す属性を付けた数値を返します。 これは、その属性に意味があって、数値には意味がありません。 このリレー型関数の対象はありません。
補説:現位置」の行と桁は、 「テキスト末尾」に更新されます。
現位置」の行種別は、現状のままです。
用例:

 ::Epsaly.MoveTo( 'TextEnd );
これを実行すると、カーソルは、現編集テキストの末尾へ移動します。

 ::Epsaly.MoveTo( 'TextEnd, -5'DKn );
これを実行すると、カーソルは、現編集テキストの末尾から逆方向にカウントして 第 5 番目の文字位置へ移動します。

'LineTop
説明: 「(現位置における)行頭」を示す属性を付けた数値を返します。 これは、その属性に意味があって、数値には意味がありません。 このリレー型関数の対象はありません。
この「行頭」とは、「現位置」の行の先頭のことです。 この行が論理行か表示行かは、「現位置」の 行種別に依存します。
補説:現位置」の桁は、 「(現位置における)行頭」に更新されます。
現位置」の行と行種別は、現状のままです。
用例:

 ::Epsaly.MoveTo( 'LineTop );
これを実行すると、カーソルは、現行頭へ移動します。

 ::Epsaly.MoveTo( 100'LineNo, 'LineTop );
これを実行すると、カーソルは、100 行目の行頭へ移動します。

'LineEnd
説明:

「(現位置における)行末」を示す属性を付けた数値を返します。 これは、その属性に意味があって、数値には意味がありません。 このリレー型関数の対象はありません。

この「行末」とは、「現位置」の行の末尾のことです。 この行が論理行か表示行かは、「現位置」の 行種別に依存します。 この行の「行終端」が、改行コードなら、この「行末」は、 その改行コードの直前の位置になります。 改行コードの無い折り返し行では、「行末」と「行終端」は、同じ位置で、 これらは、次行の先頭と同じ「文字コードインデックス」 になります。

補説:現位置」の桁は、 「(現位置における)行末」に更新されます。
現位置」の行と行種別は、現状のままです。
用例:

 ::Epsaly.MoveTo( 'LineEnd );
これを実行すると、カーソルは、現行末へ移動します。 但し、改行コードの無い折り返し行で、フリーカーソルでない場合、 カーソルは、その行末へ移動できないので、次行の先頭へ移動します。

 ::Epsaly.MoveTo( 100'LineNo, 'LineEnd, -3'DKn );
これを実行すると、カーソルは、100 行目の行末から 3 文字前の位置へ移動します。

'LineLim
説明:

「(現位置における)行終端」を示す属性を付けた数値を返します。 これは、その属性に意味があって、数値には意味がありません。 このリレー型関数の対象はありません。

この「行終端」とは、「現位置」の行の終端のことです。 この行が論理行か表示行かは、「現位置」の 行種別に依存します。 この行の「行終端」が、改行コードなら、この「行終端」は、 その改行コードの直後の位置になります。 改行コードの無い折り返し行では、「行末」と「行終端」は、同じ位置になります。 「行終端」と次行の先頭は、同じ「文字コードインデックス」に なります。

補説:現位置」の桁は、 「(現位置における)行終端」に更新されます。
現位置」の行と行種別は、現状のままです。
用例:  ::Epsaly.MoveTo( 'LineLim );
これを実行すると、カーソルは、現在の行の終端へ移動します。 但し、フリーカーソルでない場合、カーソルは、行終端へは移動できないので、 次行の先頭へ移動します。
'WordTop
説明: 「(現位置における最寄の)単語先頭」を示す属性を付けた数値を返します。 これは、その属性に意味があって、数値には意味がありません。 このリレー型関数の対象はありません。
「最寄の単語」とは、現位置が単語の先頭/内部/末尾にあれば、その単語自身で、 さもなければ、現位置以降に有る最初の単語になります。 最寄の単語が無ければ、現位置になります。
補説:現位置」の桁と行は、 「(現位置における最寄の)単語先頭」に応じて更新されます。
現位置」の行種別は、現状のままです。
用例:  ::Epsaly.MoveTo( 'WordTop );
これを実行すると、カーソルは、「最寄の単語」の先頭へ移動します。
'WordEnd
説明: 「(現位置における最寄の)単語末尾」を示す属性を付けた数値を返します。 これは、その属性に意味があって、数値には意味がありません。 このリレー型関数の対象はありません。
「最寄の単語」の意味は、'WordTop で説明した通りです。
補説:現位置」の桁と行は、 「(現位置における最寄の)単語末尾」に応じて更新されます。
現位置」の行種別は、現状のままです。
用例:  ::Epsaly.MoveTo( 'WordEnd );
これを実行すると、カーソルは、「最寄の単語」の末尾へ移動します。
'SLn
説明:画面最上行からの行位置」を示す属性を、対象の数値に付けて返します。 対象がなければ、現カーソル位置での「画面最上行からの行位置」に、 この属性を付けて返します。
「画面最上行からの行位置」が、1, 2, 3, ... で、現編集ウィンドウのテキスト表示領域の 上端から、第1、第2、第3、...行目になります。
補説:現位置」の行と桁と行種別は、現状のままです。
用例:  ::Epsaly.MoveTo( 200'LineNo, 5'SLn );
これを実行すると、カーソルが編集テキストの 200 行目に移動します。その際、 カーソルが画面上端から第 5 行目の位置になるように表示されます。
'MP
説明: マウスポインタが指すテキスト内の位置の文字コードインデックスを返します。 この返値には「文字コードインデックス」の属性が付きます。 この返値の位置は、マウスポインタが編集テキスト上に有る時だけでなく、無い時でも、 非フリーカーソル時にカーソルが移動できる範囲内で、その位置から最も近い行と桁に対応しています。 なお、このリレー型関数には、その対象も引数もありません。
用例:  ::Epsaly.MoveTo( 'MP );
これを実行すると、カーソルは、(非フリーカーソル時に)移動可能な範囲内で、 マウスポインタの指す位置に最も近い行と桁へ移動します。
 ::Epsaly.GetTerm( 'MP );
これを実行すると、マウスポインタの指す位置に有る単語を取得します。
'AP
説明: アンカー位置の文字コードインデックスを返します。 この返値には「文字コードインデックス」の属性が付きます。 この関数の対象は、何番のアンカーかを示す数値になります。 例えば、3'AP は、3番のアンカーが対象です。 アンカーは最大 32 個まで設定できるので(⇒参照)、 この対象の数値は、0〜31 の範囲内で有効です。 この対象が省略/非数値の時は、0 として扱われます。 この対象の数値に対応するアンカーが、無い時や、未設定の時、 編集テキスト内の位置は特定不能です。
用例:  ::Epsaly.MoveTo( 2'AP );
これを実行すると、カーソルは、2番のアンカー位置へ移動します。 但し、当該アンカーが未設定の時には、カーソルは移動せず、null が返ります。
'VP
説明: 視点位置の文字コードインデックスを返します。 この返値には「文字コードインデックス」の属性が付きます。 この関数の対象は、何番の視点(⇒参照)かを示す数値になります。 例えば、1'AP は、視点1が対象です。 この対象の数値は、0〜3 の範囲内で有効です。 これ以外の時、編集テキスト内の位置は特定不能です。 なお、この対象が省略/非数値の時は、0 として扱われます。
用例:  ::Epsaly.MoveTo( 2'VP );
これを実行すると、カーソルは、視点2の位置へ移動します。 なお、これはあくまで、カーソルの移動だけであって、視点が切り換わるわけではありません。
'TP( s )
説明:  「着色位置」を示す属性を、対象の数値に付けて返します。 ここで「着色位置」というのは、厳密には着色箇所の先頭位置のことです。 この関数の対象は、現位置から何番目の着色位置かを示す数値になります。 例えば、5'TP は、現位置から順方向に5番目の着色位置になり、 -3'TP は、現位置から逆方向に3番目の着色位置になります。 ちなみに、0'TP は、現位置が着色範囲内に有る時に限り、 その先頭位置を示します。 この対象が省略/非数値の時は、1(次の着色箇所を示す値)として扱われます。 なお、対応する着色位置が無い場合、編集テキスト内の位置は特定不能です。
 引数 s は、着色箇所の着色番号に対応するビット値を指定します。 着色番号は、1〜31 が有効なので、引数 s の 1〜31 のビットに対応します。 これで、着色箇所の着色番号を特定します。 例えば、0b100000 は、着色番号5の着色箇所を示します。 また、0b1010000 は、着色番号4または6の着色箇所を示します。 引数 s が省略/無効の時は、どの着色番号の着色位置にも対応します。 つまり、0xFFFFFFFE を指定した場合と同じです。
用例:  ::Epsaly.MoveTo( 'TP );
これを実行すると、現カーソル位置から1つ次の着色位置へ、カーソルが移動します。
 ::Epsaly.MoveTo( -1'TP );
これを実行すると、現カーソル位置から1つ前の着色位置へ、カーソルが移動します。
 ::Epsaly.MoveTo( 'TextTop, 2'TP( 0b1010000 ) );
これを実行すると、テキストの先頭から2番目の、着色番号が4または6の着色位置へ、 カーソルが移動します。
 なお、上記いずれの場合でも、対応する着色位置が無い場合、 編集テキスト内の位置が特定不能なので、カーソルは移動せず、null が返ります。
'ML( s )
説明:  「マーク行」を示す属性を、対象の数値に付けて返します。 ここで「マーク行」というのは、厳密にはマークが設定されている行(⇒参照)の先頭位置のことです。 この関数の対象は、現位置から何番目のマーク行かを示す数値になります。 例えば、5'ML は、現位置から順方向に5番目のマーク行になり、 -3'ML は、現位置から逆方向に3番目のマーク行になります。 ちなみに、0'ML は、現位置がマーク行である時に限り、 その先頭位置を示します。 この対象が省略/非数値の時は、1(次のマーク行を示す値)として扱われます。 なお、対応するマーク行が無い場合、編集テキスト内の位置は特定不能です。
 引数 s は、対象となるマーク行の種類を以下の数値で指定します。
   1: 通常マーク行のみ
   2: 一時マーク行のみ
   3: 両方
引数 s が省略/無効の時は、両方のマーク行が対象です。
用例:  ::Epsaly.MoveTo( 'ML );
これを実行すると、現カーソル位置から1つ次の通常マーク行か一時マーク行へ、カーソルが移動します。
 ::Epsaly.MoveTo( -1'ML );
これを実行すると、現カーソル位置から1つ前の通常マーク行か一時マーク行へ、カーソルが移動します。
 ::Epsaly.MoveTo( 'TextTop, 5'ML( 2 ) );
これを実行すると、テキストの先頭から5番目の一時マーク行へ、カーソルが移動します。
 なお、上記いずれの場合でも、対応するマーク行が無い場合、 編集テキスト内の位置が特定不能なので、カーソルは移動せず、null が返ります。