これは単純なテキスト・マクロ置換機能です。 "text %macro% text"
の形式のテキストが処理され、'%'
で囲まれたマクロ変数が関連する文字列に置き換えられます。 2 つの連続する %
は 1 つの %
に置き換えられます。
マクロは特定のワードリストで定義され、実行時に文字列を返します。 標準では、 マクロを宣言する方法が 1 つだけ、 replaces
のみ定義されています。 これは文字列を返すだけのマクロを作成します。
macros-wordlist
( – wid ) gforth-experimental “macros-wordlist”
文字列置換マクロのワードリスト
replaces
( addr1 len1 addr2 len2 – ) string-ext “replaces”
名前が addr2 len2、 内容が addr1 len1 のマクロを作成します。 マクロが既に存在する場合は、 内容を変更するだけです。
.substitute
( addr1 len1 – n / ior ) gforth-experimental “dot-substitute”
テキスト addr1 len1 内のすべてのマクロを置き換えて、 結果を出力します。 n は置換した数。 または負数の場合は throw 可能な ior です。
$substitute
( addr1 len1 – addr2 len2 n/ior ) gforth-experimental “string-substitute”
テキスト addr1 len1 内のすべてのマクロを置き換えます。 addr2 len2 が置換結果で、 n は置換の数で、 負数場合は throw 可能な ior です。
substitute
( addr1 len1 addr2 len2 – addr2 len3 n/ior ) string-ext “substitute”
テキスト addr1 len1 内のすべてのマクロを置き換え、 結果を addr2 len2 にコピーします。 addr2 len3 は置換結果で、 n は置換した数、または負数場合は throw 可能な ior です。
unescape
( addr1 u1 dest – dest u2 ) string-ext “unescape”
addr1 u1 内のすべての区切り文字を2重にすることで、 置換後の結果が元のテキストのままになります。 結果を格納するバッファー dest には長さ指定の必要が無いことに注意してください。 最悪の場合、 必要な文字数は u1 の 2倍です。 dest u2 は結果の文字列の長さです。
$unescape
( addr1 u1 – addr2 u2 ) gforth-experimental “string-unescape”
unescape
と同じですが、 $tmp
を使用して一時的な結果文字列を作成します。