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
}