Module:Ruby
来自滚动的天空Wiki
local p = {}
local str2py = require("模块:pinyin")
local function transferArgs(args)
-- 转换args
local a = {}
for k, v in pairs(args) do
--转换一些参数
if k == 1 then
a.rb = v
elseif k == 2 then
a.rt = v
elseif k == 3 then
a.rblang = v
elseif k == 4 then
a.rtlang = v
elseif k == 'style' then
a.rubystyle = v
elseif k == 'lang' then
a.rubylang = v
elseif k == 'class' then
a.rubyclass = v
else
a[k] = v
end
end
return a
end
function p._ruby(args, options)
local options = options or {}
local pinyin = options.pinyin
-- 是否启用拼音功能
local a = transferArgs(args)
-- 将框架对象转化为纯净的参数表
local ruby
-- 它将转化为<ruby>或<span lang="zh-latn">的HTML项目
if a.rt then
-- 如果有rt部分,即函数第二个参数,返回旁注标记格式
local rb = mw.html.create("rb")
rb:wikitext(a.rb)
if a.rbstyle then
rb:cssText(a.rbstyle)
end
if a.rblang then
rb:attr("lang", a.rblang)
end
if a.rbclass then
rb:addClass(a.rbclass)
end
local rp1 = mw.html.create("rp")
rp1:wikitext("(")
local rp2 = mw.html.create("rp")
rp2:wikitext(")")
local rt = mw.html.create("rt")
if pinyin then
local rtt = mw.text.trim(a.rt)
local _, sp = rtt:gsub(" ", "")
if rtt:find(" ")
and #a.rb / 3 == sp + 1
and a.autoalign ~= "0"
then
-- 如果启用自动对齐且汉字个数与空格数相应则自动对齐
ruby = mw.html.create("span")
local i = 1
for each in mw.text.gsplit(rtt, " ") do
ruby:wikitext(p._ruby({
a.rb:sub(i, i+2),
each
}, {
pinyin = true
}))
i = i + 3
end
return ruby
end
rt:wikitext(str2py(a.rt))
else
rt:wikitext(a.rt)
end
rt
:cssText(a.rtstyle)
:attr("lang", a.rtlang or a.rblang or pinyin and 'zh-latn' or nil)
:addClass(a.rtclass)
ruby = mw.html.create("ruby")
:node(rb)
:node(rp1)
:node(rt)
:node(rp2)
:cssText(a.rubystyle)
:attr("lang", a.rubylang)
:addClass(a.rubyclass)
elseif pinyin then
--如果无rt部分,返回<span lang="zh-latn">拼音文字</span>的格式
ruby = mw.html.create "span"
:attr("lang", "zh-latn")
:wikitext(str2py(a.rb))
end
return tostring(ruby)
end
function p.ruby(frame)
return p._ruby(frame:getParent().args, frame.args)
end
return p