diff --git a/CHANGELOG.md b/CHANGELOG.md index 86ae2161..627f39d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add overload of `DocusaurusMarkdownWriter.WriteDocusaurusFrontMatter` ([#38](https://github.com/josefpihrt/dotmarkdown/pull/38)). +### Changed + +- Make `ITableAnalyzer` obsolete ([#37](https://github.com/josefpihrt/dotmarkdown/pull/37)). +- Add abstract property `MarkdownWriter.FormatProvider` (BREAKING CHANGE) + +### Fixed + +- Fix table formatting ([#37](https://github.com/josefpihrt/dotmarkdown/pull/37)). + ## [0.3.0-beta] - 2023-07-27 ### Added diff --git a/src/DotMarkdown.Docusaurus/DocusaurusMarkdownWriter.cs b/src/DotMarkdown.Docusaurus/DocusaurusMarkdownWriter.cs index f79bcfa7..c6a8d4a7 100644 --- a/src/DotMarkdown.Docusaurus/DocusaurusMarkdownWriter.cs +++ b/src/DotMarkdown.Docusaurus/DocusaurusMarkdownWriter.cs @@ -50,6 +50,10 @@ public void WriteEndDocusaurusAdmonition() } #region Decorator + public override MarkdownWriterSettings Settings => Writer.Settings; + + public override IFormatProvider FormatProvider => Writer.FormatProvider; + public override WriteState WriteState => Writer.WriteState; public override void Flush() => Writer.Flush(); diff --git a/src/DotMarkdown/Linq/ITableAnalyzer.cs b/src/DotMarkdown/Linq/ITableAnalyzer.cs index 97bfe8f4..8f64452f 100644 --- a/src/DotMarkdown/Linq/ITableAnalyzer.cs +++ b/src/DotMarkdown/Linq/ITableAnalyzer.cs @@ -1,9 +1,11 @@ // 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.Linq; +[Obsolete("This API is obsolete.")] public interface ITableAnalyzer { IReadOnlyList? AnalyzeTable(IEnumerable rows); diff --git a/src/DotMarkdown/Linq/MTable.cs b/src/DotMarkdown/Linq/MTable.cs index 28d97aa2..86094456 100644 --- a/src/DotMarkdown/Linq/MTable.cs +++ b/src/DotMarkdown/Linq/MTable.cs @@ -32,7 +32,7 @@ public override void WriteTo(MarkdownWriter writer) { IEnumerable rows = Elements(); - IReadOnlyList? columns = (writer as ITableAnalyzer)?.AnalyzeTable(rows); + IReadOnlyList? columns = TableAnalyzer.Analyze(rows, writer.Settings, writer.FormatProvider); if (columns is not null) { diff --git a/src/DotMarkdown/MarkdownStringWriter.cs b/src/DotMarkdown/MarkdownStringWriter.cs index f93410e7..684a8aad 100644 --- a/src/DotMarkdown/MarkdownStringWriter.cs +++ b/src/DotMarkdown/MarkdownStringWriter.cs @@ -1,14 +1,12 @@ // 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; using System.Globalization; using System.Text; -using DotMarkdown.Linq; namespace DotMarkdown; -internal class MarkdownStringWriter : MarkdownBaseWriter, ITableAnalyzer +internal class MarkdownStringWriter : MarkdownBaseWriter { private readonly StringBuilder _sb; private readonly IFormatProvider _formatProvider; @@ -42,7 +40,7 @@ protected internal virtual StringBuilder GetStringBuilder() return _sb; } - public virtual IFormatProvider FormatProvider + public override IFormatProvider FormatProvider { get { return _formatProvider ?? CultureInfo.CurrentCulture; } } @@ -273,9 +271,4 @@ private void ThrowIfClosed() if (!_isOpen) throw new ObjectDisposedException(null, "Cannot write to a closed writer."); } - - public IReadOnlyList? AnalyzeTable(IEnumerable rows) - { - return TableAnalyzer.Analyze(rows, Settings, FormatProvider)?.AsReadOnly(); - } } diff --git a/src/DotMarkdown/MarkdownTextWriter.cs b/src/DotMarkdown/MarkdownTextWriter.cs index 5c4a5724..5265000c 100644 --- a/src/DotMarkdown/MarkdownTextWriter.cs +++ b/src/DotMarkdown/MarkdownTextWriter.cs @@ -1,14 +1,12 @@ // 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; using System.Diagnostics; using System.IO; -using DotMarkdown.Linq; namespace DotMarkdown; -internal class MarkdownTextWriter : MarkdownBaseWriter, ITableAnalyzer +internal class MarkdownTextWriter : MarkdownBaseWriter { private const int BufferSize = 1024 * 6; private const int BufferOverflow = 32; @@ -30,6 +28,8 @@ public MarkdownTextWriter(TextWriter writer, MarkdownWriterSettings? settings = protected internal override int Length { get; set; } + public override IFormatProvider FormatProvider => _writer.FormatProvider; + public override void WriteString(string text) { try @@ -379,9 +379,4 @@ public override void Close() } } } - - public IReadOnlyList? AnalyzeTable(IEnumerable rows) - { - return TableAnalyzer.Analyze(rows, Settings, _writer.FormatProvider)?.AsReadOnly(); - } } diff --git a/src/DotMarkdown/MarkdownWriter.cs b/src/DotMarkdown/MarkdownWriter.cs index d0c4d33d..34b13c54 100644 --- a/src/DotMarkdown/MarkdownWriter.cs +++ b/src/DotMarkdown/MarkdownWriter.cs @@ -21,6 +21,8 @@ protected MarkdownWriter(MarkdownWriterSettings? settings = null) public abstract WriteState WriteState { get; } + public abstract IFormatProvider FormatProvider { get; } + public virtual MarkdownWriterSettings Settings { get; } public MarkdownFormat Format => Settings.Format; diff --git a/src/Tests/DotMarkdown.Docusaurus.Tests/DocusaurusMarkdownWriterTests.cs b/src/Tests/DotMarkdown.Docusaurus.Tests/DocusaurusMarkdownWriterTests.cs index 5d782ab8..96ef260a 100644 --- a/src/Tests/DotMarkdown.Docusaurus.Tests/DocusaurusMarkdownWriterTests.cs +++ b/src/Tests/DotMarkdown.Docusaurus.Tests/DocusaurusMarkdownWriterTests.cs @@ -1,10 +1,12 @@ // 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 DotMarkdown.Linq; using DotMarkdown.Tests; using Xunit; using static DotMarkdown.Docusaurus.DocusaurusMarkdownFactory; using static DotMarkdown.Docusaurus.Tests.DocusaurusTestHelpers; +using static DotMarkdown.Linq.MFactory; using static DotMarkdown.Tests.TestHelpers; namespace DotMarkdown.Docusaurus.Tests; @@ -230,6 +232,27 @@ public static void MarkdownWriter_Write_FrontMatter_MultiValue() - 2 --- +"; + + Assert.Equal(expected.NormalizeNewLine(), mw.ToStringAndClear()); + } + + [Fact] + public static void MarkdownWriter_CustomFormat() + { + DocusaurusMarkdownWriter mw = CreateDocusaurusWriter(format: new MarkdownFormat(tableOptions: MarkdownFormat.Default.TableOptions | TableOptions.FormatHeaderAndContent)); + + MTable table = Table(TableRow("xxx", "yyy"), TableRow("a", "b"), TableRow("aaaa", "bbbbb")); + + table.WriteTo(mw); + + Console.WriteLine("x"); + + const string expected = @"| xxx | yyy | +| ---- | ----- | +| a | b | +| aaaa | bbbbb | + "; Assert.Equal(expected.NormalizeNewLine(), mw.ToStringAndClear()); diff --git a/src/Tests/DotMarkdown.Docusaurus.Tests/DocusaurusTestHelpers.cs b/src/Tests/DotMarkdown.Docusaurus.Tests/DocusaurusTestHelpers.cs index 88514b57..6201bbe0 100644 --- a/src/Tests/DotMarkdown.Docusaurus.Tests/DocusaurusTestHelpers.cs +++ b/src/Tests/DotMarkdown.Docusaurus.Tests/DocusaurusTestHelpers.cs @@ -26,9 +26,9 @@ public static DocusaurusMarkdownWriter CreateWriterWithCodeBlockOptions(CodeBloc return CreateDocusaurusWriter(CreateWriter(new MarkdownFormat(codeBlockOptions: options))); } - public static DocusaurusMarkdownWriter CreateDocusaurusWriter(DocusaurusMarkdownFormat? format = null) + public static DocusaurusMarkdownWriter CreateDocusaurusWriter(DocusaurusMarkdownFormat? docusaurusFormat = null, MarkdownFormat? format = null) { - return new DocusaurusMarkdownWriter(CreateWriter(), format); + return new DocusaurusMarkdownWriter(CreateWriter(format), docusaurusFormat); } public static DocusaurusMarkdownWriter CreateDocusaurusWriter(MarkdownWriter writer, DocusaurusMarkdownFormat? format = null)