/// <summary> /// Builds an XML representation of the Table and its contents /// </summary> /// <returns>RichText XML</returns> internal static string TableAsXML(Table table, RichTextSaveOptions options) { StringBuilder result = new StringBuilder(); RichTextBlock richTextBlock; Border border; int column; int row; int columnSpan; int rowSpan; result.Append("<Xaml>\r"); result.Append("<liquid:Table "); if (!double.IsNaN(table.Width)) { result.Append(" Width=\"" + table.Width.ToString() + "\""); } if (!double.IsNaN(table.Height)) { result.Append(" Height=\"" + table.Height.ToString() + "\""); } if (table.HorizontalAlignment != HorizontalAlignment.Left) { result.Append(" HorizontalAlignment=\"" + table.HorizontalAlignment.ToString() + "\""); } result.Append(" CellPadding=\"" + table.CellPadding.ToString() + "\""); result.Append(" HeaderRows=\"" + table.HeaderRows.ToString() + "\""); result.Append(" HeaderColumns=\"" + table.HeaderColumns.ToString() + "\""); result.Append(" AutoWidth=\"" + table.AutoWidth.ToString() + "\""); result.Append(" Tag=\"" + table.Tag.ToString() + "\""); result.Append(">\r"); if (table.ColumnDefinitions.Count > 0) { result.Append("<Grid.ColumnDefinitions>\r"); foreach (ColumnDefinition c in table.ColumnDefinitions) { result.Append("<ColumnDefinition Width=\"" + c.Width.ToString() + "\" />\r"); } result.Append("</Grid.ColumnDefinitions>\r"); } if (table.RowDefinitions.Count > 0) { result.Append("<Grid.RowDefinitions>\r"); foreach (RowDefinition c in table.RowDefinitions) { result.Append("<RowDefinition Height=\"" + c.Height.ToString() + "\"/>\r"); } result.Append("</Grid.RowDefinitions>\r"); } foreach (UIElement e in table.Children) { if (e is Border) { border = (Border)e; row = (int)border.GetValue(Grid.RowProperty); column = (int)border.GetValue(Grid.ColumnProperty); rowSpan = (int)border.GetValue(Grid.RowSpanProperty); columnSpan = (int)border.GetValue(Grid.ColumnSpanProperty); result.Append("<Border Grid.Column=\"" + column.ToString() + "\" Grid.Row=\"" + row.ToString() + "\">\r"); if (border.Child is RichTextBlock) { richTextBlock = (RichTextBlock)border.Child; result.Append(Serialize.RichTextBlock(richTextBlock)); } result.Append("</Border>\r"); } } result.Append("</liquid:Table>\r"); result.Append("</Xaml>\r"); return(result.ToString()); }
/// <summary> /// Builds an HTML representation of the Table and its contents /// </summary> /// <returns>HTML</returns> internal static string TableAsHTML(Table table, RichTextSaveOptions options) { StringBuilder result = new StringBuilder(); RichTextBlock richTextBlock; string tag = string.Empty; string width; string valign = "top"; Border border; string temp; int column; int row; int index; result.Append("<table"); if (table.Tag != null) { result.Append(" class=\"" + table.Tag.ToString() + "\""); } if (!double.IsNaN(table.Width)) { result.Append(" width=\"" + table.Width.ToString() + "\""); } if (!double.IsNaN(table.Height)) { result.Append(" height=\"" + table.Height.ToString() + "\""); } if (table.HorizontalAlignment != HorizontalAlignment.Left && table.HorizontalAlignment != HorizontalAlignment.Stretch) { result.Append(" style='text-align:" + table.HorizontalAlignment.ToString() + "'"); } result.Append(">\r"); index = 0; for (row = 0; row < table.RowDefinitions.Count; row++) { result.Append("<tr>\r"); for (column = 0; column < table.ColumnDefinitions.Count; column++, index++) { if (row < table.HeaderRows || column < table.HeaderColumns) { tag = "th"; } else { tag = "td"; } border = (Border)table.Children[index]; table.SetColumnsToPixelWidth(); if (table.ColumnDefinitions[column].Width.GridUnitType == GridUnitType.Pixel) { width = table.ColumnDefinitions[column].Width.Value.ToString() + "px"; } else { width = Math.Round((double)100 / table.ColumnDefinitions.Count).ToString() + "%"; } switch ((VerticalAlignment)border.Child.GetValue(FrameworkElement.VerticalAlignmentProperty)) { case VerticalAlignment.Top: valign = "top"; break; case VerticalAlignment.Center: valign = "middle"; break; case VerticalAlignment.Bottom: valign = "bottom"; break; default: valign = "top"; break; } result.Append("<" + tag + " style=\"width:" + width + "; vertical-align:" + valign + ";\">"); if (border.Child is RichTextBlock) { richTextBlock = (RichTextBlock)border.Child; temp = richTextBlock.Save(Format.HTML, options).Trim(); if (temp.Length == 0) { temp = "<p> </p>"; } result.Append(temp); } result.Append("</" + tag + ">\r"); } result.Append("</tr>\r"); } result.Append("</table>\r"); return(result.ToString()); }