diff --git a/src/org/org_text_delimiter.nim b/src/org/org_text_delimiter.nim index f11a790..ef94b54 100644 --- a/src/org/org_text_delimiter.nim +++ b/src/org/org_text_delimiter.nim @@ -9,17 +9,20 @@ import ../utils/fp import ../parser/parser_internals import ../parser/parser_types -let parseBetweenDelimiter* = proc(delimiterParser: (Parser -> ParserResult)): (Parser -> ParserResult) {.closure.} = - ignore(delimiterParser) + - anyUntil(delimiterParser + whitespace) + - ignore(delimiterParser) +let parseBetweenDelimiter* = proc(start: (Parser -> ParserResult), stop: (Parser -> ParserResult)): (Parser -> ParserResult) {.closure.} = + ignore(start) + + anyUntil(stop + whitespace) + + ignore(start) -let boldParser* = parseBetweenDelimiter(ch('*')) -let italicParser* = parseBetweenDelimiter(ch('/')) -let underlineParser* = parseBetweenDelimiter(ch('_')) -let verbatimParser* = parseBetweenDelimiter(ch('=')) -let codeParser* = parseBetweenDelimiter(ch('~')) -let strikeThroughParser* = parseBetweenDelimiter(ch('+')) +let parseBetweenIdenticalDelimiter* = proc(delimiterParser: (Parser -> ParserResult)): (Parser -> ParserResult) {.closure.} = + parseBetweenDelimiter(delimiterParser, delimiterParser) + +let boldParser* = parseBetweenIdenticalDelimiter(ch('*')) +let italicParser* = parseBetweenIdenticalDelimiter(ch('/')) +let underlineParser* = parseBetweenIdenticalDelimiter(ch('_')) +let verbatimParser* = parseBetweenIdenticalDelimiter(ch('=')) +let codeParser* = parseBetweenIdenticalDelimiter(ch('~')) +let strikeThroughParser* = parseBetweenIdenticalDelimiter(ch('+')) type OrgBuilderT* = OrgElement type OrgBuilder* = Builder[OrgBuilderT]