a fork of iceshrimp.net but a tweaked frontend to my personal liking. waow
fediverse social-media social iceshrimp fedi
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

[parsing] Require whitespace in front of mfm italic nodes using asterisk or underscore delimiters

This ensures matching behavior with mfm.js

+48 -11
+22 -11
Iceshrimp.Parsing/Mfm.fs
··· 207 207 208 208 // Node parsers 209 209 210 + let italicNode1 = 211 + previousCharSatisfiesNot isNotWhitespace 212 + >>. italicPattern 213 + >>. pushLine 214 + >>. manyTill inlineNode italicPattern 215 + .>> assertLine 216 + 217 + let italicNode2 = 218 + previousCharSatisfiesNot isNotWhitespace 219 + >>. italicPatternAlt 220 + >>. pushLine 221 + >>. manyTill inlineNode italicPatternAlt 222 + .>> assertLine 223 + 224 + let italicNode3 = 225 + skipString "<i>" >>. pushLine >>. manyTill inlineNode (skipString "</i>") 226 + .>> assertLine 227 + 210 228 let italicNode = 211 - (italicPattern >>. pushLine >>. manyTill inlineNode italicPattern .>> assertLine) 212 - <|> (italicPatternAlt >>. pushLine >>. manyTill inlineNode italicPatternAlt 213 - .>> assertLine) 214 - <|> (skipString "<i>" >>. pushLine >>. manyTill inlineNode (skipString "</i>") 215 - .>> assertLine) 229 + italicNode1 <|> italicNode2 <|> italicNode3 216 230 |>> fun c -> MfmItalicNode(aggregateTextInline c) :> MfmNode 217 231 218 232 let boldNode = ··· 381 395 fnNode 382 396 charNode ] 383 397 384 - let simpleNodeSeq = 385 - [ plainNode 386 - emojiCodeNode 387 - charNode ] 398 + let simpleNodeSeq = [ plainNode; emojiCodeNode; charNode ] 388 399 389 400 let blockNodeSeq = 390 401 [ plainNode; centerNode; smallNode; codeBlockNode; mathBlockNode; quoteNode ] ··· 395 406 do nodeRef.Value <- choice <| seqAttempt (seqFlatten <| nodeSeq) 396 407 397 408 do inlineNodeRef.Value <- choice <| (seqAttempt inlineNodeSeq) |>> fun v -> v :?> MfmInlineNode 398 - 409 + 399 410 do simpleRef.Value <- choice <| seqAttempt simpleNodeSeq 400 411 401 412 // Final parse command 402 413 let parse = spaces >>. manyTill node eof .>> spaces 403 - 414 + 404 415 let parseSimple = spaces >>. manyTill simple eof .>> spaces 405 416 406 417 open MfmParser
+26
Iceshrimp.Tests/Parsing/MfmTests.cs
··· 41 41 } 42 42 43 43 [TestMethod] 44 + public void TestItalicNegative() 45 + { 46 + List<MfmNode> expected = [new MfmTextNode("test*test*test")]; 47 + List<MfmNode> expectedAlt = [new MfmTextNode("test_test_test")]; 48 + 49 + Mfm.parse("test*test*test").ToList().Should().Equal(expected, MfmNodeEqual); 50 + Mfm.parse("test_test_test").ToList().Should().Equal(expectedAlt, MfmNodeEqual); 51 + 52 + expected = [new MfmTextNode("test*test* test")]; 53 + expectedAlt = [new MfmTextNode("test_test_ test")]; 54 + 55 + Mfm.parse("test*test* test").ToList().Should().Equal(expected, MfmNodeEqual); 56 + Mfm.parse("test_test_ test").ToList().Should().Equal(expectedAlt, MfmNodeEqual); 57 + 58 + expected = 59 + [ 60 + new MfmTextNode("test "), 61 + new MfmItalicNode(ListModule.OfSeq<MfmInlineNode>([new MfmTextNode("test")])), 62 + new MfmTextNode("test") 63 + ]; 64 + 65 + Mfm.parse("test *test*test").ToList().Should().Equal(expected, MfmNodeEqual); 66 + Mfm.parse("test _test_test").ToList().Should().Equal(expected, MfmNodeEqual); 67 + } 68 + 69 + [TestMethod] 44 70 public void TestParseList() 45 71 { 46 72 const string input = """