Current section
Files
Jump to
Current section
Files
lib/minipeg/combinators/common.ex
defmodule Minipeg.Combinators.Common do
@moduledoc false
alias Minipeg.{Input, Parser, Types}
use Types
import Parser, only: [new: 2, parse: 3]
@spec ignore_ws(Parser.t, binary?(), boolean()) :: Parser.t
def ignore_ws(parser, name \\ nil, skip_newlines \\ false) do
name1 = name || "ignore_ws"
new(
name1,
fn input, cache, _ ->
{next, input1} = Input.take(input)
# IO.inspect(input1)
case next do
"" -> parse(parser, input, cache)
" " -> parse(ignore_ws(parser, name1, skip_newlines), input1, cache)
"\t" -> parse(ignore_ws(parser, name1, skip_newlines), input1, cache)
"\n" when skip_newlines -> parse(ignore_ws(parser, name1, skip_newlines), input1, cache)
_ -> parse(parser, input, cache)
end
end
)
end
end
# SPDX-License-Identifier: Apache-2.0