static void Main(string[] args) { //var p = new ProxyProvider(Properties.Settings.Default.TestProxyInput); var p = new ReflectionProvider(Properties.Settings.Default.TestInput); }
private static void RenderAnyTo(ReflectionProvider r, IHTMLElement pre) { Func<bool> DelegatesParams = () => false; Func<bool> IsInterface = () => r.IsInterface; Func<bool> IsField = () => false; IHTMLElement Target = pre; Func<Color, Action<string>> ToColorWrite = color => text => { var s = new IHTMLSpan { innerText = text }; s.style.color = color; s.AttachTo(Target); }; Func<string, IHTMLSpan> Write = text => new IHTMLSpan(text).AttachTo(Target); Action WriteLine = () => Write("\r\n"); Action WriteSpace = () => Write(" "); #region Write<Color> Action<string> WriteBlue = ToColorWrite(Color.Blue); Action<string> WriteBlack = ToColorWrite(Color.Black); Action<string> WriteGray = ToColorWrite(Color.FromRGB(0x80, 0x80, 0x80)); Action<string> WriteCyan = ToColorWrite(Color.FromRGB(0, 0x80, 0x80)); Action<string> WriteGreen = ToColorWrite(Color.FromRGB(0, 0x80, 0)); #endregion int Indent = 1; Action WriteIdent = () => Write(new string(' ', 4 * Indent)); #region Region Func<string, IDisposable> Region = text => { WriteIdent(); WriteBlue("#region"); WriteSpace(); var Collapsible = Write(text); WriteLine(); var PreviousTarget = Target; var CurrentTarget = new IHTMLElement(IHTMLElement.HTMLElementEnum.pre).AttachTo(PreviousTarget); ; Collapsible.style.cursor = IStyle.CursorEnum.pointer; Collapsible.onclick += delegate { CurrentTarget.ToggleVisible(); }; Target = CurrentTarget; return new Disposable( delegate { WriteIdent(); WriteBlue("#endregion"); WriteLine(); Target = PreviousTarget; } ); }; #endregion Func<IDisposable> CodeBlock = delegate { WriteIdent(); Write("{"); WriteLine(); Indent++; return new Disposable( delegate { Indent--; WriteIdent(); Write("}"); WriteLine(); } ); }; Action<string> WriteSummary = text => { WriteIdent(); WriteGray("/// <summary>"); WriteLine(); WriteIdent(); WriteGray("/// "); WriteGreen(text); WriteLine(); WriteIdent(); WriteGray("/// </summary>"); WriteLine(); }; Action<string> WriteTypeName = text => { var z = FixTypeName(text.Trim()); if (CSharpKeywords.Contains(z)) WriteBlue(z); else WriteCyan(z); }; Action<string, string> WriteVariableDefinition = (TypeName, VariableName) => { WriteTypeName(TypeName); WriteSpace(); Write(FixVariableName(VariableName)); }; WriteIdent(); WriteBlue("namespace"); WriteSpace(); Write(r.PackageName); WriteLine(); using (CodeBlock()) { WriteIdent(); Write("["); WriteCyan("Script"); Write("("); Write("IsNative = "); WriteBlue("true"); Write(")"); Write("]"); WriteLine(); WriteIdent(); WriteBlue("public"); WriteSpace(); if (r.IsSealed) { WriteBlue("sealed"); WriteSpace(); } if (r.IsInterface) { WriteBlue("interface"); } else { WriteBlue("class"); } WriteSpace(); WriteCyan(r.TypeName); WriteLine(); using (CodeBlock()) { #region Constants if (r.Constants.Count > 0) using (Region("Constants")) foreach (var p in r.Constants) { WriteSummary(p.Summary); WriteIdent(); if (string.IsNullOrEmpty(p.Value) && p.IsAirOnly) { WriteGreen("// " + p.Name + " constant was ommited due to no given value"); WriteLine(); continue; } if (p.Value == "\"?\"") { WriteGreen("// " + p.Name + " constant was ommited due to no string given value"); WriteLine(); continue; } WriteBlue("public"); WriteSpace(); if (p.IsAirOnly) { WriteBlue("const"); WriteSpace(); } else { WriteBlue("static"); WriteSpace(); WriteBlue("readonly"); WriteSpace(); } WriteVariableDefinition(p.Type, p.Name); if (!string.IsNullOrEmpty(p.Value)) { WriteSpace(); Write("="); WriteSpace(); Write(p.Value); } Write(";"); WriteLine(); WriteLine(); } #endregion #region Properties using (Region("Properties")) foreach (var p in r.Properties) { if (p.IsInherited) continue; WriteSummary(p.Summary); WriteIdent(); if (IsInterface()) { } else { WriteBlue("public"); WriteSpace(); if (p.IsStatic) { WriteBlue("static"); WriteSpace(); } } WriteVariableDefinition(p.PropertyType, p.PropertyName); if (IsField()) Write(";"); else { WriteSpace(); Write("{"); WriteSpace(); WriteBlue("get"); Write(";"); WriteSpace(); if (IsInterface()) { if (p.IsReadOnly) { } else { WriteBlue("set"); Write(";"); } } else { if (p.IsReadOnly) { WriteBlue("private"); } WriteBlue("set"); Write(";"); } WriteSpace(); Write("}"); } WriteLine(); WriteLine(); } #endregion #region Constructors if (r.GetInstanceConstructors().Count() > 0) using (Region("Constructors")) foreach (var p in r.GetInstanceConstructors()) foreach (var v in p.ParametersInfo.Variations) { WriteSummary(p.Summary); WriteIdent(); WriteBlue("public"); WriteSpace(); Write(p.Name); Write("("); for (int k = 0; k < v.Parameters.Length; k++) { if (k > 0) { Write(","); WriteSpace(); } WriteVariableDefinition(v.Parameters[k].TypeName, v.Parameters[k].Name); } Write(")"); if (DelegatesParams()) { WriteSpace(); Write(":"); WriteSpace(); WriteBlue("base"); Write("(" + v.NamesToString() + ")"); } WriteLine(); using (CodeBlock()) { } WriteLine(); } #endregion #region Methods using (Region("Methods")) foreach (var p in r.GetInstanceMethods()) foreach (var v in p.ParametersInfo.Variations) { WriteSummary(p.Summary); WriteIdent(); if (IsInterface()) { } else { WriteBlue("public"); WriteSpace(); if (p.IsStatic) { WriteBlue("static"); WriteSpace(); } } WriteVariableDefinition(p.ReturnType, p.Name); Write("("); for (int k = 0; k < v.Parameters.Length; k++) { if (k > 0) { Write(","); WriteSpace(); } WriteVariableDefinition(v.Parameters[k].TypeName, v.Parameters[k].Name); } Write(")"); if (IsInterface()) { Write(";"); WriteLine(); } else { WriteLine(); using (CodeBlock()) { if (!p.ReturnTypeVoid) { WriteIdent(); WriteBlue("return"); WriteSpace(); WriteBlue("default"); Write("("); WriteTypeName(p.ReturnType); Write(")"); Write(";"); WriteLine(); } } } WriteLine(); } #endregion } } }