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