//public static DataColumn GetDataColumn(this DataTable table, String needle) //{ // foreach (DataColumn dc in table.Columns) // { // // dc.Caption // } //} /// <summary> /// Sets the column width according to markdown rendering /// </summary> /// <param name="dt">The dt.</param> /// <param name="rowCheckLimit">The row check limit.</param> /// <param name="cellMargin">Extra characters to add on content right</param> /// <returns></returns> public static DataTable setColumnWidths(this DataTable dt, Int32 rowCheckLimit = 100, Int32 cellMargin = 2) { Int32 prittyIndex = 0; foreach (DataRow dr in dt.Rows) { prittyIndex++; foreach (DataColumn dc in dt.Columns) { dataValueFormatInfo dcf = new dataValueFormatInfo(dc); String content = dc.markdownFieldForColumn(dr, dcf.directAppend, dcf); dc.SetWidth(Math.Max(dc.GetWidth(), content.Length + cellMargin)); } if (prittyIndex > rowCheckLimit) { break; } } return(dt); }
/// <summary> /// DataTable to markdown convertor /// </summary> /// <param name="table"></param> /// <returns></returns> public static string markdownTable(this DataTable table, Boolean prittyOutput = true) { String output = ""; String underline = "|"; String headingline = "|"; String dcCaption = ""; List <DataColumn> skipEscape = new List <DataColumn>(); dataValueFormatDictionary dcfs = new dataValueFormatDictionary(); String sep = "|"; foreach (DataColumn dc in table.Columns) { dcCaption = dc.GetHeading(); if (dcCaption.StartsWith("_")) { skipEscape.Add(dc); dcCaption = dcCaption.TrimStart('_'); dc.Caption = dcCaption; } dataValueFormatInfo dcf = new dataValueFormatInfo(dc); if (dcf.directAppend) { skipEscape.Add(dc); } dcfs.Add(dc.ColumnName, dcf); Tuple <String, String> adds = getTableColumnHead(dcf.position, dcCaption); headingline = headingline + adds.Item1; underline = underline + adds.Item2; } if (prittyOutput) { table = table.Copy(); table.setColumnWidths(100); } underline = underline + "|"; headingline = headingline + "|"; output = output + headingline.Replace("||", "|") + Environment.NewLine; output = output + underline.Replace("||", "|") + Environment.NewLine; //output = output + Environment.NewLine; foreach (DataRow dr in table.Rows) { String rowline = "|"; foreach (DataColumn dc in table.Columns) { String content = dc.markdownFieldForColumn(dr, skipEscape.Contains(dc), dcfs[dc.ColumnName]); content = content.Replace(Environment.NewLine, ""); rowline = rowline.add(content, "|"); // imbSciStringExtensions.add(rowline, content, "|"); } rowline = rowline + "|" + Environment.NewLine; output = output + rowline; } if (table.ExtraLinesCount() > 0) { output += Environment.NewLine; var lines = table.GetExtraDesc(); foreach (String ln in lines) { output = output + "> " + ln + Environment.NewLine; } output += Environment.NewLine; } return(output); }
public static String markdownFieldForColumn(this DataColumn dc, DataRow dr, Boolean skipEscape, dataValueFormatInfo dcf) { String content = ""; Object value = dr[dc]; content = value.toStringSafe(" ", dcf.valueFormat); if (value is Int32) { if ((((Int32)value) == Int32.MaxValue) || (((Int32)value) == Int32.MinValue)) { content = "-"; } } if (!skipEscape) { content = content.markdownEscape(); } // filter out table crushers content = content.Replace("|", " : "); content = content.Replace(Environment.NewLine, ""); switch (dcf.importance) { case dataPointImportance.important: content = "**" + content + "**"; break; case dataPointImportance.alarm: content = "`**" + content + "**`"; break; case dataPointImportance.normal: break; } //if (dc.GetEncodeMode() != toDosCharactersMode.none) //{ // content = content.toDosCharacters(dc.GetEncodeMode()); //} Int32 columnWidth = dc.GetWidth(); if (columnWidth > 0) { if (content.Length < columnWidth) { content = content.PadRight(columnWidth); } } String wrapTag = dc.GetWrapTag(); if (!wrapTag.isNullOrEmpty()) { content = "<span>" + content + "</span>"; } // content = content.add(content, "|"); return(content); }