using ReportGeneration.Abstract; using ReportGeneration.Interface; using System.Collections.Generic; using System.IO; using System.Text; namespace ReportGeneration.Generators; internal class HtmlTableGenerator : TableGeneratorBase { public string Class { get; init; } private static readonly (string start, string end) rowFormat = ("", ""); private static readonly (string start, string end) headerFormat = ("", ""); private static readonly (string start, string end) columnFormat = ("", ""); /// public HtmlTableGenerator(int columns) : base(columns) { } /// public HtmlTableGenerator(int columns, Stream stream) : base(columns, stream) { } /// public HtmlTableGenerator(int columns, Stream stream, Encoding encoding) : base(columns, stream, encoding) { } #region State /// protected override void OnOpen() { base.OnOpen(); Writer.Write($""); } /// protected override void OnClose() { base.OnClose(); Writer.Write("
"); } #endregion #region Writing /// public override ITableGenerator AppendHeader(IEnumerable row) => AppendRow(row, rowFormat, headerFormat); /// public override ITableGenerator AppendRow(IEnumerable row) => AppendRow(row, rowFormat, columnFormat); private ITableGenerator AppendRow( IEnumerable row, (string, string) rowFormat, (string, string) columnFormat ) { var (rowStart, rowEnd) = rowFormat; var (colStart, colEnd) = columnFormat; this .Write(rowStart) .Write(colStart) .Write(string.Join(colEnd + colStart, row)) .Write(colEnd) .Write(rowEnd); return this; } #endregion }