From a4f842e9469f3019659e0709699cfc0e3b01e513 Mon Sep 17 00:00:00 2001 From: Florian Schroedl Date: Thu, 20 Jan 2022 17:00:00 +0100 Subject: [PATCH] Move delimiter parser to internals --- src/org/org_text_delimiter.nim | 7 ------ src/parser/parser_internals.nim | 38 +++++++-------------------------- 2 files changed, 8 insertions(+), 37 deletions(-) diff --git a/src/org/org_text_delimiter.nim b/src/org/org_text_delimiter.nim index 63c7309..d387750 100644 --- a/src/org/org_text_delimiter.nim +++ b/src/org/org_text_delimiter.nim @@ -10,13 +10,6 @@ import ../parser/parser_internals import ../parser/parser_types import ../parser/builder_api -let parseBetweenDelimiter* = proc(start: (Parser -> ParserResult), stop: (Parser -> ParserResult)): (Parser -> ParserResult) {.closure.} = - ignore(start) + - anyUntil(stop + whitespace) + - ignore(start) - -let parseBetweenPair* = proc(delimiterParser: (Parser -> ParserResult)): (Parser -> ParserResult) {.closure.} = - parseBetweenDelimiter(delimiterParser, delimiterParser) let boldParser* = parseBetweenPair(ch('*')) let italicParser* = parseBetweenPair(ch('/')) diff --git a/src/parser/parser_internals.nim b/src/parser/parser_internals.nim index aa30d9b..bde6c2e 100644 --- a/src/parser/parser_internals.nim +++ b/src/parser/parser_internals.nim @@ -87,8 +87,7 @@ func str*(s: string): (Parser -> ParserResult) {.inline.} = p = p.flatMap(ch(c)) return p - -# -- Parsing Helper Functions +# -- Parsing API func optional*(parserFn: Parser -> ParserResult): (Parser -> ParserResult) {.inline.} = ## Parse characters and ignore failure @@ -187,33 +186,12 @@ proc whitespace*(parser: Parser): ParserResult = whitespaceParser(parser) .mapErr((x: ParserError) => x.setErrorExpectedField("Whitespace")) -# when isMainModule: -# proc getTokens(x: ParserResult): seq[string] = -# x.foldTokens( -# proc(err: ParserError): seq[string] = -# echo err -# @[], -# proc(xs: seq[ParserToken]): seq[string] = xs.map((x: ParserToken) => x.tokenStringValue()), -# ) +# -- Parsing Helpers -# proc testParser(x: string, ps: seq[Parser -> ParserResult]): seq[string] = -# initParserResult(x).parseSeq(ps).getTokens() +let parseBetweenDelimiter* = proc(start: (Parser -> ParserResult), stop: (Parser -> ParserResult)): (Parser -> ParserResult) {.closure.} = + ignore(start) + + anyUntil(stop + whitespace) + + ignore(start) -# let optionalPrefixParser = @[ -# optional(ch('_')), -# str("ABC") -# ] -# assert: "_ABC".testParser(optionalPrefixParser) == @["_", "A", "B", "C"] -# assert: "ABC".testParser(optionalPrefixParser) == @["A", "B", "C"] - -# let andParser = @[ -# (ch('A') + ch('B')), -# ch('C'), -# ] -# assert: "ABC".testParser(andParser) == @["A", "B", "C"] - -# let newlineParserTest = @[ -# str("ABC"), -# newline -# ] -# assert "ABC\n".testParser(newlineParserTest) == @["A", "B", "C", "\n"] +let parseBetweenPair* = proc(delimiterParser: (Parser -> ParserResult)): (Parser -> ParserResult) {.closure.} = + parseBetweenDelimiter(delimiterParser, delimiterParser)