モジュール:SignalinstWiki
表示
このモジュールについての説明文ページを モジュール:SignalinstWiki/doc に作成できます
-- 万能系の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