[parsing/mfm] Fix handling of newlines surrounding code blocks
This commit is contained in:
parent
4c21cb5a1c
commit
0fc667527f
3 changed files with 7 additions and 3 deletions
|
@ -15,9 +15,9 @@ public static class MfmSerializer
|
||||||
{
|
{
|
||||||
case MfmCodeBlockNode mfmCodeBlockNode:
|
case MfmCodeBlockNode mfmCodeBlockNode:
|
||||||
{
|
{
|
||||||
result.Append($"```{mfmCodeBlockNode.Language?.Value ?? ""}\n");
|
result.Append($"\n```{mfmCodeBlockNode.Language?.Value ?? ""}\n");
|
||||||
result.Append(mfmCodeBlockNode.Code);
|
result.Append(mfmCodeBlockNode.Code);
|
||||||
result.Append("\n```");
|
result.Append("\n```\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MfmMathBlockNode mfmMathBlockNode:
|
case MfmMathBlockNode mfmMathBlockNode:
|
||||||
|
|
|
@ -202,11 +202,13 @@ module private MfmParser =
|
||||||
|>> fun v -> MfmInlineCodeNode(v) :> MfmNode
|
|>> fun v -> MfmInlineCodeNode(v) :> MfmNode
|
||||||
|
|
||||||
let codeBlockNode =
|
let codeBlockNode =
|
||||||
previousCharSatisfiesNot isNotWhitespace
|
opt (previousCharSatisfies isNewline >>. skipNewline)
|
||||||
|
>>. previousCharSatisfiesNot isNotNewline
|
||||||
>>. skipString "```"
|
>>. skipString "```"
|
||||||
>>. opt (many1CharsTill asciiLetter (lookAhead newline))
|
>>. opt (many1CharsTill asciiLetter (lookAhead newline))
|
||||||
.>>. (skipNewline
|
.>>. (skipNewline
|
||||||
>>. manyCharsTill anyChar (attempt (skipNewline >>. skipString "```")))
|
>>. manyCharsTill anyChar (attempt (skipNewline >>. skipString "```")))
|
||||||
|
.>> (opt <| attempt (skipNewline >>. nextCharSatisfies isNewline))
|
||||||
|>> fun (lang: string option, code: string) -> MfmCodeBlockNode(code, lang) :> MfmNode
|
|>> fun (lang: string option, code: string) -> MfmCodeBlockNode(code, lang) :> MfmNode
|
||||||
|
|
||||||
let mathNode =
|
let mathNode =
|
||||||
|
|
|
@ -142,9 +142,11 @@ public class MfmTests
|
||||||
{
|
{
|
||||||
const string input = """
|
const string input = """
|
||||||
test 123
|
test 123
|
||||||
|
|
||||||
```
|
```
|
||||||
this is a code block
|
this is a code block
|
||||||
```
|
```
|
||||||
|
|
||||||
test 123
|
test 123
|
||||||
""";
|
""";
|
||||||
List<MfmNode> expected =
|
List<MfmNode> expected =
|
||||||
|
|
Loading…
Add table
Reference in a new issue