mirror of
https://github.com/lifegpc/msg-tool.git
synced 2026-06-06 12:58:45 +08:00
Add support use original text when import text
This commit is contained in:
@@ -587,6 +587,9 @@ pub struct Arg {
|
||||
#[arg(long, global = true)]
|
||||
/// Do not add quote to translated text when exporting to m3t files.
|
||||
pub m3t_no_quote: bool,
|
||||
#[arg(long, global = true)]
|
||||
/// Use original text as translated text if translated text and llm text are all empty.
|
||||
pub m3t_use_original_text: bool,
|
||||
#[cfg(feature = "kirikiri-arc")]
|
||||
#[arg(long, global = true)]
|
||||
/// Disable adler32 checksum for Kirikiri XP3 archive when creating.
|
||||
@@ -938,6 +941,7 @@ pub fn load_kirikiri_chat_json(
|
||||
crate::output_scripts::m3t::M3tParser::new(
|
||||
&data,
|
||||
arg.llm_trans_mark.as_ref().map(|s| s.as_str()),
|
||||
arg.m3t_use_original_text,
|
||||
)
|
||||
.parse_as_vec()?
|
||||
} else {
|
||||
|
||||
@@ -1644,6 +1644,7 @@ pub fn import_script(
|
||||
let mut parser = output_scripts::m3t::M3tParser::new(
|
||||
&s,
|
||||
arg.llm_trans_mark.as_ref().map(|s| s.as_str()),
|
||||
arg.m3t_use_original_text,
|
||||
);
|
||||
match parser.parse() {
|
||||
Ok(mes) => mes,
|
||||
@@ -1946,6 +1947,7 @@ pub fn import_script(
|
||||
let mut parser = output_scripts::m3t::M3tParser::new(
|
||||
&s,
|
||||
arg.llm_trans_mark.as_ref().map(|s| s.as_str()),
|
||||
arg.m3t_use_original_text,
|
||||
);
|
||||
match parser.parse() {
|
||||
Ok(mes) => mes,
|
||||
@@ -2271,6 +2273,7 @@ pub fn import_script(
|
||||
let mut parser = output_scripts::m3t::M3tParser::new(
|
||||
&s,
|
||||
arg.llm_trans_mark.as_ref().map(|s| s.as_str()),
|
||||
arg.m3t_use_original_text,
|
||||
);
|
||||
parser.parse()?
|
||||
}
|
||||
@@ -2375,6 +2378,7 @@ pub fn import_script(
|
||||
let mut parser = output_scripts::m3t::M3tParser::new(
|
||||
&s,
|
||||
arg.llm_trans_mark.as_ref().map(|s| s.as_str()),
|
||||
arg.m3t_use_original_text,
|
||||
);
|
||||
parser.parse()?
|
||||
}
|
||||
@@ -2928,6 +2932,7 @@ pub fn parse_output_script_as_extend(
|
||||
let mut parser = output_scripts::m3t::M3tParser::new(
|
||||
&s,
|
||||
arg.llm_trans_mark.as_ref().map(|s| s.as_str()),
|
||||
arg.m3t_use_original_text,
|
||||
);
|
||||
let mes = parser.parse_as_extend()?;
|
||||
Ok(mes)
|
||||
@@ -2965,6 +2970,7 @@ pub fn parse_output_script(
|
||||
let mut parser = output_scripts::m3t::M3tParser::new(
|
||||
&s,
|
||||
arg.llm_trans_mark.as_ref().map(|s| s.as_str()),
|
||||
arg.m3t_use_original_text,
|
||||
);
|
||||
let mes = parser.parse()?;
|
||||
Ok(mes)
|
||||
|
||||
@@ -16,15 +16,17 @@ pub struct M3tParser<'a> {
|
||||
str: &'a str,
|
||||
line: usize,
|
||||
llm_mark: Option<&'a str>,
|
||||
use_original_text: bool,
|
||||
}
|
||||
|
||||
impl<'a> M3tParser<'a> {
|
||||
/// Creates a new M3tParser with the given string.
|
||||
pub fn new(str: &'a str, llm_mark: Option<&'a str>) -> Self {
|
||||
pub fn new(str: &'a str, llm_mark: Option<&'a str>, use_original_text: bool) -> Self {
|
||||
M3tParser {
|
||||
str,
|
||||
line: 1,
|
||||
llm_mark,
|
||||
use_original_text,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -124,6 +126,7 @@ impl<'a> M3tParser<'a> {
|
||||
let mut messages = Vec::new();
|
||||
let mut name = None;
|
||||
let mut llm = None;
|
||||
let mut ori = None;
|
||||
while let Some(line) = self.next_line() {
|
||||
if line.is_empty() {
|
||||
continue;
|
||||
@@ -134,6 +137,8 @@ impl<'a> M3tParser<'a> {
|
||||
let line = line[3..].trim();
|
||||
if line.starts_with("NAME:") {
|
||||
name = Some(line[5..].trim().to_string());
|
||||
} else {
|
||||
ori = Some(line.to_string());
|
||||
}
|
||||
} else if line.starts_with("△") {
|
||||
let line = line[3..].trim();
|
||||
@@ -154,10 +159,17 @@ impl<'a> M3tParser<'a> {
|
||||
s
|
||||
})
|
||||
.unwrap_or_else(|| {
|
||||
String::from(if message.starts_with("「") {
|
||||
"「」"
|
||||
let m = if self.use_original_text {
|
||||
ori.clone()
|
||||
} else {
|
||||
""
|
||||
None
|
||||
};
|
||||
m.unwrap_or_else(|| {
|
||||
String::from(if message.starts_with("「") {
|
||||
"「」"
|
||||
} else {
|
||||
""
|
||||
})
|
||||
})
|
||||
})
|
||||
.replace("\\n", "\n")
|
||||
@@ -273,9 +285,9 @@ impl M3tDumper {
|
||||
#[test]
|
||||
fn test_zero_width_space() {
|
||||
let input = "○ NAME: Example\n\n○ Original message\n\u{200b}● 「」\n\n";
|
||||
let mut parser = M3tParser::new(input, None);
|
||||
let mut parser = M3tParser::new(input, None, false);
|
||||
let messages = parser.parse().unwrap();
|
||||
assert_eq!(messages.len(), 1);
|
||||
let map = M3tParser::new(input, None).parse_as_vec().unwrap();
|
||||
let map = M3tParser::new(input, None, false).parse_as_vec().unwrap();
|
||||
assert_eq!(map.len(), 1);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user