Packages
mdex
0.7.2
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
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
examples/highlight.exs
Mix.install([
{:mdex, path: ".."}
])
defmodule HighlightExample do
import MDEx.Sigil
def run do
opts = [
render: [unsafe: true]
]
markdown = ~MD"""
# Highlight Example
Transform double equal signals into `<mark>` tags as described at https://www.markdownguide.org/extended-syntax/#highlight
==Because== I need to highlight these ==very important words== and also these ==other words too==
"""
document =
Kernel.update_in(markdown, [:document, Access.key!(:nodes), Access.all(), :text], fn %MDEx.Text{literal: literal} ->
# break each text literal into blocks separated by =={text}==
case Regex.split(~r/==.*?==/, literal, include_captures: true, trim: true) do
# single text means no == == found
[text] ->
%MDEx.Text{literal: text}
# return HtmlBlock <mark> for each == or just text
blocks ->
blocks =
Enum.map(blocks, fn
"==" <> rest ->
marked_text = "<mark>" <> String.replace_suffix(rest, "==", "</mark>")
%MDEx.HtmlBlock{literal: marked_text}
text ->
%MDEx.Text{literal: text}
end)
%MDEx.Paragraph{nodes: blocks}
end
end)
html = MDEx.to_html!(document, opts)
File.write!("highlight.html", html)
IO.puts(html)
end
end
HighlightExample.run()