Extension:Loops

From mediawiki.org
This page is a translated version of the page Extension:Loops and the translation is 100% complete.
MediaWiki 拡張機能マニュアル
OOjs UI icon advanced-invert.svg
Loops
リリースの状態: 安定
実装 パーサー関数
説明 ループを実行するためのパーサー関数を提供する
作者
最新バージョン 0.5.2 (2019-08-05)
MediaWiki 1.34+
PHP 5.6+
データベースの変更 いいえ
ライセンス GNU 一般公衆利用許諾書 2.0 以降
ダウンロード
README
RELEASE-NOTES
sandbox.semantic-mediawiki.org
  • $wgLoopsEnabledFunctions
  • $wgLoopsCountLimit
translatewiki.net で翻訳を利用できる場合は、Loops 拡張機能の翻訳にご協力ください
問題点 未解決のタスク · バグを報告

Loops 拡張機能は、ループを実行するための パーサー関数 を提供します。

現在、バージョン 1.0.0 が開発中で、拡張機能の登録 、ループが多すぎるページに対する Tracking categories 、そしてリグレッションを避けるための パーサーのテスト が特徴となっています。 以下のドキュメントは、最新の安定版リリースであるv0.5.2を対象としています。

現在、この拡張機能はMGCheckerで基本的に維持されています。

使用法

以下の例では、Variables 拡張機能を使用し、場合によってはParserFunctions 拡張機能も使用します。

#while

