Extension:Loops
リリースの状態: 安定 |
|
|---|---|
| 実装 | パーサー関数 |
| 説明 | ループを実行するためのパーサー関数を提供する |
| 作者 | |
| メンテナー | MGChecker |
| 最新バージョン | 0.5.2 (2019-08-05) |
| MediaWiki | 1.34+ |
| PHP | 5.6+ |
| データベースの変更 | いいえ |
| ライセンス | GNU 一般公衆利用許諾書 2.0 以降 |
| ダウンロード | README RELEASE-NOTES |
| 例 | sandbox.semantic-mediawiki.org |
|
|
| translatewiki.net で翻訳を利用できる場合は、Loops 拡張機能の翻訳にご協力ください | |
| 問題点 | 未解決のタスク · バグを報告 |
Loops 拡張機能は、ループを実行するための パーサー関数 を提供します。
現在、この拡張機能はMGCheckerで基本的に維持されています。
使用法
#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
注意すべきは、これらのパーサー関数のすべての引数の先頭と末尾から、改行、タブ、空白を含む空白が取り除かれることである。
これが好ましくない場合は、ホワイトスペース以外の文字(ホワイトスペース文字 の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> を引いたものを <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
インストール
- ダウンロードして、ファイルを
extensions/フォルダー内のLoopsという名前のディレクトリ内に配置します。
開発者とコード寄稿者は、上記の代わりに以下を使用してGitからインストールします:cd extensions/ git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/Loops
- 以下のコードを LocalSettings.php ファイルの末尾に追加します:
wfLoadExtension( 'Loops' );
- お好みで設定を変更してください
完了 – ウィキの「Special:Version」に移動して、拡張機能が正しくインストールされたことを確認します。
設定
これらの設定変数は、この拡張機能を取り込んだ後、LocalSettings.phpファイルに設定する必要があります。
$egLoopsCountLimit- ページが実行可能な最大ループ回数を設定します(既定値は
100)。 この値を-1に設定すると、ループがphps環境の制限内で実行されるようになります。 このパラメータは、{{#forargs:}}パーサー関数と{{#fornumargs:}}パーサー関数のどちらにも影響しません。
$egLoopsEnabledFunctions- どのループ機能を有効にするかを定義するための設定変数(配列)。 既定では、Variables拡張機能もインストールされている場合、すべての機能が有効になります。 Variables 拡張機能がインストールされていない場合、
#loop、#forargs、#fornumargsはインストールされていないと動作しないため、無効になります。#fornumargs,#forargsの機能のみを有効にするには、次のようにします。
$egLoopsEnabledFunctions = array_diff(
$egLoopsEnabledFunctions, [
'forargs', 'fornumargs'
]
);
関連項目
- Extension:LoopFunctions - ループの別の拡張機能
- Module:Loops
| この拡張機能は以下のウィキ ファーム/ウィキ ホスト/パッケージに含まれています: これは正式な一覧ではありません。 一部のウィキ ファーム/ウィキ ホスト/パッケージは、ここに記載されていなくてもこの拡張機能を含んでいる場合があります。 必ずご利用のウィキ ファーム、ウィキ ホスト、バンドルで確認してください。 |
- Stable extensions/ja
- Parser function extensions/ja
- GPL licensed extensions/ja
- Extensions in Wikimedia version control/ja
- ParserClearState extensions/ja
- ParserFirstCallInit extensions/ja
- ParserLimitReportPrepare extensions/ja
- All extensions/ja
- Extensions included in BlueSpice/ja
- Extensions included in Canasta/ja
- Extensions included in Fandom/ja
- Extensions included in Miraheze/ja
- Extensions included in MyWikis/ja
- Extensions included in ProWiki/ja
- Extensions included in semantic::core/ja
- Extensions included in wiki.gg/ja
