Module:SunShow:修订间差异
外观
无编辑摘要 |
无编辑摘要 |
||
(未显示同一用户的17个中间版本) | |||
第7行: | 第7行: | ||
local rainbow = {} -- 色值表 | local rainbow = {} -- 色值表 | ||
local ele = {} -- 元素名 | |||
local cname = {} -- 颜色名 | local cname = {} -- 颜色名 | ||
local en_cname = {} -- 英文颜色名 | local en_cname = {} -- 英文颜色名 | ||
第13行: | 第14行: | ||
for _, entry in ipairs(json7) do | for _, entry in ipairs(json7) do | ||
local order = tonumber(entry.su6H[1]) -- 获取序数 | local order = tonumber(entry.su6H[1]) -- 获取序数 | ||
local index = (order + | local index = (order + 6) % 7 + 1 -- 转换索引 | ||
rainbow[index] = entry.sue:lower() | rainbow[index] = entry.sue:lower() | ||
ele[index] = entry.fEE | |||
cname[index] = entry.suemi8H['zh-CN'] | cname[index] = entry.suemi8H['zh-CN'] | ||
en_cname[index] = entry.suemi8H['en-US'] | en_cname[index] = entry.suemi8H['en-US'] | ||
第23行: | 第25行: | ||
local gua = {} -- 中文卦名 | local gua = {} -- 中文卦名 | ||
local old_gua = {} -- 古文卦名 | local old_gua = {} -- 古文卦名 | ||
local | local en_gua = {} -- 英文卦名 | ||
local speech = {} -- 现代言语 | local speech = {} -- 现代言语 | ||
local old_speech = {} -- 古文言语 | local old_speech = {} -- 古文言语 | ||
第30行: | 第32行: | ||
-- 读取 49.json 数据 | -- 读取 49.json 数据 | ||
for _, entry in ipairs(json49) do | for _, entry in ipairs(json49) do | ||
local seq = | local seq = (entry.az8sA5 + 48) % 49 + 1-- 计算整序 | ||
seq_map[seq] = entry.t1ru2sA5 -- 存储自然序 | seq_map[seq] = entry.t1ru2sA5 -- 存储自然序 | ||
gua[seq] = entry.mi8H | gua[seq] = entry.mi8H | ||
old_gua[seq] = entry.gAmi8H | old_gua[seq] = entry.gAmi8H | ||
en_gua[seq] = entry.English | |||
speech[seq] = entry.HuVL | speech[seq] = entry.HuVL | ||
old_speech[seq] = entry.gAHuVL | old_speech[seq] = entry.gAHuVL | ||
第49行: | 第51行: | ||
返回对应的自然序数字,如果输入无效则返回 0 | 返回对应的自然序数字,如果输入无效则返回 0 | ||
]] | ]] | ||
function p. | function p.seq2nat(num) | ||
if num < 1 or num > 49 then | if num < 1 or num > 49 then | ||
return 0 | return 0 | ||
第64行: | 第66行: | ||
返回对应的整序数字,如果输入无效则返回 0 | 返回对应的整序数字,如果输入无效则返回 0 | ||
]] | ]] | ||
function p. | function p.nat2seq(val) | ||
for i, v in ipairs(seq_map) do | for i, v in ipairs(seq_map) do | ||
if v == val then | if v == val then | ||
第139行: | 第141行: | ||
--[[ | --[[ | ||
通用卦属性查询函数 | |||
输入: | |||
num: 原码整序,范围应在 1 到 49 之间 | |||
property: 字符串 'old_gua', 'gua', 'en_gua', 'speech' 等,用于指定要获取的属性 | |||
输出: | |||
返回对应的卦的属性值,如果输入无效则返回 nil | |||
]] | |||
function p.sunPar(num, property) | |||
if num < 1 or num > 49 then | |||
return nil | |||
end | |||
local valid_properties = { | |||
old_gua = old_gua, | |||
gua = gua, | |||
en_gua = en_gua, | |||
speech = speech, | |||
old_speech = old_speech, | |||
notes = notes | |||
} | |||
if valid_properties[property] then | |||
return valid_properties[property][num] | |||
else | |||
return nil | |||
end | |||
end | |||
--[[ | |||
元素属性查询函数 | |||
输入: | |||
num: 原码整序,范围应在 1 到 7 之间 | |||
property: 字符串 'rainbow', 'ele', 'cname', '' 等,用于指定要获取的属性 | |||
输出: | |||
返回对应的元素的属性值,如果输入无效则返回 nil | |||
]] | ]] | ||
function p. | function p.elePar(num, property) | ||
return | if num < 1 or num > 7 then | ||
return nil | |||
end | |||
local valid_properties = { | |||
rainbow = rainbow, | |||
color = rainbow, | |||
ele = ele, | |||
cname = cname, | |||
en_cname = en_cname | |||
} | |||
if valid_properties[property] then | |||
return valid_properties[property][num] | |||
else | |||
return nil | |||
end | |||
end | end | ||
第156行: | 第206行: | ||
local args = getArgs(frame) | local args = getArgs(frame) | ||
local num = tonumber(args[1]) or 0 -- 默认值为0 | local num = tonumber(args[1]) or 0 -- 默认值为0 | ||
return p. | return p.seq2nat(num) | ||
end | end | ||
第166行: | 第216行: | ||
local args = getArgs(frame) | local args = getArgs(frame) | ||
local val = tonumber(args[1]) or 0 -- 默认值为01 | local val = tonumber(args[1]) or 0 -- 默认值为01 | ||
return p. | return p.nat2seq(val) | ||
end | end | ||
第200行: | 第250行: | ||
--[[ | --[[ | ||
模板调用:获取卦属性 | |||
用法:{{#invoke:SunShow| | 用法:{{#invoke:SunShow|sunParT|整序|属性名}} | ||
]] | ]] | ||
function p. | function p.sunParT(frame) | ||
local args = getArgs(frame) | local args = getArgs(frame) | ||
local | local num = tonumber(args[1]) or 1 -- 默认值为1 | ||
return p. | local property = args[2] or 'gua' -- 默认值为'gua' | ||
return p.sunPar(num, property) -- 调用 sunPar 函数 | |||
end | end | ||
--[[ | --[[ | ||
模板调用:获取元素属性 | |||
用法:{{#invoke:SunShow| | 用法:{{#invoke:SunShow|eleParT|整序|属性名}} | ||
]] | ]] | ||
function p. | function p.eleParT(frame) | ||
local args = getArgs(frame) | local args = getArgs(frame) | ||
local | local num = tonumber(args[1]) or 1 -- 默认值为1 | ||
return p. | local property = args[2] or 'ele' -- 默认值为'ele' | ||
return p.elePar(num, property) -- 调用 elePar 函数 | |||
end | end | ||
return p | return p |
2025年3月20日 (四) 02:42的最新版本
此模块的文档可以在Module:SunShow/doc创建
local p = {}
local getArgs = require('Module:Arguments').getArgs
local json49 = mw.text.jsonDecode(mw.title.new('Module:49.json'):getContent())
local json7 = mw.text.jsonDecode(mw.title.new('Module:7.json'):getContent())
local rainbow = {} -- 色值表
local ele = {} -- 元素名
local cname = {} -- 颜色名
local en_cname = {} -- 英文颜色名
-- 读取 7.json 数据
for _, entry in ipairs(json7) do
local order = tonumber(entry.su6H[1]) -- 获取序数
local index = (order + 6) % 7 + 1 -- 转换索引
rainbow[index] = entry.sue:lower()
ele[index] = entry.fEE
cname[index] = entry.suemi8H['zh-CN']
en_cname[index] = entry.suemi8H['en-US']
end
rainbow[8] = "#aa10aa" -- 补充?
local seq_map = {} -- 整序映射自然序
local gua = {} -- 中文卦名
local old_gua = {} -- 古文卦名
local en_gua = {} -- 英文卦名
local speech = {} -- 现代言语
local old_speech = {} -- 古文言语
local notes = {} -- 注释
-- 读取 49.json 数据
for _, entry in ipairs(json49) do
local seq = (entry.az8sA5 + 48) % 49 + 1-- 计算整序
seq_map[seq] = entry.t1ru2sA5 -- 存储自然序
gua[seq] = entry.mi8H
old_gua[seq] = entry.gAmi8H
en_gua[seq] = entry.English
speech[seq] = entry.HuVL
old_speech[seq] = entry.gAHuVL
notes[seq] = entry.Eka
end
--[[
整序转自然序
将指定的整序转换为自然序。
输入:
num: 整序数字,范围应在 1 到 49 之间
输出:
返回对应的自然序数字,如果输入无效则返回 0
]]
function p.seq2nat(num)
if num < 1 or num > 49 then
return 0
end
return seq_map[num]
end
--[[
自然序转整序
将指定的自然序转换为整序。
输入:
val: 自然序数字,范围应在 1 到 49 之间
输出:
返回对应的整序数字,如果输入无效则返回 0
]]
function p.nat2seq(val)
for i, v in ipairs(seq_map) do
if v == val then
return i
end
end
return 0
end
--[[
双色太阳易色块生成器(补码模式)
为方便起见,这里事实上是用补码,即数值 6 5 4 3 2 1 0 指代火木光土风水空。
输入:
inp: 0-48的整数
tzbiou: 是否启用特殊时期样式(可选,默认0)
输出:带双色背景的HTML块儿
]]
function p.sunColor(inp, tzbiou)
tzbiou = tzbiou or 0
local l = inp % 7 -- 下卦
local u = math.floor(inp/7) % 7 -- 上卦
if (l == 4 and u == 1 and tzbiou == 1) then
return ' ' -- 特殊时期返回空格
else
return string.format(
'<span style="background:-webkit-linear-gradient(90deg, %s 0%%, %s 50%%, %s 50%%, %s 100%%)"> </span>',
rainbow[7-l], rainbow[7-l], rainbow[7-u], rainbow[7-u]
)
end
end
--[[
双色太阳易色块生成器(原码模式)
输入:
inp: 1-49的整数
tzbiou: 是否启用特殊时期样式(可选,默认0)
输出:带双色背景的HTML块儿
]]
function p.sunColor2(inp, tzbiou)
tzbiou = tzbiou or 0
local l = (inp - 1) % 7 + 1
local u = math.floor((inp - 1) / 7) % 7 + 1
if (l == 3 and u == 6 and tzbiou==1) then
return ' ' -- 特殊时期返回空格
else
return string.format(
'<span style="background:-webkit-linear-gradient(90deg, %s 0%%, %s 50%%, %s 50%%, %s 100%%)"> </span>',
rainbow[l], rainbow[l], rainbow[u], rainbow[u]
)
end
end
--[[
单色契色块生成器
输入:1-8的整数(对应八契原码)
输出:带纯色背景的HTML块儿
]]
function p.cheiColor(inp)
return string.format('<span style="background:%s"> </span>', rainbow[inp])
end
--[[
获取卦名(补码模式)
输入:0-48的整数
输出:对应的49日卦名
]]
function p.sun49(inp)
return gua[49 - (inp % 49)]
end
--[[
通用卦属性查询函数
输入:
num: 原码整序,范围应在 1 到 49 之间
property: 字符串 'old_gua', 'gua', 'en_gua', 'speech' 等,用于指定要获取的属性
输出:
返回对应的卦的属性值,如果输入无效则返回 nil
]]
function p.sunPar(num, property)
if num < 1 or num > 49 then
return nil
end
local valid_properties = {
old_gua = old_gua,
gua = gua,
en_gua = en_gua,
speech = speech,
old_speech = old_speech,
notes = notes
}
if valid_properties[property] then
return valid_properties[property][num]
else
return nil
end
end
--[[
元素属性查询函数
输入:
num: 原码整序,范围应在 1 到 7 之间
property: 字符串 'rainbow', 'ele', 'cname', '' 等,用于指定要获取的属性
输出:
返回对应的元素的属性值,如果输入无效则返回 nil
]]
function p.elePar(num, property)
if num < 1 or num > 7 then
return nil
end
local valid_properties = {
rainbow = rainbow,
color = rainbow,
ele = ele,
cname = cname,
en_cname = en_cname
}
if valid_properties[property] then
return valid_properties[property][num]
else
return nil
end
end
---- 模板定义 ----
--[[
模板调用:整序转自然序
用法:{{#invoke:SunShow|seqToNatT|输入值}}
]]
function p.seqToNatT(frame)
local args = getArgs(frame)
local num = tonumber(args[1]) or 0 -- 默认值为0
return p.seq2nat(num)
end
--[[
模板调用:自然序转整序
用法:{{#invoke:SunShow|natToSeqT|输入值}}
]]
function p.natToSeqT(frame)
local args = getArgs(frame)
local val = tonumber(args[1]) or 0 -- 默认值为01
return p.nat2seq(val)
end
--[[
模板调用:双色太阳易色块生成器(补码模式)
用法:{{#invoke:SunShow|sunColorT|输入值}}
]]
function p.sunColorT(frame)
local args = getArgs(frame)
local inp = tonumber(args[1]) or 0 -- 默认值为0
return p.sunColor(inp)
end
--[[
模板调用:双色太阳易色块生成器(原码模式)
用法:{{#invoke:SunShow|sunColor2T|输入值}}
]]
function p.sunColor2T(frame)
local args = getArgs(frame)
local inp = tonumber(args[1]) or 1 -- 默认值为1
return p.sunColor2(inp)
end
--[[
模板调用:单色契色块生成器
用法:{{#invoke:SunShow|cheiColorT|输入值}}
]]
function p.cheiColorT(frame)
local args = getArgs(frame)
local inp = tonumber(args[1]) or 1 -- 默认值为1
return p.cheiColor(inp)
end
--[[
模板调用:获取卦属性
用法:{{#invoke:SunShow|sunParT|整序|属性名}}
]]
function p.sunParT(frame)
local args = getArgs(frame)
local num = tonumber(args[1]) or 1 -- 默认值为1
local property = args[2] or 'gua' -- 默认值为'gua'
return p.sunPar(num, property) -- 调用 sunPar 函数
end
--[[
模板调用:获取元素属性
用法:{{#invoke:SunShow|eleParT|整序|属性名}}
]]
function p.eleParT(frame)
local args = getArgs(frame)
local num = tonumber(args[1]) or 1 -- 默认值为1
local property = args[2] or 'ele' -- 默认值为'ele'
return p.elePar(num, property) -- 调用 elePar 函数
end
return p