static bool ShowGroupHeader(Xbrl.Taxonomy.GenericRelationshipNetwork netGroupTable, object node) { if (netGroupTable.GetRelationshipsFrom(node).Count == 1) { var child = netGroupTable.GetRelationshipsFrom(node).First().Target; if (child is Xbrl.Table.Table) { var tableLabel = Regex.Replace(XbrlUtils.GetVerboseLabel(child as Xbrl.Table.Table).ToLower(), @"[^0-9a-zA-Z]", string.Empty); var groupLabel = Regex.Replace(XbrlUtils.GetLabel(node).ToLower(), @"[^0-9a-zA-Z]", string.Empty); return(!tableLabel.Contains(groupLabel)); } } return(true); }
void TraverseTableTree(Report report, Xbrl.Taxonomy.GenericRelationshipNetwork netGroupTable, object node, int depth = 0) { if (node is Xbrl.Table.Table) { var defTable = node as Xbrl.Table.Table; foreach (var table in XbrlUtils.FindTableSet(report.TableModel, defTable)) { var tableInfo = new Table(report, table); if (table.GetAxis(Xbrl.Table.AxisType.Z).SliceCount > 1 || XbrlUtils.HasOpenAspectNodes(table.GetAxis(Xbrl.Table.AxisType.Z))) { Lines.Add(new TableTreeLine(null, tableInfo.Title, depth)); for (uint z = 0; z < table.Shape.Z; ++z) { if (table.ContainsFactsInZSlice(z)) { tableInfo = new Table(report, table, z); Lines.Add(new TableTreeLine(tableInfo, string.Join(", ", tableInfo.GetZHeaders()), depth + 1)); } } } else if (table.ContainsFacts) { Lines.Add(new TableTreeLine(tableInfo, tableInfo.Title, depth)); } } } else { if (ShowGroupHeader(netGroupTable, node)) { Lines.Add(new TableTreeLine(null, XbrlUtils.GetLabel(node), depth++)); } foreach (var rel in netGroupTable.GetRelationshipsFrom(node)) { TraverseTableTree(report, netGroupTable, rel.Target, depth); } } }