Monster commit: native version
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
use ratatui::style::{Color, Modifier, Style};
|
||||
use ratatui::style::{Modifier, Style};
|
||||
|
||||
use crate::model::{SourceSpan, WordCompile, WORDS};
|
||||
use crate::theme::syntax;
|
||||
|
||||
#[derive(Clone, Copy, PartialEq, Eq)]
|
||||
pub enum TokenKind {
|
||||
@@ -24,61 +25,34 @@ pub enum TokenKind {
|
||||
|
||||
impl TokenKind {
|
||||
pub fn style(self) -> Style {
|
||||
match self {
|
||||
TokenKind::Emit => Style::default()
|
||||
.fg(Color::Rgb(255, 255, 255))
|
||||
.bg(Color::Rgb(140, 50, 50))
|
||||
.add_modifier(Modifier::BOLD),
|
||||
TokenKind::Number => Style::default()
|
||||
.fg(Color::Rgb(255, 200, 120))
|
||||
.bg(Color::Rgb(60, 40, 15)),
|
||||
TokenKind::String => Style::default()
|
||||
.fg(Color::Rgb(150, 230, 150))
|
||||
.bg(Color::Rgb(20, 55, 20)),
|
||||
TokenKind::Comment => Style::default()
|
||||
.fg(Color::Rgb(100, 100, 100))
|
||||
.bg(Color::Rgb(18, 18, 18)),
|
||||
TokenKind::Keyword => Style::default()
|
||||
.fg(Color::Rgb(230, 130, 230))
|
||||
.bg(Color::Rgb(55, 25, 55)),
|
||||
TokenKind::StackOp => Style::default()
|
||||
.fg(Color::Rgb(130, 190, 240))
|
||||
.bg(Color::Rgb(20, 40, 70)),
|
||||
TokenKind::Operator => Style::default()
|
||||
.fg(Color::Rgb(220, 220, 140))
|
||||
.bg(Color::Rgb(45, 45, 20)),
|
||||
TokenKind::Sound => Style::default()
|
||||
.fg(Color::Rgb(100, 240, 220))
|
||||
.bg(Color::Rgb(15, 60, 55)),
|
||||
TokenKind::Param => Style::default()
|
||||
.fg(Color::Rgb(190, 160, 240))
|
||||
.bg(Color::Rgb(45, 30, 70)),
|
||||
TokenKind::Context => Style::default()
|
||||
.fg(Color::Rgb(240, 190, 120))
|
||||
.bg(Color::Rgb(60, 45, 20)),
|
||||
TokenKind::Note => Style::default()
|
||||
.fg(Color::Rgb(120, 220, 170))
|
||||
.bg(Color::Rgb(20, 55, 40)),
|
||||
TokenKind::Interval => Style::default()
|
||||
.fg(Color::Rgb(170, 220, 120))
|
||||
.bg(Color::Rgb(35, 55, 20)),
|
||||
TokenKind::Variable => Style::default()
|
||||
.fg(Color::Rgb(220, 150, 190))
|
||||
.bg(Color::Rgb(60, 30, 50)),
|
||||
TokenKind::Vary => Style::default()
|
||||
.fg(Color::Rgb(230, 230, 100))
|
||||
.bg(Color::Rgb(55, 55, 15)),
|
||||
TokenKind::Generator => Style::default()
|
||||
.fg(Color::Rgb(100, 220, 180))
|
||||
.bg(Color::Rgb(15, 55, 45)),
|
||||
TokenKind::Default => Style::default()
|
||||
.fg(Color::Rgb(160, 160, 160))
|
||||
.bg(Color::Rgb(25, 25, 25)),
|
||||
let (fg, bg) = match self {
|
||||
TokenKind::Emit => syntax::EMIT,
|
||||
TokenKind::Number => syntax::NUMBER,
|
||||
TokenKind::String => syntax::STRING,
|
||||
TokenKind::Comment => syntax::COMMENT,
|
||||
TokenKind::Keyword => syntax::KEYWORD,
|
||||
TokenKind::StackOp => syntax::STACK_OP,
|
||||
TokenKind::Operator => syntax::OPERATOR,
|
||||
TokenKind::Sound => syntax::SOUND,
|
||||
TokenKind::Param => syntax::PARAM,
|
||||
TokenKind::Context => syntax::CONTEXT,
|
||||
TokenKind::Note => syntax::NOTE,
|
||||
TokenKind::Interval => syntax::INTERVAL,
|
||||
TokenKind::Variable => syntax::VARIABLE,
|
||||
TokenKind::Vary => syntax::VARY,
|
||||
TokenKind::Generator => syntax::GENERATOR,
|
||||
TokenKind::Default => syntax::DEFAULT,
|
||||
};
|
||||
let style = Style::default().fg(fg).bg(bg);
|
||||
if matches!(self, TokenKind::Emit) {
|
||||
style.add_modifier(Modifier::BOLD)
|
||||
} else {
|
||||
style
|
||||
}
|
||||
}
|
||||
|
||||
pub fn gap_style() -> Style {
|
||||
Style::default().bg(Color::Rgb(25, 25, 25))
|
||||
Style::default().bg(syntax::GAP_BG)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -231,9 +205,6 @@ pub fn highlight_line_with_runtime(
|
||||
let tokens = tokenize_line(line);
|
||||
let mut result = Vec::new();
|
||||
let mut last_end = 0;
|
||||
|
||||
let executed_bg = Color::Rgb(40, 35, 50);
|
||||
let selected_bg = Color::Rgb(80, 60, 20);
|
||||
let gap_style = TokenKind::gap_style();
|
||||
|
||||
for token in tokens {
|
||||
@@ -253,9 +224,9 @@ pub fn highlight_line_with_runtime(
|
||||
style = style.add_modifier(Modifier::UNDERLINED);
|
||||
}
|
||||
if is_selected {
|
||||
style = style.bg(selected_bg).add_modifier(Modifier::BOLD);
|
||||
style = style.bg(syntax::SELECTED_BG).add_modifier(Modifier::BOLD);
|
||||
} else if is_executed {
|
||||
style = style.bg(executed_bg);
|
||||
style = style.bg(syntax::EXECUTED_BG);
|
||||
}
|
||||
|
||||
result.push((style, line[token.start..token.end].to_string()));
|
||||
|
||||
Reference in New Issue
Block a user