From 087fde9d18fc24b8eec7c7191b18c730515f31af Mon Sep 17 00:00:00 2001 From: Qrius Date: Thu, 26 Sep 2024 00:11:05 +0200 Subject: Add REPL --- src/macro_processor/main.rs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'src/macro_processor') 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 = 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) => { -- cgit v1.2.3