feat: 添加恢复代码块占位符的功能,优化文本处理逻辑

This commit is contained in:
oudecheng 2026-06-03 08:54:08 +08:00
parent 15dfc48837
commit a783abd0e3

View File

@ -1931,15 +1931,24 @@ impl FeishuChannel {
); );
} }
/// Restore all code block placeholders in the given text.
fn restore_code_blocks(text: &str, code_blocks: &[String]) -> String {
let mut result = text.to_string();
for (i, cb) in code_blocks.iter().enumerate() {
result = result.replace(&format!("\x00CODE{}\x00", i), cb);
}
result
}
let mut elements: Vec<serde_json::Value> = Vec::new(); let mut elements: Vec<serde_json::Value> = Vec::new();
let mut last_end = 0; let mut last_end = 0;
for m in patterns.heading_re.find_iter(&protected) { for m in patterns.heading_re.find_iter(&protected) {
let before = &protected[last_end..m.start()].trim(); let before = protected[last_end..m.start()].trim();
if !before.is_empty() { if !before.is_empty() {
elements.push(serde_json::json!({ elements.push(serde_json::json!({
"tag": "markdown", "tag": "markdown",
"content": before "content": restore_code_blocks(before, &code_blocks)
})); }));
} }
@ -1963,14 +1972,9 @@ impl FeishuChannel {
let remaining = protected[last_end..].trim(); let remaining = protected[last_end..].trim();
if !remaining.is_empty() { if !remaining.is_empty() {
// Restore code blocks
let mut final_content = remaining.to_string();
for (i, cb) in code_blocks.iter().enumerate() {
final_content = final_content.replace(&format!("\x00CODE{}\x00", i), cb);
}
elements.push(serde_json::json!({ elements.push(serde_json::json!({
"tag": "markdown", "tag": "markdown",
"content": final_content "content": restore_code_blocks(remaining, &code_blocks)
})); }));
} }