fix: sync lyric romanization and clear stale selection menus

Preserve romanization and translation metadata through Rust exports and cache, match rounded line times, and retain word endings. Highlight romanization with the main lyric clock in Material and Mornye.

Clear selection overlay ownership safely when collection screens are disposed. Add parser, rendering, cache and overlay lifecycle regression coverage.
This commit is contained in:
zarzet
2026-09-23 12:42:08 +07:00
parent ebcd1fd877
commit ba44bafa92
14 changed files with 1286 additions and 67 deletions
@@ -30,7 +30,7 @@ internal object NativeFinalizationPolicy {
}
private val lyricsMetadataLinePattern = Regex(
"^\\[[a-z][a-z0-9_]*:.*]$",
"^\\[[a-z][a-z0-9_-]*:.*]$",
RegexOption.IGNORE_CASE,
)
private val lyricsBackgroundPattern = Regex(
@@ -21,3 +21,5 @@ timed_background_text true [BG:[00:00.00]<00:00.01> v1: Backing vocal]
multiple_timed_text true [00:01.00][00:02.00]Repeated line
metadata_and_text true [ti:Title]\n[00:00.00]Actual lyric
unicode_text true [00:00.00]<00:00.01> v1: 日本語の歌詞
supplements_only false [x-romaji:1000:YQ==]\n[x-translation:1000:Yg==]
supplements_and_text true [x-romaji:1000:YQ==]\n[x-translation:1000:Yg==]\n[00:01.00]Original
1 # Shared Dart/Go/Kotlin lyric-usability cases.
21 multiple_timed_text
22 metadata_and_text
23 unicode_text
24 supplements_only
25 supplements_and_text