From 885704ba5ab55e980be0969e78527adabf0a4a9e Mon Sep 17 00:00:00 2001 From: lifegpc Date: Fri, 26 Sep 2025 12:56:08 +0800 Subject: [PATCH] Fix special token handle in SCN file --- src/scripts/kirikiri/scn.rs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/scripts/kirikiri/scn.rs b/src/scripts/kirikiri/scn.rs index 91a3ae4..4d7efe9 100644 --- a/src/scripts/kirikiri/scn.rs +++ b/src/scripts/kirikiri/scn.rs @@ -1004,16 +1004,18 @@ impl<'a> ImportMes<'a> { lazy_static::lazy_static! { static ref CONTROL: Regex = Regex::new("%[^;]*;").unwrap(); - static ref RUBY: Regex = Regex::new(r"\[([^\]]*)\](.?)").unwrap(); + static ref RUBY: Regex = Regex::new(r"(? String { let mut s = s.replace("\n", ""); s = CONTROL.replace_all(&s, "").to_string(); + s = COLOR.replace_all(&s, "").to_string(); s = RUBY .replace_all(&s, if in_ruby { "$1" } else { "$2" }) .to_string(); - s + s.replace("%r", "").replace("\\[", "[") } #[test] @@ -1021,4 +1023,15 @@ fn test_get_save_message() { let s = "%n;Test\n[ruby]测[test\\]试%ok;[ok]"; assert_eq!(get_save_message(s, true), "Testrubytest\\ok"); assert_eq!(get_save_message(s, false), "Test测试"); + let another = "[Start]a"; + assert_eq!(get_save_message(another, true), "Start"); + assert_eq!(get_save_message(another, false), "a"); + let escaped = "\\[Start]a"; + assert_eq!(get_save_message(escaped, true), "[Start]a"); + assert_eq!(get_save_message(escaped, false), "[Start]a"); + let real_word = "「こんな、感じとか、ですか……? うっふ~ん……%f$ハート$;#00ffadd6;♥%r」"; + assert_eq!( + get_save_message(real_word, true), + "「こんな、感じとか、ですか……? うっふ~ん……♥」" + ); }