21 lines
483 B
Elixir
21 lines
483 B
Elixir
defmodule ChiyaWeb.Outline do
|
|
@outline_regex ~r/\#{1,6}\s.+/
|
|
@heading_regex ~r/^(#+)\s(.+)$/
|
|
|
|
def get(markdown) do
|
|
headings =
|
|
@outline_regex
|
|
|> Regex.scan(markdown, capture: :all)
|
|
|
|
Enum.chunk_by(headings, fn h -> nil end)
|
|
end
|
|
|
|
def level(heading) do
|
|
Regex.scan(@heading_regex, heading)
|
|
|> Enum.map(fn [_, level, heading] ->
|
|
[level_from_string(level), heading]
|
|
end)
|
|
end
|
|
|
|
defp level_from_string(string), do: String.length(string)
|
|
end
|