Remove parser prefix
This commit is contained in:
61
src/org/org_properties_block.nim
Normal file
61
src/org/org_properties_block.nim
Normal file
@@ -0,0 +1,61 @@
|
||||
import std/sugar
|
||||
import std/strformat
|
||||
import std/collections/sequtils
|
||||
import std/strutils
|
||||
import results
|
||||
import fusion/matching
|
||||
|
||||
import ../utils/fp
|
||||
import ../parser/parser
|
||||
import ../parser/utils
|
||||
|
||||
{.experimental: "caseStmtMacros".}
|
||||
|
||||
let propertiesKeyParser* = ignore(ch(':')) + anyUntil(choice(@[str(": "), newline]))
|
||||
let propertiesValueParser* = ignore(str(":") + optional(ch(' '))) + optional(anyUntil(newline)) + ignore(newline)
|
||||
|
||||
let propertiesParser* = proc(parser: Parser): ParserResult {.closure.} =
|
||||
let tokens = parser.tokens
|
||||
|
||||
let keyTokenParser = parser
|
||||
.emptyTokens()
|
||||
.propertiesKeyParser()
|
||||
.flatMap(flattenParserTokens)
|
||||
|
||||
let valueTokenParser = keyTokenParser
|
||||
.map(emptyTokens)
|
||||
.flatMap(propertiesValueParser)
|
||||
.flatMap(flattenParserTokens)
|
||||
|
||||
case (keyTokenParser, valueTokenParser):
|
||||
of (Some(@key), Some(@value)):
|
||||
ok(Parser(
|
||||
state: value.state,
|
||||
tokens: tokens & @[
|
||||
key.tokens[0],
|
||||
value.tokens[0],
|
||||
]
|
||||
))
|
||||
else: valueTokenParser
|
||||
|
||||
let propertiesStartParser* = str(":PROPERTIES:") + newline
|
||||
let propertiesEndParser* = str(":PROPERTIES_END:")
|
||||
|
||||
let parseProperties* = @[
|
||||
ignore(propertiesStartParser),
|
||||
manyUntil(
|
||||
propertiesParser,
|
||||
propertiesEndParser,
|
||||
),
|
||||
# ignore(propertiesEndParser),
|
||||
]
|
||||
|
||||
when isMainModule:
|
||||
let example = initParserResult(""":PROPERTIES:
|
||||
:PROP_NAME: VALUE
|
||||
:PROP_NAME: VAL
|
||||
:PROP_NAME: 3
|
||||
:PROP_NAME: 2
|
||||
:PROPERTIES_END:""").parseSeq(parseProperties)
|
||||
|
||||
echo example
|
||||
Reference in New Issue
Block a user