This repository has been archived on 2024-06-04. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
2024-01-14 19:40:49 +01:00

77 lines
1.8 KiB
C#

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 = ("<tr>", "</tr>");
private static readonly (string start, string end) headerFormat = ("<th>", "</th>");
private static readonly (string start, string end) columnFormat = ("<td>", "</td>");
/// <inheritdoc />
public HtmlTableGenerator(int columns) : base(columns) { }
/// <inheritdoc />
public HtmlTableGenerator(int columns, Stream stream) : base(columns, stream) { }
/// <inheritdoc />
public HtmlTableGenerator(int columns, Stream stream, Encoding encoding) : base(columns, stream,
encoding)
{ }
#region State
/// <inheritdoc />
protected override void OnOpen()
{
base.OnOpen();
Writer.Write($"<table class={Class}>");
}
/// <inheritdoc />
protected override void OnClose()
{
base.OnClose();
Writer.Write("</table>");
}
#endregion
#region Writing
/// <inheritdoc />
public override ITableGenerator AppendHeader(IEnumerable<string> row) =>
AppendRow(row, rowFormat, headerFormat);
/// <inheritdoc />
public override ITableGenerator AppendRow(IEnumerable<string> row) =>
AppendRow(row, rowFormat, columnFormat);
private ITableGenerator AppendRow(
IEnumerable<string> 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
}