public void FormatBlock(FlowDocument doc, Block block, StringBuilder buf, int indent) { // indent buf.Append (' ', indent); buf.AppendFormat ( "{0} {1} to {2}", block.GetType ().Name + block.GetHashCode (), block.ContentStart.CompareTo (doc.ContentStart), block.ContentEnd.CompareTo (doc.ContentStart)); buf.AppendLine (); if (block is Section) { FormatBlocks (doc, ((Section)block).Blocks, buf, indent + 3); } else if (block is Paragraph) { FormatInlines (doc, ((Paragraph)block).Inlines, buf, indent + 3); } }
private bool Accept(Block block) { if (!TryMatch(block)) return false; if (block is Table) { foreach (var inner in ((Table) block).RowGroups .SelectMany(x => x.Rows) .SelectMany(x => x.Cells) .SelectMany(x => x.Blocks)) { if (!Accept(inner)) return false; } return true; } if (block is Paragraph) { foreach (var inner in ((Paragraph) block).Inlines) { if (!TryMatch(inner)) return false; } return true; } if (block is BlockUIContainer) { // ignore children return true; } if (block is List) { foreach (var inner in ((List) block).ListItems.SelectMany(listItem => listItem.Blocks)) { if (!Accept(inner)) return false; } return true; } throw new InvalidOperationException("Unknown block type: " + block.GetType()); }