-- 本模版由deepseek生成,经由{{Template:少女歌剧/角色表述2}}、{{Template:少女歌剧/角色颜色}}和{{Template:少女歌剧/Icon}}调用。
-- 一般情况下,添加数据时仅需要改动“角色数据表”内数据,避免修改函数。
local p = {}
-- 常量定义
local DEFAULT_ICON_SIZE = 28
-- 角色数据表
local characters = {
-- 圣翔音乐学园99期A班
['爱城华恋'] = {names = {'华恋', '恋', 'karen'}, jp_name = '愛城華恋', link = '爱城华恋', cv = '小山百代', jp_cv = '小山百代', cv_link = '小山百代', icn = {drd = 'Icn Karen Aijo El Dorado.png', ['1'] = 'Icn2-Karen Aijo.png', sch = 'Character icn-seisho.png'}, color = '#FB5458'},
['神乐光'] = {names = {'光', 'hikari'}, jp_name = '神楽ひかり', link = '神乐光', cv = '三森铃子', jp_cv = '三森すずこ', cv_link = '三森铃子', icn = {drd = 'Icn Hikari Kagura El Dorado.png', ['1'] = 'Icn2-Hikari Kagura.png', sch = 'Character icn-seisho.png'}, color = '#6292E9'},
['天堂真矢'] = {names = {'真矢', '矢', '鹅', 'maya'}, jp_name = '天堂真矢', link = '天堂真矢', cv = '富田麻帆', jp_cv = '富田麻帆', cv_link = '富田麻帆', icn = {drd = 'Icn Maya Tendo El Dorado.png', ['1'] = 'Icn2-Maya Tendo.png', sch = 'Character icn-seisho.png'}, color = '#CBC6CC'},
['星见纯那'] = {names = {'纯那', '纯', 'junna'}, jp_name = '星見純那', link = '星见纯那', cv = '佐藤日向', jp_cv = '佐藤日向', cv_link = '佐藤日向', icn = {drd = 'Icn Junna Hoshimi El Dorado.png', ['1'] = 'Icn2-Junna Hoshimi.png', sch = 'Character icn-seisho.png'}, color = '#95CAEE'},
['露崎真昼'] = {names = {'真昼', '昼', 'mahiru'}, jp_name = '露崎まひる', link = '露崎真昼', cv = '岩田阳葵', jp_cv = '岩田陽葵', cv_link = '岩田阳葵', icn = {drd = 'Icn Mahiru Tsuyuzaki El Dorado.png', ['1'] = 'Icn2-Mahiru Tsuyuzaki.png', sch = 'Character icn-seisho.png'}, color = '#61BF99'},
['大场奈奈'] = {names = {'奈奈', '奈', '蕉', 'nana'}, jp_name = '大場なな', link = '大场奈奈', cv = '小泉萌香', jp_cv = '小泉萌香', cv_link = '小泉萌香', icn = {drd = 'Icn Nana Daiba El Dorado.png', ['1'] = 'Icn2-Nana Daiba.png', sch = 'Character icn-seisho.png'}, color = '#FDD162'},
['西条克洛迪娜'] = {names = {'克洛', '克洛迪娜', 'claudine'}, jp_name = '西條クロディーヌ', link = '西条克洛迪娜', cv = '相羽爱奈', jp_cv = '相羽あいな', cv_link = '相羽爱奈', icn = {drd = 'Icn Claudine Saijo El Dorado.png', ['1'] = 'Icn2-Claudine Saijo.png', sch = 'Character icn-seisho.png'}, color = '#FE9952'},
['石动双叶'] = {names = {'双叶', '叶', 'futaba'}, jp_name = '石動双葉', link = '石动双叶', cv = '生田辉', jp_cv = '生田輝', cv_link = '生田辉', icn = {drd = 'Icn Futaba Isurugi El Dorado.png', ['1'] = 'Icn2-Futaba Isurugi.png', sch = 'Character icn-seisho.png'}, color = '#8C67AA'},
['花柳香子'] = {names = {'香子', '花', 'kaoruko'}, jp_name = '花柳香子', link = '花柳香子', cv = '伊藤彩沙', jp_cv = '伊藤彩沙', cv_link = '伊藤彩沙', icn = {drd = 'Icn Kaoruko Hanayagi El Dorado.png', ['1'] = 'Icn2-Kaoruko Hanayagi.png', sch = 'Character icn-seisho.png'}, color = '#E08696'},
-- 圣翔音乐学园(其他)
['真井雾子'] = {names = {'雾子', 'kiriko'}, jp_name = '真井霧子', link = '少女歌剧 Revue Starlight/登场配角#真井雾子', cv = '篠宫明日香', jp_cv = '篠宮あすか', cv_link = '篠宫明日香', icn = {sch = 'Character icn-seisho.png'}, color = '#569ece'},
['雨宫诗音'] = {names = {'诗音', 'shion'}, jp_name = '雨宮詩音', link = '少女歌剧 Revue Starlight/登场配角#雨宫诗音', cv = '广濑沙耶', jp_cv = '広瀬さや', cv_link = '广濑沙耶', icn = {sch = 'Character icn-seisho.png'}, color = '#569ece'},
['走驼纱羽'] = {names = {'纱羽', '走驼', 'sawa'}, jp_name = '走駝紗羽', link = '少女歌剧 Revue Starlight/登场配角#走驼纱羽', cv = '椎名碧流', jp_cv = '椎名へきる', cv_link = '椎名碧流', icn = {sch = 'Character icn-seisho.png'}, color = '#F8555C'},
['柳樱'] = {names = {'樱', 'sakura'}, jp_name = '柳さくら', link = '少女歌剧 Revue Starlight/登场配角#柳樱', cv = '高桥果铃', jp_cv = '髙橋果鈴', icn = {sch = 'Character_icn-seisho.png'}, color = '#D65BA1'},
['白跳蕾拉'] = {names = {'蕾拉', 'layla'}, jp_name = '白跳レイラ', link = '少女歌剧 Revue Starlight/登场配角#白跳蕾拉', cv = '日向未来', jp_cv = '日向未来', cv_link = '日向未来', icn = {sch = 'Character_icn-seisho.png'}, color = '#71CA4E'},
['进藤波江'] = {names = {'波江', 'namie'}, jp_name = '進藤波江', link = '少女歌剧 Revue Starlight/登场配角#进藤波江', cv = '末永美优', jp_cv = '末永みゆ',icn = {sch = 'Character_icn-seisho.png'}, color = '#ED9137'},
-- 凛明馆女子学校
['巴珠绪'] = {names = {'珠绪', 'tamao'}, jp_name = '巴珠緒', link = '巴珠绪', cv = '楠木灯', jp_cv = '楠木ともり', cv_link = '楠木灯', icn = {['1'] = 'Icn2-Tamao Tomoe.png', sch = 'Character_icn-rinmeikan.png'}, color = '#B497C5'},
['音无一惠'] = {names = {'一惠', '一爱', 'ichie'}, jp_name = '音無いちえ', link = '音无一惠', cv = '和气杏未', jp_cv = '和氣あず未', cv_link = '和气杏未', icn = {['1'] = 'Icn2-Ichie Otonashi.png', sch = 'Character_icn-rinmeikan.png'}, color = '#F6B5E6'},
['梦大路文'] = {names = {'文', 'fumi'}, jp_name = '夢大路文', link = '梦大路文', cv = '仓知玲凤', jp_cv = '倉知玲鳳', cv_link = '仓知玲凤', icn = {['1'] = 'Icn2-Fumi Yumeoji.png', sch = 'Character_icn-rinmeikan.png'}, color = '#B4DC84'},
['秋风垒'] = {names = {'垒', 'rui'}, jp_name = '秋風塁', link = '秋风垒', cv = '纺木吏佐', jp_cv = '紡木吏佐', cv_link = '纺木吏佐', icn = {['1'] = 'Icn2-Rui Akikaze.png', sch = 'Character_icn-rinmeikan.png'}, color = '#80C694'},
['田中由由子'] = {names = {'由由子', '悠悠子', 'yuyuko'}, jp_name = '田中ゆゆ子', link = '田中由由子', cv = '佐伯伊织', jp_cv = '佐伯伊織', cv_link = '佐伯伊织', icn = {['1'] = 'Icn2-Yuyuko Tanaka.png', sch = 'Character_icn-rinmeikan.png'}, color = '#E07284'},
-- 弗隆提亚艺术学校
['大月阿露露'] = {names = {'aruru', '阿露露', '艾露露'}, jp_name = '大月あるる', link = '大月阿露露', cv = '潘惠美', jp_cv = '潘めぐみ', cv_link = '潘惠美', icn = {['1'] = 'Icn2-Aruru Otsuki.png', sch = 'Character_icn-frontier.png'}, color = '#F6D860'},
['叶美空'] = {names = {'misora', '美空'}, jp_name = '叶美空', link = '叶美空', cv = '竹达彩奈', jp_cv = '竹達彩奈', cv_link = '竹达彩奈', icn = {['1'] = 'Icn2-Misora Kano.png', sch = 'Character_icn-frontier.png'}, color = '#7FCDEB'},
['野野宫拉拉芬'] = {names = {'lalafin', '拉拉芬', '菈乐菲'}, jp_name = '野々宮ララフィン', link = '野野宫拉拉芬', cv = '富田美忧', jp_cv = '富田美憂', cv_link = '富田美忧', icn = {['1'] = 'Icn2-Lalafin Nonomiya.png', sch = 'Character_icn-frontier.png'}, color = '#E777AB'},
['惠比寿司'] = {names = {'tsukasa', '司'}, jp_name = '恵比寿つかさ', link = '惠比寿司', cv = '加藤英美里', jp_cv = '加藤英美里', cv_link = '加藤英美里', icn = {['1'] = 'Icn2-Tsukasa Ebisu.png', sch = 'Character_icn-frontier.png'}, color = '#E89D51'},
['胡蝶静羽'] = {names = {'shizuha', '静羽'}, jp_name = '胡蝶静羽', link = '胡蝶静羽', cv = '佐佐木未来', jp_cv = '佐々木未来', cv_link = '佐佐木未来(声优)', icn = {['1'] = 'Icn2-Shizuha Kocho.png', sch = 'Character_icn-frontier.png'}, color = '#7BC6AD'},
-- 西克菲尔特音乐学院高贵皇君
['雪代晶'] = {names = {'akira', '晶'}, jp_name = '雪代晶', link = '雪代晶', cv = '野本萤', jp_cv = '野本ほたる', cv_link = '野本萤', icn = {['1'] = 'Icn2-Akira Yukishiro.png', sch = 'Character_icn-seekfelt.png'}, color = '#D3D7EC'},
['凤满'] = {names = {'michiru', '满', '未知留'}, jp_name = '鳳ミチル', link = '凤满', cv = '尾崎由香', jp_cv = '尾崎由香', cv_link = '尾崎由香', icn = {['1'] = 'Icn2-Michiru Otori.png', sch = 'Character_icn-seekfelt.png'}, color = '#F6B749'},
['刘美帆'] = {names = {'meifan', '美帆', '柳美帆'}, jp_name = 'リュウ・メイファン', link = '刘美帆', cv = '竹内梦', jp_cv = '竹内夢', cv_link = '竹内梦', icn = {['1'] = 'Icn2-Meifan Liu.png', sch = 'Character_icn-seekfelt.png'}, color = '#C48DBC'},
['梦大路栞'] = {names = {'shiori', '栞'}, jp_name = '夢大路栞', link = '梦大路栞', cv = '远野光', jp_cv = '遠野ひかる', cv_link = '远野光', icn = {['1'] = 'Icn2-Shiori Yumeoji.png', sch = 'Character_icn-seekfelt.png'}, color = '#75C7CB'},
['鹤姬八千代'] = {names = {'yachiyo', '八千代'}, jp_name = '鶴姫やちよ', link = '鹤姬八千代', cv = '工藤晴香', jp_cv = '工藤晴香', cv_link = '工藤晴香', icn = {['1'] = 'Icn2-Yachiyo Tsuruhime.png', sch = 'Character_icn-seekfelt.png'}, color = '#D95F97'},
-- 西克菲尔特音乐学院中等部
['高千穗史黛拉'] = {names = {'stella', '史黛拉'}, jp_name = '高千穂ステラ', link = '高千穗史黛拉', cv = '青木阳菜', jp_cv = '青木陽菜', cv_link = '青木阳菜', icn = {['1'] = 'Icn2-Stella Takachiho.png', sch = 'Character_icn-seekfelt.png'}, color = '#55C8D5'},
['大贺美诗吕'] = {names = {'shiro', '诗吕'}, jp_name = '大賀美詩呂', link = '大贺美诗吕', cv = '松泽可苑', jp_cv = '松澤可苑', cv_link = '松泽可苑', icn = {['1'] = 'Icn2-Shiro Ogami.png', sch = 'Character_icn-seekfelt.png'}, color = '#B5CACE'},
['小鸠良子'] = {names = {'ryoko', '良子'}, jp_name = '小鳩良子', link = '小鸠良子', cv = '深川瑠华', jp_cv = '深川瑠華', cv_link = '深川瑠华', icn = {['1'] = 'Icn2-Ryoko Kobato.png', sch = 'Character_icn-seekfelt.png'}, color = '#E5CD68'},
['海边明久'] = {names = {'minku', '明久'}, jp_name = '海辺みんく', link = '海边明久', cv = '久家心', jp_cv = '久家心', cv_link = '久家心', icn = {['1'] = 'Icn2-Minku Umibe.png', sch = 'Character_icn-seekfelt.png'}, color = '#EC3B76'},
['森保玖伊奈'] = {names = {'kuina', '玖伊奈'}, jp_name = '森保クイナ', link = '森保玖伊奈', cv = '佐当友莉亚', jp_cv = '佐當友莉亜', cv_link = '佐当友莉亚', icn = {['1'] = 'Icn2-Kuina Moriyasu.png', sch = 'Character_icn-seekfelt.png'}, color = '#3AA93D'},
-- 青岚综合艺术院
['柳小春'] = {names = {'koharu', '小春'}, jp_name = '柳小春', link = '柳小春', cv = '七木奏音', jp_cv = '七木奏音', cv_link = '七木奏音', icn = {['1'] = 'Icn2-Koharu Yanagi.png', sch = 'Character_icn-seiran.png'}, color = '#D4314E'},
['南风凉'] = {names = {'suzu', '凉'}, jp_name = '南風涼', link = '南风凉', cv = '佃井皆美', jp_cv = '佃井皆美', cv_link = '佃井皆美', icn = {['1'] = 'Icn2-Suzu Minase.png', sch = 'Character_icn-seiran.png'}, color = '#229773'},
['穗波冰雨'] = {names = {'hisame', '冰雨'}, jp_name = '穂波氷雨', link = '穗波冰雨', cv = '门山叶子', jp_cv = '門山葉子', cv_link = '门山叶子', icn = {['1'] = 'Icn2-Hisame Honami.png', sch = 'Character_icn-seiran.png'}, color = '#ECDF5C'},
-- 青岚综合艺术院(舞台)
['八云响子'] = {names = {'kyoko', '响子', '八云'}, jp_name = '八雲響子', link = '少女歌剧 Revue Starlight/登场配角#八云响子', cv = '小林由佳', jp_cv = '小林由佳', icn = {sch = 'Character_icn-seiran.png'}, color = '#2260AD'},
['霜月瑠璃'] = {names = {'ruri', '瑠璃'}, jp_name = '霜月瑠璃', link = '少女歌剧 Revue Starlight/登场配角#霜月瑠璃', cv = '柴田瑠歌', jp_cv = '柴田瑠歌', icn = {sch = 'Character_icn-seiran.png'}, color = 'pink'},
['明光七八'] = {names = {'nanaha', '七八'}, jp_name = '明光七八', link = '少女歌剧 Revue Starlight/登场配角#明光七八', cv = '池尻香波', jp_cv = '池尻香波', icn = {sch = 'Character_icn-seiran.png'}, color = 'purple'},
['波冈音'] = {names = {'oto', '音'}, jp_name = '波岡音', link = '少女歌剧 Revue Starlight/登场配角#波冈音', cv = '久保田有纱', jp_cv = '久保田有紗', icn = {sch = 'Character_icn-seiran.png'}, color = 'gold'},
['设乐计'] = {names = {'kei', '计'}, jp_name = '設楽計', link = '少女歌剧 Revue Starlight/登场配角#设乐计', cv = '上杉柚叶', jp_cv = '上杉柚葉', icn = {sch = 'Character_icn-seiran.png'}, color = 'skyblue'},
['衣屋和'] = {names = {'nagomi', '和'}, jp_name = '衣屋和', link = '少女歌剧 Revue Starlight/登场配角#衣屋和', cv = '池田晴香', jp_cv = '池田晴香', icn = {sch = 'Character_icn-seiran.png'}, color = 'green'},
-- 罗马纳戏剧学校
['荒神尊'] = {names = {'mikoto', '尊'}, jp_name = '荒神尊', link = '少女歌剧 Revue Starlight/登场配角#荒神尊', cv = '华成结', jp_cv = '華成結', icn = {sch = 'Icn0 romana.png'}, color = '#8C0001'},
['直江春歌'] = {names = {'haruka', '春歌'}, jp_name = '直江春歌', link = '少女歌剧 Revue Starlight/登场配角#直江春歌', cv = '中崎花音', jp_cv = '中﨑花音', icn = {sch = 'Icn0 romana.png'}, color = '#4583B4'},
['曾我吾妻'] = {names = {'azuma', '吾妻'}, jp_name = '曽我吾妻', link = '少女歌剧 Revue Starlight/登场配角#曾我吾妻', cv = '安藤千伽奈', jp_cv = '安藤千伽奈', icn = {sch = 'Icn0 romana.png'}, color = '#696969'},
['皇抚子'] = {names = {'nadeshiko', '抚子'}, jp_name = '皇撫子', link = '少女歌剧 Revue Starlight/登场配角#皇抚子', cv = '滨川明那', jp_cv = '濵川明那', icn = {sch = 'Icn0 romana.png'}, color = '#8A008B'},
['哀川朱丽娜'] = {names = {'jurina', '朱丽娜'}, jp_name = '哀川ジュリナ', link = '少女歌剧 Revue Starlight/登场配角#哀川朱丽娜', cv = '园田玲', jp_cv = '園田れい', icn = {sch = 'Icn0 romana.png'}, color = '#D3691F'},
-- 其他
['长颈鹿'] = {names = {'kirin'}, jp_name = 'キリン', link = '长颈鹿(少女歌剧)', cv = '津田健次郎', jp_cv = '津田健次郎', cv_link = '津田健次郎', color = '#424242'},
['艾露'] = {names = {'elle', '西野艾露'}, jp_name = 'える', link = '西野艾露', cv = '佐仓薰', jp_cv = '佐倉薫', cv_link = '佐仓薰', color = '#92E5E8'},
['安德露'] = {names = {'andrew'}, jp_name = 'アンドリュー', link = '少女歌剧 Revue Starlight/登场配角#安德露', cv = '佐仓薰', jp_cv = '佐倉薫', cv_link = '佐仓薰', color = 'gold'},
['朱迪·奈特莉'] = {names = {'judy', '朱迪'}, jp_name = 'ジュディ・ナイトレー', link = '少女歌剧 Revue Starlight/登场配角#朱迪·奈特莉', cv = '飞龙司', jp_cv = '飛龍つかさ', icn = {['1'] = 'Icn Judy Knightley El Dorado.png'}, color = '#919268'},
['松荣美湖'] = {names = {'miko', '美湖'}, jp_name = '松栄美湖', link = '少女歌剧 Revue Starlight/登场配角#松荣美湖', cv = '田中志奈', jp_cv = '田中志奈', color = 'skyblue'},
['羽成八津树'] = {names = {'yatsuki', '八津树'}, jp_name = '羽成八津樹', link = '少女歌剧 Revue Starlight/登场配角#羽成八津树', cv = '永利优妃', jp_cv = '永利優妃', color = '#A84BEC'},
['犀川黑海'] = {names = {'kuroumi', '黑海', '犀川'}, jp_name = '犀川黒海', link = '少女歌剧 Revue Starlight/登场配角#犀川黑海', cv = '篠原亚丽莎', jp_cv = '篠原ありさ', icn = {sch = 'Character_icn-seekfelt.png'}, color = '#6176B9'}
}
-- 组合和学校数据
local groups = {
['Starlight九九组'] = {names = {'九九组', '99gumi', '99组', '99'}, icn = {['1'] = 'Character icn-seisho.png'}, color = '#F8555C', link = 'Starlight九九组', jp_name = 'スタァライト九九組'},
['西克菲尔特音乐学院高贵皇君'] = {names = {'高贵皇君', 'edel'}, icn = {['1'] = 'Character icn-seekfelt.png'}, color = '#6176B9', link = '西克菲尔特音乐学院#西克菲尔特音乐学院(组合)', jp_name = 'シークフェルト音楽学院エーデル'},
['西克菲尔特音乐学院中等部'] = {names = {'中等部', 'chuutobu', 'juniorhigh', 'sfjh'}, icn = {['1'] = 'Character icn-seekfelt.png'}, color = '#6176B9', link = '西克菲尔特音乐学院#西克菲尔特音乐学院中等部', jp_name = 'シークフェルト音楽学院中等部'},
['圣翔音乐学园'] = {names = {'圣翔', 'seisho', 'ss'}, icn = {['1'] = 'Character icn-seisho.png'}, color = '#F8555C', link = '圣翔音乐学园', jp_name = '聖翔音楽学園'},
['凛明馆女子学校'] = {names = {'凛明馆', 'rinmeikan', 'rmk', 'lmg'}, icn = {['1'] = 'Character icn-rinmeikan.png'}, color = '#9368AA', link = '凛明馆女子学校', jp_name = '凛明館女学校'},
['弗隆提亚艺术学校'] = {names = {'弗隆提亚', '芙罗提亚', 'frontier', 'ft'}, icn = {['1'] = 'Character icn-frontier.png'}, color = '#F4CB6B', link = '弗隆提亚艺术学校', jp_name = 'フロンティア芸術学校'},
['西克菲尔特音乐学院'] = {names = {'西克菲尔特', '席格菲特', '席格尔菲特', 'seekfelt', 'siegfeld', 'sf'}, icn = {['1'] = 'Character icn-seekfelt.png'}, color = '#6176B9', link = '西克菲尔特音乐学院', jp_name = 'シークフェルト音楽学院'},
['青岚综合艺术院'] = {names = {'青岚', 'seiran', 'sr'}, icn = {['1'] = 'Character icn-seiran.png'}, color = '#2260AD', link = '青岚综合艺术院', jp_name = '青嵐総合芸術院'},
['罗马纳戏剧学校'] = {names = {'罗马纳', 'romana', 'rmn'}, icn = {['1'] = 'Icn0 romana.png'}, color = '#E37D7E', link = '少女歌剧 Revue Starlight/登场配角#罗马纳戏剧学校', jp_name = 'ロマーナ演劇学校'},
}
-- 工具函数
local function generateIcn(icnTable, icn_param, size)
if icnTable and icn_param and icnTable[icn_param] then
return string.format('[[File:%s|%dpx|link=]]', icnTable[icn_param], size)
end
return ''
end
local function generateColoredLink(color, link, text)
if link then
return string.format('[[%s|<span style="color:%s">%s</span>]]', link, color, text)
else
return string.format('<span style="color:%s">%s</span>', color, text)
end
end
local function generateColoredText(color, text)
return string.format('<span style="color:%s">%s</span>', color, text)
end
local function parseIcnSize(icn_sz)
if not icn_sz or icn_sz == '' then
return DEFAULT_ICON_SIZE
end
local size = tonumber(icn_sz:match('^(%d+)px?$') or icn_sz)
return size or DEFAULT_ICON_SIZE
end
local function isTrue(param_value)
return param_value == '1'
end
local function findData(input, data_table)
for key, data in pairs(data_table) do
if key == input then return data, key end
for _, name in ipairs(data.names) do
if name == input then return data, key end
end
end
return nil, nil
end
-- 函数:单独处理图标调用
local function processIconOnly(data, icn_param, icn_sz)
local icn_size = parseIcnSize(icn_sz)
return generateIcn(data.icn, icn_param, icn_size)
end
-- 主处理逻辑
local function processCharacter(data, icn_param, icn_sz, name, jp_name, cv, jp_cv, jp_mode, original_key, color_only, icn_only)
if icn_only then
return processIconOnly(data, icn_param, icn_sz)
end
if color_only then
return data.color or ''
end
local icn_size = parseIcnSize(icn_sz)
local icn_html = generateIcn(data.icn, icn_param, icn_size)
local display_name = jp_mode and data.jp_name or original_key
local display_cv = jp_mode and data.jp_cv or data.cv
if name then
local display_text = jp_mode and data.jp_name or original_key
return icn_html .. generateColoredLink(data.color, data.link, display_text)
elseif jp_name then
return icn_html .. generateColoredLink(data.color, data.link, data.jp_name)
elseif cv then
if data.cv_link then
return icn_html .. generateColoredLink(data.color, data.cv_link, display_cv)
else
return icn_html .. generateColoredText(data.color, display_cv)
end
elseif jp_cv then
if data.cv_link then
return icn_html .. generateColoredLink(data.color, data.cv_link, data.jp_cv)
else
return icn_html .. generateColoredText(data.color, data.jp_cv)
end
else
local link_html = generateColoredLink(data.color, data.link, display_name)
local cv_text = display_cv and (data.cv_link and generateColoredLink(data.color, data.cv_link, display_cv) or generateColoredText(data.color, display_cv)) or ''
return icn_html .. link_html .. (cv_text ~= '' and '(' .. cv_text .. ')' or '')
end
end
local function processGroup(data, icn_param, icn_sz, name, jp_name, cv, jp_cv, jp_mode, original_key, color_only, icn_only)
if icn_only then
return processIconOnly(data, icn_param, icn_sz)
end
if color_only then
return data.color or ''
end
local icn_size = parseIcnSize(icn_sz)
local icn_html = generateIcn(data.icn, icn_param, icn_size)
local display_name = jp_mode and data.jp_name or original_key
if name then
local display_text = jp_mode and data.jp_name or original_key
return icn_html .. generateColoredLink(data.color, data.link, display_text)
elseif jp_name then
return icn_html .. generateColoredLink(data.color, data.link, data.jp_name)
elseif cv or jp_cv then
return icn_html
else
return icn_html .. generateColoredLink(data.color, data.link, display_name)
end
end
-- 主函数
function p.main(frame)
local args = frame.args
local input = args[1] or ''
if input == '' then
return '<span style="color:red">请输入角色或组合名称</span>'
end
-- 参数处理
local icn_param = args.icn or '1'
local ja = args.ja
local icn_sz = args.icn_sz
local name = isTrue(args.name)
local jp_name = isTrue(args.jpname)
local cv = isTrue(args.cv)
local jp_cv = isTrue(args.jpcv)
local jp_mode = isTrue(ja)
local color_only = isTrue(args.color) or isTrue(args.coloronly)
local icn_only = isTrue(args.icn_only)
-- 数据查找
local character_data, original_key = findData(input, characters)
local group_data, group_key = findData(input, groups)
if character_data then
return processCharacter(character_data, icn_param, icn_sz, name, jp_name, cv, jp_cv, jp_mode, original_key, color_only, icn_only)
elseif group_data then
return processGroup(group_data, icn_param, icn_sz, name, jp_name, cv, jp_cv, jp_mode, group_key, color_only, icn_only)
end
return string.format('<span style="color:red">未找到: %s</span>', input)
end
-- 函数:专门用于单独调用图标
function p.icon(frame)
local args = frame.args
local input = args[1] or ''
if input == '' then
return '<span style="color:red">请输入角色或组合名称</span>'
end
-- 参数处理
local icn_param = args.icn or '1'
local icn_sz = args.icn_sz or DEFAULT_ICON_SIZE
-- 数据查找
local character_data = findData(input, characters)
local group_data = findData(input, groups)
if character_data then
return processIconOnly(character_data, icn_param, icn_sz)
elseif group_data then
return processIconOnly(group_data, icn_param, icn_sz)
end
return string.format('<span style="color:red">未找到: %s</span>', input)
end
return p