[parsing/mfm] Add simple MFM parser

This commit is contained in:
pancakes 2024-11-05 13:42:18 +10:00 committed by Laura Hausmann
parent 28548a5770
commit 16f617b1e2
No known key found for this signature in database
GPG key ID: D044E84C5BE01605

View file

@ -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}"