#语法高亮 #编辑器 #egui #语法 #高亮显示

egui_code_editor

带编号行和语法高亮的 egui 代码编辑器小部件

17 个版本

0.2.9 2024年7月13日
0.2.7 2024年4月10日
0.2.6 2024年3月27日
0.1.9 2023年11月27日
0.1.2 2023年7月17日

#91 in GUI

Download history 186/week @ 2024-04-29 102/week @ 2024-05-06 39/week @ 2024-05-13 51/week @ 2024-05-20 107/week @ 2024-05-27 64/week @ 2024-06-03 47/week @ 2024-06-10 19/week @ 2024-06-17 37/week @ 2024-06-24 202/week @ 2024-07-01 192/week @ 2024-07-08 103/week @ 2024-07-15 96/week @ 2024-07-22 112/week @ 2024-07-29 122/week @ 2024-08-05 88/week @ 2024-08-12

419 个月下载量
用于 2 软件包

MIT 许可证

435KB
2.5K SLoC

Egui 代码编辑器

基于关键词集的简单语法高亮和编号行的 egui 文本编辑器小部件。

与 egui 一起使用

use egui_code_editor::{CodeEditor, ColorTheme, Syntax};

CodeEditor::default()
  .id_source("code editor")
  .with_rows(12)
  .with_fontsize(14.0)
  .with_theme(ColorTheme::GRUVBOX)
  .with_syntax(Syntax::rust())
  .with_numlines(true)
  .show(ui, &mut self.code);

作为无 egui 的词法分析器使用

Cargo.toml

[dependencies]
egui_code_editor = { version = "0.2" , default-features = false }
colorful = "0.2.2"

main.rs

use colorful::{Color, Colorful};
use egui_code_editor::{Syntax, Token, TokenType};

fn color(token: TokenType) -> Color {
    match token {
        TokenType::Comment(_) => Color::Grey37,
        TokenType::Function => Color::Yellow3b,
        TokenType::Keyword => Color::IndianRed1c,
        TokenType::Literal => Color::NavajoWhite1,
        TokenType::Numeric(_) => Color::MediumPurple,
        TokenType::Punctuation(_) => Color::Orange3,
        TokenType::Special => Color::Cyan,
        TokenType::Str(_) => Color::Green,
        TokenType::Type => Color::GreenYellow,
        TokenType::Whitespace(_) => Color::White,
        TokenType::Unknown => Color::Pink1,
    }
}

fn main() {
    let text = r#"// Code Editor
CodeEditor::default()
    .id_source("code editor")
    .with_rows(12)
    .with_fontsize(14.0)
    .with_theme(self.theme)
    .with_syntax(self.syntax.to_owned())
    .with_numlines(true)
    .vscroll(true)
    .show(ui, &mut self.code);
    "#;

    let syntax = Syntax::rust();
    for token in Token::default().tokens(&syntax, text) {
        print!("{}", token.buffer().color(color(token.ty())));
    }
}

主题

基于 Helix 编辑器 中的主题。

示例中使用的字体是 Toshi Omagari 的 Comic Code

Ayu

Ayu

Ayu 黑色

Ayu Dark

Ayu 映像

Ayu Mirage

Github 黑色

Github Dark

Github 白色

Github Light

Gruvbox

Gruvbox

Gruvbox 白色

Gruvbox Light

Sonokai

Sonokai

依赖项

~4.5–9.5MB
~82K SLoC