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())); } }
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>"); }