モジュール:サンドボックス/しまあじ/Sandbox

モジュールの解説[作成]
-- WikipediaのLuaモジュールは、外部からアクセスできる関数を入れる変数の宣言から始める必要がある。この変数にデータを入れることもできる。
local objLINKYMCAT = {};

-- そして、変数に関数を追加する。そうすることで、Wikipediaから #invokeとして呼び出せるようになる。
-- frame変数には、呼び出し時にWikipediaから渡されるデータが入る。
objLINKYMCAT.chanchakachan = function( frame ) 
  local result = objLINKYMCAT.chanchakachanCore ( frame )
-- 結果をWikipedia側に戻して関数を脱出する。printのような関数は使えないので、出力は文字列の返り値でやり取りする。
  return "「" .. result['tag'] .. "」これでいいのか?"
end

objLINKYMCAT.divdateCore = function( ymm ) 
  local tbl = {}
  local len = mw.ustring.len( ymm )
  local c = ""
  tbl['y']  = ""
  tbl['m1'] = ""
  tbl['m2'] = ""
  if 5 <= len then
    tbl['y'] = mw.ustring.sub( ymm, tonumber("1"), tonumber("4") )
    if 7 <= len then
      c = mw.ustring.sub( ymm, tonumber("7"), tonumber("7") )
      if c == "月" then
        tbl['m1'] = mw.ustring.sub( ymm, tonumber("6"), tonumber("6") )
        tbl['m2'] = tbl['m1']
        if 10 <= len then
          c = mw.ustring.sub( ymm, tonumber("10"), tonumber("10") )
          if c == "月" then
            tbl['m2'] = mw.ustring.sub( ymm, tonumber("9"), tonumber("9") )
          else
            tbl['m2'] = mw.ustring.sub( ymm, tonumber("9"), tonumber("10") )
          end
        end
      else
        tbl['m1'] = mw.ustring.sub( ymm, tonumber("6"), tonumber("7") )
        tbl['m2'] = tbl['m1']
        if 11 <= len then
          c = mw.ustring.sub( ymm, tonumber("11"), tonumber("11") )
          if c == "月" then
            tbl['m2'] = mw.ustring.sub( ymm, tonumber("10"), tonumber("10") )
          else
            tbl['m2'] = mw.ustring.sub( ymm, tonumber("10"), tonumber("11") )
          end
        end
      end
    end
  end
  return tbl
end

objLINKYMCAT.divdate = function( frame ) 
  local sel = frame.args[2];
  local tbl = objLINKYMCAT.divdateCore( frame.args[1] )
  local str = ""
  if sel == "y" then
    str = tbl['y']
  elseif sel == "m1" then
    str = tbl['m1']
  elseif sel == "m2" then
    str = tbl['m2']
  end
  return str
end

objLINKYMCAT.chanchakachanCore = function( frame ) 
  local result = {};
  local str = mw.ustring.sub(frame.args[1], tonumber(frame.args[2]), tonumber(frame.args[3]))
  result['tag'] = str
  return result
end

objLINKYMCAT.sutteketen = function( frame ) 
  return ""
end

objLINKYMCAT.honyarara = function( frame ) 
    local new_args = objLINKYMCAT._getParameters( frame.args, {'てんてけてん'} );
    local s = new_args['てんてけてん'] or '';
    return mw.ustring.len( s )
end

function objLINKYMCAT._getParameters( frame_args, arg_list )
  local new_args = {};
  local index = 1;
  local value;
  for i,arg in ipairs( arg_list ) do
    value = frame_args[arg]
    if value == nil then
      value = frame_args[index];
      index = index + 1;
    end
    new_args[arg] = value;
  end
  return new_args;
end
return objLINKYMCAT -- モジュールの終わりで関数を含んだオブジェクトをWikipedia側に返す。
--[[ 要確認事項
「local」の有無による違い
「function」の有無による違い
]]