{{#while}} は、条件マークアップが非空白として評価される限り、ループを実行します (すなわち、与えられた wiki マークアップブロックステートメントを繰り返し解析します)。

{{#while:
 | <条件指定テキスト>
 | <ブロックステートメント>
}}

wikiのマークアップです。

{{#vardefine: i | 0 }}{{#while:
 | {{#ifexpr: {{#var: i }} < 5 | true }}
 | <nowiki />
* {{#var: i }}{{#vardefine: i | {{#expr: {{#var: i }} + 1 }} }}
}}

次のように生成されます。

  • 0
  • 1
  • 2
  • 3
  • 4

{{#while}} は、テンプレートで番号付き配列をシミュレートするために使用することもできます。 ページ "Template:Loops Test"に

{{#vardefine: i | 0 }}{{#while:
 | {{{arg{{#var: i }} |}}}
 | <nowiki />
* {{{arg{{#var: i }} }}}{{#vardefine: i
   | {{#expr: {{#var: i }} + 1 }}
 }}
}}

とすると、wikiのマークアップ

{{Loops Test
 |arg0=zero
 |arg1=one
 |arg2=two
 |arg3=three
 |arg4=four
}}

出力

  • zero
  • one
  • two
  • three
  • four

注意すべきは、これらのパーサー関数のすべての引数の先頭と末尾から、改行、タブ、空白を含む空白が取り除かれることである。 これが好ましくない場合は、ホワイトスペース以外の文字(ホワイトスペース文字&#32;のHTMLエンコーディングを含む)を追加すると、それ以上のストリッピングができなくなります(そのため、上記の例では‎<nowiki>タグが使用されています)。

#dowhile

{{#dowhile}}{{#while}} と全く同じ動作をしますが、ブロック文は少なくとも一度は解析され、表示されることが保証されています (表示可能なテキストになる場合)。 これは、条件文が評価される前に行われる。

#loop

{{#loop: <variable name>
 | <starting value>
 | <number of loops to be performed>
 | <wiki markup>
}}

{{#loop}} は <wiki markup> を <number of loops to be performed> の絶対値と同じ回数だけ繰り返し解析して表示する。 <Starting value>は変数(Variables 拡張機能の{{#var:}}パーサー関数でアクセス可能)に<variable name>という名前で入れられる。 各ループの後、<number of loops to be performed>が正であれば変数は1だけ増加し、<number of loops to be performed>が負であれば1だけ減少する。

ループ関数の中でも#loopは、各サイクルごとに展開・検証する必要がある条件がないため、最も優れた性能を発揮するはずです。

以下のコードを使用。

{{#loop: varname
 | 4
 | 4
 | <nowiki />
* これはラウンド{{#var: varname }}であり、あと{{#expr: 7 - {{#var: varname }} }}残っています。
}}

出力

  • これはラウンド4であり、あと3残っています。
  • これはラウンド5であり、あと2残っています。
  • これはラウンド6であり、あと1残っています。
  • これはラウンド7であり、あと0残っています。

#forargs (実験的)

1は、テンプレートで使用するものです。

テンプレートに渡された引数を受け取り、Variables 拡張機能の {{#var:}} パーサー関数からアクセスできる変数に格納します。

{{#forargs: <prefix>
 | <key>
 | <value>
 | <block statement>
}}

この関数は、名前が<prefix>で始まる各引数を繰り返し処理する。

各反復で、引数名から<prefix> into <key> を引いたものを{{#vardefine: <key> }} を呼び出すかのように置く。

そして、同様の方法で引数の値を取り、<value>に入れる。

その後、ブロックステートメントを展開します。

ブロック文には、保存された引数にアクセスするために、{{#var: <key> }}{{#var: <value> }} を含めることができます。

ページ "Template:Loops Test"に

{{#forargs: arg
 | key
 | value
 | <nowiki />
* {{#var: key }} = {{#var: value }}
}}

とすると、wikiのマークアップ

{{Loops Test
 | arg1=val1
 | spam=spammity
 | arg5=val5
 | argument=value
}}

produces

  • 1 = val1
  • 5 = val5
  • ument = value

#fornumargs (実験的)

{{#fornumargs: <key>
 | <value>
 | <block statement>
}}

{{#fornumargs}}{{#forargs}} と同様の動作をしますが、2つの大きな違いがあります。プレフィックスの引数を取らないことと、番号が明示されているか否かに関わらず番号付き引数に対してのみ動作することです。

{{Template
 | 1=one
 | 2=two
}}

または暗黙のうちに番号付けされている。

{{Template
 | one
 | two
}}

これらのメソッドを混在させて1つのテンプレートを呼び出すと、値が上書きされる可能性があるので注意が必要です。

Template:Loops Testが含まれるように編集された場合。

{{#fornumargs: number
 | value
 | <nowiki />
* {{#var: number }} = {{#var: value }}
}}

それなら

{{Loops Test
  | Apricot
  | B = Bolognese
  | Caramel slice
  | 5 = Eclair
}}

になる。

  • 1 = Apricot
  • 2 = Caramel slice
  • 5 = Eclair

インストール

この拡張機能が提供するパーサー関数の中には、ParserFunctions 拡張機能だけでなくVariables 拡張機能も最初にインストールする必要があるものがあります。

設定

これらの設定変数は、この拡張機能を取り込んだ後、LocalSettings.phpファイルに設定する必要があります。

ExtLoops::$maxLoops (近日リリース予定の1.0.0では$egLoopsCountLimitです。)
ページが実行可能な最大ループ回数を設定します(デフォルトは100)。 この値を-1に設定すると、ループがphps環境の制限内で実行されるようになります。 このパラメータは、{{#forargs:}}パーサー関数と{{#fornumargs:}}パーサー関数のどちらにも影響しません。
$egLoopsEnabledFunctions
どのループ機能を有効にするかを定義するための設定変数(配列)。 デフォルトでは、Variables 拡張機能もインストールされている場合、すべての機能が有効になります。 Variables 拡張機能がインストールされていない場合、#loop#forargs#fornumargs はインストールされていないと動作しないため、無効になります。 #fornumargs, #forargs の機能のみを有効にするには、次のようにします。
$egLoopsEnabledFunctions = array_diff(
    $egLoopsEnabledFunctions, [
        'forargs', 'fornumargs'
        ]
    );


関連項目