using System; using System.Windows.Forms; using System.Reflection; using System.Collections; using System.Collections.Generic; using PascalABCCompiler.SyntaxTree; using System.Threading; using System.Diagnostics; using System.Xml; using System.Text; using System.IO; using PascalABCCompiler.SemanticTree; using System.Text.RegularExpressions; namespace VisualPascalABCPlugins { public class AssemblyHelpBuilder { List namespaces = new List(); List classes = new List(); List interfaces = new List(); List rec_enums = new List(); List types = new List(); List vars = new List(); List procs = new List(); List consts = new List(); List elems = new List(); Dictionary namespace_elems = new Dictionary(); Dictionary type_elems = new Dictionary(); List units = new List(); XmlReader reader; string unit_name; string full_unit_name; string unit_desc; string output_dir; string index_file_name; IVisualEnvironmentCompiler vec = null; public BuildOptions options = new BuildOptions(); public event ProcessEvent CompilationProgress; public AssemblyHelpBuilder(IVisualEnvironmentCompiler vec) { this.vec = vec; //parser = new FileParser(vec); //HelpUtils.builder = this; } public void Clear() { classes.Clear(); interfaces.Clear(); rec_enums.Clear(); types.Clear(); vars.Clear(); procs.Clear(); consts.Clear(); type_elems.Clear(); units.Clear(); elems.Clear(); unit_name = null; full_unit_name = null; unit_desc = null; output_dir = null; index_file_name = null; reader = null; } private void copy_files() { //string[] files = Directory.GetFiles("Data\\HelpBuilder"); string[] names = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames(); for (int i=0; i 0) { SaveUnitMembers(a,ElemKind.Class); } foreach (Type t in _classes) { if (!HelpUtils.can_write(t)) continue; ItemInfo it = SaveClass(t); if (!HelpUtils.can_show_members(t)) { type_elems.Add(it,new TypeElemRec()); continue; } List props = new List(); PropertyInfo[] _props = GetNonPrivateProperties(t); if (_props.Length > 0) { SaveMembersToHTML(t,ElemKind.Property); } foreach (PropertyInfo p in _props) { if (!HelpUtils.can_write(p)) continue; SaveProperty(p,props,it); } List meths = new List(); List constrs = new List(); MethodInfo[] _meths = GetNonPrivateMethods(t); if (_meths.Length > 0) { SaveMembersToHTML(t,ElemKind.Method); } ConstructorInfo[] _constrs = GetNonPrivateConstructors(t); if (_constrs.Length > 0) { SaveMembersToHTML(t,ElemKind.Constructor); } foreach (MethodInfo m in t.GetMethods()) { if (!HelpUtils.can_write(m)) continue; if (!m.IsPrivate) SaveMethod(m,meths,constrs,it); /*if (m.IsConstructor) { if (is_overloaded_constructor(m)) SaveConstructorOverloadsList(GetOverloadedConstructors(t)); } else*/ if (is_overload(m,t)) SaveOverloadsList(GetOverloadsList(t,m)); } List fields = new List(); FieldInfo[] _fields = GetNonPrivateFields(t); if (_fields.Length > 0) { SaveMembersToHTML(t,ElemKind.Field); } foreach (FieldInfo f in _fields) { if (!HelpUtils.can_write(f)) continue; SaveField(f,fields,it); } List events = new List(); EventInfo[] _events = GetNonPrivateEvents(t); if (_events.Length > 0) { SaveMembersToHTML(t,ElemKind.Event); } foreach (EventInfo e in _events) { if (!HelpUtils.can_write(e)) continue; SaveEvent(e,events,it); } List consts = new List(); IClassConstantDefinitionNode[] _consts = null; type_elems.Add(it,new TypeElemRec(props,meths,constrs,fields,events,consts)); } //interfejsy _classes = GetInterfaces(a); if (_classes.Length > 0) { SaveUnitMembers(a,ElemKind.Interface); } foreach (Type t in _classes) { if (!HelpUtils.can_write(t)) continue; ItemInfo it = SaveClass(t); if (!HelpUtils.can_show_members(t)) { type_elems.Add(it,new TypeElemRec()); continue; } List props = new List(); PropertyInfo[] _props = GetNonPrivateProperties(t); if (_props.Length > 0) { SaveMembersToHTML(t,ElemKind.Property); } foreach (PropertyInfo p in _props) { if (!HelpUtils.can_write(p)) continue; SaveProperty(p,props,it); } List meths = new List(); List constrs = new List(); MethodInfo[] _meths = GetNonPrivateMethods(t); if (_meths.Length > 0) { SaveMembersToHTML(t,ElemKind.Method); } foreach (MethodInfo m in _meths) { if (!HelpUtils.can_write(m)) continue; SaveMethod(m,meths,constrs,it); if (is_overload(m,t)) SaveOverloadsList(GetOverloadsList(t,m)); } List events = new List(); EventInfo[] _events = GetNonPrivateEvents(t); if (_events.Length > 0) { SaveMembersToHTML(t,ElemKind.Event); } foreach (EventInfo e in _events) { if (!HelpUtils.can_write(e)) continue; SaveEvent(e,events,it); } type_elems.Add(it,new TypeElemRec(props,meths,constrs,new List(),events,new List())); } //zapisi perechislenija Type[] _rec_enums = GetEnumsRecords(a); if (_rec_enums.Length > 0) { SaveUnitMembers(a,ElemKind.EnumRecord); } foreach (Type t in _rec_enums) { if (!HelpUtils.can_write(t)) continue; ItemInfo it = SaveClass(t); if (!HelpUtils.can_show_members(t)) { type_elems.Add(it,new TypeElemRec()); continue; } PropertyInfo[] _props = GetNonPrivateProperties(t); if (_props.Length > 0) { SaveMembersToHTML(t,ElemKind.Property); } List props = new List(); foreach (PropertyInfo p in _props) { if (!HelpUtils.can_write(p)) continue; SaveProperty(p,props,it); } List meths = new List(); List constrs = new List(); MethodInfo[] _meths = GetNonPrivateMethods(t); if (_meths.Length > 0) { SaveMembersToHTML(t,ElemKind.Method); } ConstructorInfo[] _constrs = GetNonPrivateConstructors(t); if (_constrs.Length > 0) { SaveMembersToHTML(t,ElemKind.Constructor); } foreach (MethodInfo m in _meths) { if (!HelpUtils.can_write(m)) continue; SaveMethod(m,meths,constrs,it); /*if (m.IsConstructor) { if (is_overloaded_constructor(m)) SaveConstructorOverloadsList(GetOverloadedConstructors(t)); } else*/ if (is_overload(m,t)) SaveOverloadsList(GetOverloadsList(t,m)); } /*foreach (ConstructorInfo ci in _constrs) { if (!HelpUtils.can_write(ci)) continue; SaveConstructor(ci,constrs,it); if (is_overloaded_constructor(ci)) SaveConstructorOverloadsList(); }*/ FieldInfo[] _fields = GetNonPrivateFields(t); if (_fields.Length > 0) { SaveMembersToHTML(t,ElemKind.Field); } List fields = new List(); foreach (FieldInfo f in _fields) { if (!HelpUtils.can_write(f)) continue; SaveField(f,fields,it); } EventInfo[] _events = GetNonPrivateEvents(t); if (_events.Length > 0) { SaveMembersToHTML(t,ElemKind.Event); } List events = new List(); foreach (EventInfo e in _events) { if (!HelpUtils.can_write(e)) continue; SaveEvent(e,events,it); } List consts = new List(); type_elems.Add(it,new TypeElemRec(props,meths,constrs,fields,events,consts)); } units.Add(new UnitElemRec(unit_name,full_unit_name,classes,interfaces,rec_enums,types,procs,vars,this.consts)); //GenerateChmProjectFiles(); //BuildChm(); return true; } private List GetOverloadsList(Type t, MethodInfo mi) { List meths = new List(); MethodInfo[] mis = mi.DeclaringType.GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); meths.Add(mi); foreach (MethodInfo m in mis) { if (m != mi && m.Name == mi.Name) meths.Add(m); } return meths; } public static int GetConstructorIndex(ConstructorInfo ci) { ConstructorInfo[] constrs = ci.DeclaringType.GetConstructors(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); int ind = 1; foreach (ConstructorInfo c in constrs) { if ((c.IsPublic || c.IsFamily) && c != ci) ind++; else return ind; } return ind; } public static string possible_overload_constructor_symbol(ConstructorInfo f) { if (is_overloaded_constructor(f)) { int ind = GetConstructorIndex(f); if (ind != 1) return "$" + GetConstructorIndex(f); else return ""; } return ""; } public static int GetMethodIndex(MethodInfo ci, Type t) { MethodInfo[] constrs = ci.DeclaringType.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); int ind = 1; foreach (MethodInfo c in constrs) { if ((c.IsPublic || c.IsFamily) && c.Name == ci.Name && c != ci) ind++; else return ind; } return ind; } public static bool is_overloaded_constructor(ConstructorInfo ci) { ConstructorInfo[] constrs = ci.DeclaringType.GetConstructors(BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic); foreach (ConstructorInfo c in constrs) if (c != ci && (c.IsPublic ||c.IsFamily)) return true; return false; } private static bool is_overload(MethodInfo mi, Type t) { MethodInfo[] mis = GetNonPrivateMethods(t); foreach (MethodInfo meth in mis) { if (meth.Name == mi.Name && meth != mi) return true; } return false; } private Type[] GetClasses(Assembly a) { Type[] tt = a.GetExportedTypes(); List classes = new List(); foreach (Type t in tt) { if (t.IsClass) classes.Add(t); } return classes.ToArray(); } private static Type[] GetInterfaces(Assembly a) { Type[] tt = a.GetExportedTypes(); List classes = new List(); foreach (Type t in tt) { if (t.IsInterface) classes.Add(t); } return classes.ToArray(); } private static Type[] GetEnumsRecords(Assembly a) { Type[] tt = a.GetExportedTypes(); List classes = new List(); foreach (Type t in tt) { if (t.IsEnum || t.IsValueType) classes.Add(t); } return classes.ToArray(); } private static PropertyInfo[] GetNonPrivateProperties(Type t) { PropertyInfo[] pis = t.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); List props = new List(); foreach (PropertyInfo pi in pis) { if (is_not_private(pi)) props.Add(pi); } return props.ToArray(); } private static FieldInfo[] GetNonPrivateFields(Type t) { FieldInfo[] pis = t.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); List props = new List(); foreach (FieldInfo pi in pis) { if (is_not_private(pi)) props.Add(pi); } return props.ToArray(); } private static ConstructorInfo[] GetNonPrivateConstructors(Type t) { ConstructorInfo[] pis = t.GetConstructors(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); List props = new List(); foreach (ConstructorInfo pi in pis) { if (is_not_private(pi)) props.Add(pi); } return props.ToArray(); } private static MethodInfo[] GetNonPrivateMethods(Type t) { MethodInfo[] pis = t.GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); List props = new List(); foreach (MethodInfo pi in pis) { if (is_not_private(pi)) props.Add(pi); } return props.ToArray(); } private EventInfo[] GetNonPrivateEvents(Type t) { EventInfo[] pis = t.GetEvents(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); List props = new List(); foreach (EventInfo pi in pis) { if (is_not_private(pi)) props.Add(pi); } return props.ToArray(); } internal static bool is_not_private(MethodInfo mi) { return mi.IsPublic || mi.IsFamily; } internal static bool is_not_private(ConstructorInfo mi) { return mi.IsPublic || mi.IsFamily; } internal static bool is_not_private(FieldInfo fi) { return fi.IsPublic || fi.IsFamily; } internal static bool is_not_private(PropertyInfo pi) { if (pi.GetGetMethod(true) != null) return pi.GetGetMethod(true).IsPublic || pi.GetGetMethod(true).IsFamily; return false; } internal static bool is_not_private(EventInfo pi) { if (pi.GetAddMethod(true) != null) return pi.GetAddMethod(true).IsPublic || pi.GetAddMethod(true).IsFamily; return false; } private FieldInfo[] GetFields(Type t, field_access_level mod) { FieldInfo[] flds = t.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); List fields = new List(); foreach (FieldInfo fi in flds) { if (mod == field_access_level.fal_public && fi.IsPublic) fields.Add(fi); else if (mod == field_access_level.fal_protected && (fi.IsFamily || fi.IsFamilyOrAssembly)) fields.Add(fi); } return fields.ToArray(); } private MethodInfo[] GetMethods(Type t, field_access_level mod) { MethodInfo[] mths = t.GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); List meths = new List(); foreach (MethodInfo mi in mths) { if (mod == field_access_level.fal_public && mi.IsPublic) meths.Add(mi); else if (mod == field_access_level.fal_protected && (mi.IsFamily || mi.IsFamilyOrAssembly)) meths.Add(mi); } return meths.ToArray(); } private PropertyInfo[] GetProperties(Type t, field_access_level mod) { PropertyInfo[] flds = t.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); List fields = new List(); foreach (PropertyInfo fi in flds) { MethodInfo get_meth = fi.GetGetMethod(true); if (get_meth != null) if (mod == field_access_level.fal_public && get_meth.IsPublic) fields.Add(fi); else if (mod == field_access_level.fal_protected && (get_meth.IsFamily || get_meth.IsFamilyOrAssembly)) fields.Add(fi); } return fields.ToArray(); } private EventInfo[] GetEvents(Type t, field_access_level mod) { EventInfo[] flds = t.GetEvents(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); List fields = new List(); foreach (EventInfo fi in flds) { MethodInfo add_meth = fi.GetAddMethod(true); if (add_meth != null) if (mod == field_access_level.fal_public && add_meth.IsPublic) fields.Add(fi); else if (mod == field_access_level.fal_protected && (add_meth.IsFamily || add_meth.IsFamilyOrAssembly)) fields.Add(fi); } return fields.ToArray(); } private void BuildChm() { string hhc_file_name = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles),@"HTML Help Workshop\hhc.exe"); if (!File.Exists(hhc_file_name)) return; Process p = new Process(); p.StartInfo.CreateNoWindow = true; p.StartInfo.ErrorDialog = true; p.StartInfo.FileName = hhc_file_name; p.StartInfo.Arguments = Path.Combine(this.output_dir,"prj.hhp"); p.StartInfo.UseShellExecute = false; p.StartInfo.WorkingDirectory = this.output_dir; bool b = p.Start(); while (!p.HasExited) Thread.Sleep(10); } private void GenerateChmProjectFiles() { //StreamWriter sw = File.CreateText(Path.Combine(this.output_dir,"prj.hhp")); StreamWriter sw = new StreamWriter(Path.Combine(this.output_dir,"prj.hhp"),false,System.Text.Encoding.GetEncoding(1251)); sw.WriteLine("[OPTIONS]"); sw.WriteLine("Compatibility=1.1 or later"); sw.WriteLine("Default Window=MsdnHelp"); sw.WriteLine("Display compile progress=No"); sw.WriteLine("Full-text search=Yes"); sw.WriteLine("Language=0x0419 Russian"); sw.WriteLine("Binary TOC=Yes"); sw.WriteLine("Title=PascalABC.NET"); sw.WriteLine("Default topic="+unit_name+".html"); sw.WriteLine("Compiled file="+options.OutputCHMFileName); sw.WriteLine("Contents file=Documentation.hhc"); sw.WriteLine(); sw.WriteLine("[WINDOWS]"); sw.WriteLine("MsdnHelp=\"PascalABC.NET Help Library\",\"Documentation.hhc\",\"Documentation.hhk\",\"index.html\",\"index.html\",,,,,0x62520,220,0x387e,[86,51,872,558],,,,,,,0"); sw.WriteLine(); sw.WriteLine("[FILES]"); string[] files = Directory.GetFiles(output_dir); for (int i=0; i"); sw.WriteLine(""); //files = Directory.GetFiles(output_dir,"*.html"); foreach (UnitElemRec r in units) { this.classes = r.classes; this.interfaces = r.interfaces; this.rec_enums = r.rec_enums; this.types = r.types; this.consts = r.consts; this.vars = r.vars; this.procs = r.procs; this.unit_name = r.unit_name; this.full_unit_name = r.full_unit_name; WriteHHCContent(sw); } sw.WriteLine(""); sw.Close(); sw = new StreamWriter(Path.Combine(this.output_dir,"Documentation.hhk"),false,System.Text.Encoding.GetEncoding(1251)); sw.WriteLine(""); sw.WriteLine(""); //files = Directory.GetFiles(output_dir,"*.html"); foreach (UnitElemRec r in units) { this.classes = r.classes; this.interfaces = r.interfaces; this.rec_enums = r.rec_enums; this.types = r.types; this.consts = r.consts; this.vars = r.vars; this.procs = r.procs; this.unit_name = r.unit_name; WriteHHKContent(sw); } sw.WriteLine(""); sw.Close(); } private void WriteHHCContent(StreamWriter sw) { sw.WriteLine("
    "); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); classes.Sort(new ItemInfoComparer()); if (classes.Count > 0) { sw.WriteLine("
      "); sw.WriteLine("
    • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
    • "); for (int i=0; i"); sw.WriteLine("
    • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
    • "); TypeElemRec ter = type_elems[classes[i]]; ter.constrs.Sort(new ItemInfoComparer()); if (ter.constrs.Count > 0) { sw.WriteLine("
        "); sw.WriteLine("
      • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
      • "); for (int j=0; j"); sw.WriteLine("
      • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
      • "); sw.WriteLine("
      "); } sw.WriteLine("
    "); } ter.meths.Sort(new ItemInfoComparer()); if (ter.meths.Count > 0) { sw.WriteLine("
      "); sw.WriteLine("
    • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
    • "); for (int j=0; j"); sw.WriteLine("
    • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
    • "); sw.WriteLine("
    "); } sw.WriteLine("
"); } ter.props.Sort(new ItemInfoComparer()); if (ter.props.Count > 0) { sw.WriteLine("
    "); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); for (int j=0; j"); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); sw.WriteLine("
"); } sw.WriteLine(""); } ter.fields.Sort(new ItemInfoComparer()); if (ter.fields.Count > 0) { sw.WriteLine("
    "); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); for (int j=0; j"); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); sw.WriteLine("
"); } sw.WriteLine(""); } ter.events.Sort(new ItemInfoComparer()); if (ter.events.Count > 0) { sw.WriteLine("
    "); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); for (int j=0; j"); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); sw.WriteLine("
"); } sw.WriteLine(""); } ter.consts.Sort(new ItemInfoComparer()); if (ter.consts.Count > 0) { sw.WriteLine("
    "); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); for (int j=0; j"); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); sw.WriteLine("
"); } sw.WriteLine(""); } sw.WriteLine(""); } sw.WriteLine(""); } interfaces.Sort(new ItemInfoComparer()); if (interfaces.Count > 0) { sw.WriteLine("
    "); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); for (int i=0; i"); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); TypeElemRec ter = type_elems[classes[i]]; ter.meths.Sort(new ItemInfoComparer()); if (ter.meths.Count > 0) { sw.WriteLine("
      "); sw.WriteLine("
    • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
    • "); for (int j=0; j"); sw.WriteLine("
    • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
    • "); sw.WriteLine("
    "); } sw.WriteLine("
"); } ter.props.Sort(new ItemInfoComparer()); if (ter.props.Count > 0) { sw.WriteLine("
    "); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); for (int j=0; j"); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); sw.WriteLine("
"); } sw.WriteLine(""); } ter.events.Sort(new ItemInfoComparer()); if (ter.events.Count > 0) { sw.WriteLine("
    "); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); for (int j=0; j"); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); sw.WriteLine("
"); } sw.WriteLine(""); } sw.WriteLine(""); } sw.WriteLine(""); } rec_enums.Sort(new ItemInfoComparer()); if (rec_enums.Count > 0) { sw.WriteLine("
    "); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); for (int i=0; i"); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); TypeElemRec ter = type_elems[rec_enums[i]]; ter.constrs.Sort(new ItemInfoComparer()); if (ter.constrs.Count > 0) { sw.WriteLine("
      "); sw.WriteLine("
    • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
    • "); for (int j=0; j"); sw.WriteLine("
    • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
    • "); sw.WriteLine("
    "); } sw.WriteLine("
"); } ter.meths.Sort(new ItemInfoComparer()); if (ter.meths.Count > 0) { sw.WriteLine("
    "); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); for (int j=0; j"); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); sw.WriteLine("
"); } sw.WriteLine(""); } ter.props.Sort(new ItemInfoComparer()); if (ter.props.Count > 0) { sw.WriteLine("
    "); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); for (int j=0; j"); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); sw.WriteLine("
"); } sw.WriteLine(""); } ter.fields.Sort(new ItemInfoComparer()); if (ter.fields.Count > 0) { sw.WriteLine("
    "); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); for (int j=0; j"); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); sw.WriteLine("
"); } sw.WriteLine(""); } ter.events.Sort(new ItemInfoComparer()); if (ter.events.Count > 0) { sw.WriteLine("
    "); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); for (int j=0; j"); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); sw.WriteLine("
"); } sw.WriteLine(""); } ter.consts.Sort(new ItemInfoComparer()); if (ter.consts.Count > 0) { sw.WriteLine("
    "); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); for (int j=0; j"); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); sw.WriteLine("
"); } sw.WriteLine(""); } sw.WriteLine(""); } sw.WriteLine(""); } //types types.Sort(new ItemInfoComparer()); if (types.Count > 0) { sw.WriteLine("
    "); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); for (int i=0; i"); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); sw.WriteLine("
"); } sw.WriteLine(""); } //globals procs.Sort(new ItemInfoComparer()); if (procs.Count > 0) { sw.WriteLine("
    "); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); for (int i=0; i"); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); sw.WriteLine("
"); } sw.WriteLine(""); } vars.Sort(new ItemInfoComparer()); if (vars.Count > 0) { sw.WriteLine("
    "); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); for (int i=0; i"); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); sw.WriteLine("
"); } sw.WriteLine(""); } consts.Sort(new ItemInfoComparer()); if (consts.Count > 0) { sw.WriteLine("
    "); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); for (int i=0; i"); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); sw.WriteLine("
"); } sw.WriteLine(""); } sw.WriteLine(""); //foreach (ICo } private void WriteHHKContent(StreamWriter sw) { sw.WriteLine("
    "); sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); namespaces.Sort(new ItemInfoComparer()); if (namespaces.Count > 0) { for (int k = 0; k < namespaces.Count; k++) { NamespaceElemRec ns = namespace_elems[namespaces[k]]; sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); //klassy List classes = ns.classes; classes.Sort(new ItemInfoComparer()); if (classes.Count > 0) { for (int i = 0; i < classes.Count; i++) { TypeElemRec ter = type_elems[classes[i]]; sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); ter.constrs.Sort(new ItemInfoComparer()); if (ter.constrs.Count > 0) { for (int j = 0; j < ter.constrs.Count; j++) { sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); } } ter.meths.Sort(new ItemInfoComparer()); if (ter.meths.Count > 0) { for (int j = 0; j < ter.meths.Count; j++) { sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); } } ter.props.Sort(new ItemInfoComparer()); if (ter.props.Count > 0) { for (int j = 0; j < ter.props.Count; j++) { sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); } } ter.fields.Sort(new ItemInfoComparer()); if (ter.fields.Count > 0) { for (int j = 0; j < ter.fields.Count; j++) { sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); } } ter.events.Sort(new ItemInfoComparer()); if (ter.events.Count > 0) { for (int j = 0; j < ter.events.Count; j++) { sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); } } } } List interfaces = ns.interfaces; interfaces.Sort(new ItemInfoComparer()); if (interfaces.Count > 0) { for (int i = 0; i < interfaces.Count; i++) { TypeElemRec ter = type_elems[interfaces[i]]; sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); ter.meths.Sort(new ItemInfoComparer()); if (ter.meths.Count > 0) { for (int j = 0; j < ter.meths.Count; j++) { sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); } } ter.props.Sort(new ItemInfoComparer()); if (ter.props.Count > 0) { for (int j = 0; j < ter.props.Count; j++) { sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); } } ter.events.Sort(new ItemInfoComparer()); if (ter.events.Count > 0) { for (int j = 0; j < ter.events.Count; j++) { sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); } } } } //records List records = ns.records; records.Sort(new ItemInfoComparer()); if (records.Count > 0) { for (int i = 0; i < records.Count; i++) { TypeElemRec ter = type_elems[records[i]]; sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); ter.constrs.Sort(new ItemInfoComparer()); if (ter.constrs.Count > 0) { for (int j = 0; j < ter.constrs.Count; j++) { sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); } } ter.meths.Sort(new ItemInfoComparer()); if (ter.meths.Count > 0) { for (int j = 0; j < ter.meths.Count; j++) { sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); } } ter.props.Sort(new ItemInfoComparer()); if (ter.props.Count > 0) { for (int j = 0; j < ter.props.Count; j++) { sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); } } ter.fields.Sort(new ItemInfoComparer()); if (ter.fields.Count > 0) { for (int j = 0; j < ter.fields.Count; j++) { sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); } } ter.events.Sort(new ItemInfoComparer()); if (ter.events.Count > 0) { for (int j = 0; j < ter.events.Count; j++) { sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); } } ter.consts.Sort(new ItemInfoComparer()); if (ter.consts.Count > 0) { for (int j = 0; j < ter.consts.Count; j++) { sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); } } } } List enums = ns.enums; //types types.Sort(new ItemInfoComparer()); if (types.Count > 0) { for (int i = 0; i < types.Count; i++) { TypeElemRec ter = type_elems[types[i]]; sw.WriteLine("
  • "); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
  • "); } } } } sw.WriteLine("
"); } private void SaveIndexFile() { StreamWriter sw = new StreamWriter(index_file_name,false,System.Text.Encoding.GetEncoding(1251)); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""+unit_name+""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("<p>This page requires frames, but your browser does not support them.</p>"); sw.WriteLine(""); sw.WriteLine(""); sw.Close(); } private void WriteNameDescriptionHeaderForTable(StreamWriter sw) { sw.WriteLine(""); sw.WriteLine(""+HelpUtils.get_localization("NAME")+""); sw.WriteLine(""+HelpUtils.get_localization("DESCRIPTION_WO_COLON")+""); sw.WriteLine(""); } private void WriteTableHeader(StreamWriter sw, string name) { sw.WriteLine("
"); sw.WriteLine("

"+name+"

"); sw.WriteLine("
"); sw.WriteLine(""); } private void WriteFooterTable(StreamWriter sw) { sw.WriteLine("
"); sw.WriteLine("
"); sw.WriteLine("
"); } enum ElemKind { None, Class, Interface, EnumRecord, Type, Variable, Const, Property, Constructor, Method, Field, Subroutine, Event, ClassConstant } private void SaveUnitMembers(Assembly a, ElemKind kind) { string _unit_name = unit_name; switch (kind) { case ElemKind.Class : _unit_name += "$Classes"; break; case ElemKind.EnumRecord : _unit_name += "$Records"; break; case ElemKind.Type : _unit_name += "$Types"; break; case ElemKind.Variable : _unit_name += "$Variables"; break; case ElemKind.Subroutine : _unit_name += "$Subroutines"; break; case ElemKind.Const : _unit_name += "$Constants"; break; case ElemKind.Interface : _unit_name += "$Interfaces"; break; } string _full_unit_name = Path.Combine(output_dir,_unit_name+".html"); StreamWriter sw = new StreamWriter(_full_unit_name,false,System.Text.Encoding.GetEncoding(1251)); WriteBanner(sw); if (kind == ElemKind.None) elems.Add(new ItemInfo(unit_name+".html",HelpUtils.get_localization("UNIT")+" "+unit_name)); sw.WriteLine("
"); sw.WriteLine("

"+HelpUtils.get_localization("UNIT")+" "+unit_name+"

"); sw.WriteLine("
"); if (kind == ElemKind.None) { sw.WriteLine("
"); if (!string.IsNullOrEmpty(unit_desc) && unit_desc != Convert.ToString((char)0xA0)) sw.WriteLine("

"+HelpUtils.get_localization("DESCRIPTION")+"

"); if (!string.IsNullOrEmpty(unit_desc) && unit_desc != Convert.ToString((char)0xA0)) sw.WriteLine("

"+unit_desc+"

"); sw.WriteLine("
"); } //klassy Type[] _classes = GetClasses(a); if (_classes.Length > 0 && (kind == ElemKind.None || kind == ElemKind.Class)) { WriteTableHeader(sw, HelpUtils.get_localization("CLASSES")); WriteNameDescriptionHeaderForTable(sw); foreach (Type t in _classes) { if (!HelpUtils.can_write(t)) continue; sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("" + HelpUtils.build_name_with_possible_generic(t, true) + ""); sw.WriteLine(""); sw.WriteLine("" + HelpUtils.get_summary(HelpUtils.GetDocumentation(t)) + ""); sw.WriteLine(""); } WriteFooterTable(sw); } Type[] _interfaces = GetInterfaces(a); if (_interfaces.Length > 0 && (kind == ElemKind.None || kind == ElemKind.Interface)) { WriteTableHeader(sw, HelpUtils.get_localization("INTERFACES")); WriteNameDescriptionHeaderForTable(sw); foreach (Type t in _interfaces) { if (!HelpUtils.can_write(t)) continue; sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("" + HelpUtils.build_name_with_possible_generic(t, true) + ""); sw.WriteLine(""); sw.WriteLine("" + HelpUtils.get_summary(HelpUtils.GetDocumentation(t)) + ""); sw.WriteLine(""); } WriteFooterTable(sw); } Type[] _enum_recs = GetEnumsRecords(a); if (_enum_recs.Length > 0 && (kind == ElemKind.None || kind == ElemKind.EnumRecord)) { WriteTableHeader(sw, HelpUtils.get_localization("ENUMS_RECORDS")); WriteNameDescriptionHeaderForTable(sw); foreach (Type t in _enum_recs) { if (!HelpUtils.can_write(t)) continue; sw.WriteLine(""); sw.WriteLine(""); if (t.IsEnum) sw.WriteLine(""); else if (t.IsValueType) sw.WriteLine(""); sw.WriteLine("" + HelpUtils.build_name_with_possible_generic(t, true) + ""); sw.WriteLine(""); sw.WriteLine("" + HelpUtils.get_summary(HelpUtils.GetDocumentation(t)) + ""); sw.WriteLine(""); } WriteFooterTable(sw); } sw.WriteLine(""); sw.WriteLine(""); sw.Close(); } private void WriteSpaces(StreamWriter sw, int num) { for (int i=0; i meths) { string name = HelpUtils.get_meth_name(meths[0])+"$overloads"; StreamWriter sw = new StreamWriter(Path.Combine(output_dir,name+".html"),false,System.Text.Encoding.GetEncoding(1251)); WriteBanner(sw); sw.WriteLine("
"); if (meths[0].ReturnType == typeof(void)) sw.WriteLine("

"+HelpUtils.get_localization("PROCEDURE")+" "+meths[0].Name+"

"); else sw.WriteLine("

"+HelpUtils.get_localization("FUNCTION")+" "+meths[0].Name+"

"); sw.WriteLine("
"); WriteTableHeader(sw,HelpUtils.get_localization("OVERLOADED_SUBPROGRAMMS")); //sw.WriteLine(""); WriteNameDescriptionHeaderForTable(sw); foreach (MethodInfo meth in meths) { if (!HelpUtils.can_write(meth)) continue; sw.Write(""); sw.Write(""+HelpUtils.get_simple_meth_header(meth)+""); sw.Write(""); sw.Write(""); sw.Write(HelpUtils.get_summary(HelpUtils.GetDocumentation(meth))); sw.WriteLine(""); } WriteFooterTable(sw); sw.WriteLine(""); sw.Close(); } private void SaveConstructorOverloadsList(List meths) { string name = HelpUtils.get_meth_name(meths[0])+"$overloads"; StreamWriter sw = new StreamWriter(Path.Combine(output_dir,name+".html"),false,System.Text.Encoding.GetEncoding(1251)); WriteBanner(sw); sw.WriteLine("
"); sw.WriteLine("

"+HelpUtils.get_localization("CONSTRUCTOR")+" "+"Create"+"

"); sw.WriteLine("
"); WriteTableHeader(sw,HelpUtils.get_localization("OVERLOADED_CONSTRUCTORS")); //sw.WriteLine(""); WriteNameDescriptionHeaderForTable(sw); foreach (ConstructorInfo meth in meths) { if (!HelpUtils.can_write(meth)) continue; sw.Write(""); sw.Write(""+HelpUtils.get_simple_meth_header(meth)+""); sw.Write(""); sw.Write(""); sw.Write(HelpUtils.get_summary(HelpUtils.GetDocumentation(meth))); sw.WriteLine(""); } WriteFooterTable(sw); sw.WriteLine(""); sw.Close(); } private void SaveOverloadsList(List meths) { string name = HelpUtils.get_meth_name(meths[0])+"$overloads"; StreamWriter sw = new StreamWriter(Path.Combine(output_dir,name+".html"),false,System.Text.Encoding.GetEncoding(1251)); WriteBanner(sw); sw.WriteLine("
"); sw.WriteLine("

"+HelpUtils.get_localization("METHOD")+" "+meths[0].name+"

"); sw.WriteLine("
"); WriteTableHeader(sw,HelpUtils.get_localization("OVERLOADED_METHODS")); //sw.WriteLine(""); WriteNameDescriptionHeaderForTable(sw); foreach (ICommonMethodNode meth in meths) { if (!HelpUtils.can_write(meth)) continue; sw.Write(""); sw.Write(""+HelpUtils.get_simple_meth_header(meth)+""); sw.Write(""); sw.Write(""); sw.Write(HelpUtils.get_summary(meth.Documentation)); sw.WriteLine(""); } WriteFooterTable(sw); sw.WriteLine(""); sw.Close(); } private void SaveMembersToHTML(Type t, ElemKind kind) { string name = HelpUtils.get_type_name(t); string _name = name; switch (kind) { case ElemKind.Property : _name += "Members$Properties.html"; break; case ElemKind.Method : _name += "Members$Methods.html"; break; case ElemKind.Constructor : _name += "Members$Constructors.html"; break; case ElemKind.Field : _name += "Members$Fields.html"; break; case ElemKind.Event : _name += "Members$Events.html"; break; case ElemKind.ClassConstant : _name += "Members$ClassConstants.html"; break; default : _name += "Members.html"; break; } StreamWriter sw = new StreamWriter(Path.Combine(output_dir,_name),false,System.Text.Encoding.GetEncoding(1251)); if (kind == ElemKind.None) elems.Add(new ItemInfo(name+"Members.html",HelpUtils.get_localization("CLASS")+" "+name)); WriteBanner(sw); sw.WriteLine("
"); if (t.IsEnum) sw.WriteLine("

"+HelpUtils.get_localization("TYPE_MEMBERS")+" "+name+"

"); else if (t.IsValueType) sw.WriteLine("

"+HelpUtils.get_localization("RECORD_MEMBERS")+" "+name+"

"); else if (t.IsInterface) sw.WriteLine("

"+HelpUtils.get_localization("INTERFACE_MEMBERS")+" "+name+"

"); else if (t.IsClass) sw.WriteLine("

"+HelpUtils.get_localization("CLASS_MEMBERS")+" "+name+"

"); sw.WriteLine("
"); sw.WriteLine("
"); sw.WriteLine("

"+ HelpUtils.get_localization("PREVIEW")+" "+t.Name+"

"); ConstructorInfo[] constrs = GetNonPrivateConstructors(t); if (constrs.Length > 0 && (kind == ElemKind.None || kind == ElemKind.Constructor)) { sw.WriteLine("

"+HelpUtils.get_localization("CONSTRUCTORS")+"

"); sw.WriteLine("
"); sw.WriteLine(""); WriteNameDescriptionHeaderForTable(sw); sw.WriteLine(""); sw.Write(""); sw.WriteLine("
"); sw.WriteLine(""); if (constrs.Length == 1) sw.WriteLine("Create"); else sw.WriteLine("Create"); sw.WriteLine(""); if (constrs.Length == 1) sw.Write(HelpUtils.get_summary(HelpUtils.GetDocumentation(constrs[0]))); else sw.Write(HelpUtils.get_localization("OVERLOADED_CONSTRUCTOR")+" "+t.Name); sw.WriteLine("
"); } PropertyInfo[] props = GetProperties(t, field_access_level.fal_public); if (props.Length > 0 && (kind == ElemKind.None || kind == ElemKind.Property)) { sw.WriteLine("

" + HelpUtils.get_localization("PUBLIC_PROPERTIES") + "

"); sw.WriteLine("
"); sw.WriteLine(""); WriteNameDescriptionHeaderForTable(sw); foreach (PropertyInfo prop in props) { if (!HelpUtils.can_write(prop)) continue; sw.Write(""); sw.Write(""); } sw.WriteLine("
"); if (prop.GetGetMethod() != null && prop.GetGetMethod().IsStatic) sw.Write(""); sw.Write("" + prop.Name + ""); sw.Write(""); string doc = HelpUtils.get_summary(HelpUtils.GetDocumentation(prop)); sw.Write(doc); if (prop.DeclaringType != t) sw.Write((doc == HelpUtils.HTMLSpace ? "(" : " (") + HelpUtils.get_localization("INHERITED_FROM") + " " + HelpUtils.get_type_html_text(prop.DeclaringType) + ")"); sw.WriteLine("
"); sw.WriteLine("
"); } MethodInfo[] meths = GetMethods(t, field_access_level.fal_public); if (meths.Length > 0 && (kind == ElemKind.None || kind == ElemKind.Method)) { sw.WriteLine("

" + HelpUtils.get_localization("PUBLIC_METHODS") + "

"); sw.WriteLine("
"); sw.WriteLine(""); WriteNameDescriptionHeaderForTable(sw); foreach (MethodInfo meth in meths) { if (!HelpUtils.can_write(meth)) continue; int ind = GetMethodIndex(meth, t); if (is_overload(meth, t) && ind > 1) continue; sw.Write(""); sw.Write(""); } sw.WriteLine("
"); if (meth.IsStatic) sw.Write(""); if (is_overload(meth, t)) sw.Write("" + meth.Name + ""); else { sw.Write("" + meth.Name + ""); } sw.Write(""); if (is_overload(meth, t)) sw.Write(HelpUtils.get_localization("OVERLOADED") + " "); string doc = HelpUtils.get_summary(HelpUtils.GetDocumentation(meth)); sw.Write(doc); if (meth.DeclaringType != t) sw.Write((doc == HelpUtils.HTMLSpace ? "(" : " (") + HelpUtils.get_localization("INHERITED_FROM") + " " + HelpUtils.get_type_html_text(meth.DeclaringType) + ")"); sw.WriteLine("
"); sw.WriteLine("
"); } FieldInfo[] fields = GetFields(t, field_access_level.fal_public); if (fields.Length > 0 && (kind == ElemKind.None || kind == ElemKind.Field)) { sw.WriteLine("

" + HelpUtils.get_localization("PUBLIC_FIELDS") + "

"); sw.WriteLine("
"); sw.WriteLine(""); WriteNameDescriptionHeaderForTable(sw); foreach (FieldInfo fld in fields) { if (!HelpUtils.can_write(fld)) continue; sw.Write(""); sw.Write(""); } sw.WriteLine("
"); if (fld.IsStatic) sw.Write(""); sw.Write("" + fld.Name + ""); sw.Write(""); string doc = HelpUtils.get_summary(HelpUtils.GetDocumentation(fld)); sw.Write(doc); if (fld.DeclaringType != t) sw.Write((doc == HelpUtils.HTMLSpace ? "(" : " (") + HelpUtils.get_localization("INHERITED_FROM") + " " + HelpUtils.get_type_html_text(fld.DeclaringType) + ")"); sw.WriteLine("
"); sw.WriteLine("
"); } EventInfo[] events = GetEvents(t, field_access_level.fal_public); if (events.Length > 0 && (kind == ElemKind.None || kind == ElemKind.Event)) { sw.WriteLine("

" + HelpUtils.get_localization("PUBLIC_EVENTS") + "

"); sw.WriteLine("
"); sw.WriteLine(""); WriteNameDescriptionHeaderForTable(sw); foreach (EventInfo e in events) { if (!HelpUtils.can_write(e)) continue; sw.Write(""); sw.Write(""); } sw.WriteLine("
"); if (e.GetAddMethod().IsStatic) sw.Write(""); sw.Write("" + e.Name + ""); sw.Write(""); string doc = HelpUtils.get_summary(HelpUtils.GetDocumentation(e)); sw.Write(doc); if (e.DeclaringType != t) sw.Write((doc == HelpUtils.HTMLSpace ? "(" : " (") + HelpUtils.get_localization("INHERITED_FROM") + " " + HelpUtils.get_type_html_text(e.DeclaringType) + ")"); sw.WriteLine("
"); sw.WriteLine("
"); } //internal props = GetProperties(t, field_access_level.fal_internal); if (props.Length > 0 && (kind == ElemKind.None || kind == ElemKind.Property)) { sw.WriteLine("

" + HelpUtils.get_localization("INTERNAL_PROPERTIES") + "

"); sw.WriteLine("
"); sw.WriteLine(""); WriteNameDescriptionHeaderForTable(sw); foreach (PropertyInfo prop in props) { if (!HelpUtils.can_write(prop)) continue; sw.Write(""); sw.Write(""); } sw.WriteLine("
"); if (prop.GetGetMethod() != null && prop.GetGetMethod().IsStatic) sw.Write(""); sw.Write("" + prop.Name + ""); sw.Write(""); string doc = HelpUtils.get_summary(HelpUtils.GetDocumentation(prop)); sw.Write(doc); if (prop.DeclaringType != t) sw.Write((doc == HelpUtils.HTMLSpace ? "(" : " (") + HelpUtils.get_localization("INHERITED_FROM") + " " + HelpUtils.get_type_html_text(prop.DeclaringType) + ")"); sw.WriteLine("
"); sw.WriteLine("
"); } meths = GetMethods(t, field_access_level.fal_internal); if (meths.Length > 0 && (kind == ElemKind.None || kind == ElemKind.Method)) { sw.WriteLine("

" + HelpUtils.get_localization("INTERNAL_METHODS") + "

"); sw.WriteLine("
"); sw.WriteLine(""); WriteNameDescriptionHeaderForTable(sw); foreach (MethodInfo meth in meths) { if (!HelpUtils.can_write(meth)) continue; int ind = GetMethodIndex(meth, t); if (is_overload(meth, t) && ind > 1) continue; sw.Write(""); sw.Write(""); } sw.WriteLine("
"); if (meth.IsStatic) sw.Write(""); if (!is_overload(meth, t)) sw.Write("" + meth.Name + ""); else { sw.Write("" + meth.Name + ""); } sw.Write(""); if (is_overload(meth, t)) sw.Write(HelpUtils.get_localization("OVERLOADED") + " "); string doc = HelpUtils.get_summary(HelpUtils.GetDocumentation(meth)); sw.Write(doc); if (meth.DeclaringType != t) sw.Write((doc == HelpUtils.HTMLSpace ? "(" : " (") + HelpUtils.get_localization("INHERITED_FROM") + " " + HelpUtils.get_type_html_text(meth.DeclaringType) + ")"); sw.WriteLine("
"); sw.WriteLine("
"); } fields = GetFields(t, field_access_level.fal_internal); if (fields.Length > 0 && (kind == ElemKind.None || kind == ElemKind.Field)) { sw.WriteLine("

" + HelpUtils.get_localization("INTERNAL_FIELDS") + "

"); sw.WriteLine("
"); sw.WriteLine(""); WriteNameDescriptionHeaderForTable(sw); foreach (FieldInfo fld in fields) { if (!HelpUtils.can_write(fld)) continue; sw.Write(""); sw.Write(""); } sw.WriteLine("
"); if (fld.IsStatic) sw.Write(""); sw.Write("" + fld.Name + ""); sw.Write(""); string doc = HelpUtils.get_summary(HelpUtils.GetDocumentation(fld)); sw.Write(doc); if (fld.DeclaringType != t) sw.Write((doc == HelpUtils.HTMLSpace ? "(" : " (") + HelpUtils.get_localization("INHERITED_FROM") + " " + HelpUtils.get_type_html_text(fld.DeclaringType) + ")"); sw.WriteLine("
"); sw.WriteLine("
"); } events = GetEvents(t, field_access_level.fal_internal); if (events.Length > 0 && (kind == ElemKind.None || kind == ElemKind.Event)) { sw.WriteLine("

" + HelpUtils.get_localization("INTERNAL_EVENTS") + "

"); sw.WriteLine("
"); sw.WriteLine(""); WriteNameDescriptionHeaderForTable(sw); foreach (EventInfo e in events) { if (!HelpUtils.can_write(e)) continue; sw.Write(""); sw.Write(""); } sw.WriteLine("
"); if (e.GetAddMethod().IsStatic) sw.Write(""); sw.Write("" + e.Name + ""); sw.Write(""); string doc = HelpUtils.get_summary(HelpUtils.GetDocumentation(e)); sw.Write(doc); if (e.DeclaringType != t) sw.Write((doc == HelpUtils.HTMLSpace ? "(" : " (") + HelpUtils.get_localization("INHERITED_FROM") + " " + HelpUtils.get_type_html_text(e.DeclaringType) + ")"); sw.WriteLine("
"); sw.WriteLine("
"); } //protected props = GetProperties(t, field_access_level.fal_protected); if (props.Length > 0 && (kind == ElemKind.None || kind == ElemKind.Property)) { sw.WriteLine("

" + HelpUtils.get_localization("PROTECTED_FIELDS") + "

"); sw.WriteLine("
"); sw.WriteLine(""); WriteNameDescriptionHeaderForTable(sw); foreach (PropertyInfo prop in props) { if (!HelpUtils.can_write(prop)) continue; sw.Write(""); sw.Write(""); } sw.WriteLine("
"); if (prop.GetGetMethod(true).IsStatic) sw.Write(""); sw.Write("" + prop.Name + ""); sw.Write(""); string doc = HelpUtils.get_summary(HelpUtils.GetDocumentation(prop)); sw.Write(doc); if (prop.DeclaringType != t) sw.Write((doc == HelpUtils.HTMLSpace ? "(" : " (") + HelpUtils.get_localization("INHERITED_FROM") + " " + HelpUtils.get_type_html_text(prop.DeclaringType) + ")"); sw.WriteLine("
"); sw.WriteLine("
"); } meths = GetMethods(t, field_access_level.fal_protected); if (meths.Length > 0 && (kind == ElemKind.None || kind == ElemKind.Method)) { sw.WriteLine("

" + HelpUtils.get_localization("PROTECTED_METHODS") + "

"); sw.WriteLine("
"); sw.WriteLine(""); WriteNameDescriptionHeaderForTable(sw); foreach (MethodInfo meth in meths) { if (!HelpUtils.can_write(meth)) continue; int ind = GetMethodIndex(meth, t); if (is_overload(meth, t) && ind > 1) continue; sw.Write(""); sw.Write(""); } sw.WriteLine("
"); if (meth.IsStatic) sw.Write(""); if (!is_overload(meth, t)) sw.Write("" + meth.Name + ""); else { sw.Write("" + meth.Name + ""); } sw.Write(""); if (is_overload(meth, t)) sw.Write(HelpUtils.get_localization("OVERLOADED") + " "); string doc = HelpUtils.get_summary(HelpUtils.GetDocumentation(meth)); sw.Write(doc); if (meth.DeclaringType != t) sw.Write((doc == HelpUtils.HTMLSpace ? "(" : " (") + HelpUtils.get_localization("INHERITED_FROM") + " " + HelpUtils.get_type_html_text(meth.DeclaringType) + ")"); sw.WriteLine("
"); sw.WriteLine("
"); } fields = GetFields(t, field_access_level.fal_protected); if (fields.Length > 0 && (kind == ElemKind.None || kind == ElemKind.Field)) { sw.WriteLine("

" + HelpUtils.get_localization("PROTECTED_FIELDS") + "

"); sw.WriteLine("
"); sw.WriteLine(""); WriteNameDescriptionHeaderForTable(sw); foreach (FieldInfo fld in fields) { if (!HelpUtils.can_write(fld)) continue; sw.Write(""); sw.Write(""); } sw.WriteLine("
"); if (fld.IsStatic) sw.Write(""); sw.Write("" + fld.Name + ""); sw.Write(""); string doc = HelpUtils.get_summary(HelpUtils.GetDocumentation(fld)); sw.Write(doc); if (fld.DeclaringType != t) sw.Write((doc == HelpUtils.HTMLSpace ? "(" : " (") + HelpUtils.get_localization("INHERITED_FROM") + " " + HelpUtils.get_type_html_text(fld.DeclaringType) + ")"); sw.WriteLine("
"); sw.WriteLine("
"); } events = GetEvents(t, field_access_level.fal_protected); if (events.Length > 0 && (kind == ElemKind.None || kind == ElemKind.Event)) { sw.WriteLine("

" + HelpUtils.get_localization("PROTECTED_EVENTS") + "

"); sw.WriteLine("
"); sw.WriteLine(""); WriteNameDescriptionHeaderForTable(sw); foreach (EventInfo e in events) { if (!HelpUtils.can_write(e)) continue; sw.Write(""); sw.Write(""); } sw.WriteLine("
"); if (e.GetAddMethod(true).IsStatic) sw.Write(""); sw.Write("" + e.Name + ""); sw.Write(""); string doc = HelpUtils.get_summary(HelpUtils.GetDocumentation(e)); sw.Write(doc); if (e.DeclaringType != t) sw.Write((doc == HelpUtils.HTMLSpace ? "(" : " (") + HelpUtils.get_localization("INHERITED_FROM") + " " + HelpUtils.get_type_html_text(e.DeclaringType) + ")"); sw.WriteLine("
"); sw.WriteLine("
"); } sw.WriteLine("
"); sw.Close(); } private void SaveProperty(PropertyInfo p, List props, ItemInfo decl_type) { string name = HelpUtils.get_prop_name(p); StreamWriter sw = new StreamWriter(Path.Combine(output_dir,name+".html"),false,System.Text.Encoding.GetEncoding(1251)); props.Add(new ItemInfo(name+".html",p.Name)); WriteBanner(sw); WriteElementHeaderDescription(sw,HelpUtils.get_localization("PROPERTY")+" "+p.Name,HelpUtils.get_summary(HelpUtils.GetDocumentation(p))); WriteSyntaxHeader(sw); sw.WriteLine(HelpUtils.get_property_header(p)); sw.WriteLine(""); string example = HelpUtils.get_example(HelpUtils.GetDocumentation(p)); if (example != null) { WriteExample(sw,HelpUtils.get_example_comment(example),HelpUtils.get_example_code(example)); } WriteLocation(sw,HelpUtils.get_localization("TYPE"),decl_type.file_name,decl_type.header); sw.WriteLine(""); sw.Close(); } private void SaveField(FieldInfo f, List fields, ItemInfo decl_type) { string name = HelpUtils.get_field_name(f); StreamWriter sw = new StreamWriter(Path.Combine(output_dir,name+".html"),false,System.Text.Encoding.GetEncoding(1251)); fields.Add(new ItemInfo(name+".html",f.Name)); WriteBanner(sw); WriteElementHeaderDescription(sw,HelpUtils.get_localization("FIELD")+" "+f.Name,HelpUtils.get_summary(HelpUtils.GetDocumentation(f))); WriteSyntaxHeader(sw); sw.WriteLine(HelpUtils.get_field_header(f)); sw.WriteLine(""); string example = HelpUtils.get_example(HelpUtils.GetDocumentation(f)); if (example != null) { WriteExample(sw,HelpUtils.get_example_comment(example),HelpUtils.get_example_code(example)); } WriteLocation(sw,HelpUtils.get_localization("TYPE"),decl_type.file_name,decl_type.header); sw.WriteLine(""); sw.Close(); } private void SaveEvent(EventInfo e, List events, ItemInfo decl_type) { string name = HelpUtils.get_event_name(e); StreamWriter sw = new StreamWriter(Path.Combine(output_dir,name+".html"),false,System.Text.Encoding.GetEncoding(1251)); events.Add(new ItemInfo(name+".html",e.Name)); WriteBanner(sw); WriteElementHeaderDescription(sw,HelpUtils.get_localization("EVENT")+" "+e.Name,HelpUtils.get_summary(HelpUtils.GetDocumentation(e))); WriteSyntaxHeader(sw); sw.WriteLine(HelpUtils.get_event_header(e)); sw.WriteLine(""); string example = HelpUtils.get_example(HelpUtils.GetDocumentation(e)); if (example != null) { WriteExample(sw,HelpUtils.get_example_comment(example),HelpUtils.get_example_code(example)); } WriteLocation(sw,HelpUtils.get_localization("TYPE"),decl_type.file_name,decl_type.header); sw.WriteLine(""); sw.Close(); } private bool is_getter_or_setter(MethodInfo mi) { PropertyInfo[] props = mi.DeclaringType.GetProperties(BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.Static); foreach (PropertyInfo pi in props) if (pi.GetGetMethod(true) == mi || pi.GetSetMethod(true) == mi) return true; return false; } private void SaveMethod(MethodInfo m, List meths, List constrs, ItemInfo decl_type) { string name = HelpUtils.get_meth_name(m); if (is_getter_or_setter(m)) return; string file_name = null; if (!m.IsConstructor) file_name = name+possible_overload_symbol(m)+".html"; StreamWriter sw = new StreamWriter(Path.Combine(output_dir,file_name),false,System.Text.Encoding.GetEncoding(1251)); if (is_overload(m, m.DeclaringType)) { if (GetMethodIndex(m, m.DeclaringType) == 1) meths.Add(new ItemInfo(name+"$overloads"+".html",m.Name)); } else meths.Add(new ItemInfo(file_name,m.Name)); WriteBanner(sw); WriteElementHeaderDescription(sw,HelpUtils.get_localization("METHOD")+" "+HelpUtils.build_name_with_possible_generic(m,true),HelpUtils.get_summary(HelpUtils.GetDocumentation(m))); WriteSyntaxHeader(sw); sw.WriteLine(HelpUtils.get_meth_header(m)); sw.WriteLine(""); List prms = HelpUtils.get_parameters(HelpUtils.GetDocumentation(m)); if (prms.Count > 0) { sw.WriteLine("

"+HelpUtils.get_localization("PARAMETERS")+"

"); sw.WriteLine("

"); foreach (NameInfo pi in prms) { sw.Write(""+pi.name+":"); sw.WriteLine("
"); WriteSpaces(sw,3); sw.WriteLine(pi.desc); sw.WriteLine("
"); } sw.WriteLine("

"); } string ret_value = HelpUtils.get_return_value_description(HelpUtils.GetDocumentation(m)); if (!string.IsNullOrEmpty(ret_value)) { sw.WriteLine("

"+HelpUtils.get_localization("RETURNS")+"

"); sw.WriteLine("

"); sw.WriteLine(ret_value); sw.WriteLine("

"); } string example = HelpUtils.get_example(HelpUtils.GetDocumentation(m)); if (example != null) { WriteExample(sw,HelpUtils.get_example_comment(example),HelpUtils.get_example_code(example)); } WriteLocation(sw,HelpUtils.get_localization("TYPE"),decl_type.file_name,decl_type.header); sw.WriteLine(""); sw.Close(); } public static string possible_overload_symbol(MethodInfo f) { if (is_overload(f, f.DeclaringType)) { int ind = GetMethodIndex(f, f.DeclaringType); if (ind != 1) return "$" + GetMethodIndex(f, f.DeclaringType); else return ""; } return ""; } private void WriteExample(StreamWriter sw, string comment, string code) { sw.WriteLine("

"+HelpUtils.get_localization("EXAMPLE")+"

"); if (!string.IsNullOrEmpty(comment)) sw.WriteLine("

"+comment+"

"); if (!string.IsNullOrEmpty(code)) { sw.WriteLine("

"); sw.WriteLine("
PascalABC.NET
"); sw.WriteLine("
"); sw.WriteLine("
"); sw.Write("
");
				sw.Write(code);
				sw.Write("
"); sw.WriteLine("
"); } } private void WriteElementHeaderDescription(StreamWriter sw, string name, string doc) { sw.WriteLine("
"); sw.WriteLine("

"+name+"

"); sw.WriteLine("
"); sw.WriteLine("
"); if (!string.IsNullOrEmpty(doc) && doc != Convert.ToString((char)0xA0)) sw.WriteLine("

"+HelpUtils.get_localization("DESCRIPTION")+"

"); if (!string.IsNullOrEmpty(doc) && doc != Convert.ToString((char)0xA0)) sw.WriteLine("

"+doc+"

"); } private void WriteSyntaxHeader(StreamWriter sw) { sw.WriteLine("

"+HelpUtils.get_localization("SYNTAX")+"

"); sw.WriteLine("
"); sw.WriteLine("
PascalABC.NET
"); sw.WriteLine("
"); sw.WriteLine("
"); } private void WriteLocation(StreamWriter sw, string obj, string file_name, string name) { sw.WriteLine("

"+HelpUtils.get_localization("LOCATED")+"

"); sw.WriteLine("

"); sw.WriteLine(""+obj+""); sw.WriteLine(""+name+""); sw.WriteLine("

"); } private ItemInfo SaveClass(Type tt) { string name = HelpUtils.get_type_name(tt); StreamWriter sw = new StreamWriter(Path.Combine(output_dir,name+".html"),false,System.Text.Encoding.GetEncoding(1251)); ItemInfo it = new ItemInfo(name+".html",HelpUtils.build_name_with_possible_generic(tt,false)); WriteBanner(sw); if (!HelpUtils.can_show_members(tt)) { types.Add(it); WriteElementHeaderDescription(sw,HelpUtils.get_localization("TYPE")+" "+HelpUtils.build_name_with_possible_generic(tt,true),HelpUtils.get_summary(HelpUtils.GetDocumentation(tt))); } else if (tt.IsEnum || tt.IsValueType) { rec_enums.Add(it); if (tt.IsEnum) { WriteElementHeaderDescription(sw,HelpUtils.get_localization("ENUM")+" "+HelpUtils.build_name_with_possible_generic(tt,true),HelpUtils.get_summary(HelpUtils.GetDocumentation(tt))); sw.WriteLine("

"); sw.WriteLine(HelpUtils.get_localization("FOR_SEE_TYPE_MEMBERS")+" "+tt.Namespace+"."+HelpUtils.build_name_with_possible_generic(tt,true)+".

"); } else if (tt.IsValueType) { WriteElementHeaderDescription(sw, HelpUtils.get_localization("RECORD") + " " + HelpUtils.build_name_with_possible_generic(tt, true), HelpUtils.get_summary(HelpUtils.GetDocumentation(tt))); sw.WriteLine("

"); sw.WriteLine(HelpUtils.get_localization("FOR_SEE_RECORD_MEMBERS")+" "+tt.Namespace+"."+HelpUtils.build_name_with_possible_generic(tt,true)+".

"); } } else if (tt.IsInterface) { interfaces.Add(it); WriteElementHeaderDescription(sw, HelpUtils.get_localization("INTERFACE") + " " + HelpUtils.build_name_with_possible_generic(tt, true), HelpUtils.get_summary(HelpUtils.GetDocumentation(tt))); sw.WriteLine("

"); sw.WriteLine(HelpUtils.get_localization("FOR_SEE_INTERFACE_MEMBERS")+" "+tt.Namespace+"."+HelpUtils.build_name_with_possible_generic(tt,true)+".

"); } else { classes.Add(it); WriteElementHeaderDescription(sw, HelpUtils.get_localization("CLASS") + " " + HelpUtils.build_name_with_possible_generic(tt, true), HelpUtils.get_summary(HelpUtils.GetDocumentation(tt))); sw.WriteLine("

"); sw.WriteLine(HelpUtils.get_localization("FOR_SEE_CLASS_MEMBERS")+" "+tt.Namespace+"."+HelpUtils.build_name_with_possible_generic(tt,true)+".

"); } Type[] names = GetParentClasses(tt); WriteSyntaxHeader(sw); //sw.WriteLine("
type "+tt.name+" = class"); sw.WriteLine(HelpUtils.get_type_header(tt)); sw.WriteLine("
"); if (HelpUtils.can_show_members(tt)) { sw.WriteLine("

" + HelpUtils.get_localization("CLASS_HIERARCHY") + "

"); sw.WriteLine("

"); int off = 0; foreach (Type t in names) { WriteSpaces(sw, off); sw.Write(HelpUtils.get_type_html_text(t)); sw.Write("
"); off += 2; } WriteSpaces(sw, off); off += 2; sw.Write("" + HelpUtils.build_name_with_possible_generic(tt, true) + ""); sw.Write("
"); names = GetChildClasses(tt); foreach (Type t in names) { WriteSpaces(sw, off); sw.Write(HelpUtils.get_type_html_text(t)); sw.Write("
"); } sw.WriteLine("

"); } string example = HelpUtils.get_example(HelpUtils.GetDocumentation(tt)); if (example != null) { WriteExample(sw,HelpUtils.get_example_comment(example),HelpUtils.get_example_code(example)); } WriteLocation(sw,HelpUtils.get_localization("UNIT"),unit_name+".html",unit_name); sw.WriteLine("
"); sw.Close(); return it; } private Type[] GetParentClasses(Type t) { List types = new List(); while (t.BaseType != null) { types.Add(t.BaseType); t = t.BaseType; } return types.ToArray(); } private Type[] GetChildClasses(Type t) { Type[] typs = t.Assembly.GetExportedTypes(); List types = new List(); foreach (Type typ in typs) { if (typ.BaseType == t) types.Add(typ); } return types.ToArray(); } private void WriteBanner(StreamWriter sw) { sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""+unit_name+""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
"); sw.WriteLine("
"); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine(""); sw.WriteLine("
"+options.CHMBannerText+"
"); } } }