botserver/src/basic/compiler/blocks/mod.rs

77 lines
2.2 KiB
Rust
Raw Normal View History

pub mod mail;
pub mod talk;
pub use mail::convert_mail_block;
pub use talk::convert_talk_block;
use log::{info, trace};
pub fn convert_begin_blocks(script: &str) -> String {
let mut result = String::new();
let mut in_talk_block = false;
let mut talk_block_lines: Vec<String> = Vec::new();
let mut in_mail_block = false;
let mut mail_recipient = String::new();
let mut mail_block_lines: Vec<String> = Vec::new();
for line in script.lines() {
let trimmed = line.trim();
let upper = trimmed.to_uppercase();
if trimmed.is_empty() || trimmed.starts_with('\'') || trimmed.starts_with("//") {
continue;
}
if upper == "BEGIN TALK" {
trace!("Converting BEGIN TALK statement");
in_talk_block = true;
talk_block_lines.clear();
continue;
}
if upper == "END TALK" {
trace!("Converting END TALK statement, processing {} lines", talk_block_lines.len());
in_talk_block = false;
let converted = convert_talk_block(&talk_block_lines);
result.push_str(&converted);
talk_block_lines.clear();
continue;
}
if in_talk_block {
talk_block_lines.push(trimmed.to_string());
continue;
}
if upper.starts_with("BEGIN MAIL ") {
let recipient = &trimmed[11..].trim();
trace!("Converting BEGIN MAIL statement: recipient='{}'", recipient);
mail_recipient = recipient.to_string();
in_mail_block = true;
mail_block_lines.clear();
continue;
}
if upper == "END MAIL" {
trace!("Converting END MAIL statement, processing {} lines", mail_block_lines.len());
in_mail_block = false;
let converted = convert_mail_block(&mail_recipient, &mail_block_lines);
result.push_str(&converted);
result.push('\n');
mail_recipient.clear();
mail_block_lines.clear();
continue;
}
if in_mail_block {
mail_block_lines.push(trimmed.to_string());
continue;
}
result.push_str(line);
result.push('\n');
}
result
}