diff options
-rw-r--r-- | src/macro_processor/main.rs | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/macro_processor/main.rs b/src/macro_processor/main.rs index 2d34952..5b083c8 100644 --- a/src/macro_processor/main.rs +++ b/src/macro_processor/main.rs @@ -1,9 +1,46 @@ use skaldpress::macro_processor::MacroProcessor; use std::env; use std::fs; +use std::io; +use std::io::Write; + +fn repl() { + println!("=Skaldpress Macro Processor (REPL)"); + println!(" type \"quit\" to exit"); + let mut macro_processor = MacroProcessor::new(); + loop { + let mut input = String::new(); + loop { + print!("> "); + let _ = io::stdout().flush(); + let mut _input = String::new(); + io::stdin().read_line(&mut _input).expect("error: unable to read user input"); + if _input == "\n" { + input.pop(); + break; + } + if _input == "quit\n" { + std::process::exit(0); + } + input.push_str(&_input); + } + println!("\x1b[32m=INPUT\x1b[0m\n{:#?}", input); + println!("\x1b[32m=PROCESSING\x1b[0m"); + match macro_processor.process_input(&input) { + Ok(out) => println!("\x1b[32m=OUTPUT\x1b[0m\n{}", out), + Err(e) => println!("Error {}", e), + } + } +} fn main() { let args: Vec<String> = env::args().collect(); + + if args.len() < 2 { + repl(); + std::process::exit(0); + } + let input_file = match fs::read_to_string(&args[1]) { Ok(x) => x, Err(e) => { |