hex.pm versionhex.pm downloadsAPI DocsMIT License

rustled_syntect

An Elixir binding for syntect, a syntax highlighting library written in Rust. Powered by Rustler. Supports line by line streaming and outputs I/O lists for that awesome writev call!

Installation

Add rustled_syntect to your project's dependencies in mix.exs:

def deps do
  [
    {:rustled_syntect, "~> 0.1.0"}
  ]
end

And fetch your project's dependencies:

$ mix deps.get

Usage

iex> RustledSyntect.hilite_stream(["(0..69).each do |x|", "  puts x", "end"], lang: "Ruby") |> Enum.into([]) |> IO.puts
<span class="source ruby"><span class="punctuation definition group begin ruby">(</span><span class="constant numeric ruby">0</span><span class="keyword operator ruby">..</span><span class="constant numeric ruby">69</span><span class="punctuation definition group end ruby">)</span><span class="punctuation accessor ruby">.</span>each <span class="keyword control start-block ruby">do</span> <span class="meta block parameters ruby"><span class="punctuation definition parameters begin ruby">|</span></span><span class="meta block parameters ruby"><span class="variable parameter ruby">x</span><span class="meta block parameters ruby"><span class="punctuation definition parameters end ruby">|</span></span></span>
  <span class="support function builtin ruby">puts</span> x
<span class="keyword control ruby">end</span></span>
iex> RustledSyntect.supported_langs
[
  %RustledSyntect.Syntax{
    file_extensions: ["txt"],
    first_line_match: nil,
    name: "Plain Text"
  },
  %RustledSyntect.Syntax{
    file_extensions: ["asa"],
    first_line_match: nil,
    name: "ASP"
  },
  %RustledSyntect.Syntax{
    file_extensions: ["asp"],
    first_line_match: nil,
    name: "HTML (ASP)"
  },
  %RustledSyntect.Syntax{
    file_extensions: ["as"],
    first_line_match: nil,
    name: "ActionScript"
  },
  %RustledSyntect.Syntax{
    file_extensions: ["applescript", "script editor"],
    first_line_match: "^#!.*(osascript)",
    name: "AppleScript"
  },
  
] 

Contributing

Please feel free to submit pull requests!

By participating in this project you agree to follow the Contributor Code of Conduct.

The list of contributors is available on GitHub.

License

Like Syntect itself, this binding is available under the MIT License.