1defmodule Earmark.Helpers.ReparseHelpers do
2
3  alias Earmark.Line
4
5  @doc """
6    Extract the verbatim text of `%Earmark.Line.t` elements with less alignment so that
7    it can be reparsed (as elements of list items).
8  """
9  # In case we are inside a code block we return the verbatim text
10  def indent_list_item_body(%{inside_code: true, line: line}, _level) do
11    line
12  end
13  # Sublistitems are **always** 2 spaces relative to the main list
14  def indent_list_item_body(%Line.ListItem{line: line}, _target_level) do
15    String.slice(line, 2..-1)
16  end
17  # Add additional spaces for any indentation past level 1
18  def indent_list_item_body(%Line.Indent{level: level, content: content}, target_level)
19  when level * 4 == target_level do
20    content
21  end
22
23  def indent_list_item_body(%Line.Indent{level: level, content: content}, target_level)
24  when level * 4  > target_level do
25    String.duplicate(" ", level *4 - target_level) <> content
26  end
27
28  def indent_list_item_body(line, _) do
29    line.content
30  end
31
32
33  @doc """
34    Extract the verbatim text of `%Earmark.Line.t` elements with less alignment so that
35    it can be reparsed (as elements of footnotes or indented code)
36  """
37  # In case we are inside a code block we return the verbatim text
38  def properly_indent(%{inside_code: true, line: line}, _level) do
39    line
40  end
41  # Add additional spaces for any indentation past level 1
42  def properly_indent(%Line.Indent{level: level, content: content}, target_level)
43  when level == target_level do
44    content
45  end
46  def properly_indent(%Line.Indent{level: level, content: content}, target_level)
47  when level > target_level do
48    String.duplicate("    ", level-target_level) <> content
49  end
50  def properly_indent(line, _) do
51    line.content
52  end
53end
54
55# SPDX-License-Identifier: Apache-2.0
56