defmodule Minipeg.Combinators.Convenience do @moduledoc ~S""" Convenience combinators, combining more basic combinators and mappers """ use Minipeg.Types alias Minipeg.Combinators.{Base, Mapping} alias Minipeg.Parser @spec many_as_string(Parser.t(), maybe(binary), non_neg_integer()) :: Parser.t() def many_as_string(parser, name \\ nil, min_count \\ 0) do Base.many(parser, name, min_count) |> Mapping.map(&IO.chardata_to_string/1) end @spec many_sel(list(Parser.t()), maybe(binary), non_neg_integer()) :: Parser.t() def many_sel(parsers, name \\ nil, min_count \\ 0) do name1 = name || ("many_sel:[#{parsers |> Enum.map_join("|", &(&1.name))}]") Base.many(Base.select(parsers), name1, min_count) end def many_seq(parsers, name \\ nil, min_count \\ 0) do name1 = name || ("many_seq:[#{parsers |> Enum.map_join("...", &(&1.name))}]") Base.many(Base.sequence(parsers), name1, min_count) end end # SPDX-License-Identifier: Apache-2.0