用户:RedDragon/Test:修订间差异
来自Rizline中文维基
更多操作
小 |
|||
| (未显示5个用户的42个中间版本) | |||
| 第9行: | 第9行: | ||
style="padding: 0.5rem 1rem; background: #3366CC; color: #ffffff; font-size: 16px; border: none; border-radius: 0 5px 5px 0">搜索</button> | style="padding: 0.5rem 1rem; background: #3366CC; color: #ffffff; font-size: 16px; border: none; border-radius: 0 5px 5px 0">搜索</button> | ||
</div> | </div> | ||
<div style="display: flex; justify-content: center; align-items: center; margin-top: 1rem;"> | <div style="display: flex; justify-content: center; align-items: center; margin-top: 1rem;"> | ||
<label for="score-filter" style="margin-right: 0.5rem;">筛选匹配度 ≥</label> | <label for="algorithm-select" style="margin-right: 0.5rem;">算法:</label> | ||
<select id="algorithm-select" style="padding: 0.3rem; margin-right: 1rem;"> | |||
<option value="custom">神秘算法</option> | |||
<option value="fuse">Fuse.js</option> | |||
</select> | |||
<div id="custom-filter-container"> | |||
<label for="score-filter" style="margin-right: 0.5rem;">筛选匹配度 ≥</label> | |||
<input type="number" id="score-filter" value="4" min="1" max="100" | |||
style="width: 4rem; padding: 0.3rem;"> | |||
</div> | |||
<div id="fuse-filter-container" style="display: none;"> | |||
<label for="fuse-threshold" style="margin-right: 0.5rem;">匹配阈值 ≤</label> | |||
<input type="number" id="fuse-threshold" value="0.4" min="0" max="1" step="0.1" | |||
style="width: 4rem; padding: 0.3rem;"> | |||
</div> | |||
</div> | </div> | ||
<div style="margin-top: 100px"> | <div style="margin-top: 100px"> | ||
<h3>搜索结果:</h3> | <h3>搜索结果:</h3> | ||
| 第24行: | 第39行: | ||
</div> | </div> | ||
<script src="https://cdn.jsdelivr.net/npm/fuse.js@6.6.2/dist/fuse.min.js"></script> | |||
<script> | <script> | ||
let fuseInstance = null | |||
document.addEventListener('DOMContentLoaded', function () { | document.addEventListener('DOMContentLoaded', function () { | ||
initAllAliases() | initAllAliases() | ||
initFuse() | |||
document.getElementById('alias-btn').addEventListener('click', searchSongs) | document.getElementById('alias-btn').addEventListener('click', searchSongs) | ||
document.getElementById('alias-input').addEventListener('keypress', function (e) { | document.getElementById('alias-input').addEventListener('keypress', function (e) { | ||
if (e.key == 'Enter') searchSongs() | if (e.key == 'Enter') searchSongs() | ||
}) | |||
document.getElementById('algorithm-select').addEventListener('change', function () { | |||
const algorithm = this.value | |||
const customContainer = document.getElementById('custom-filter-container') | |||
const fuseContainer = document.getElementById('fuse-filter-container') | |||
if (algorithm == 'fuse') { | |||
customContainer.style.display = 'none' | |||
fuseContainer.style.display = 'block' | |||
} else { | |||
customContainer.style.display = 'block' | |||
fuseContainer.style.display = 'none' | |||
} | |||
searchSongs() | |||
}) | }) | ||
}) | }) | ||
| 第40行: | 第76行: | ||
songlist.forEach(function (song) { | songlist.forEach(function (song) { | ||
const li = document.createElement('li') | const li = document.createElement('li') | ||
li.innerHTML = `<span class="song-title">${song.title}</span>: <span class="aliases">${ | const aliases = song.aliases || [] | ||
let aliasText = aliases.length > 0 ? aliases.join('、') : '<span style="color:#888">无别名</span>' | |||
li.innerHTML = `<span class="song-title">${song.title || ''}</span>: <span class="aliases">${aliasText}</span>` | |||
container.appendChild(li) | container.appendChild(li) | ||
}) | }) | ||
} | } | ||
// | function initFuse() { | ||
const fuseOptions = { | |||
includeScore: true, | |||
includeMatches: true, | |||
threshold: 0.4, | |||
minMatchCharLength: 1, | |||
keys: ['title', 'aliases'] | |||
} | |||
const searchData = songlist.map(function (song) { | |||
return { | |||
id: song.title, | |||
title: song.title, | |||
aliases: song.aliases ? song.aliases.join(' ') : '' | |||
} | |||
}) | |||
fuseInstance = new Fuse(searchData, fuseOptions) | |||
} | |||
// Fuse.js搜索函数 | |||
function searchWithFuse(searchText, threshold) { | |||
if (!fuseInstance) initFuse() | |||
const results = fuseInstance.search(searchText, { | |||
limit: 50, | |||
threshold: threshold | |||
}) | |||
return results.map(function (result) { | |||
const song = songlist.find(function (s) { | |||
return s.title == result.item.id | |||
}) | |||
return { | |||
song: song, | |||
score: Math.round((1 - (result.score || 0)) * 100), | |||
matched: result.matches ? result.matches[0].value : '', | |||
matchedAlias: '', | |||
fuseScore: result.score | |||
} | |||
}) | |||
} | |||
/*计算权重 | |||
输入字符只在目标字符串中匹配一次 | |||
允许间隔,顺序匹配 | |||
每匹配一个字符加1分 | |||
连续匹配加0.5分 | |||
大小写精确匹配加0.3分 | |||
开头匹配加1.5分 | |||
完全包含关系额外加分 | |||
*/ | |||
function getMatchScore(input, target) { | function getMatchScore(input, target) { | ||
if (!input || !target) return 0 | |||
if (!input || !target) return { score: 0, matched: "" } | |||
const originalInput = input | |||
const originalTarget = target | |||
input = input.toLowerCase() | input = input.toLowerCase() | ||
target = target.toLowerCase() | target = target.toLowerCase() | ||
let score = 0 | if (input == target) return { score: 100, matched: originalTarget } | ||
let containBonus = 0 | |||
if (input.includes(target)) { | |||
if (target.length >= 5) { | |||
if (input.length >= 3) { | |||
containBonus = 6 + (target.length * 0.3) | |||
} | |||
} else { | |||
if (input.length >= 2) { | |||
containBonus = 6 + (target.length * 0.3) | |||
} | |||
} | |||
} else if (target.includes(input)) { | |||
if (target.length >= 5) { | |||
if (input.length >= 3) { | |||
containBonus = 5 + (input.length * 0.3) | |||
} | |||
} else { | |||
if (input.length >= 2) { | |||
containBonus = 5 + (input.length * 0.3) | |||
} | |||
} | |||
} | |||
function calculateScore(src, tgt, originalSrc, originalTgt) { | |||
let score = 0, matched = "", lastPos = -1, bonus = 0, pos = 0, caseBonus = 0 | |||
let skipCount = 0 | |||
const maxSkip = 2 | |||
for (let i = 0; i < src.length; i++) { | |||
let found = false | |||
const srcChar = src[i] | |||
const associatedChars = getAssociatedChars(srcChar) | |||
for (let j = pos; j < tgt.length; j++) { | |||
const tgtChar = tgt[j] | |||
if (srcChar === tgtChar || associatedChars.includes(tgtChar)) { | |||
score++ | |||
matched += originalTgt[j] | |||
if (originalSrc[i] == originalTgt[j]) { | |||
caseBonus += 0.3 | |||
} | |||
else if (associatedChars.includes(tgtChar)) { | |||
caseBonus += 0.1 | |||
} | |||
if (lastPos >= 0) { | |||
if (j == lastPos + 1) { | |||
bonus += 0.5 | |||
} | |||
} | |||
lastPos = j | |||
pos = j + 1 | |||
found = true | |||
break | |||
} | |||
} | } | ||
if (!found) { | |||
skipCount++ | |||
if (skipCount > maxSkip) { | |||
break | |||
} | |||
} | |||
} | |||
let startBonus = 0 | |||
if (matched.length > 0) { | |||
if (tgt.indexOf(src[0]) == 0) { | |||
startBonus = 1.5 | |||
} | |||
} | |||
return { | |||
score: score + bonus + caseBonus + startBonus + containBonus, | |||
matched | |||
} | } | ||
} | } | ||
return | |||
const result1 = calculateScore(input, target, originalInput, originalTarget) | |||
const result2 = calculateScore(target, input, originalTarget, originalInput) | |||
if (result1.score >= result2.score) { | |||
return result1 | |||
} else { | |||
return result2 | |||
} | |||
} | } | ||
function searchSongs() { | function searchSongs() { | ||
const searchText = document.getElementById('alias-input').value.trim | const searchText = document.getElementById('alias-input').value.trim() | ||
const resultsContainer = document.getElementById('alias-results') | const resultsContainer = document.getElementById('alias-results') | ||
const | const algorithm = document.getElementById('algorithm-select').value | ||
if (!searchText) { | if (!searchText) { | ||
| 第80行: | 第251行: | ||
} | } | ||
const results = songlist.map(function (song) { | let results = [] | ||
if (algorithm == 'fuse') { | |||
const threshold = parseFloat(document.getElementById('fuse-threshold').value) || 0.4 | |||
results = searchWithFuse(searchText, threshold) | |||
} | // console.log(`Fuse.js搜索: "${searchText}", 阈值: ${threshold}, 结果数: ${results.length}`) | ||
} else { | |||
const resc = Number(document.getElementById('score-filter').value) || 4 | |||
results = songlist.map(function (song) { | |||
let best = getMatchScore(searchText, song.title || '') | |||
let bestAlias = "" | |||
if (song.aliases) { | |||
if (song.aliases.length > 0) { | |||
song.aliases.forEach(function (alias) { | |||
let result = getMatchScore(searchText, alias) | |||
} | if (result.score > best.score) { | ||
best = result | |||
bestAlias = alias | |||
} | |||
}) | |||
} | |||
} | |||
return { | |||
song: song, | |||
score: best.score, | |||
matched: best.matched, | |||
matchedAlias: bestAlias | |||
} | |||
}).filter(function (result) { | |||
// if (result.score >= resc) { | |||
// console.log( | |||
// `${result.song.title}: [${result.matched}]${(result.matchedAlias ? ` (${result.matchedAlias})` : "")} ${result.score} ` | |||
// ) | |||
// } | |||
return result.score >= resc | |||
}).sort(function (a, b) { | |||
return b.score - a.score | |||
}) | |||
} | |||
if (results.length == 0) { | if (results.length == 0) { | ||
| 第110行: | 第305行: | ||
div.style.lineHeight = "1.5" | div.style.lineHeight = "1.5" | ||
var songTitle = result.song.title || '' | var songTitle = result.song.title || '' | ||
var link = | var link = `<a href="/wiki/${encodeURIComponent(songTitle)}" title="${songTitle}">${songTitle}</a>` | ||
div.innerHTML = | div.innerHTML = `<div class="song-title">${link}</div> | ||
<div class="aliases" style="font-size: 13px; margin-left: 1rem">alias: ${result.song.aliases.join('、')}</div>` | |||
resultsContainer.appendChild(div) | resultsContainer.appendChild(div) | ||
}) | }) | ||
| 第119行: | 第313行: | ||
} | } | ||
function getAssociatedChars(char) { | |||
const associations = new Set([char]) | |||
if (charAssociations[char]) { | |||
charAssociations[char].forEach(assocChar => associations.add(assocChar)) | |||
} | |||
for (const [key, values] of Object.entries(charAssociations)) { | |||
if (values.includes(char)) { | |||
associations.add(key) | |||
} | |||
} | |||
return Array.from(associations) | |||
} | |||
// 关联字符库,冒号前的字符可通过中括号里的字符匹配 | |||
const charAssociations = { | |||
'ィ': ['イ', '亻', 'ィ'], | |||
'イ': ['ィ', '亻', 'イ'], | |||
'ェ': ['エ', '工', 'ェ'], | |||
'エ': ['ェ', '工', 'エ'], | |||
'的': ['得', '地', 'の', '之'], | |||
'得': ['的', '地', 'の', '之'], | |||
'の': ['的', '得', '地', '之'], | |||
'之': ['的', '得', 'の', '地'], | |||
'地': ['的', '得', 'の', '之'], | |||
'*': ['x', '×'], | |||
'x': ['*', '×'], | |||
'×': ['x', '*'], | |||
'℟': ['R'], | |||
'Α': ['α', 'A', 'a', 'alpha'], | |||
'α': ['Α', 'a', 'A', 'alpha'], | |||
'alpha': ['Α', 'α', 'A', 'a'], | |||
} | |||
// 别名库 | |||
const songlist = [ | const songlist = [ | ||
{ | { | ||
| 第126行: | 第359行: | ||
{ | { | ||
title: "Gleam feat. ふわまろ", | title: "Gleam feat. ふわまろ", | ||
aliases: [] | aliases: ["微光","gleam"] | ||
}, | }, | ||
{ | { | ||
title: "Power Attack", | title: "Power Attack", | ||
aliases: [] | aliases: ["力攻","pa","小机器人"] | ||
}, | }, | ||
{ | { | ||
title: "Skyscape", | title: "Skyscape", | ||
aliases: [] | aliases: ["天穹景致"] | ||
}, | }, | ||
{ | { | ||
title: "On And On!!", | title: "On And On!!", | ||
aliases: ["oao", "onandon", "上和上", "我们相亲相爱的"] | aliases: ["oao", "onandon", "上和上", "我们相亲相爱的","永不停歇!!","小鸟游六花"] | ||
}, | }, | ||
{ | { | ||
title: "Polygons", | title: "Polygons", | ||
aliases: [] | aliases: ["多边形","polytone"] | ||
}, | }, | ||
{ | { | ||
title: "Abgrund", | title: "Abgrund", | ||
aliases: [] | aliases: ["深渊"] | ||
}, | }, | ||
{ | { | ||
| 第154行: | 第387行: | ||
{ | { | ||
title: "Midnight Flux", | title: "Midnight Flux", | ||
aliases: [] | aliases: ["午夜流"] | ||
}, | }, | ||
{ | { | ||
title: "NO ONE YES MAN", | title: "NO ONE YES MAN", | ||
aliases: ["noym", "没一个是人"] | aliases: ["noym", "没一个是人","梅姨阁诗人","NO ONE YES PIGEONS"] | ||
}, | }, | ||
{ | { | ||
title: "Clock Paradox", | title: "Clock Paradox", | ||
aliases: ["时钟悖论", "时悖"] | aliases: ["时钟悖论","时悖","钟漠","时钟佯谬","钟盒","CP","雪漠的钟"] | ||
}, | }, | ||
{ | { | ||
title: "F℟IEND", | title: "F℟IEND", | ||
aliases: [] | aliases: ["恶魔朋友","friend","朋友"] | ||
}, | }, | ||
{ | { | ||
title: "Shattered", | title: "Shattered", | ||
aliases: [] | aliases: ["支离破碎"] | ||
}, | }, | ||
{ | { | ||
title: "Swing Sweet Twee Dance feat. ななきなな", | title: "Swing Sweet Twee Dance feat. ななきなな", | ||
aliases: [] | aliases: ["sstd","摇摆甜蜜稚趣舞 feat. 七木七奈","Swing Sweet Twee Dance"] | ||
}, | }, | ||
{ | { | ||
title: "V!rtuaresort", | title: "V!rtuaresort", | ||
aliases: [] | aliases: ["Virtuaresort"] | ||
}, | }, | ||
{ | { | ||
title: "Dice 20", | title: "Dice 20", | ||
aliases: [] | aliases: ["二十面骰","rd20"] | ||
}, | }, | ||
{ | { | ||
title: "macro.wav", | title: "macro.wav", | ||
aliases: ["宏波", "滴滴滴滴"] | aliases: ["宏波", "宏波炉","滴滴滴滴","微波炉2"] | ||
}, | }, | ||
{ | { | ||
title: "The Next Arcady", | title: "The Next Arcady", | ||
aliases: [] | aliases: ["世外桃源","3d","下一个世外桃源"] | ||
}, | }, | ||
{ | { | ||
| 第202行: | 第435行: | ||
{ | { | ||
title: "Authentic (Game ver.)", | title: "Authentic (Game ver.)", | ||
aliases: [] | aliases: ["本真"] | ||
}, | }, | ||
{ | { | ||
title: "MilK", | title: "MilK", | ||
aliases: ["牛奶"] | aliases: ["牛奶","><",">▽<"] | ||
}, | }, | ||
{ | { | ||
title: "ILLEGAL LEGACY", | title: "ILLEGAL LEGACY", | ||
aliases: ["il", "非法遗产"] | aliases: ["il", "非法遗产","恭喜你爬完了梯子!"] | ||
}, | }, | ||
{ | { | ||
title: "竹", | title: "竹", | ||
aliases: [] | aliases: ["小心立秋","bamboo"] | ||
}, | }, | ||
{ | { | ||
title: "R.I.P.", | title: "R.I.P.", | ||
aliases: ["rip"] | aliases: ["rip","逝者安息"] | ||
}, | }, | ||
{ | { | ||
title: "Empire", | title: "Empire", | ||
aliases: [] | aliases: ["王朝"] | ||
}, | }, | ||
{ | { | ||
title: "DropDown", | title: "DropDown", | ||
aliases: [] | aliases: ["坠落","dd"] | ||
}, | }, | ||
{ | { | ||
title: "Contact", | title: "Contact", | ||
aliases: [] | aliases: ["连接","接触"] | ||
}, | }, | ||
{ | { | ||
title: "CANDYLAND", | title: "CANDYLAND", | ||
aliases: [] | aliases: ["糖果岛","初代魔王","糖果乐园"] | ||
}, | }, | ||
{ | { | ||
title: "Arcade ViruZ", | title: "Arcade ViruZ", | ||
aliases: ["街机病毒"] | aliases: ["街机病毒","街机还会中毒?"] | ||
}, | }, | ||
{ | { | ||
title: "LINK x LIN#S", | title: "LINK x LIN#S", | ||
aliases: [] | aliases: ["连接起来吧……","LxL","II","连线","相连的心","ll"] | ||
}, | }, | ||
{ | { | ||
title: "LEONIDS", | title: "LEONIDS", | ||
aliases: ["狮子座", "星座"] | aliases: ["狮子座", "星座","向狮子座许愿吧!"] | ||
}, | }, | ||
{ | { | ||
title: "FORTALiCE", | title: "FORTALiCE", | ||
aliases: [] | aliases: ["堡垒"] | ||
}, | }, | ||
{ | { | ||
title: "Paradial Resonator", | title: "Paradial Resonator", | ||
aliases: [] | aliases: ["pr","天堂谐振器","咏歌和Para","咏帕"] | ||
}, | }, | ||
{ | { | ||
title: "Lavender Leaf (feat. Lexi)", | title: "Lavender Leaf (feat. Lexi)", | ||
aliases: [] | aliases: ["薰衣草","Lavender Leaf"] | ||
}, | }, | ||
{ | { | ||
title: "Puppet Show", | title: "Puppet Show", | ||
aliases: [] | aliases: ["Jazz","木偶戏"] | ||
}, | }, | ||
{ | { | ||
title: "Vicious Mockery", | title: "Vicious Mockery", | ||
aliases: ["vm"] | aliases: ["vm","狂暴之嘲","vici","vc","维C","狂暴猴子","还是不要随意打开为好……","幽蓝列车"] | ||
}, | }, | ||
{ | { | ||
title: "BRAVE: ROAD", | title: "BRAVE: ROAD", | ||
aliases: ["br", "勇气之路", "勇敢之路", "勇路"] | aliases: ["br", "勇气之路", "勇敢之路","勇者之路","勇路","真正的勇者","gr2","魔王曲", "勇者之路","真格✧大勇士","荣耀之路2","里红2","新手教程"] | ||
}, | }, | ||
{ | { | ||
title: "Dot-Line (feat. ななひら)", | title: "Dot-Line (feat. ななひら)", | ||
aliases: ["点线"] | aliases: ["点线","因为我们的羁绊"] | ||
}, | }, | ||
{ | { | ||
title: "光 (阿卡姆巫师 Remix)", | title: "光 (阿卡姆巫师 Remix)", | ||
aliases: [] | aliases: ["阿卡姆光","光","一缕崭新的阳光"] | ||
}, | }, | ||
{ | { | ||
title: "Lost Future", | title: "Lost Future", | ||
aliases: ["失落未来"] | aliases: ["失落未来","找回遗失的未来","夹娃娃机"] | ||
}, | }, | ||
{ | { | ||
| 第290行: | 第523行: | ||
{ | { | ||
title: "Intruder", | title: "Intruder", | ||
aliases: [] | aliases: ["入侵者"] | ||
}, | }, | ||
{ | { | ||
title: "Rule The World", | title: "Rule The World", | ||
aliases: [] | aliases: ["定义世界"] | ||
}, | }, | ||
{ | { | ||
title: "felys -final remix-", | title: "felys -final remix-", | ||
aliases: [] | aliases: ["菲莉丝","飞雷神","felys"] | ||
}, | }, | ||
{ | { | ||
title: "Destr0yer", | title: "Destr0yer", | ||
aliases: ["d0"] | aliases: ["d0","毁灭者","削除射线","sakuzyo beam","削除二连冠","削除本人出演"] | ||
}, | }, | ||
{ | { | ||
title: "crystallized", | title: "crystallized", | ||
aliases: ["结晶"] | aliases: ["结晶","结晶化"] | ||
}, | }, | ||
{ | { | ||
title: "Cosmos Capsule", | title: "Cosmos Capsule", | ||
aliases: [] | aliases: ["交互胶囊"] | ||
}, | }, | ||
{ | { | ||
title: "Yellow Shining!! feat. 成田なる", | title: "Yellow Shining!! feat. 成田なる", | ||
aliases: [] | aliases: ["黄色闪耀!! feat. 成田鸣琉","唱响金色的乐章","Yellow Shining!!","Yellow Shining"] | ||
}, | }, | ||
{ | { | ||
title: "Abatement", | title: "Abatement", | ||
aliases: [] | aliases: ["缓和"] | ||
}, | }, | ||
{ | { | ||
title: "Rapture", | title: "Rapture", | ||
aliases: [] | aliases: ["狂喜"] | ||
}, | }, | ||
{ | { | ||
title: "Turning POINT", | title: "Turning POINT", | ||
aliases: [] | aliases: ["tp","转折点"] | ||
}, | }, | ||
{ | { | ||
title: "Reversed Zenith", | title: "Reversed Zenith", | ||
aliases: [] | aliases: ["逆天顶","rz"] | ||
}, | }, | ||
{ | { | ||
title: "Restricted Access", | title: "Restricted Access", | ||
aliases: [] | aliases: ["ra","限制通道","立入禁止"] | ||
}, | }, | ||
{ | { | ||
title: "The Last Page", | title: "The Last Page", | ||
aliases: [] | aliases: ["最后一页","终页"] | ||
}, | }, | ||
{ | { | ||
title: "Super Universe (Knighthood Remix)", | title: "Super Universe (Knighthood Remix)", | ||
aliases: ["超宇宙", "Super Universe Remix"] | aliases: ["超宇宙","超宇", "Super Universe Remix"] | ||
}, | }, | ||
{ | { | ||
title: "Enneaquest", | title: "Enneaquest", | ||
aliases: [] | aliases: ["九重试炼"] | ||
}, | }, | ||
{ | { | ||
title: "Colorful Flavor", | title: "Colorful Flavor", | ||
aliases: [] | aliases: ["缤纷风味"] | ||
}, | }, | ||
{ | { | ||
| 第358行: | 第591行: | ||
{ | { | ||
title: "Revenant", | title: "Revenant", | ||
aliases: [] | aliases: ["荒野猎人","怪物猎人","怪猎"] | ||
}, | }, | ||
{ | { | ||
title: "Antler", | title: "Antler", | ||
aliases: ["鹿角"] | aliases: ["鹿角","鹿角巷"] | ||
}, | }, | ||
{ | { | ||
title: "Contortion", | title: "Contortion", | ||
aliases: [] | aliases: ["扭曲"] | ||
}, | }, | ||
{ | { | ||
title: "Bring Me Back", | title: "Bring Me Back", | ||
aliases: [] | aliases: ["带我回来","带我归来","bmb"] | ||
}, | }, | ||
{ | { | ||
title: "Hullbreaker", | title: "Hullbreaker", | ||
aliases: [] | aliases: ["破舰者"] | ||
}, | }, | ||
{ | { | ||
title: "D-Birth", | title: "D-Birth", | ||
aliases: [] | aliases: ["D-诞生","被毁灭后的世界"] | ||
}, | }, | ||
{ | { | ||
| 第390行: | 第623行: | ||
{ | { | ||
title: "Encrux", | title: "Encrux", | ||
aliases: [] | aliases: ["翼龙"] | ||
}, | }, | ||
{ | { | ||
title: "slic.hertz", | title: "slic.hertz", | ||
aliases: [] | aliases: ["切片.赫兹","对面转起来了"] | ||
}, | }, | ||
{ | { | ||
title: "Giselle", | title: "Giselle", | ||
aliases: [] | aliases: ["吉赛尔"] | ||
}, | }, | ||
{ | { | ||
title: "Afterdark", | title: "Afterdark", | ||
aliases: [] | aliases: ["黑暗之后"] | ||
}, | }, | ||
{ | { | ||
| 第410行: | 第643行: | ||
{ | { | ||
title: "Conway's Child", | title: "Conway's Child", | ||
aliases: ["康威之子"] | aliases: ["康威之子","生命游戏","康威生命游戏"] | ||
}, | }, | ||
{ | { | ||
title: "Crimsonate", | title: "Crimsonate", | ||
aliases: [] | aliases: ["深红化"] | ||
}, | }, | ||
{ | { | ||
title: "Sthenno", | title: "Sthenno", | ||
aliases: [] | aliases: ["丝西娜"] | ||
}, | }, | ||
{ | { | ||
title: "Kaguya", | title: "Kaguya", | ||
aliases: [] | aliases: ["辉夜姬","竹取物语"] | ||
}, | }, | ||
{ | { | ||
title: "Relieve", | title: "Relieve", | ||
aliases: [] | aliases: ["信任","咏歌你怎么跟没有名字的人同框啊"] | ||
}, | }, | ||
{ | { | ||
| 第434行: | 第667行: | ||
{ | { | ||
title: "Hydra", | title: "Hydra", | ||
aliases: [] | aliases: ["九头蛇","骇爪"] | ||
}, | }, | ||
{ | { | ||
| 第442行: | 第675行: | ||
{ | { | ||
title: "Comet Coaster", | title: "Comet Coaster", | ||
aliases: [] | aliases: ["彗星过山车"] | ||
}, | }, | ||
{ | { | ||
title: "DOMINATOR", | title: "DOMINATOR", | ||
aliases: [] | aliases: ["支配者"] | ||
}, | }, | ||
{ | { | ||
title: "天灵灵地灵灵", | title: "天灵灵地灵灵", | ||
aliases: [] | aliases: ["小学妹"] | ||
}, | }, | ||
{ | { | ||
title: "Psychometry", | title: "Psychometry", | ||
aliases: [] | aliases: ["心灵感应"] | ||
}, | }, | ||
{ | { | ||
title: "Electric Comet", | title: "Electric Comet", | ||
aliases: [] | aliases: ["电子彗星"] | ||
}, | }, | ||
{ | { | ||
| 第466行: | 第699行: | ||
{ | { | ||
title: "너를 그리는 밤하늘의 이야기 (Planetarium) prod. Scarlette", | title: "너를 그리는 밤하늘의 이야기 (Planetarium) prod. Scarlette", | ||
aliases: [] | aliases: ["天文馆","一串韩文","一堆韩文","韩文字括号英文字括号英文字"] | ||
}, | }, | ||
{ | { | ||
title: "Avataar ~Reincarnation of Kalpa~", | title: "Avataar ~Reincarnation of Kalpa~", | ||
aliases: [] | aliases: ["Avataar","arok","卡尔帕转世","化生~劫之轮回~","劫之轮回","蓝魔王","转生的小曲"] | ||
}, | }, | ||
{ | { | ||
title: "Frozen Heart", | title: "Frozen Heart", | ||
aliases: [] | aliases: ["冰心","解放冰封的心"] | ||
}, | }, | ||
{ | { | ||
| 第482行: | 第715行: | ||
{ | { | ||
title: "Alfheim's faith", | title: "Alfheim's faith", | ||
aliases: [] | aliases: ["亚尔夫海姆的信仰"] | ||
}, | }, | ||
{ | { | ||
title: "翠杜", | title: "翠杜", | ||
aliases: [] | aliases: ["脆肚","suito"] | ||
}, | }, | ||
{ | { | ||
title: "驟雨の狭間", | title: "驟雨の狭間", | ||
aliases: ["骤雨狭间", "骤雨的缝隙"] | aliases: ["骤雨狭间", "骤雨的缝隙","骤雨的隙间","骤雨","周瑜"] | ||
}, | }, | ||
{ | { | ||
title: "enchanted love", | title: "enchanted love", | ||
aliases: [] | aliases: ["附魔爱","醉心之爱","醉心爱","青蛙王子"] | ||
}, | }, | ||
{ | { | ||
title: "Crazy Audiophile", | title: "Crazy Audiophile", | ||
aliases: [] | aliases: ["疯狂的高保真音响爱好者"] | ||
}, | }, | ||
{ | { | ||
| 第506行: | 第739行: | ||
{ | { | ||
title: "VICIOUS", | title: "VICIOUS", | ||
aliases: [] | aliases: ["狂暴"] | ||
}, | }, | ||
{ | { | ||
title: "Crush Alcohol", | title: "Crush Alcohol", | ||
aliases: [] | aliases: ["酒精","酒驾","不要酒驾"] | ||
}, | }, | ||
{ | { | ||
title: "インフェルノシティ", | title: "インフェルノシティ", | ||
aliases: ["地狱城", "地狱都市"] | aliases: ["地狱城", "地狱都市","亻ンフ工儿丿シ亍亻","inferno city"] | ||
}, | }, | ||
{ | { | ||
| 第522行: | 第755行: | ||
{ | { | ||
title: "Change the Game feat. 松永依織", | title: "Change the Game feat. 松永依織", | ||
aliases: [] | aliases: ["游戏逆转","改变游戏"] | ||
}, | }, | ||
{ | { | ||
title: "T+ VS SHARK", | title: "T+ VS SHARK", | ||
aliases: ["OMG!!! It's a SHARK!!!"] | aliases: ["OMG!!! It's a SHARK!!!","tpz大战鲨鱼","OMG!!! It's a 🦈","🦈","鲨鱼"] | ||
}, | }, | ||
{ | { | ||
| 第534行: | 第767行: | ||
{ | { | ||
title: "Echo over you...", | title: "Echo over you...", | ||
aliases: [] | aliases: ["回响于心"] | ||
}, | }, | ||
{ | { | ||
title: "Fairy's Crown", | title: "Fairy's Crown", | ||
aliases: [] | aliases: ["仙子冠冕"] | ||
}, | }, | ||
{ | { | ||
title: "Graves -Ancient Memories-", | title: "Graves -Ancient Memories-", | ||
aliases: [] | aliases: ["墓碑 -古老的记忆-","Graves"] | ||
}, | |||
{ | |||
title: "GREAT GREAT", | |||
aliases: ["棒棒","GG","炫彩鸽子","🕊","咕咕"] | |||
}, | }, | ||
{ | { | ||
title: "Clouds clear and...", | title: "Clouds clear and...", | ||
aliases: [] | aliases: ["云散之后..."] | ||
}, | }, | ||
{ | { | ||
title: "NLAMTA", | title: "NLAMTA", | ||
aliases: [] | aliases: ["No Longer a Melodic Trance Attempt"] | ||
}, | }, | ||
{ | { | ||
title: "Antikythera", | title: "Antikythera", | ||
aliases: [] | aliases: ["安提凯希拉"] | ||
}, | |||
{ | |||
title: "Speed Up!", | |||
aliases: ["冲刺!"] | |||
}, | |||
{ | |||
title: "天地開闢", | |||
aliases: ["天地开辟","开天辟地"] | |||
}, | |||
{ | |||
title: "水槽に沈む街", | |||
aliases: ["沈阳大街","沉入水槽的街","水槽沈阳大街","水槽沈街"] | |||
}, | |||
{ | |||
title: "Inevitability", | |||
aliases: ["不可避免","才没有什么必然!","鲷鱼烧"] | |||
}, | |||
{ | |||
title: "8BLUE", | |||
aliases: ["泡泡","🐟8ブル🫧","爸宝蓝","八宝蓝","🫧","泡泡 o ·。· O .","8B博弈"] | |||
}, | |||
{ | |||
title: "Fade Away", | |||
aliases: ["我褪色了","走路人","艾伦沃克","阿兰走路人"] | |||
} | } | ||
] | ] | ||
| 第561行: | 第822行: | ||
</html> | </html> | ||
---- | |||
[[User:RedDragon/Test]] | |||
[[User:RedDragon/Test1]] | |||
[[User:RedDragon/Test2]] | |||