list_info.ex (1229B)
1 defmodule EarmarkParser.Parser.ListInfo do 2 3 import EarmarkParser.Helpers.LookaheadHelpers, only: [opens_inline_code: 1, still_inline_code: 2] 4 5 @moduledoc false 6 7 @not_pending {nil, 0} 8 9 defstruct( 10 indent: 0, 11 lines: [], 12 loose?: false, 13 pending: @not_pending, 14 options: %EarmarkParser.Options{}, 15 width: 0 16 ) 17 18 def new(%EarmarkParser.Line.ListItem{initial_indent: ii, list_indent: width}=item, options) do 19 pending = opens_inline_code(item) 20 %__MODULE__{indent: ii, lines: [item.content], options: options, pending: pending, width: width} 21 end 22 23 def update_list_info(list_info, line, pending_line, loose? \\ false) do 24 prepend_line(list_info, line) |> _update_rest(pending_line, loose?) 25 end 26 27 def prepend_line(%__MODULE__{lines: lines}=list_info, line) do 28 %{list_info|lines: [line|lines]} 29 end 30 31 defp _update_rest(%{pending: @not_pending}=list_info, line, loose?) do 32 pending = opens_inline_code(line) 33 %{list_info | pending: pending, loose?: loose?} 34 end 35 36 defp _update_rest(%{pending: pending}=list_info, line, loose?) do 37 pending1 = still_inline_code(line, pending) 38 %{list_info | pending: pending1, loose?: loose?} 39 end 40 end 41 # SPDX-License-Identifier: Apache-2.0