private static void BdatToHtmlArchive(string arhFilename, string ardFilename, string htmlDir) { var watch = Stopwatch.StartNew(); BdatStringCollection tables = DeserializeBdatStringArchive(arhFilename, ardFilename); watch.Stop(); Console.WriteLine(watch.Elapsed.TotalMilliseconds); BdatInfo info = BdatInfoImport.GetBdatInfo(tables); BdatStringTools.ProcessReferences(tables, info); watch.Restart(); HtmlGen.OutputHtml(tables, info, htmlDir); watch.Stop(); Console.WriteLine(watch.Elapsed.TotalMilliseconds); }
public static void PrintTable(BdatStringCollection tables, BdatInfo info, string tableName, Indenter sb) { BdatStringTable table = tables[tableName]; sb.AppendLineAndIncrease("<table border=\"1\">"); sb.AppendLineAndIncrease("<thead>"); sb.AppendLineAndIncrease("<tr>"); sb.AppendLine("<th>ID</th>"); sb.AppendLine("<th>Referenced By</th>"); foreach (BdatMember member in table.Members) { if (info.FieldInfo.TryGetValue((tableName, member.Name), out var field)) { if (field.Type == BdatFieldType.Hide) { continue; } } switch (member.Type) { case BdatMemberType.Scalar: case BdatMemberType.Flag: sb.AppendLine($"<th>{member.Name}</th>"); break; case BdatMemberType.Array: sb.AppendLine($"<th colspan=\"{member.ArrayCount}\">{member.Name}</th>"); break; } } sb.DecreaseAndAppendLine("</tr>"); sb.DecreaseAndAppendLine("</thead>"); int id = table.BaseId; foreach (BdatStringItem item in table.Items) { sb.AppendLineAndIncrease($"<tr id=\"{id}\">"); sb.AppendLine($"<td>{id}</td>"); sb.AppendLineAndIncrease("<td>"); if (item.ReferencedBy.Count > 0) { sb.AppendLineAndIncrease("<details>"); sb.AppendLine($"<summary>{item.ReferencedBy.Count} refs</summary>"); foreach (var a in item.ReferencedBy) { var link = GetLink(table, tables[a.Table], a.Id.ToString()); string display = a.Id.ToString(); if (info.DisplayFields.TryGetValue(a.Table, out var displayField)) { var child = BdatStringTools.ReadValue(a.Table, a.Id, displayField, tables, info); if (!string.IsNullOrWhiteSpace(child.value)) { display = child.value; } } sb.AppendLine($"<a href=\"{link}\">{a.Table}#{display}</a>"); } sb.DecreaseAndAppendLine("</details>"); } sb.DecreaseAndAppendLine("</td>"); foreach (BdatMember member in table.Members) { if (info.FieldInfo.TryGetValue((tableName, member.Name), out var field)) { if (field.Type == BdatFieldType.Hide) { continue; } } switch (member.Type) { case BdatMemberType.Scalar: case BdatMemberType.Flag: var val = BdatStringTools.ReadValue(tableName, id, member.Name, tables, info); if (val.childTable != null) { var link = GetLink(table, tables[val.childTable], val.childId); sb.AppendLine($"<td><a href=\"{link}\">{val.value}</td></a>"); } else { sb.AppendLine($"<td>{val.value}</td>"); } break; case BdatMemberType.Array: var arr = (string[])item.Values[member.Name]; foreach (string value in arr) { sb.AppendLine($"<td>{value}</td>"); } break; } } sb.DecreaseAndAppendLine("</tr>"); id++; } sb.DecreaseAndAppendLine("</table>"); }