更多操作
小 (fix) |
小 (拆分) |
||
| 第3行: | 第3行: | ||
local data = require('Module:emoji/data') | local data = require('Module:emoji/data') | ||
function | local function getEmojiMeta(data, name) | ||
-- 获取该名称 emoji 的元数据, 处理别名 | -- 获取该名称 emoji 的元数据, 处理别名 | ||
local meta = name | local meta = name | ||
| 第24行: | 第9行: | ||
meta = data.emojis[meta] | meta = data.emojis[meta] | ||
if type(meta) == 'table' then | if type(meta) == 'table' then | ||
return meta, true | |||
elseif meta == nil then | elseif meta == nil then | ||
return frame:expandTemplate { | return frame:expandTemplate { | ||
| 第32行: | 第17行: | ||
'emoji遗失, 名称: ' .. name, | 'emoji遗失, 名称: ' .. name, | ||
}, | }, | ||
} | }, false | ||
elseif type(meta) ~= 'string' then | elseif type(meta) ~= 'string' then | ||
return frame:expandTemplate { | return frame:expandTemplate { | ||
| 第40行: | 第25行: | ||
'emoji配置不正确, 类型: ' .. type(meta), | 'emoji配置不正确, 类型: ' .. type(meta), | ||
}, | }, | ||
} | }, false | ||
end | end | ||
end | end | ||
end | |||
local function resolveVariety(meta, varietyName) | |||
-- 处理变种 (如果指定了) | -- 处理变种 (如果指定了) | ||
-- 变种暂时不支持别名 (懒) | -- 变种暂时不支持别名 (懒) | ||
meta = (meta.aliases or {})[varietyName] | |||
if meta == nil then | |||
return frame:expandTemplate { | |||
title = '?', | |||
args = { | |||
'[[help:emoji|❓]]', | |||
'emoji变种遗失, 变种名称: ' .. varietyName, | |||
}, | |||
}, false | |||
elseif type(meta) == 'string' then | |||
return frame:expandTemplate { | |||
title = '?', | |||
args = { | |||
'[[help:emoji|❓]]', | |||
'emoji变种暂未支持别名', | |||
}, | |||
}, false | |||
elseif type(meta) ~= 'table' then | |||
return frame:expandTemplate { | |||
title = '?', | |||
args = { | |||
'[[help:emoji|❓]]', | |||
'emoji变种配置不正确, 类型:' .. type(meta), | |||
}, | |||
}, false | |||
end | |||
return meta, true | |||
end | |||
function p.emoji() | |||
local frame = mw.getCurrentFrame():getParent() | |||
local name = frame.args[1] | |||
local var = nil | |||
-- 接受两种格式来指定变种: | |||
-- {{e|名称/变种名}} | |||
-- {{e|名称|变种名}} | |||
local varSepPosi = string.find(name, '/') | |||
if varSepPosi ~= nil then | |||
var = string.sub(name, varSepPosi + 1) | |||
name = string.sub(name, 1, varSepPosi - 1) | |||
else | |||
var = frame.args[2] | |||
end | |||
local metaOrError, succ = getEmojiMeta(data, name) | |||
if not succ then | |||
return metaOrError | |||
end | |||
local meta = metaOrError | |||
if var ~= nil then | if var ~= nil then | ||
local metaOrError, succ = resolveVariety(meta, var) | |||
if not succ then | |||
return metaOrError | |||
return | |||
end | end | ||
meta = metaOrError | |||
end | end | ||
2019年4月17日 (三) 03:25的版本
此模块的文档可以在模块:Emoji/doc创建
local p = {}
local data = require('Module:emoji/data')
local function getEmojiMeta(data, name)
-- 获取该名称 emoji 的元数据, 处理别名
local meta = name
while true do
meta = data.emojis[meta]
if type(meta) == 'table' then
return meta, true
elseif meta == nil then
return frame:expandTemplate {
title = '?',
args = {
'[[help:emoji|❓]]',
'emoji遗失, 名称: ' .. name,
},
}, false
elseif type(meta) ~= 'string' then
return frame:expandTemplate {
title = '?',
args = {
'[[help:emoji|❓]]',
'emoji配置不正确, 类型: ' .. type(meta),
},
}, false
end
end
end
local function resolveVariety(meta, varietyName)
-- 处理变种 (如果指定了)
-- 变种暂时不支持别名 (懒)
meta = (meta.aliases or {})[varietyName]
if meta == nil then
return frame:expandTemplate {
title = '?',
args = {
'[[help:emoji|❓]]',
'emoji变种遗失, 变种名称: ' .. varietyName,
},
}, false
elseif type(meta) == 'string' then
return frame:expandTemplate {
title = '?',
args = {
'[[help:emoji|❓]]',
'emoji变种暂未支持别名',
},
}, false
elseif type(meta) ~= 'table' then
return frame:expandTemplate {
title = '?',
args = {
'[[help:emoji|❓]]',
'emoji变种配置不正确, 类型:' .. type(meta),
},
}, false
end
return meta, true
end
function p.emoji()
local frame = mw.getCurrentFrame():getParent()
local name = frame.args[1]
local var = nil
-- 接受两种格式来指定变种:
-- {{e|名称/变种名}}
-- {{e|名称|变种名}}
local varSepPosi = string.find(name, '/')
if varSepPosi ~= nil then
var = string.sub(name, varSepPosi + 1)
name = string.sub(name, 1, varSepPosi - 1)
else
var = frame.args[2]
end
local metaOrError, succ = getEmojiMeta(data, name)
if not succ then
return metaOrError
end
local meta = metaOrError
if var ~= nil then
local metaOrError, succ = resolveVariety(meta, var)
if not succ then
return metaOrError
end
meta = metaOrError
end
if type(meta.position) ~= 'table'
or type(meta.position[1]) ~= 'number'
or type(meta.position[2]) ~= 'number'
then
return frame:expandTemplate {
title = '?',
args = {
'[[help:emoji|❓]]',
'emoji位置配置不正确',
},
}
end
local image = data.texture.image
local row = meta.position[1]
local col = meta.position[2]
local width = data.texture.unitSize[1]
local height = data.texture.unitSize[2]
local y = row * height
local x = col * width
return frame:expandTemplate {
title = 'image crop',
width = width,
height = height,
y = y,
x = x,
image = '[[File:' .. image .. '|link=help:emoji]]',
}
end
return p