1use carlotk::prelude::*;
4
5const HELP: &str = include_str!("../help_repl.txt");
7
8pub fn helpme() {
10 printhelp(HELP);
11}
12
13pub fn repl(args: CliArgs) {
14 if args.contains(Flag::Help) {
15 printhelp(HELP);
16 }
17
18 let inputfile = args.inputfile.clone();
19 let debug = args.contains(Flag::Debug);
20
21 let mut i = 0;
22
23 println!("{}", "The Carlo Language".truecolor(20, 146, 255).bold());
24 println!("Version {}", VERSION);
25 println!("Developed by Hobbs Bros.");
26 println!();
27
28 let parser = Parser::new(debug);
30
31 let mut env = Environment::new();
33
34 if let Some(i) = &inputfile {
36 println!("Importing {}", i.display());
37 println!();
38 }
39 let imported = parse(inputfile, debug);
40
41 env.evaluate(&imported);
43
44 let mut rl = DefaultEditor::new().unwrap();
46
47 loop {
48 let readline = match rl.readline(&format!(
50 "In[{}] >> ",
51 i,
52 )) {
53 Ok (r) => {
54 let _ = rl.add_history_entry(r.as_str());
55 r
56 },
57 Err (_) => Error::CouldNotReadLine (i).throw(),
58 };
59 println!();
60
61 let expr = parser.parse(&readline);
63
64 let output = env.evaluate(&expr);
66
67 let outputstr = format!("Out[{}] >> {}", i, output);
69 println!("{}", outputstr.truecolor(198, 215, 247));
70
71 if output.len() == 0 {
72 println!();
73 }
74
75 i += 1;
76 }
77}