Packages
mdex
0.13.4
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.5
retired
0.12.4
0.12.3
0.12.2
0.12.1
0.12.0
0.11.7
0.11.6
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.2
0.6.1
0.6.0
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.0
0.1.18
0.1.17
0.1.16
0.1.15
0.1.14
0.1.13
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Fast and extensible Markdown for Elixir
Current section
Files
Jump to
Current section
Files
examples/syntax_highlight.livemd
<!-- livebook:{"persist_outputs":true} -->
# Syntax highlighting
## Pick an engine
MDEx can highlight fenced code blocks with [Lumis](https://mdex.hexdocs.pm/lumis.html) or [Syntect](https://mdex.hexdocs.pm/syntect.html).
You must opt in to the syntax highlighter you want before `:mdex_native` is compiled.
If no highlighter is configured, fenced code blocks render normally without syntax highlighting and a language class which is useful to apply syntax highlighting after the document generation, for example to highlight using Makeup or Shiki.
## Lumis
Add Lumis to your deps if you want to use `engine: :lumis`:
<!-- livebook:{"force_markdown":true} -->
```elixir
{:lumis, "~> 0.1"}
```
And configure `:mdex_native` to download the Lumis NIF:
<!-- livebook:{"force_markdown":true} -->
```elixir
import Config
config :mdex_native, syntax_highlighter: :lumis
```
## Syntect
Configure `:mdex_native` to download the Syntect NIF:
<!-- livebook:{"force_markdown":true} -->
```elixir
import Config
config :mdex_native, syntax_highlighter: :syntect
```
## Passing options
Syntax highlighting is configured through regular MDEx options:
<!-- livebook:{"force_markdown":true} -->
```elixir
MDEx.to_html!(markdown,
syntax_highlight: [engine: :lumis, opts: [formatter: {:html_inline, theme: "github_light"}]]
)
```
If another library calls MDEx for you, pass the same option through that library's MDEx configuration.
For example in Tableau:
<!-- livebook:{"force_markdown":true} -->
```elixir
config :tableau, :config,
markdown: [
mdex: [
syntax_highlight: [engine: :lumis, opts: [formatter: {:html_inline, theme: "github_light"}]]
]
]
```
## More examples
See the [Lumis syntax highlighting](https://mdex.hexdocs.pm/lumis.html) guide for formatters, linked CSS, line highlights, light/dark themes, and code fence decorators.
See the [Syntect syntax highlighting](https://mdex.hexdocs.pm/syntect.html) to enable it and examples.
Note that Code fence decorators such as `highlight_lines` and per-block `theme` are exclusive Lumis options. See `examples/code_block_decorators.livemd` for those.