using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using ReportGeneration.Abstract; using ReportGeneration.Interface; namespace ReportGeneration.Generators.LatexInclude; public class LatexIncludeTableGenerator : TableGeneratorBase { private const string rowSuffix = @" \\ \hline"; public LatexIncludeTableGenerator(int columns) : base(columns) { } public LatexIncludeTableGenerator(int columns, Stream stream) : base(columns, stream) { } public LatexIncludeTableGenerator(int columns, Stream stream, Encoding encoding) : base(columns, stream, encoding) { } protected override void OnOpen() { base.OnOpen(); var tabular = '|' + string.Concat(Enumerable.Repeat("l|", Columns)); WriteLine(@$" \begin{{table}}[!ht] \centering \caption{{Caption}} \begin{{tabular}}{{{tabular}}} \hline"); } protected override void OnClose() { base.OnClose(); WriteLine(@" \end{{tabular}} \end{{table}}"); } /// public override ITableGenerator AppendHeader(IEnumerable row) => AppendRow(row.Select(Bold)); /// public override ITableGenerator AppendRow(IEnumerable row) { WriteLine(string.Join('&', row.Select(Escape)) + rowSuffix); return this; } private string Bold(string str) => $@"\textbf{str}"; private string Escape(string str) => str.Replace("%", "\\%"); }