Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
josefpihrt committed Jul 22, 2023
1 parent 72aa798 commit 33ff1a5
Show file tree
Hide file tree
Showing 17 changed files with 334 additions and 71 deletions.
74 changes: 72 additions & 2 deletions src/DotMarkdown.Docusaurus.Tests/DocusaurusMarkdownWriterTests.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
// Copyright (c) Josef Pihrt. All rights reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using DotMarkdown.Linq.Docusaurus;
using DotMarkdown.Docusaurus.Linq;
using DotMarkdown.Tests;
using Xunit;
using static DotMarkdown.Linq.Docusaurus.DocusaurusMarkdownFactory;
using static DotMarkdown.Docusaurus.Linq.DocusaurusMarkdownFactory;
using static DotMarkdown.Docusaurus.Tests.DocusaurusTestHelpers;
using static DotMarkdown.Tests.TestHelpers;

namespace DotMarkdown.Docusaurus.Tests;
Expand Down Expand Up @@ -51,6 +52,41 @@ public static void MarkdownWriter_Write_DocusaurusCodeBlock_CodeBlockOptionsNone
```{DefaultText}
{Chars}
```
{DefaultText}";

Assert.Equal(expected.NormalizeNewLine(), mw.ToStringAndClear());
}

[Fact]
public static void MarkdownWriter_Write_DocusaurusCodeBlock_LineNumbers()
{
DocusaurusMarkdownWriter mw = CreateWriterWithLineNumbers(includeLineNumbers: true);

mw.Write(DefaultText);
mw.Write(DocusaurusCodeBlock(Chars, DefaultText, showLineNumbers: null));
mw.Write(DocusaurusCodeBlock(Chars, DefaultText, showLineNumbers: true));
mw.Write(DocusaurusCodeBlock(Chars, DefaultText, showLineNumbers: false));
mw.Write(DocusaurusCodeBlock(Chars, DefaultText, "file1.txt"));
mw.Write(DefaultText);

string expected = $@"{DefaultText}
```{DefaultText} showLineNumbers
{Chars}
```
```{DefaultText} showLineNumbers
{Chars}
```
```{DefaultText}
{Chars}
```
```{DefaultText} title=""file1.txt""
{Chars}
```
{DefaultText}";

Assert.Equal(expected.NormalizeNewLine(), mw.ToStringAndClear());
Expand All @@ -75,6 +111,40 @@ public static void MarkdownWriter_Write_DocusaurusAdmonition(AdmonitionKind kind
:::
";

Assert.Equal(expected.NormalizeNewLine(), mw.ToStringAndClear());
}

[Fact]
public static void MarkdownWriter_Write_DocusaurusAdmonition_NoTitle()
{
DocusaurusMarkdownWriter mw = CreateWriterWithBlankLines(admonitionBlankLines: false);

MDocusaurusAdmonition admonition = DocusaurusAdmonition(AdmonitionKind.Note, Chars);
admonition.WriteTo(mw);

string expected = $@":::note
{CharsEscaped}
:::
";

Assert.Equal(expected.NormalizeNewLine(), mw.ToStringAndClear());
}

[Fact]
public static void MarkdownWriter_Write_DocusaurusAdmonition_NoBlankLines()
{
DocusaurusMarkdownWriter mw = CreateWriterWithBlankLines(admonitionBlankLines: false);

MDocusaurusAdmonition admonition = DocusaurusAdmonition(AdmonitionKind.Note, Chars, "Title");
admonition.WriteTo(mw);

string expected = $@":::note Title
{CharsEscaped}
:::
";

Assert.Equal(expected.NormalizeNewLine(), mw.ToStringAndClear());
Expand Down
19 changes: 17 additions & 2 deletions src/DotMarkdown.Docusaurus.Tests/DocusaurusTestHelpers.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,29 @@
// Copyright (c) Josef Pihrt. All rights reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using DotMarkdown.Linq.Docusaurus;
using DotMarkdown.Docusaurus.Linq;
using static DotMarkdown.Tests.TestHelpers;

namespace DotMarkdown.Docusaurus.Tests;

internal static class DocusaurusTestHelpers
{
public static DocusaurusMarkdownWriter CreateWriterWithLineNumbers(bool includeLineNumbers = false)
{
return CreateDocusaurusWriter(CreateWriter(), new DocusaurusMarkdownFormat(codeLineNumbers: includeLineNumbers));
}

public static DocusaurusMarkdownWriter CreateWriterWithBlankLines(bool admonitionBlankLines = true)
{
return CreateDocusaurusWriter(CreateWriter(), new DocusaurusMarkdownFormat(admonitionBlankLines: admonitionBlankLines));
}

public static DocusaurusMarkdownWriter CreateDocusaurusWriter(MarkdownWriter writer, DocusaurusMarkdownFormat? format = null)
{
return new DocusaurusMarkdownWriter(writer, format);
}

public static MDocusaurusCodeBlock CreateDocusaurusCodeBlock()
{
return new MDocusaurusCodeBlock(CodeBlockText(), CodeBlockInfo(), "file.txt", showLineNumbers: true);
return new MDocusaurusCodeBlock(CodeBlockText(), CodeBlockInfo(), "file.txt", includeLineNumbers: true);
}
}
9 changes: 8 additions & 1 deletion src/DotMarkdown.Docusaurus.Tests/Extensions.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
// Copyright (c) Josef Pihrt. All rights reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System.Text.RegularExpressions;
using DotMarkdown.Docusaurus.Linq;
using DotMarkdown.Tests;
using DotMarkdown.Linq.Docusaurus;

namespace DotMarkdown.Docusaurus.Tests;

Expand All @@ -19,4 +19,11 @@ public static MDocusaurusCodeBlock Modify(this MDocusaurusCodeBlock block)
{
return new MDocusaurusCodeBlock(block.Text.Modify(), block.Info!.Modify());
}

public static string? ToStringAndClear(this DocusaurusMarkdownWriter mw)
{
string? s = mw.Writer.ToString();
((MarkdownStringWriter)mw.Writer).GetStringBuilder().Clear();
return s;
}
}
8 changes: 3 additions & 5 deletions src/DotMarkdown.Docusaurus.Tests/MDocusaurusCodeBlockTests.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
// Copyright (c) Josef Pihrt. All rights reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using DotMarkdown.Linq;
using DotMarkdown.Linq.Docusaurus;
using DotMarkdown.Tests;
using Xunit;
using static DotMarkdown.Tests.TestHelpers;
using static DotMarkdown.Docusaurus.Tests.DocusaurusTestHelpers;
using DotMarkdown.Docusaurus.Linq;

namespace DotMarkdown.Docusaurus.Tests;

Expand Down Expand Up @@ -67,7 +65,7 @@ public static void MDocusaurusCodeBlock_OperatorNotEquals()
public static void MDocusaurusCodeBlock_Constructor_AssignText()
{
string text = CodeBlockText();
var block = new MDocusaurusCodeBlock(text: text, info: CodeBlockInfo());
var block = new MDocusaurusCodeBlock(text: text, language: CodeBlockInfo());

Assert.Equal(text, block.Text);
}
Expand All @@ -76,7 +74,7 @@ public static void MDocusaurusCodeBlock_Constructor_AssignText()
public static void MDocusaurusCodeBlock_Constructor_AssignInfo()
{
string info = CodeBlockInfo();
var block = new MDocusaurusCodeBlock(text: CodeBlockText(), info: info);
var block = new MDocusaurusCodeBlock(text: CodeBlockText(), language: info);

Assert.Equal(info, block.Info);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,19 @@

namespace DotMarkdown.Docusaurus;

//TODO:
public class DocusaurusMarkdownFormat
{
public static DocusaurusMarkdownFormat Default { get; } = new();

public DocusaurusMarkdownFormat(
bool codeBlockLineNumber = false,
bool admonitionEmptyLines = true)
bool codeLineNumbers = false,
bool admonitionBlankLines = true)
{
CodeBlockLineNumber = codeBlockLineNumber;
AdmonitionEmptyLines = admonitionEmptyLines;
CodeLineNumbers = codeLineNumbers;
AdmonitionBlankLines = admonitionBlankLines;
}

public bool CodeBlockLineNumber { get; }
public bool CodeLineNumbers { get; }

public bool AdmonitionEmptyLines { get; }
public bool AdmonitionBlankLines { get; }
}
152 changes: 152 additions & 0 deletions src/DotMarkdown.Docusaurus/Docusaurus/DocusaurusMarkdownWriter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
// Copyright (c) Josef Pihrt. All rights reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.Collections.Generic;

namespace DotMarkdown.Docusaurus;

public sealed class DocusaurusMarkdownWriter : MarkdownWriter
{
public DocusaurusMarkdownWriter(MarkdownWriter writer, DocusaurusMarkdownFormat? format = null)
{
Writer = writer ?? throw new ArgumentNullException(nameof(writer));
DocusaurusFormat = format ?? DocusaurusMarkdownFormat.Default;
}

public MarkdownWriter Writer { get; }

public DocusaurusMarkdownFormat DocusaurusFormat { get; }

public void WriteDocusaurusCodeBlock(string text, string? language = null, string? title = null, bool? includeLineNumbers = null)
{
Writer.WriteDocusaurusCodeBlock(text, language, title, includeLineNumbers ?? DocusaurusFormat.CodeLineNumbers);
}

public void WriteDocusaurusNote(string text, string? title = null)
{
WriteDocusaurusAdmonition(AdmonitionKind.Note, text, title);
}

public void WriteDocusaurusTip(string text, string? title = null)
{
WriteDocusaurusAdmonition(AdmonitionKind.Tip, text, title);
}

public void WriteDocusaurusInfo(string text, string? title = null)
{
WriteDocusaurusAdmonition(AdmonitionKind.Info, text, title);
}

public void WriteDocusaurusCaution(string text, string? title = null)
{
WriteDocusaurusAdmonition(AdmonitionKind.Caution, text, title);
}

public void WriteDocusaurusDanger(string text, string? title = null)
{
WriteDocusaurusAdmonition(AdmonitionKind.Danger, text, title);
}

public void WriteDocusaurusAdmonition(AdmonitionKind kind, string text, string? title = null)
{
string admonition = kind switch
{
AdmonitionKind.Note => "note",
AdmonitionKind.Tip => "tip",
AdmonitionKind.Info => "info",
AdmonitionKind.Caution => "caution",
AdmonitionKind.Danger => "danger",
_ => throw new ArgumentException($"Unknown {nameof(AdmonitionKind)} '{kind}'", nameof(kind))
};

Writer.WriteDocusaurusAdmonition(admonition, text, title, includeBlankLines: DocusaurusFormat.AdmonitionBlankLines);
}

public override WriteState WriteState => Writer.WriteState;

public override void Flush() => Writer.Flush();

public override void WriteAutolink(string url) => Writer.WriteAutolink(url);

public override void WriteCharEntity(char value) => Writer.WriteCharEntity(value);

public override void WriteComment(string text) => Writer.WriteComment(text);

public override void WriteEndBlockQuote() => Writer.WriteEndBlockQuote();

public override void WriteEndBold() => Writer.WriteEndBold();

public override void WriteEndBulletItem() => Writer.WriteEndBulletItem();

public override void WriteEndHeading() => Writer.WriteEndHeading();

public override void WriteEndItalic() => Writer.WriteEndItalic();

public override void WriteEndLink(string url, string? title = null) => Writer.WriteEndLink(url, title);

public override void WriteEndOrderedItem() => Writer.WriteEndOrderedItem();

public override void WriteEndStrikethrough() => Writer.WriteEndStrikethrough();

public override void WriteEndTable() => Writer.WriteEndTable();

public override void WriteEndTableCell() => Writer.WriteEndTableCell();

public override void WriteEndTableRow() => Writer.WriteEndTableRow();

public override void WriteEndTaskItem() => Writer.WriteEndTaskItem();

public override void WriteEntityRef(string name) => Writer.WriteEntityRef(name);

public override void WriteFencedCodeBlock(string text, string? info = null) => Writer.WriteFencedCodeBlock(text, info);

public override void WriteHorizontalRule(HorizontalRuleStyle style, int count = 3, string? separator = " ") => Writer.WriteHorizontalRule(style, count, separator);

public override void WriteImage(string text, string url, string? title = null) => Writer.WriteImage(text, url, title);

public override void WriteImageReference(string text, string label) => Writer.WriteImageReference(text, label);

public override void WriteIndentedCodeBlock(string text) => Writer.WriteIndentedCodeBlock(text);

public override void WriteInlineCode(string text) => Writer.WriteInlineCode(text);

public override void WriteLabel(string label, string url, string? title = null) => Writer.WriteLabel(label, url, title);

public override void WriteLine() => Writer.WriteLine();

public override void WriteLinkReference(string text, string? label = null) => Writer.WriteLinkReference(text, label);

public override void WriteRaw(string data) => Writer.WriteRaw(data);

public override void WriteStartBlockQuote() => Writer.WriteStartBlockQuote();

public override void WriteStartBold() => Writer.WriteStartBold();

public override void WriteStartBulletItem() => Writer.WriteStartBulletItem();

public override void WriteStartHeading(int level) => Writer.WriteStartHeading(level);

public override void WriteStartItalic() => Writer.WriteStartItalic();

public override void WriteStartLink() => Writer.WriteStartLink();

public override void WriteStartOrderedItem(int number) => Writer.WriteStartOrderedItem(number);

public override void WriteStartStrikethrough() => Writer.WriteStartStrikethrough();

public override void WriteStartTable(int columnCount) => Writer.WriteStartTable(columnCount);

public override void WriteStartTable(IReadOnlyList<TableColumnInfo> columns) => Writer.WriteStartTable(columns);

public override void WriteStartTableCell() => Writer.WriteStartTableCell();

public override void WriteStartTableRow() => Writer.WriteStartTableRow();

public override void WriteStartTaskItem(bool isCompleted = false) => Writer.WriteStartTaskItem(isCompleted);

public override void WriteString(string text) => Writer.WriteString(text);

public override void WriteTableHeaderSeparator() => Writer.WriteTableHeaderSeparator();

internal override void WriteFencedBlock(string text, string fence, MarkdownCharEscaper escaper, string? info = null, bool blankLinesAroundContent = false) => Writer.WriteFencedBlock(text, fence, escaper, info, blankLinesAroundContent);
}
Loading

0 comments on commit 33ff1a5

Please sign in to comment.