From 16f617b1e273682bf129f6f35ffed00d90391db2 Mon Sep 17 00:00:00 2001 From: pancakes Date: Tue, 5 Nov 2024 13:42:18 +1000 Subject: [PATCH] [parsing/mfm] Add simple MFM parser --- Iceshrimp.Parsing/Mfm.fs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Iceshrimp.Parsing/Mfm.fs b/Iceshrimp.Parsing/Mfm.fs index d051ea9b..37d18a18 100644 --- a/Iceshrimp.Parsing/Mfm.fs +++ b/Iceshrimp.Parsing/Mfm.fs @@ -188,6 +188,7 @@ module private MfmParser = // References let node, nodeRef = createParserForwardedToRef () let inlineNode, inlineNodeRef = createParserForwardedToRef () + let simple, simpleRef = createParserForwardedToRef () let seqFlatten items = seq { @@ -380,6 +381,11 @@ module private MfmParser = fnNode charNode ] + let simpleNodeSeq = + [ plainNode + emojiCodeNode + charNode ] + let blockNodeSeq = [ plainNode; centerNode; smallNode; codeBlockNode; mathBlockNode; quoteNode ] @@ -389,9 +395,13 @@ module private MfmParser = do nodeRef.Value <- choice <| seqAttempt (seqFlatten <| nodeSeq) do inlineNodeRef.Value <- choice <| (seqAttempt inlineNodeSeq) |>> fun v -> v :?> MfmInlineNode + + do simpleRef.Value <- choice <| seqAttempt simpleNodeSeq // Final parse command let parse = spaces >>. manyTill node eof .>> spaces + + let parseSimple = spaces >>. manyTill simple eof .>> spaces open MfmParser @@ -400,3 +410,8 @@ module Mfm = match runParserOnString parse 0 "" str with | Success(result, _, _) -> aggregateText result | 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}"