跳转到内容

Module:SunShow:修订间差异

此后如竟没有炬火,我便是唯一的光。
无编辑摘要
无编辑摘要
第3行: 第3行:
local getArgs = require('Module:Arguments').getArgs
local getArgs = require('Module:Arguments').getArgs


-- 七元素的色号,赤橙黄绿青蓝紫,第八个是闰契的品红色
local json49 = mw.loadData('Module:49.json')
local rainbow = {"#f4592d", "#eda667", "#faf03e", "#5fb319", "#8eede2", "#0568e3","#49207c","#aa10aa"}
local json7 = mw.loadData('Module:7.json')


-- 太阳易卦名
local rainbow = {}        -- 色值表
local gua = {
local cname = {}          -- 颜色名
    "火",  "祭祀", "对手", "成败", "反叛", "救赎", "爆发",
local en_cname = {}       -- 英文颜色名
    "欲望", "木",  "创造", "新生", "凋谢", "重生", "弥散",
    "自我", "寻找", "存在", "经典", "革新", "梦幻", "倾听",
    "忍耐", "腐朽", "绝笔", "地",  "孤独", "小人", "永恒",
    "恶魔", "盛开", "理解", "泥土", "风",  "雾气", "神",
    "对抗", "绽放", "思考", "同伴", "变幻", "水",  "隐退",
    "超越", "生命", "表达", "破碎", "时间", "朦胧", "自然"
}


-- 整序和自然序的对应表
-- 读取 7.json 数据
local seq_map = {
for _, entry in ipairs(json7) do
     24, 41, 10, 30, 28, 43, 49,
    local order = tonumber(entry.su6H[1]) -- 获取序数
     44, 23, 15, 3,  37, 34, 39,
    local index = 7 - order              -- 转换索引
     8,  4,  26, 17, 16, 31, 7,
    rainbow[index] = entry.sue:lower()
     48, 2,  32, 25, 47, 11, 18,
    cname[index] = entry.suemi8H['zh-CN']
     42, 36, 5,  38, 21, 46, 40,
    en_cname[index] = entry.suemi8H['en-US']
     29, 35, 27, 9,  20, 22, 33,
end
     14, 13, 6,  19, 12, 45, 1
rainbow[8] = "#aa10aa"    -- 补充?
}
 
local seq_map = {}        -- 整序映射自然序
local gua = {}            -- 中文卦名
local old_gua = {}        -- 古文卦名
local english_gua = {}    -- 英文卦名
local speech = {}        -- 现代言语
local old_speech = {}     -- 古文言语
local notes = {}          -- 注释
 
-- 读取 49.json 数据
for _, entry in ipairs(json49) do
    local seq = 49 - entry.az8sA5    -- 计算整序
    seq_map[seq] = entry.t1ru2sA5    -- 存储自然序
   
     gua[seq] = entry.mi8H
     old_gua[seq] = entry.gAmi8H
     english_gua[seq] = entry.English
     speech[seq] = entry.HuVL
     old_speech[seq] = entry.gAHuVL
     notes[seq] = entry.Eka
end


--[[
--[[

2025年3月20日 (四) 00:32的版本

此模块的文档可以在Module:SunShow/doc创建

local p = {}

local getArgs = require('Module:Arguments').getArgs

local json49 = mw.loadData('Module:49.json')
local json7 = mw.loadData('Module:7.json')

local rainbow = {}        -- 色值表
local cname = {}          -- 颜色名
local en_cname = {}       -- 英文颜色名

-- 读取 7.json 数据
for _, entry in ipairs(json7) do
    local order = tonumber(entry.su6H[1]) -- 获取序数
    local index = 7 - order               -- 转换索引
    rainbow[index] = entry.sue:lower()
    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 english_gua = {}    -- 英文卦名
local speech = {}         -- 现代言语
local old_speech = {}     -- 古文言语
local notes = {}          -- 注释

-- 读取 49.json 数据
for _, entry in ipairs(json49) do
    local seq = 49 - entry.az8sA5    -- 计算整序
    seq_map[seq] = entry.t1ru2sA5    -- 存储自然序
    
    gua[seq] = entry.mi8H
    old_gua[seq] = entry.gAmi8H
    english_gua[seq] = entry.English
    speech[seq] = entry.HuVL
    old_speech[seq] = entry.gAHuVL
    notes[seq] = entry.Eka
end

--[[
整序转自然序
将指定的整序转换为自然序。
输入:
  num: 整序数字,范围应在 1 到 49 之间
输出:
  返回对应的自然序数字,如果输入无效则返回 0
]]
function p.seq_to_nat(num)
    if num < 1 or num > 49 then
        return 0
    end
    return seq_map[num]
end

--[[
自然序转整序
将指定的自然序转换为整序。
输入:
  val: 自然序数字,范围应在 1 到 49 之间
输出:
  返回对应的整序数字,如果输入无效则返回 0
]]
function p.nat_to_seq(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

--[[
获取卦名(原码模式)
输入:1-49的整数
输出:对应的49日卦名
]]
function p.sun492(inp)
    return gua[inp]
end

---- 模板定义 ----

--[[
模板调用:整序转自然序
用法:{{#invoke:SunShow|seqToNatT|输入值}}
]]
function p.seqToNatT(frame)
    local args = getArgs(frame)
    local num = tonumber(args[1]) or 0 -- 默认值为0
    return p.seq_to_nat(num)
end

--[[
模板调用:自然序转整序
用法:{{#invoke:SunShow|natToSeqT|输入值}}
]]
function p.natToSeqT(frame)
    local args = getArgs(frame)
    local val = tonumber(args[1]) or 0 -- 默认值为01
    return p.nat_to_seq(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|sun49T|输入值}}
]]
function p.sun49T(frame)
    local args = getArgs(frame)
    local inp = tonumber(args[1]) or 0 -- 默认值为0
    return p.sun49(inp)
end

--[[
模板调用:获取卦名(原码模式)
用法:{{#invoke:SunShow|sun492T|输入值}}
]]
function p.sun492T(frame)
    local args = getArgs(frame)
    local inp = tonumber(args[1]) or 1 -- 默认值为1
    return p.sun492(inp)
end

return p