[parsing/mfm] Add simple MFM parser
This commit is contained in:
parent
28548a5770
commit
16f617b1e2
1 changed files with 15 additions and 0 deletions
|
@ -188,6 +188,7 @@ module private MfmParser =
|
||||||
// References
|
// References
|
||||||
let node, nodeRef = createParserForwardedToRef ()
|
let node, nodeRef = createParserForwardedToRef ()
|
||||||
let inlineNode, inlineNodeRef = createParserForwardedToRef ()
|
let inlineNode, inlineNodeRef = createParserForwardedToRef ()
|
||||||
|
let simple, simpleRef = createParserForwardedToRef ()
|
||||||
|
|
||||||
let seqFlatten items =
|
let seqFlatten items =
|
||||||
seq {
|
seq {
|
||||||
|
@ -380,6 +381,11 @@ module private MfmParser =
|
||||||
fnNode
|
fnNode
|
||||||
charNode ]
|
charNode ]
|
||||||
|
|
||||||
|
let simpleNodeSeq =
|
||||||
|
[ plainNode
|
||||||
|
emojiCodeNode
|
||||||
|
charNode ]
|
||||||
|
|
||||||
let blockNodeSeq =
|
let blockNodeSeq =
|
||||||
[ plainNode; centerNode; smallNode; codeBlockNode; mathBlockNode; quoteNode ]
|
[ plainNode; centerNode; smallNode; codeBlockNode; mathBlockNode; quoteNode ]
|
||||||
|
|
||||||
|
@ -390,9 +396,13 @@ module private MfmParser =
|
||||||
|
|
||||||
do inlineNodeRef.Value <- choice <| (seqAttempt inlineNodeSeq) |>> fun v -> v :?> MfmInlineNode
|
do inlineNodeRef.Value <- choice <| (seqAttempt inlineNodeSeq) |>> fun v -> v :?> MfmInlineNode
|
||||||
|
|
||||||
|
do simpleRef.Value <- choice <| seqAttempt simpleNodeSeq
|
||||||
|
|
||||||
// Final parse command
|
// Final parse command
|
||||||
let parse = spaces >>. manyTill node eof .>> spaces
|
let parse = spaces >>. manyTill node eof .>> spaces
|
||||||
|
|
||||||
|
let parseSimple = spaces >>. manyTill simple eof .>> spaces
|
||||||
|
|
||||||
open MfmParser
|
open MfmParser
|
||||||
|
|
||||||
module Mfm =
|
module Mfm =
|
||||||
|
@ -400,3 +410,8 @@ module Mfm =
|
||||||
match runParserOnString parse 0 "" str with
|
match runParserOnString parse 0 "" str with
|
||||||
| Success(result, _, _) -> aggregateText result
|
| Success(result, _, _) -> aggregateText result
|
||||||
| Failure(s, _, _) -> failwith $"Failed to parse MFM: {s}"
|
| Failure(s, _, _) -> failwith $"Failed to parse MFM: {s}"
|
||||||
|
|
||||||
|
let parseSimple str =
|
||||||
|
match runParserOnString parseSimple 0 "" str with
|
||||||
|
| Success(result, _, _) -> aggregateText result
|
||||||
|
| Failure(s, _, _) -> failwith $"Failed to parse MFM: {s}"
|
||||||
|
|
Loading…
Add table
Reference in a new issue