Highlighting single characters
This commit is contained in:
parent
6267dc4888
commit
d84da2b0de
@ -7,6 +7,7 @@ pub struct FileType {
|
|||||||
pub struct HighlightingOptions {
|
pub struct HighlightingOptions {
|
||||||
numbers: bool,
|
numbers: bool,
|
||||||
strings: bool,
|
strings: bool,
|
||||||
|
characters: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for FileType {
|
impl Default for FileType {
|
||||||
@ -34,6 +35,7 @@ impl FileType {
|
|||||||
hl_opts: HighlightingOptions {
|
hl_opts: HighlightingOptions {
|
||||||
numbers: true,
|
numbers: true,
|
||||||
strings: true,
|
strings: true,
|
||||||
|
characters: true,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -50,4 +52,8 @@ impl HighlightingOptions {
|
|||||||
pub fn strings(self) -> bool {
|
pub fn strings(self) -> bool {
|
||||||
self.strings
|
self.strings
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn characters(self) -> bool {
|
||||||
|
self.characters
|
||||||
|
}
|
||||||
}
|
}
|
@ -6,6 +6,7 @@ pub enum Type {
|
|||||||
Number,
|
Number,
|
||||||
Match,
|
Match,
|
||||||
String,
|
String,
|
||||||
|
Character,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Type {
|
impl Type {
|
||||||
@ -14,6 +15,7 @@ impl Type {
|
|||||||
Type::Number => color::Rgb(220, 163, 163),
|
Type::Number => color::Rgb(220, 163, 163),
|
||||||
Type::Match => color::Rgb(38, 139, 210),
|
Type::Match => color::Rgb(38, 139, 210),
|
||||||
Type::String => color::Rgb(211, 54, 130),
|
Type::String => color::Rgb(211, 54, 130),
|
||||||
|
Type::Character => color::Rgb(108, 113, 196),
|
||||||
_ => color::Rgb(255, 255, 255),
|
_ => color::Rgb(255, 255, 255),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
27
src/row.rs
27
src/row.rs
@ -232,6 +232,33 @@ impl Row {
|
|||||||
&highlighting::Type::None
|
&highlighting::Type::None
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if opts.characters() && !in_string && *c == '\'' {
|
||||||
|
prev_is_separator = true;
|
||||||
|
|
||||||
|
if let Some(next_char) = chars.get(index.saturating_add(1)) {
|
||||||
|
let closing_index = if *next_char == '\\' {
|
||||||
|
index.saturating_add(3)
|
||||||
|
} else {
|
||||||
|
index.saturating_add(2)
|
||||||
|
};
|
||||||
|
|
||||||
|
if let Some(closing_char) = chars.get(closing_index) {
|
||||||
|
if *closing_char == '\'' {
|
||||||
|
for _ in 0..=closing_index.saturating_sub(index) {
|
||||||
|
highlighting.push(highlighting::Type::Character);
|
||||||
|
index += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
highlighting.push(highlighting::Type::None);
|
||||||
|
index += 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if opts.strings() {
|
if opts.strings() {
|
||||||
if in_string {
|
if in_string {
|
||||||
highlighting.push(highlighting::Type::String);
|
highlighting.push(highlighting::Type::String);
|
||||||
|
Loading…
Reference in New Issue
Block a user