Minecraft Wiki
(Test)
(zh:251201に更新)
25行目: 25行目:
   
 
function p.xlink( str , mode )
 
function p.xlink( str , mode )
  +
if str == nil then
  +
return nil
  +
end
  +
local arg = string.lower(str)
 
return p.core( str, mode )
 
return p.core( str, mode )
 
end
 
end

2018年6月18日 (月) 02:37時点における版

Autolink、つまり自動リンクモジュールは、モジュール:Reverselinkが日本語のパラメータを英語に変換し、テンプレートに提供して画像を表示するように、テンプレートのパラメータ内の英語を対応する日本語に変換して表示するために使用されるものです。

このモジュールは、主に次の目的で使用されます。

このモジュールでは、以下の下位ページに格納されているデータを使用しています。

[閲覧 | 編集 | 履歴 | キャッシュ破棄]上記の解説は、モジュール:Autolink/docから参照されています。
local p = {}

local block = mw.loadData( 'モジュール:Autolink/Block' )
local item = mw.loadData( 'モジュール:Autolink/Item' )
local other = mw.loadData( 'モジュール:Autolink/Other' )
local exclusive = mw.loadData( 'モジュール:Autolink/Exclusive' )
local colors = { 'white ', 'orange ', 'magenta ', 'light blue ', 'yellow ', 'lime ', 'pink ', 'gray ', 'light gray ', 'cyan ', 'purple ', 'blue ', 'brown ', 'green ', 'red ', 'black ' }
local colorc = { '白色', '橙色', '赤紫色', '空色', '黄色', '黄緑色', '桃色', '灰色', '薄灰色', '青緑色', '紫色', '青色', '茶色', '緑色', '赤色', '黒色' }

local function Set (list)
  local set = {}
  for _, l in ipairs(list) do set[l] = true end
  return set
end

local coloredItems = Set { 'firework star', 'hardened clay', 'stained clay', 'banner', 'carpet', 'concrete', 'concrete powder', 'glazed terracotta', 'terracotta', 'shield', 'shulker box', 'stained glass', 'stained glass pane', 'wool', 'bed' }

function p.link( f )
    local args = f
	if f == mw.getCurrentFrame() then 
		args = require( 'モジュール:ProcessArgs' ).merge( true )
	end
    return p.core( args[1] , args[2] )
end

function p.xlink( str , mode )
    if str == nil then
       return nil
    end
    local arg = string.lower(str)
    return p.core( str, mode )
end

function p.core( str , mode )
    local arg = string.lower(str)
    local pe
    if string.sub(arg, -3) == ' pe' then
        pe = 1
        arg = string.sub(arg, 0, -4)
    end
    local color
    for i, c in ipairs( colors ) do
    	if string.find(arg, c) == 1 then
            local item = string.sub(arg, string.len(c)+1)
            if coloredItems[item] then
				color = colorc[i]
                arg = item
            end
       end
    end
    local result = block[arg]
    if result == nil then
       result = item[arg]
    end
    if result == nil then
       --check for spawn egg
       if string.find(arg,'spawn ',0,true) == nil or string.len(arg) < 7 then
          result = other[arg]
       else
          local mob = other[string.sub(arg,7)]
          index = string.find(mob,'|',0,true)
          if index ~= nil then
             mob = string.sub(mob, index+1)
          end
          result = "スポーンエッグ|スポーン " .. mob
       end
    end
    if result == nil then
       result = exclusive[arg]
    end
    local index
    if result == nil then
       result = str
       index = string.find(result,'|',0,true)
    else
       if color then
          result = result .. '|' .. color .. 'の' .. result   
       end
       index = string.find(result,'|',0,true)
       if pe then
          if index then
             result = result .. ' (Bedrock Edition)'
          else
             result = result .. '|' .. result .. ' (Bedrock Edition)'
             index = string.find(result,'|',0,true)
          end
       end
    end
    
    if mode and index then
       -- return the fully translated part
       if mode == 'nolink' then 
          result = string.sub(result, index+1)
       end
       -- return the page link part
       if mode == 'linkonly' then
          result = string.sub(result, 1 , index-1)
       end
    end 
    return result
end

function p.list( f )
    local args = f
	if f == mw.getCurrentFrame() then 
		args = require( 'モジュール:ProcessArgs' ).merge( true )
	end
    local type = args[1]
    type = string.lower(type)

    local list = nil
    if type == 'block' then
        list = block
    end
    if type == 'item' then
        list = item
    end
    if type == 'other' then
        list = other
    end
    if list == nil then
        return ''
    end
	local result = ''
	local t = {}
	
    for k,_ in pairs(list) do
		table.insert(t, k)
	end
	
	table.sort(t)
	
	local limit = 50
	local count = 0
	
	local table = nil
	local header = mw.html.create('tr')
	header:tag('th'):wikitext('英語版での名称')
	header:tag('th'):wikitext('日本語版での名称')
	
	for _,v in ipairs(t) do
		if count == 0 then 
			if table ~= nil then
				result = result .. tostring(table)
			end
			table = mw.html.create('table'):attr('align', 'left'):css('float', 'left'):css('margin', '2px'):css('border', '1px solid silver'):css('text-align', 'center'):css('background-color', '#fff'):node(header)
		end
	
		local row = mw.html.create('tr')
		row:tag('td'):wikitext((v:gsub('(%l)(%w*)', function(a,b) return a:upper()..b end)))
		row:tag('td'):wikitext(p.xlink(v, 'nolink'))
		table:node(row)
		count = count + 1
		if count == limit then
			count = 0
		end
	end
	
	result = result .. tostring(table)
	return result
end

return p