예제 #1
0
파일: Cpp.cs 프로젝트: blockspacer/niveum
        public IEnumerable <String> GetTypePredefinition(TypeDef t)
        {
            var    Name = t.DefinitionName();
            var    GenericParameterLine = GetGenericParameterLine(t.GenericParameters());
            String MetaType             = "class";

            if (t.OnPrimitive)
            {
                return(new List <String> {
                });
            }
            else if (t.OnAlias || t.OnRecord || t.OnTaggedUnion || t.OnClientCommand || t.OnServerCommand)
            {
                MetaType = "class";
            }
            else if (t.OnEnum)
            {
                return(new List <String> {
                });
            }
            if (t.OnClientCommand)
            {
                var c          = t.ClientCommand;
                var RequestRef = GetSuffixedTypeRef(c.Name, c.Version, "Request");
                var ReplyRef   = GetSuffixedTypeRef(c.Name, c.Version, "Reply");
                var Request    = new RecordDef {
                    Name = RequestRef.Name, Version = RequestRef.Version, GenericParameters = new List <VariableDef> {
                    }, Fields = c.OutParameters, Attributes = c.Attributes, Description = c.Description
                };
                var Reply = new TaggedUnionDef {
                    Name = ReplyRef.Name, Version = ReplyRef.Version, GenericParameters = new List <VariableDef> {
                    }, Alternatives = c.InParameters, Attributes = c.Attributes, Description = c.Description
                };
                return(TypePredefinition(Request.DefinitionName(), MetaType, t.GenericParameters()).Concat(TypePredefinition(Reply.DefinitionName(), MetaType, t.GenericParameters())));
            }
            else if (t.OnServerCommand)
            {
                var c        = t.ServerCommand;
                var EventRef = GetSuffixedTypeRef(c.Name, c.Version, "Event");
                var Event    = new RecordDef {
                    Name = EventRef.Name, Version = EventRef.Version, GenericParameters = new List <VariableDef> {
                    }, Fields = c.OutParameters, Attributes = c.Attributes, Description = c.Description
                };
                return(TypePredefinition(Event.DefinitionName(), MetaType, t.GenericParameters()));
            }
            else
            {
                return(TypePredefinition(Name, MetaType, t.GenericParameters()));
            }
        }
예제 #2
0
파일: Xhtml.cs 프로젝트: blockspacer/niveum
        public IEnumerable <String> Type(TypeDef t)
        {
            var Name              = t.VersionedName();
            var MetaType          = GetMetaType(t);
            var GenericParameters = t.GenericParameters();
            var Description       = t.Description();

            foreach (var _Line in Combine(Combine(Combine(Combine(Combine(Combine(Combine(Begin(), "<h3 id=\""), GetEscaped(Name)), "\">"), GetEscaped(MetaType)), " "), GetEscaped(Name)), "</h3>"))
            {
                yield return(_Line);
            }
            foreach (var _Line in Combine(Combine(Combine(Begin(), "<pre>"), GetEscaped(Description)), "</pre>"))
            {
                yield return(_Line);
            }
            if (GenericParameters.Count > 0)
            {
                yield return("<table>");

                foreach (var gp in GenericParameters)
                {
                    foreach (var _Line in Combine(Begin(), Variable("'" + gp.Name, gp.Type, gp.Description)))
                    {
                        yield return(_Line == "" ? "" : "    " + _Line);
                    }
                }
                yield return("</table>");
            }
            if (t.OnPrimitive)
            {
            }
            else if (t.OnAlias)
            {
                var TypeSpec = GetTypeString(t.Alias.Type, true);
                foreach (var _Line in Combine(Combine(Combine(Begin(), "<pre>类型:"), TypeSpec), "</pre>"))
                {
                    yield return(_Line);
                }
            }
            else if (t.OnRecord)
            {
                yield return("<table>");

                foreach (var _Line in Combine(Combine(Begin(), "    "), Variables(t.Record.Fields)))
                {
                    yield return(_Line);
                }
                yield return("</table>");
            }
            else if (t.OnTaggedUnion)
            {
                yield return("<table>");

                foreach (var _Line in Combine(Combine(Begin(), "    "), Variables(t.TaggedUnion.Alternatives)))
                {
                    yield return(_Line);
                }
                yield return("</table>");
            }
            else if (t.OnEnum)
            {
                yield return("<table>");

                foreach (var _Line in Combine(Combine(Begin(), "    "), Literals(t.Enum.Literals)))
                {
                    yield return(_Line);
                }
                yield return("</table>");
            }
            else if (t.OnClientCommand)
            {
                yield return("<div><pre>参数</pre></div>");

                yield return("<table>");

                foreach (var _Line in Combine(Combine(Begin(), "    "), Variables(t.ClientCommand.OutParameters)))
                {
                    yield return(_Line);
                }
                yield return("</table>");

                yield return("<div><pre>返回值</pre></div>");

                yield return("<table>");

                foreach (var _Line in Combine(Combine(Begin(), "    "), Variables(t.ClientCommand.InParameters)))
                {
                    yield return(_Line);
                }
                yield return("</table>");
            }
            else if (t.OnServerCommand)
            {
                yield return("<table>");

                foreach (var _Line in Combine(Combine(Begin(), "    "), Variables(t.ServerCommand.OutParameters)))
                {
                    yield return(_Line);
                }
                yield return("</table>");
            }
            else
            {
                throw new InvalidOperationException();
            }
            yield return("<pre></pre>");
        }