diff --git a/src/routes/song/[slug]/+page.svelte b/src/routes/song/[slug]/+page.svelte index 89e524d..e418251 100644 --- a/src/routes/song/[slug]/+page.svelte +++ b/src/routes/song/[slug]/+page.svelte @@ -2,9 +2,9 @@ import AppBar from "../../../components/appbar/AppBar.svelte"; import type { PageProps } from "./$types" import { LinearProgress } from "m3-svelte"; - import { onMount } from "svelte"; + import { onMount, tick } from "svelte"; import { typingSettingsDefault, type LyricSegment } from "../../../shared/types.ts"; - import { isKana, isKanji, toHiragana, toKatakana } from "wanakana"; + import { isKana, isKanji, toHiragana, toKatakana, toRomaji } from "wanakana"; import { composeList, fuzzyEquals } from "./IMEHelper.ts"; import MenuItem from "../../../components/material3/MenuItem.svelte"; import "../../../shared/ext.ts" @@ -22,7 +22,8 @@ // Settings stored in user data let settings = $state(data.user.data?.typingSettings ?? typingSettingsDefault) $effect(() => { saveUserData({ typingSettings: settings }) }) - const preprocessKana = (kana: string) => settings.allKata ? toKatakana(kana) : kana + const _preprocessKana = (kana: string) => settings.allKata ? toKatakana(kana) : kana + const preprocessKana = (kana: string) => settings.showRomaji ? `${_preprocessKana(kana)}${toRomaji(kana)}` : _preprocessKana(kana) // Process each line into segments with swi (start word index) and kanji/kana type ProcLrcSeg = { swi: number, kanji?: string, kana: string } @@ -110,6 +111,7 @@ a.name).join(", ") + " - " + data.brief.album}> settings.isFuri = !settings.isFuri}>{settings.isFuri ? "隐藏" : "显示"}假名标注 settings.allKata = !settings.allKata}>{settings.allKata ? "恢复平假名" : "全部转换为片假名"} + settings.showRomaji = !settings.showRomaji}>{settings.showRomaji ? "隐藏罗马音" : "显示罗马音"} @@ -141,13 +143,13 @@ {#each line.parts as seg} {#if !seg.kanji} {#each seg.kana as char, c} - {preprocessKana(char)} + {@html preprocessKana(char)} {/each} {:else} {seg.kanji}{#if settings.isFuri} {#each seg.kana as char, c} - {preprocessKana(char)} + {@html preprocessKana(char)} {/each} {/if} diff --git a/src/shared/types.ts b/src/shared/types.ts index 9f3fbd9..0fab0fb 100644 --- a/src/shared/types.ts +++ b/src/shared/types.ts @@ -58,7 +58,8 @@ export interface UserDocument { export const typingSettingsDefault = { isFuri: true, - allKata: false + allKata: false, + showRomaji: true } export interface UserData {