//disabled for now so FSO.Files can reference this project. /* using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Security.Cryptography; using FSO.Files.Formats.IFF.Chunks; using Microsoft.Xna.Framework.Graphics; namespace FSO.Common.Utils { /// /// This tool helps export internal structures such as floor catalogs, /// wall catalogs etc to a html file to check that file parsing is working correctly /// public class HTMLPrinter : IDisposable { private List sections = new List(); private Dictionary patterns = new Dictionary(); private string dir; private string id; private GraphicsDevice Gd; public HTMLPrinter(GraphicsDevice gd, string directory, string id) { this.Gd = gd; this.dir = directory; this.id = id; sections.Add(""); //Add the default patterns patterns.Add("h1", "

{0}

"); patterns.Add("h2", "

{0}

"); patterns.Add("h3", "

{0}

"); } public void H1(string text){ Print("h1", text); } public void H2(string text){ Print("h2", text); } public void H3(string text){ Print("h3", text); } public Table CreateTable() { return new Table(); } public void Add(object item){ this.sections.Add(item); } public Table CreateTable(params string[] columns) { var t = new Table(); foreach (var col in columns) { t.WithColumn(new TableColumn(col)); } return t; } public DataTable AddDataTable(IEnumerable values) { var table = CreateDataTable(values); sections.Add(table); return table; } public DataTable CreateDataTable(IEnumerable values) { return new DataTable(values); } private string ObjectToString(object obj) { if (obj != null) { return obj.ToString(); } return string.Empty; } public void Print(string pattern, params object[] args) { var value = string.Format(patterns[pattern], args); sections.Add(value); } #region IDisposable Members public void Dispose() { Directory.CreateDirectory(Path.Combine(dir, id + "_files")); var sb = new StringBuilder(); foreach (var item in sections) { AppendItem(sb, item); } File.WriteAllText(Path.Combine(dir, id + ".html"), sb.ToString()); } #endregion public void AppendItem(StringBuilder sb, object item) { if (item is IHTMLAppender) { ((IHTMLAppender)item).Append(this, sb); }else if(item is SPR2Frame){ try { var path = ExportSpriteFrame((SPR2Frame)item); sb.Append(""); } catch (Exception) { sb.Append("Failed to export"); } } else if (item is SPRFrame) { try { var path = ExportSpriteFrame((SPRFrame)item); sb.Append(""); } catch (Exception) { sb.Append("Failed to export"); } } else if (item != null) { sb.Append(item.ToString()); } /**else if(item is SPR){ var t = CreateTable() .WithColumn(new TableColumn("Sprite", 2)); var sprP = (SPR)item; for (var i = 0; i < sprP.FrameCount; i++){ try { var frame = sprP.GetFrame(i); t.AddRow((i + 1), frame); } catch (Exception ex) { t.AddRow((i + 1), "Failed to export frame"); } } AppendItem(sb, t); }**/ /** } private string ExportSpriteFrame(SPRFrame frame) { var texture = frame.GetTexture(this.Gd); var temp = Path.GetTempFileName(); texture.SaveAsPng(new FileStream(temp, FileMode.OpenOrCreate), texture.Width, texture.Height); var hash = FileUtils.ComputeMD5(temp); var filename = id + "_files/" + hash + ".png"; var newDest = Path.Combine(dir, filename); if (File.Exists(newDest)) { File.Delete(temp); } else { File.Move(temp, newDest); } return filename; } private string ExportSpriteFrame(SPR2Frame frame) { var texture = frame.GetTexture(this.Gd); var temp = Path.GetTempFileName(); texture.SaveAsPng(new FileStream(temp, FileMode.OpenOrCreate), texture.Width, texture.Height); var hash = FileUtils.ComputeMD5(temp); var filename = id + "_files/" + hash + ".png"; var newDest = Path.Combine(dir, filename); if (File.Exists(newDest)) { File.Delete(temp); } else { File.Move(temp, newDest); } return filename; } } public class TableColumn { public TableColumn(string header) { this.Header = header; } public TableColumn(string header, int span) { this.Header = header; this.Span = span; } public string Header; public int Span; } public class Table : IHTMLAppender { private List Columns = new List(); private List Rows = new List(); public Table WithColumn(TableColumn col) { Columns.Add(col); return this; } public Table AddRow(params object[] values) { Rows.Add(values); return this; } #region IHTMLAppender Members public void Append(HTMLPrinter printer, StringBuilder sb) { sb.Append(""); if (Columns.Count > 0) { sb.Append(""); foreach (var col in Columns) { sb.Append(""); } sb.Append(""); } foreach (var item in Rows) { sb.Append(""); foreach(var col in item){ sb.Append(""); } sb.Append(""); } sb.Append("
" + col.Header + "
"); printer.AppendItem(sb, col); sb.Append("
"); } #endregion } public class DataTable : IHTMLAppender { private IEnumerable Items; private List> Columns; public DataTable(IEnumerable items) { this.Items = items; this.Columns = new List>(); } public DataTable WithColumn(string label, Func value) { Columns.Add(new DataTableColumn { Heading = label, Value = value }); return this; } #region IHTMLAppender Members public void Append(HTMLPrinter printer, StringBuilder sb) { sb.Append(""); sb.Append(""); foreach (var col in Columns) { sb.Append(""); } sb.Append(""); foreach (var item in Items) { sb.Append(""); foreach (var col in Columns) { sb.Append(""); } sb.Append(""); } sb.Append("
" + col.Heading + "
"); printer.AppendItem(sb, col.Value(item)); sb.Append("
"); } #endregion } public interface IHTMLAppender { void Append(HTMLPrinter printer, StringBuilder sb); } public class DataTableColumn { public string Heading; public Func Value; } } */