diff --git a/src/buffer.rs b/src/buffer.rs index dcdd70b..5cec7f7 100644 --- a/src/buffer.rs +++ b/src/buffer.rs @@ -52,17 +52,17 @@ impl Buffer { } } - pub fn append(&mut self, addr: Address, lines: Vec) { + pub fn insert(&mut self, addr: Address, lines: Vec) { self.has_changed = true; match addr { - Address::Actual => self.append_buffer(self.current_line, lines), - Address::Line(l) => self.append_buffer(l, lines), - Address::Last => self.append_buffer(self.buffer.len(), lines), + Address::Actual | Address::Empty => self.insert_buffer(self.current_line, lines), + Address::Line(l) => self.insert_buffer(l, lines), + Address::Last => self.insert_buffer(self.buffer.len(), lines), _ => (), } } - fn append_buffer(&mut self, line: usize, lines: Vec) { + fn insert_buffer(&mut self, line: usize, lines: Vec) { for (i, l) in lines.iter().enumerate() { self.buffer.insert(i + line, Ok(l.to_string())); self.current_line = i + line; @@ -72,13 +72,17 @@ impl Buffer { pub fn print(&mut self, addr: Address, print_numbers: bool) { let last_line = self.buffer.len(); match addr { - Address::Actual => self.print_line(self.current_line, print_numbers), + Address::Actual | Address::Empty => { + self.print_line(self.current_line, print_numbers); + } Address::Line(l) => self.print_line(l.saturating_sub(1), print_numbers), Address::Last => self.print_line(last_line, print_numbers), Address::All => self.print_range(0, last_line, print_numbers), - Address::FromTo(a, b) => self.print_range(a, b, print_numbers), + Address::FromTo(a, b) => self.print_range(a.saturating_sub(1), b, print_numbers), Address::FromStartTo(a) => self.print_range(0, a, print_numbers), - Address::FromToEnd(a) => self.print_range(a, last_line, print_numbers), + Address::FromToEnd(a) => { + self.print_range(a.saturating_sub(1), last_line, print_numbers) + } Address::FromActTo(a) => self.print_range(self.current_line, a, print_numbers), Address::FromActToEnd => self.print_range(self.current_line, last_line, print_numbers), Address::Null => println!("nul !"), diff --git a/src/enums.rs b/src/enums.rs index 20185ad..4bd3141 100644 --- a/src/enums.rs +++ b/src/enums.rs @@ -147,7 +147,7 @@ fn parse_without_addr(c: char) -> Command { fn parse(c: char, addr: Address) -> Result { match c { - 'a' => { + 'i' => { if addr.is_multi_line() { Err(String::from("Erreur d'adresse")) } else { diff --git a/src/main.rs b/src/main.rs index 8ed3aa3..443b450 100644 --- a/src/main.rs +++ b/src/main.rs @@ -66,7 +66,7 @@ fn execute_command(buffer: &mut Buffer, c: Command) -> Exit { } } - buffer.append(a, new_lines); + buffer.insert(a, new_lines); } Command::Print(a) => buffer.print(a, false), Command::Number(a) => buffer.print(a, true), @@ -93,7 +93,7 @@ fn execute_command(buffer: &mut Buffer, c: Command) -> Exit { fn parse_line(input: &str) -> Result { let address = take_while(check_address_complete); - let command = one_of::<_, _, (&str, ErrorKind)>("apnqQw"); + let command = one_of::<_, _, (&str, ErrorKind)>("ipnqQw"); //if let Ok((input, (a, c))) = alt(address, command).parse(input) { let tmp = (address, command).parse(input);