public static Highlight Get(Parser.ParserType type) { switch (type) { case Parser.ParserType.Columns: case Parser.ParserType.ExactColumns: return new HighlightColumns(); case Parser.ParserType.CPlusPlus: return new HighlightCPlusPlus(); case Parser.ParserType.CSharp: return new HighlightCSharp(); case Parser.ParserType.HTML: case Parser.ParserType.XML: return new HighlightMarkup(); case Parser.ParserType.JSON: return new HighlightJSON(); case Parser.ParserType.SQL: return new HighlightSQL(); default: return null; } }
static public Result Run(Window parent, Parser.ParserType tableType) { var dialog = new ChooseTableTypeDialog(tableType) { Owner = parent }; return dialog.ShowDialog() ? dialog.result : null; }
ChooseTableTypeDialog(Parser.ParserType tableType) { InitializeComponent(); TableType = tableType; }
void Command_Content_Type(Parser.ParserType contentType) => ContentType = contentType;
public Table(string input, Parser.ParserType tableType = Parser.ParserType.None, bool hasHeaders = true) : this(GetInputRows(input, tableType), hasHeaders) { }
public string ToString(string ending, Parser.ParserType tableType = Parser.ParserType.Columns) { var result = new List<List<string>>(); result.Add(Headers.ToList()); result.AddRange(Rows.Select(row => row.Select(item => item.ToString()).ToList())); switch (tableType) { case Parser.ParserType.TSV: return string.Join("", result.Select(items => string.Join("\t", items.Select(item => ToTCSV(item, '\t'))) + ending)); case Parser.ParserType.CSV: return string.Join("", result.Select(items => string.Join(",", items.Select(item => ToTCSV(item, ','))) + ending)); case Parser.ParserType.Columns: { var newLineChars = new char[] { '\r', '\n' }; result = result.Select(row => row.Select(value => value.Trim()).ToList()).ToList(); var columnWidths = Enumerable.Range(0, Headers.Count).Select(column => result.Max(line => line[column].IndexOfAny(newLineChars) == -1 ? line[column].Length : 0)).ToList(); return string.Join("", result.AsParallel().AsOrdered().Select(line => "║ " + string.Join(" │ ", Enumerable.Range(0, Headers.Count).Select(column => line[column] + new string(' ', Math.Max(columnWidths[column] - line[column].Length, 0)))) + " ║" + ending)); } case Parser.ParserType.ExactColumns: { var newLineChars = new char[] { '\r', '\n' }; result = result.Select(row => row.Select(value => $@"""{value.Replace(@"""", @"""""")}""").ToList()).ToList(); var columnWidths = Enumerable.Range(0, Headers.Count).Select(column => result.Max(line => line[column].IndexOfAny(newLineChars) == -1 ? line[column].Length : 0)).ToList(); return string.Join("", result.AsParallel().AsOrdered().Select(line => "║ " + string.Join(" │ ", Enumerable.Range(0, Headers.Count).Select(column => line[column] + new string(' ', Math.Max(columnWidths[column] - line[column].Length, 0)))) + " ║" + ending)); } default: throw new ArgumentException("Invalid output type"); } }
static List<List<string>> GetInputRows(string input, Parser.ParserType tableType) { switch (tableType) { case Parser.ParserType.TSV: return input.SplitTCSV('\t').Select(split => split.ToList()).ToList(); case Parser.ParserType.CSV: return input.SplitTCSV(',').Select(split => split.ToList()).ToList(); case Parser.ParserType.Columns: return SplitByDoublePipe(input).Select(line => line.Split('│').Select(item => item.Trim()).ToList()).ToList(); case Parser.ParserType.ExactColumns: return SplitByDoublePipe(input).Select(line => line.Split('│').Select(item => TrimExactColumns(item)).ToList()).ToList(); default: throw new ArgumentException("Invalid input type"); } }