コンテンツにスキップ

モジュール:SignalinstWiki

提供:信号機Wiki
2025年12月12日 (金) 14:35時点における銀河連邦 (トーク | 投稿記録)による版 (Semantic Mediawikiのための関数を作成したモジュールを作成(今後、信号機Wiki独自のモジュールはこちらに記載予定))
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

このモジュールは、信号機Wiki内の独自テンプレート等で用いるLua関数群となっています。プログラミングに精通している方でLuaを読める方はこちらのメンテナンスも積極的に行っていただけると幸いです。逆に、普通に記事を書いたりする分には特にこちらを確認する必要はありません。

概要

信号機Wiki内において独自に作成したテンプレートにおいて、そのテンプレート内で動的な情報を取得したりする場合において使用されます。信号機Wiki以外での利用は想定されていないため、ハードコーディングになっているものも散見されます。以下、各関数についての簡単な説明文を記します。

関数一覧

全ての関数は、{{#invoke:SignalinstWiki|関数名|引数1|引数2|引数n|…}}から呼び出すことができます。

test(テスト用関数)

通常使用しません。引数はありません。Hello Worldを返します。

getProperties(InfoBox Signal用)

この関数は、「○○、××、△△」といった区切り文字によって区切られた複数のリストを加工し、Semantec MediaWikiのプロパティとして再利用可能な形に整形した書式を返します。

引数

  • propertyName: プロパティに使用する名前。通常タイトル。
  • propertyValue: プロパティの列挙された値。変な文字が入っていると処理されません。
  • propertySplit: 任意。区切り文字を指定します。この文字で区切られます。デフォルトは「、」です。

戻り値

Semantec MediaWikiのプロパティとして有効な列挙文字列。

{{#invoke:SignalinstWiki|getProperties|メーカー|小糸工業、京三製作所、日本信号、信号電材}} 小糸工業 京三製作所 日本信号 信号電材

その他

このドキュメントは実際のコードの最新の更新に追従できていない場合があります。ソースコードを読める方は直接モジュールを読んで理解していただいたほうがおそらく早いと思います。

何か不具合等がありましたらサーバー管理者までご連絡ください。


-- 万能系のLuaメソッドをモジュールとして定義する
local p = {} -- モジュール用パッケージを用意

--[[
	テスト用関数
]]
function p.test(frame)
	return "Hello World!"
end

--[[
	指定した区切り文字で区切られたリストを認識し、その区切り文字で分解。
	区切った後にその中身をSemantic Mediawikiのプロパティとして使用可能な
	文字列にして返します。
	
	例:「メーカー」というプロパティに「小糸工業、京三製作所、日本信号」と登録する場合
	{{#invoke:SignalinstWiki|getProperties|メーカー|小糸工業、京三製作所、日本信号|、}}
]]
function p.getProperties(frame)
	local propertyName = frame.args[1]
	local propertyValue = frame.args[2]
	local propertySplit = frame.args[3]
	
	-- デフォルト値を指定
	if propertyName == nil or propertyName == '' then return nil end
	if propertyValue == nil or propertyValue == '' then return nil end
	if propertySplit == nil or propertySplit == '' then propertySplit = "、" end
	
	-- Valueを分割
	-- 分割された各要素を一時的に保存するテーブル
	local splitValues = {}
	

	local pattern = "(.-)" .. propertySplit -- gmatchのパターン。'%' はエスケープ不要でリテラルの '%' を指す。
	
	-- propertyValue の末尾に propertySplit を追加することで、最後の要素が正しく取得されるようにする
    for part in string.gmatch(propertyValue .. propertySplit, pattern) do
        -- 各要素の前後の空白をトリム(取り除く)
        local trimmedPart = part:match("^%s*(.-)%s*$")
        if trimmedPart ~= '' then -- 空文字列でない場合のみ追加
            table.insert(splitValues, trimmedPart)
        end
    end
    
    -- Semantic Mediawiki のプロパティ形式に変換して連結する
    local smwProperties = {}
    for _, value in ipairs(splitValues) do
        table.insert(smwProperties, "[[" .. propertyName .. "::" .. value .. "]]")
    end
    
    -- 各プロパティを改行で連結して返す
    return table.concat(smwProperties, "\n")
end

return p