0)
{
sb.Append('(');
for (int i = 0; i < interfaces.Length; i++)
{
sb.Append(get_type_html_text(interfaces[i]));
if (i < interfaces.Length - 1)
sb.Append(", ");
}
sb.Append(')');
}
}
return sb.ToString();
}
private static string get_diap_type(ITypeNode t, bool use_tags)
{
ICommonTypeNode ctn = t as ICommonTypeNode;
StringBuilder sb = new StringBuilder();
sb.Append(get_const_value(ctn.lower_value));
sb.Append("..");
sb.Append(get_const_value(ctn.upper_value));
return sb.ToString();
}
public static string get_type_header(ITypeSynonym t)
{
StringBuilder sb = new StringBuilder();
string hdr = HelpUtils.extract_user_defined_header(t.Documentation);
if (!string.IsNullOrEmpty(hdr))
{
sb.Append(""+hdr+"
");
return sb.ToString();
}
sb.Append("");
sb.Append(get_span_for_keyword("type")+" "+get_span_for_identifier(t.name)+" = "+get_type_html_text(t.original_type));
sb.Append("
");
return sb.ToString();
}
public static string get_type_header(ICommonTypeNode t)
{
StringBuilder sb = new StringBuilder();
string hdr = HelpUtils.extract_user_defined_header(t.Documentation);
if (!string.IsNullOrEmpty(hdr))
{
sb.Append(""+hdr+"
");
return sb.ToString();
}
sb.Append("");
sb.Append(get_span_for_keyword("type")+" "+get_span_for_identifier(HelpUtils.build_name_with_possible_generic(t,true))+" = ");
if (t.type_special_kind == type_special_kind.set_type)
sb.Append(get_set_type(t,true));
else
if (t.type_special_kind == type_special_kind.typed_file)
sb.Append(get_typed_file(t,true));
else
if (t.type_special_kind == type_special_kind.binary_file)
sb.Append(get_span_for_keyword("file"));
else
if (t.type_special_kind == type_special_kind.diap_type)
sb.Append(get_diap_type(t,true));
else if (t.type_special_kind == type_special_kind.array_wrapper)
sb.Append(get_static_array_type(t,true));
else
if (t.IsInterface)
sb.Append(get_span_for_keyword("interface"));
else if (t.is_class)
{
sb.Append(get_span_for_keyword("class"));
sb.Append(get_inherited_and_implement(t));
}
else if (t.IsEnum)
sb.Append(get_enum(t,true));
else if (t.IsDelegate)
sb.Append(get_delegate(t,true));
else if (t.is_value_type)
sb.Append(get_span_for_keyword("record"));
sb.Append("
");
return sb.ToString();
}
public static string get_type_header(Type t)
{
StringBuilder sb = new StringBuilder();
string hdr = HelpUtils.extract_user_defined_header(GetDocumentation(t));
if (!string.IsNullOrEmpty(hdr))
{
sb.Append("" + hdr + "
");
return sb.ToString();
}
sb.Append("");
sb.Append(get_span_for_keyword("type") + " " + get_span_for_identifier(HelpUtils.build_name_with_possible_generic(t, true)) + " = ");
if (t.IsInterface)
sb.Append(get_span_for_keyword("interface"));
else if (t.IsClass)
{
sb.Append(get_span_for_keyword("class"));
sb.Append(get_inherited_and_implement(t));
}
else if (t.IsEnum)
sb.Append(get_enum(t, true));
/*else if (t.BaseType == typeof(Delegate) && t.BaseType == typeof(MulticastDelegate))
sb.Append(get_delegate(t, true));*/
else if (t.IsValueType)
sb.Append(get_span_for_keyword("record"));
sb.Append("
");
return sb.ToString();
}
public static string get_text_for_access_level(field_access_level fal)
{
switch(fal)
{
case field_access_level.fal_public : return "public";
case field_access_level.fal_protected : return "protected";
case field_access_level.fal_private : return "private";
case field_access_level.fal_internal : return "internal";
}
return "";
}
public static string get_text_for_access_level(Type t)
{
if (t.IsPublic)
return "public";
if (t.IsNotPublic)
return "private";
return "";
}
public static string get_text_for_access_level(MethodInfo t)
{
if (t.IsPublic)
return "public";
if (t.IsPrivate)
return "private";
if (t.IsFamily || t.IsFamilyOrAssembly)
return "protected";
if (t.IsAssembly || t.IsFamilyAndAssembly)
return "internal";
return "";
}
public static string get_text_for_access_level(FieldInfo t)
{
if (t.IsPublic)
return "public";
if (t.IsPrivate)
return "private";
if (t.IsFamily || t.IsFamilyOrAssembly)
return "protected";
if (t.IsAssembly || t.IsFamilyAndAssembly)
return "internal";
return "";
}
public static string get_text_for_access_level(PropertyInfo t)
{
MethodInfo mi = t.GetGetMethod(true);
if (mi != null)
{
if (mi.IsPublic)
return "public";
if (mi.IsPrivate)
return "private";
if (mi.IsFamily || mi.IsFamilyOrAssembly)
return "protected";
if (mi.IsAssembly || mi.IsFamilyAndAssembly)
return "internal";
}
return "";
}
public static string get_text_for_access_level(EventInfo t)
{
MethodInfo mi = t.GetAddMethod(true);
if (mi != null)
{
if (mi.IsPublic)
return "public";
if (mi.IsPrivate)
return "private";
if (mi.IsFamily || mi.IsFamilyOrAssembly)
return "protected";
if (mi.IsAssembly || mi.IsFamilyAndAssembly)
return "internal";
}
return "";
}
public static string get_field_header(ICommonClassFieldNode f)
{
StringBuilder sb = new StringBuilder();
string hdr = HelpUtils.extract_user_defined_header(f.Documentation);
if (!string.IsNullOrEmpty(hdr))
{
sb.Append(""+hdr+"
");
return sb.ToString();
}
sb.Append("");
sb.Append(get_span_for_keyword(get_text_for_access_level(f.field_access_level))+" ");
if (f.polymorphic_state == polymorphic_state.ps_static)
sb.Append(get_span_for_keyword("class")+" ");
sb.Append(get_span_for_identifier(f.name));
sb.Append(" : "+get_type_html_text(f.type));
sb.Append("
");
return sb.ToString();
}
public static string get_field_header(FieldInfo f)
{
StringBuilder sb = new StringBuilder();
string hdr = HelpUtils.extract_user_defined_header(GetDocumentation(f));
if (!string.IsNullOrEmpty(hdr))
{
sb.Append("" + hdr + "
");
return sb.ToString();
}
sb.Append("");
sb.Append(get_span_for_keyword(get_text_for_access_level(f)) + " ");
if (f.IsStatic)
sb.Append(get_span_for_keyword("class") + " ");
sb.Append(get_span_for_identifier(f.Name));
sb.Append(" : " + get_type_html_text(f.FieldType));
sb.Append("
");
return sb.ToString();
}
public static string get_event_header(ICommonEventNode f)
{
StringBuilder sb = new StringBuilder();
string hdr = HelpUtils.extract_user_defined_header(f.Documentation);
if (!string.IsNullOrEmpty(hdr))
{
sb.Append(""+hdr+"
");
return sb.ToString();
}
sb.Append("");
sb.Append(get_span_for_keyword(get_text_for_access_level(f.field_access_level))+" ");
if (f.polymorphic_state == polymorphic_state.ps_static)
sb.Append(get_span_for_keyword("class")+" ");
sb.Append(get_span_for_keyword("event")+" ");
sb.Append(get_span_for_identifier(f.Name));
sb.Append(" : "+get_type_html_text(f.DelegateType));
sb.Append("
");
return sb.ToString();
}
public static string get_event_header(EventInfo f)
{
StringBuilder sb = new StringBuilder();
string hdr = HelpUtils.extract_user_defined_header(GetDocumentation(f));
if (!string.IsNullOrEmpty(hdr))
{
sb.Append("" + hdr + "
");
return sb.ToString();
}
sb.Append("");
MethodInfo add_meth = f.GetAddMethod(true);
sb.Append(get_span_for_keyword(get_text_for_access_level(f)) + " ");
if (add_meth.IsStatic)
sb.Append(get_span_for_keyword("class") + " ");
sb.Append(get_span_for_keyword("event") + " ");
sb.Append(get_span_for_identifier(f.Name));
sb.Append(" : " + get_type_html_text(f.EventHandlerType));
sb.Append("
");
return sb.ToString();
}
public static string get_const_header(IClassConstantDefinitionNode c)
{
StringBuilder sb = new StringBuilder();
string hdr = HelpUtils.extract_user_defined_header(c.Documentation);
if (!string.IsNullOrEmpty(hdr))
{
sb.Append(""+hdr+"
");
return sb.ToString();
}
sb.Append("");
sb.Append(get_span_for_keyword(get_text_for_access_level(c.field_access_level))+" ");
if (c.polymorphic_state == polymorphic_state.ps_static)
sb.Append(get_span_for_keyword("class")+" ");
sb.Append(get_span_for_keyword("const")+" "+get_span_for_identifier(c.name)+" : "+get_type_html_text(c.type)+" = "+get_const_value(c.constant_value));
sb.Append("
");
return sb.ToString();
}
public static string get_property_header(ICommonPropertyNode p)
{
StringBuilder sb = new StringBuilder();
string hdr = HelpUtils.extract_user_defined_header(p.Documentation);
if (!string.IsNullOrEmpty(hdr))
{
sb.Append(""+hdr+"
");
return sb.ToString();
}
sb.Append("");
sb.Append(get_span_for_keyword(get_text_for_access_level(p.field_access_level))+" ");
if (p.polymorphic_state == polymorphic_state.ps_static)
sb.Append(get_span_for_keyword("class")+" ");
sb.Append(get_span_for_keyword("property")+" ");
sb.Append(get_span_for_identifier(p.name));
sb.Append(get_property_parameters(p.parameters));
sb.Append(" : "+get_type_html_text(p.property_type));
if (p.get_function != null)
sb.Append(" read");
if (p.set_function != null)
sb.Append(" write");
if (p.polymorphic_state == polymorphic_state.ps_virtual)
sb.Append("; "+get_span_for_keyword("virtual"));
else if (p.polymorphic_state == polymorphic_state.ps_virtual_abstract)
sb.Append("; "+get_span_for_keyword("abstract"));
sb.Append("
");
return sb.ToString();
}
public static string get_property_header(PropertyInfo p)
{
StringBuilder sb = new StringBuilder();
string hdr = HelpUtils.extract_user_defined_header(GetDocumentation(p));
if (!string.IsNullOrEmpty(hdr))
{
sb.Append("" + hdr + "
");
return sb.ToString();
}
sb.Append("");
sb.Append(get_span_for_keyword(get_text_for_access_level(p)) + " ");
MethodInfo get_meth = p.GetGetMethod(true);
MethodInfo set_meth = p.GetSetMethod(true);
if (get_meth != null && get_meth.IsStatic || set_meth != null && set_meth.IsStatic)
sb.Append(get_span_for_keyword("class") + " ");
sb.Append(get_span_for_keyword("property") + " ");
sb.Append(get_span_for_identifier(p.Name));
sb.Append(get_property_parameters(p.GetIndexParameters()));
sb.Append(" : " + get_type_html_text(p.PropertyType));
if (get_meth != null && AssemblyHelpBuilder.is_not_private(get_meth))
sb.Append(" read");
if (set_meth != null && AssemblyHelpBuilder.is_not_private(set_meth))
sb.Append(" write");
if (get_meth != null && get_meth.IsVirtual)
sb.Append("; " + get_span_for_keyword("virtual"));
else if (get_meth != null && get_meth.IsAbstract)
sb.Append("; " + get_span_for_keyword("abstract"));
sb.Append("
");
return sb.ToString();
}
public static string get_func_header(ICommonNamespaceFunctionNode f)
{
StringBuilder sb = new StringBuilder();
string hdr = HelpUtils.extract_user_defined_header(f.Documentation);
if (!string.IsNullOrEmpty(hdr))
{
sb.Append(""+hdr+"
");
return sb.ToString();
}
sb.Append("");
if (f.return_value_type == null)
sb.Append(get_span_for_keyword("procedure")+" ");
else
sb.Append(get_span_for_keyword("function")+" ");
sb.Append(get_span_for_identifier(f.name));
sb.Append(get_generic_string(f.generic_params));
if (f.parameters.Length > 0)
{
sb.Append('(');
for (int i = 0; i < f.parameters.Length; i++)
{
IParameterNode prm = f.parameters[i];
if (prm.parameter_type == parameter_type.var)
sb.Append(get_span_for_keyword("var") + " ");
else if (prm.is_params)
sb.Append(get_span_for_keyword("params") + " ");
sb.Append(get_span_for_param(prm.name));
sb.Append(" : ");
sb.Append(get_type_html_text(prm.type));
if (i < f.parameters.Length - 1)
sb.Append("; ");
}
sb.Append(')');
}
if (f.return_value_type != null)
sb.Append(": "+get_type_html_text(f.return_value_type));
sb.Append("
");
return sb.ToString();
}
public static string get_simple_meth_header(ICommonFunctionNode f)
{
StringBuilder sb = new StringBuilder();
string hdr = HelpUtils.extract_user_defined_header(f.Documentation);
if (!string.IsNullOrEmpty(hdr))
{
sb.Append(hdr);
return sb.ToString();
}
sb.Append(f.name);
sb.Append(get_generic_string(f.generic_params));
if (f.parameters.Length > 0)
{
sb.Append('(');
for (int i = 0; i < f.parameters.Length; i++)
{
sb.Append(get_type_text(f.parameters[i].type));
if (i < f.parameters.Length - 1)
sb.Append(", ");
}
sb.Append(')');
}
return sb.ToString();
}
public static string get_simple_meth_header(MethodInfo f)
{
StringBuilder sb = new StringBuilder();
string hdr = HelpUtils.extract_user_defined_header(GetDocumentation(f));
if (!string.IsNullOrEmpty(hdr))
{
sb.Append(hdr);
return sb.ToString();
}
sb.Append(f.Name);
sb.Append(get_generic_string(f.GetGenericArguments()));
ParameterInfo[] parameters = f.GetParameters();
if (parameters.Length > 0)
{
sb.Append('(');
for (int i = 0; i < parameters.Length; i++)
{
sb.Append(get_compiled_type_text(parameters[i].ParameterType));
if (i < parameters.Length - 1)
sb.Append(", ");
}
sb.Append(')');
}
return sb.ToString();
}
public static string get_simple_meth_header(ConstructorInfo f)
{
StringBuilder sb = new StringBuilder();
string hdr = HelpUtils.extract_user_defined_header(GetDocumentation(f));
if (!string.IsNullOrEmpty(hdr))
{
sb.Append(hdr);
return sb.ToString();
}
sb.Append("Create");
ParameterInfo[] parameters = f.GetParameters();
if (parameters.Length > 0)
{
sb.Append('(');
for (int i = 0; i < parameters.Length; i++)
{
sb.Append(get_compiled_type_text(parameters[i].ParameterType));
if (i < parameters.Length - 1)
sb.Append(", ");
}
sb.Append(')');
}
return sb.ToString();
}
private static string get_generic_string(List generics)
{
StringBuilder sb = new StringBuilder();
if (generics != null && generics.Count > 0)
{
sb.Append("<");
for (int i=0; i 0)
{
sb.Append("<");
for (int i = 0; i < generics.Length; i++)
{
sb.Append(generics[i].Name);
if (i < generics.Length - 1)
sb.Append(',');
}
sb.Append(">");
}
return sb.ToString();
}
private static string get_property_parameters(IParameterNode[] prms)
{
StringBuilder sb = new StringBuilder();
if (prms.Length > 0)
{
sb.Append('[');
for (int i=0; i 0)
{
sb.Append('[');
for (int i = 0; i < prms.Length; i++)
{
ParameterInfo prm = prms[i];
if (prm.ParameterType.IsByRef)
sb.Append(get_span_for_keyword("var") + " ");
else if (PascalABCCompiler.NetHelper.NetHelper.IsParamsParameter(prm))
sb.Append(get_span_for_keyword("params") + " ");
sb.Append(get_span_for_param(prm.Name));
sb.Append(" : ");
sb.Append(get_type_html_text(prm.ParameterType));
if (i < prms.Length - 1)
sb.Append("; ");
}
sb.Append(']');
}
return sb.ToString();
}
private static string get_parameters(IParameterNode[] prms)
{
StringBuilder sb = new StringBuilder();
if (prms.Length > 0)
{
sb.Append('(');
for (int i=0; i 0)
{
sb.Append('(');
for (int i = 0; i < prms.Length; i++)
{
ParameterInfo prm = prms[i];
if (prm.ParameterType.IsByRef)
sb.Append(get_span_for_keyword("var") + " ");
else if (PascalABCCompiler.NetHelper.NetHelper.IsParamsParameter(prm))
sb.Append(get_span_for_keyword("params") + " ");
sb.Append(get_span_for_param(prm.Name));
sb.Append(" : ");
sb.Append(get_type_html_text(prm.ParameterType));
if (i < prms.Length - 1)
sb.Append("; ");
}
sb.Append(')');
}
return sb.ToString();
}
public static string get_meth_header(ICommonMethodNode f)
{
StringBuilder sb = new StringBuilder();
string hdr = HelpUtils.extract_user_defined_header(f.Documentation);
if (!string.IsNullOrEmpty(hdr))
{
sb.Append(""+hdr+"
");
return sb.ToString();
}
sb.Append("");
sb.Append(get_span_for_keyword(get_text_for_access_level(f.field_access_level))+" ");
if (f.polymorphic_state == polymorphic_state.ps_static)
sb.Append(get_span_for_keyword("class")+" ");
if (f.is_constructor)
sb.Append(get_span_for_keyword("constructor")+" ");
else
if (f.return_value_type == null)
sb.Append(get_span_for_keyword("procedure")+" ");
else
sb.Append(get_span_for_keyword("function")+" ");
sb.Append(get_span_for_identifier(f.name));
sb.Append(get_generic_string(f.generic_params));
sb.Append(get_parameters(f.parameters));
if (f.return_value_type != null && !f.is_constructor)
sb.Append(": "+get_type_html_text(f.return_value_type));
if (f.polymorphic_state == polymorphic_state.ps_virtual)
if (f.overrided_method == null)
sb.Append("; "+get_span_for_keyword("virtual"));
else
sb.Append("; "+get_span_for_keyword("override"));
else if (f.polymorphic_state == polymorphic_state.ps_virtual_abstract && f.common_comprehensive_type != null && !f.common_comprehensive_type.IsInterface)
sb.Append("; "+get_span_for_keyword("abstract"));
sb.Append("
");
return sb.ToString();
}
public static string get_meth_header(MethodInfo f)
{
StringBuilder sb = new StringBuilder();
string hdr = HelpUtils.extract_user_defined_header(GetDocumentation(f));
if (!string.IsNullOrEmpty(hdr))
{
sb.Append("" + hdr + "
");
return sb.ToString();
}
sb.Append("");
sb.Append(get_span_for_keyword(get_text_for_access_level(f)) + " ");
if (f.IsStatic)
sb.Append(get_span_for_keyword("class") + " ");
if (f.IsConstructor)
sb.Append(get_span_for_keyword("constructor") + " ");
else
if (f.ReturnType == typeof(void))
sb.Append(get_span_for_keyword("procedure") + " ");
else
sb.Append(get_span_for_keyword("function") + " ");
sb.Append(get_span_for_identifier(f.Name));
sb.Append(get_generic_string(f.GetGenericArguments()));
sb.Append(get_parameters(f.GetParameters()));
if (f.ReturnType != typeof(void) && !f.IsConstructor)
sb.Append(": " + get_type_html_text(f.ReturnType));
if (f.IsVirtual)
if (!is_override(f))
sb.Append("; " + get_span_for_keyword("virtual"));
else
sb.Append("; " + get_span_for_keyword("override"));
else if (f.IsAbstract && !f.DeclaringType.IsInterface)
sb.Append("; " + get_span_for_keyword("abstract"));
sb.Append("
");
return sb.ToString();
}
private static bool is_override(MethodInfo mi)
{
return false;
}
public static string get_localization(string name)
{
return PascalABCCompiler.StringResources.Get(HelpBuilder_VisualPascalABCPlugin.StringsPrefix+name);
}
public static string get_return_value_description(string doc)
{
string s = null;
if (doc == null)
return null;
int ind = doc.IndexOf("");
if (ind == -1)
return null;
int end_ind = doc.IndexOf("",ind);
if (ind != -1)
{
if (end_ind != -1)
s = doc.Substring(ind+9,end_ind-ind-9).Trim(' ','\n','\t');
else
s = doc.Substring(ind+10).Trim(' ','\n','\t');
}
return s;
}
public static List get_parameters(string doc)
{
List lst = new List();
if (doc == null)
return lst;
int ind = doc.IndexOf("",end_ind);
if (ind == -1)
return lst;
end_ind = doc.IndexOf("",ind);
if (end_ind == -1)
return lst;
string desc = doc.Substring(ind+1,end_ind-ind-1).Trim(' ','\n','\t');
ind = doc.IndexOf("= 2 && doc[0] == '-' && doc[1] == '-')
return true;
return false;
}
public static string extract_user_defined_header(string doc)
{
if (doc == null) return null;
if (doc.Length >= 2 && doc[0] == '-' && doc[1] != '-')
{
int ind = doc.IndexOf("");
if (ind != -1)
return doc.Substring(1,ind-1).Trim(' ','\t','\n');
ind = doc.IndexOf('\n');
if (ind != -1)
return doc.Substring(1,ind-1);
return null;
}
return null;
}
public static string get_summary(string doc)
{
if (doc == null) return Convert.ToString(((char)0xA0));
string res = doc;
int ind = doc.IndexOf("");
if (ind != -1)
{
int end_ind = doc.IndexOf("");
if (end_ind != -1)
res = doc.Substring(ind+9,end_ind-ind-9).Trim(' ','\t','\n');
else
res = doc.Substring(ind+9).Trim(' ','\t','\n');
}
else if (doc.Length >= 1 && doc[0] == '-')
{
ind = doc.IndexOf('\n');
if (ind != -1 && ind+1 < doc.Length)
res = doc.Substring(ind+1);
else
res = "";
}
res = Regex.Replace(res,"[\\w\\.]+)\"(\\s)*/>(?(.)*)","${text}");
return res;
}
public static string get_example(string doc)
{
if (doc == null) return null;
string res = null;
int ind = doc.IndexOf("");
if (ind != -1)
{
int end_ind = doc.IndexOf("");
if (end_ind != -1)
res = doc.Substring(ind+9,end_ind-ind-9).Trim(' ','\t','\n');
else
res = doc.Substring(ind+9).Trim(' ','\t','\n');
}
return res;
}
public static string get_example_comment(string doc)
{
int ind = doc.IndexOf("");
if (ind != -1)
{
return doc.Substring(0,ind).Trim(' ','\n','\t');
}
else
return doc;
}
public static string get_example_code(string doc)
{
int ind = doc.IndexOf("");
if (ind != -1)
{
int end_ind = doc.IndexOf("",ind);
if (end_ind != -1)
return doc.Substring(ind+6,end_ind-ind-6).Trim(' ','\n','\t');
else
return doc.Substring(ind+6).Trim(' ','\n','\t');
}
else
return null;
}
private static string get_span_for_identifier(string s)
{
return ""+s+"";
}
private static string get_span_for_param(string s)
{
return ""+s+"";
}
public static string GetDocumentation(Type t)
{
return CodeCompletion.AssemblyDocCache.GetFullDocumentation(t);
}
public static string GetDocumentation(MethodInfo t)
{
return CodeCompletion.AssemblyDocCache.GetFullDocumentation(t);
}
public static string GetDocumentation(ConstructorInfo t)
{
return CodeCompletion.AssemblyDocCache.GetFullDocumentation(t);
}
public static string GetDocumentation(PropertyInfo t)
{
return CodeCompletion.AssemblyDocCache.GetFullDocumentation(t);
}
public static string GetDocumentation(FieldInfo t)
{
return CodeCompletion.AssemblyDocCache.GetFullDocumentation(t);
}
public static string GetDocumentation(EventInfo t)
{
return CodeCompletion.AssemblyDocCache.GetFullDocumentation(t);
}
}
}