#syntax-highlighter #syntax-highlighting #language #extension #extendable

highlighter-languages

Officially maintained language extensions for Highlighter

1 unstable release

0.1.1-alpha Aug 28, 2022

#928 in Programming languages

21 downloads per month
Used in highlighter

MIT license

20KB
237 lines

Highlighter

An extendable syntax highlighter written in Rust.

Installation

Simply add highlighter to your dependencies:

[dependencies]
highlighter = "0.1.1-alpha"

Basic Usage

use highlighter::{highlight_language, HighlightTargetHtml};

fn main() {
    let result = highlight_language("brainheck", "++++++++ set current cell to 8").unwrap().unwrap();
    let html = HighlightTargetHtml::new()
        .build(result);
    println!(html);
}

Implementing Languages

To extend Highlighter, make a structure which implements the Language trait.

extern crate highlighter;

use highlighter::{core::language::{Language, Scope}, highlight, HighlighterTargetHtml};

/// My example programming language
pub struct MyLanguage;

impl Language for MyLanguage {
    fn name(&self) -> String {
        "my-language".to_string()
    }
    
    fn init(&self, cx: &mut highlighter::core::LexerContext) -> Result<(), highlighter::core::Error> {
        // Initialize the tokens in your language.
        cx.token(Scope::KeywordControl, "\\b(if|else|while|continue|break|return)\\b")?;
        cx.token(Scope::StorageType, "\\b(var|function)\\b")?;
        cx.token(Scope::ConstantNumber, "\\b([0-9][0-9_]*)\\b")?;
        cx.token(Scope::ConstantLanguage, "\\b(true|false)\\b")?;
        Ok(())
    }
}

fn main() {
    let tokens = highlight(MyLanguage, "var i = 0;").unwrap();
    let html = HighlighterTargetHtml::new()
        .build(tokens);
    
    println!("{}", html);
}

Dependencies

~2–3MB
~53K SLoC