Build up highlighting array
This commit is contained in:
parent
49807ec9fe
commit
4618b2be0e
@ -18,7 +18,9 @@ impl Document {
|
|||||||
let mut rows = Vec::new();
|
let mut rows = Vec::new();
|
||||||
|
|
||||||
for value in contents.lines() {
|
for value in contents.lines() {
|
||||||
rows.push(Row::from(value));
|
let mut row = Row::From(value);
|
||||||
|
row.highlight();
|
||||||
|
rows.push(row);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
@ -56,11 +58,13 @@ impl Document {
|
|||||||
if at.y == self.rows.len() {
|
if at.y == self.rows.len() {
|
||||||
let mut row = Row::default();
|
let mut row = Row::default();
|
||||||
row.insert(0, c);
|
row.insert(0, c);
|
||||||
|
row.highlight();
|
||||||
self.rows.push(row);
|
self.rows.push(row);
|
||||||
} else {
|
} else {
|
||||||
#[allow(clippy::indexing_slicing)]
|
#[allow(clippy::indexing_slicing)]
|
||||||
let row = &mut self.rows[at.y];
|
let row = &mut self.rows[at.y];
|
||||||
row.insert(at.x, c);
|
row.insert(at.x, c);
|
||||||
|
row.highlight();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,9 +82,11 @@ impl Document {
|
|||||||
let next_row = self.rows.remove(at.y + 1);
|
let next_row = self.rows.remove(at.y + 1);
|
||||||
let row = &mut self.rows[at.y];
|
let row = &mut self.rows[at.y];
|
||||||
row.append(&next_row);
|
row.append(&next_row);
|
||||||
|
row.highlight();
|
||||||
} else {
|
} else {
|
||||||
let row = &mut self.rows[at.y];
|
let row = &mut self.rows[at.y];
|
||||||
row.delete(at.x);
|
row.delete(at.x);
|
||||||
|
row.highlight();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -150,8 +156,12 @@ impl Document {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[allow(clippy::indexing_slicing)]
|
#[allow(clippy::indexing_slicing)]
|
||||||
|
let current_row = &mut self.rows[at.y];
|
||||||
let new_row = self.rows[at.y].split(at.x);
|
let new_row = self.rows[at.y].split(at.x);
|
||||||
|
|
||||||
|
current_row.highlight();
|
||||||
|
new_row.highlight();
|
||||||
|
|
||||||
#[allow(clippy::integer_arithmetic)]
|
#[allow(clippy::integer_arithmetic)]
|
||||||
self.rows.insert(at.y + 1, new_row);
|
self.rows.insert(at.y + 1, new_row);
|
||||||
}
|
}
|
||||||
|
15
src/highlighting.rs
Normal file
15
src/highlighting.rs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
use termion::color;
|
||||||
|
|
||||||
|
pub enum Type {
|
||||||
|
None,
|
||||||
|
Number,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Type {
|
||||||
|
pub fn to_color(&self) -> impl color::Color {
|
||||||
|
match self {
|
||||||
|
Type::Number => color::Rgb(220, 163, 163),
|
||||||
|
_ => color::Rgb(255, 255, 255),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -2,6 +2,7 @@
|
|||||||
#![allow(clippy::missing_errors_doc, clippy::must_use_candidate, clippy::panic)]
|
#![allow(clippy::missing_errors_doc, clippy::must_use_candidate, clippy::panic)]
|
||||||
mod document;
|
mod document;
|
||||||
mod editor;
|
mod editor;
|
||||||
|
mod highlighting;
|
||||||
mod row;
|
mod row;
|
||||||
mod terminal;
|
mod terminal;
|
||||||
|
|
||||||
|
18
src/row.rs
18
src/row.rs
@ -1,3 +1,4 @@
|
|||||||
|
use crate::highlighting;
|
||||||
use crate::SearchDirection;
|
use crate::SearchDirection;
|
||||||
use std::cmp;
|
use std::cmp;
|
||||||
use termion::color;
|
use termion::color;
|
||||||
@ -6,6 +7,7 @@ use unicode_segmentation::UnicodeSegmentation;
|
|||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct Row {
|
pub struct Row {
|
||||||
string: String,
|
string: String,
|
||||||
|
highlighting: Vec<highlighting::Type>,
|
||||||
len: usize,
|
len: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -13,6 +15,7 @@ impl From<&str> for Row {
|
|||||||
fn from(slice: &str) -> Self {
|
fn from(slice: &str) -> Self {
|
||||||
Self {
|
Self {
|
||||||
string: String::from(slice),
|
string: String::from(slice),
|
||||||
|
highlighting: Vec::new(),
|
||||||
len: slice.graphemes(true).count(),
|
len: slice.graphemes(true).count(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -133,6 +136,7 @@ impl Row {
|
|||||||
Self {
|
Self {
|
||||||
string: splitted_row,
|
string: splitted_row,
|
||||||
len: splittend_length,
|
len: splittend_length,
|
||||||
|
highlighting: Vec::new(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -174,4 +178,18 @@ impl Row {
|
|||||||
|
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn highlight(&mut self) {
|
||||||
|
let mut highlighting = Vec::new();
|
||||||
|
|
||||||
|
for c in self.string.chars() {
|
||||||
|
if c.is_ascii_digit() {
|
||||||
|
highlighting.push(highlighting::Type::Number)
|
||||||
|
} else {
|
||||||
|
highlighting.push(highlighting::Type::None)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self.highlighting = highlighting;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user