[parsing] Add support for italic and bold segments surrounded by underscores (ISH-585)
This commit is contained in:
parent
4d85fce1cf
commit
aea5efd012
2 changed files with 12 additions and 3 deletions
|
@ -196,7 +196,8 @@ module private MfmParser =
|
||||||
}
|
}
|
||||||
|
|
||||||
// Patterns
|
// Patterns
|
||||||
let italicPattern = (notFollowedBy <| str "**") >>. skipChar '*'
|
let italicPattern = ((notFollowedBy <| str "**") >>. skipChar '*')
|
||||||
|
let italicPatternAlt = ((notFollowedBy <| str "__") >>. skipChar '_')
|
||||||
let codePattern = (notFollowedBy <| str "```") >>. skipChar '`'
|
let codePattern = (notFollowedBy <| str "```") >>. skipChar '`'
|
||||||
|
|
||||||
// Matchers
|
// Matchers
|
||||||
|
@ -207,6 +208,8 @@ module private MfmParser =
|
||||||
|
|
||||||
let italicNode =
|
let italicNode =
|
||||||
(italicPattern >>. pushLine >>. manyTill inlineNode italicPattern .>> assertLine)
|
(italicPattern >>. pushLine >>. manyTill inlineNode italicPattern .>> assertLine)
|
||||||
|
<|> (italicPatternAlt >>. pushLine >>. manyTill inlineNode italicPatternAlt
|
||||||
|
.>> assertLine)
|
||||||
<|> (skipString "<i>" >>. pushLine >>. manyTill inlineNode (skipString "</i>")
|
<|> (skipString "<i>" >>. pushLine >>. manyTill inlineNode (skipString "</i>")
|
||||||
.>> assertLine)
|
.>> assertLine)
|
||||||
|>> fun c -> MfmItalicNode(aggregateTextInline c) :> MfmNode
|
|>> fun c -> MfmItalicNode(aggregateTextInline c) :> MfmNode
|
||||||
|
@ -214,6 +217,8 @@ module private MfmParser =
|
||||||
let boldNode =
|
let boldNode =
|
||||||
(skipString "**" >>. pushLine >>. manyTill inlineNode (skipString "**")
|
(skipString "**" >>. pushLine >>. manyTill inlineNode (skipString "**")
|
||||||
.>> assertLine)
|
.>> assertLine)
|
||||||
|
<|> (skipString "__" >>. pushLine >>. manyTill inlineNode (skipString "__")
|
||||||
|
.>> assertLine)
|
||||||
<|> (skipString "<b>" >>. pushLine >>. manyTill inlineNode (skipString "</b>")
|
<|> (skipString "<b>" >>. pushLine >>. manyTill inlineNode (skipString "</b>")
|
||||||
.>> assertLine)
|
.>> assertLine)
|
||||||
|>> fun c -> MfmBoldNode(aggregateTextInline c) :> MfmNode
|
|>> fun c -> MfmBoldNode(aggregateTextInline c) :> MfmNode
|
||||||
|
|
|
@ -24,7 +24,9 @@ public class MfmTests
|
||||||
];
|
];
|
||||||
|
|
||||||
var res = Mfm.parse("*italic **bold** italic*").ToList();
|
var res = Mfm.parse("*italic **bold** italic*").ToList();
|
||||||
var resAlt = Mfm.parse("<i>italic <b>bold</b> italic</i>").ToList();
|
var resAlt = Mfm.parse("_italic **bold** italic_").ToList();
|
||||||
|
var resAlt2 = Mfm.parse("_italic __bold__ italic_").ToList();
|
||||||
|
var resAlt3 = Mfm.parse("<i>italic <b>bold</b> italic</i>").ToList();
|
||||||
var resMixed = Mfm.parse("<i>italic **bold** italic</i>").ToList();
|
var resMixed = Mfm.parse("<i>italic **bold** italic</i>").ToList();
|
||||||
var resMixedAlt = Mfm.parse("*italic <b>bold</b> italic*").ToList();
|
var resMixedAlt = Mfm.parse("*italic <b>bold</b> italic*").ToList();
|
||||||
|
|
||||||
|
@ -32,6 +34,8 @@ public class MfmTests
|
||||||
|
|
||||||
res.Should().Equal(expected, MfmNodeEqual);
|
res.Should().Equal(expected, MfmNodeEqual);
|
||||||
resAlt.Should().Equal(expected, MfmNodeEqual);
|
resAlt.Should().Equal(expected, MfmNodeEqual);
|
||||||
|
resAlt2.Should().Equal(expected, MfmNodeEqual);
|
||||||
|
resAlt3.Should().Equal(expected, MfmNodeEqual);
|
||||||
resMixed.Should().Equal(expected, MfmNodeEqual);
|
resMixed.Should().Equal(expected, MfmNodeEqual);
|
||||||
resMixedAlt.Should().Equal(expected, MfmNodeEqual);
|
resMixedAlt.Should().Equal(expected, MfmNodeEqual);
|
||||||
}
|
}
|
||||||
|
@ -380,7 +384,7 @@ public class MfmTests
|
||||||
{
|
{
|
||||||
var pre = Stopwatch.GetTimestamp();
|
var pre = Stopwatch.GetTimestamp();
|
||||||
Mfm.parse(mfm);
|
Mfm.parse(mfm);
|
||||||
var ms = Stopwatch.GetElapsedTime(pre).GetTotalMilliseconds();
|
var ms = Stopwatch.GetElapsedTime(pre).GetTotalMilliseconds();
|
||||||
Console.WriteLine($@"Took {ms} ms");
|
Console.WriteLine($@"Took {ms} ms");
|
||||||
return ms;
|
return ms;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue