Пример #1
0
        public static string GetUrl(this IMemberDefinition member, PackageTargetFramework framework, bool linkToCode)
        {
            var url = framework.FindTypeUrl(member.DeclaringType);

            if (string.IsNullOrEmpty(url))
            {
                return("");
            }
            if (linkToCode && framework.Package.AllowedToDecompile)
            {
                url += "?code=true";
            }
            if (member is TypeDefinition t && !t.IsNested)
            {
                return(url);
            }
            return(url + "#" + Uri.EscapeDataString(member.GetXmlName()));
        }
Пример #2
0
        public static void WritePrototypeHtml(this TypeDefinition member, TextWriter w, PackageTargetFramework framework, bool linkToCode)
        {
            if (member.IsNestedFamily || member.IsNestedFamilyOrAssembly)
            {
                w.Write("<span class=\"c-kw\">protected</span> ");
            }
            else if (member.IsPublic || member.IsNestedPublic)
            {
                w.Write("<span class=\"c-kw\">public</span> ");
            }

            if (member.IsSealed && member.IsAbstract)
            {
                w.Write("<span class=\"c-kw\">static</span> ");
            }
            else if (member.IsSealed && !member.IsEnum && !member.IsValueType)
            {
                w.Write("<span class=\"c-kw\">sealed</span> ");
            }
            else if (member.IsAbstract && !member.IsInterface)
            {
                w.Write("<span class=\"c-kw\">abstract</span> ");
            }

            if (member.IsEnum)
            {
                w.Write("<span class=\"c-kw\">enum</span> ");
            }
            else if (member.IsValueType)
            {
                w.Write("<span class=\"c-kw\">struct</span> ");
            }
            else if (member.IsInterface)
            {
                w.Write("<span class=\"c-kw\">interface</span> ");
            }
            else if (member.IsDelegate())
            {
                w.Write("<span class=\"c-kw\">delegate</span> ");
            }
            else
            {
                w.Write("<span class=\"c-kw\">class</span> ");
            }

            var id   = member.GetXmlName();
            var name = member.Name;
            var ni   = name.LastIndexOf('`');

            if (ni > 0)
            {
                name = name.Substring(0, ni);
            }
            var url = framework?.FindTypeUrl(member);

            if (url != null)
            {
                w.Write($"<a id=\"{id}\" href=\"{url}\" class=\"c-td\">");
                WriteEncoded(name, w);
                w.Write("</a>");
            }
            else
            {
                w.Write($"<span id=\"{id}\" class=\"c-td\">");
                WriteEncoded(name, w);
                w.Write("</span>");
            }
            if (member.HasGenericParameters)
            {
                w.Write("&lt;");
                var head = "";
                foreach (var a in member.GenericParameters)
                {
                    w.Write(head);
                    WriteReferenceHtml(a, w, framework);
                    head = ", ";
                }
                w.Write("&gt;");
            }
            var hier = ((!member.IsEnum && !member.IsValueType && member.BaseType != null && member.BaseType.FullName != "System.Object") ? new[] { member.BaseType } : new TypeReference[0])
                       .Concat(member.Interfaces.Select(x => x.InterfaceType)).ToList();

            if (hier.Count > 0)
            {
                w.Write(" : ");
                var head = "";
                foreach (var h in hier)
                {
                    w.Write(head);
                    WriteReferenceHtml(h, w, framework);
                    head = ", ";
                }
            }
        }
Пример #3
0
        public static void WriteReferenceHtml(this TypeReference type, TextWriter w, PackageTargetFramework framework, bool isOut = false)
        {
            if (type.FullName == "System.Void")
            {
                w.Write("<span class=\"c-tr\">void</span>");
            }
            else if (type.FullName == "System.String")
            {
                w.Write("<span class=\"c-tr\">string</span>");
            }
            else if (type.FullName == "System.Object")
            {
                w.Write("<span class=\"c-tr\">object</span>");
            }
            else if (type.FullName == "System.Decimal")
            {
                w.Write("<span class=\"c-tr\">decimal</span>");
            }
            else if (type.IsPrimitive)
            {
                w.Write("<span class=\"c-tr\">");
                switch (type.FullName)
                {
                case "System.Byte": w.Write("byte"); break;

                case "System.Boolean": w.Write("bool"); break;

                case "System.Char": w.Write("char"); break;

                case "System.Double": w.Write("double"); break;

                case "System.Int16": w.Write("short"); break;

                case "System.Int32": w.Write("int"); break;

                case "System.Int64": w.Write("long"); break;

                case "System.Single": w.Write("float"); break;

                case "System.SByte": w.Write("sbyte"); break;

                case "System.UInt16": w.Write("ushort"); break;

                case "System.UInt32": w.Write("uint"); break;

                case "System.UInt64": w.Write("ulong"); break;

                default: WriteEncoded(type.Name, w); break;
                }
                w.Write("</span>");
            }
            else if (type.IsArray)
            {
                var at = (ArrayType)type;
                WriteReferenceHtml(at.ElementType, w, framework);
                w.Write("[");
                var head = "";
                foreach (var d in at.Dimensions)
                {
                    w.Write(head);
                    head = ",";
                }
                w.Write("]");
            }
            else if (type.IsGenericInstance)
            {
                GenericInstanceType gi = (GenericInstanceType)type;
                if (gi.ElementType.FullName == "System.Nullable`1")
                {
                    WriteReferenceHtml(gi.GenericArguments[0], w, framework);
                    w.Write("?");
                }
                else
                {
                    WriteReferenceHtml(gi.ElementType, w, framework);
                    w.Write("&lt;");
                    var head = "";
                    foreach (var a in gi.GenericArguments)
                    {
                        w.Write(head);
                        WriteReferenceHtml(a, w, framework);
                        head = ", ";
                    }
                    w.Write("&gt;");
                }
            }
            else if (type.IsByReference)
            {
                if (isOut)
                {
                    w.Write("<span class=\"c-kw\">out</span> ");
                }
                else
                {
                    w.Write("<span class=\"c-kw\">ref</span> ");
                }
                WriteReferenceHtml(type.GetElementType(), w, framework);
            }
            else
            {
                var name = type.Name;
                var ni   = name.LastIndexOf('`');
                if (ni > 0)
                {
                    name = name.Substring(0, ni);
                }
                var url = framework?.FindTypeUrl(type);
                if (url != null)
                {
                    w.Write($"<a href=\"{url}\" class=\"c-tr\">");
                    WriteEncoded(name, w);
                    w.Write("</a>");
                }
                else
                {
                    w.Write("<span class=\"c-tr\">");
                    WriteEncoded(name, w);
                    w.Write("</span>");
                }
            }
        }
Пример #4
0
            string GetClassAndLink(AstNode n, out string link, out string id)
            {
                link = null;
                id   = null;
                if (n == null || n == AstNode.Null)
                {
                    return("c-uk");
                }
                while (n != null && n.Annotations.Count() == 0)
                {
                    n = n.Parent;
                }
                if (n == null || n == AstNode.Null)
                {
                    return("c-uk");
                }
                var t = n.Annotation <TypeResolveResult> ();

                if (t != null)
                {
                    if (n.NodeType == NodeType.TypeDeclaration)
                    {
                        return("c-td");
                    }
                    var name = t.Type.FullName;
                    if (t.Type.TypeParameterCount > 0 && name.IndexOf('`') < 0)
                    {
                        name += "`" + t.Type.TypeParameterCount;
                    }
                    if (t.Type.Kind != TypeKind.TypeParameter)
                    {
                        link = framework.FindTypeUrl(name);
                    }
                    return("c-tr");
                }
                var u = n.Annotation <UsingScope> ();

                if (u != null)
                {
                    return("c-nr");
                }
                var m = n.Annotation <MemberResolveResult> ();

                if (m != null)
                {
                    if (m.Member.SymbolKind == SymbolKind.Method)
                    {
                        if (n is MethodDeclaration md)
                        {
                            if (md.GetSymbol() is DefaultResolvedMethod r)
                            {
                                id = r.GetIdString();
                            }
                            return("c-md");
                        }
                        return("c-mr");
                    }
                    if (m.Member.SymbolKind == SymbolKind.Field)
                    {
                        if (n is FieldDeclaration fd)
                        {
                            if (fd.GetSymbol() is DefaultResolvedField r)
                            {
                                id = r.GetIdString();
                            }
                            return("c-fd");
                        }
                        return("c-fr");
                    }
                    if (m.Member.SymbolKind == SymbolKind.Event)
                    {
                        if (n is EventDeclaration ed)
                        {
                            if (ed.GetSymbol() is DefaultResolvedEvent r)
                            {
                                id = r.GetIdString();
                            }
                            return("c-ed");
                        }
                        if (n is CustomEventDeclaration ed2)
                        {
                            if (ed2.GetSymbol() is DefaultResolvedEvent r)
                            {
                                id = r.GetIdString();
                            }
                            return("c-ed");
                        }
                        return("c-er");
                    }
                    if (m.Member.SymbolKind == SymbolKind.Constructor)
                    {
                        if (n is ConstructorDeclaration cd)
                        {
                            if (cd.GetSymbol() is DefaultResolvedEvent r)
                            {
                                id = r.GetIdString();
                            }
                            return("c-cd");
                        }
                        return("c-cr");
                    }
                    if (n is PropertyDeclaration pd)
                    {
                        if (pd.GetSymbol() is DefaultResolvedProperty r)
                        {
                            id = r.GetIdString();
                        }
                        return("c-pd");
                    }
                    return("c-pr");
                }
                var mg = n.Annotation <MethodGroupResolveResult> ();

                if (mg != null)
                {
                    return("c-mr");
                }
                var v = n.Annotation <ILVariableResolveResult> ();

                if (v != null)
                {
                    if (v.Variable.Kind == VariableKind.Parameter)
                    {
                        return("c-ar");
                    }
                    return("c-uk");
                }
                var c = n.Annotation <ConstantResolveResult> ();

                if (c != null)
                {
                    return("c-fr");
                }

                // Console.WriteLine(n.Annotations.FirstOrDefault());
                return("c-uk");
            }