예제 #1
0
        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);
        }
예제 #2
0
        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>");
        }