in Source/Tx.Windows.TypeGeneration/ManifestParser.cs [98:187]
private void ParseManifestProvider(XElement provider)
{
string providerName = MakeIdentifier(provider.Attribute(AttributeNames.Name).Value);
string providerGuid = provider.Attribute(AttributeNames.Guid).Value;
GetEarliestVersions(provider);
Func<XElement, string> nameFunction = FindNameFunction(provider);
XElement events = provider.Element(ElementNames.Events);
XElement templates = provider.Element(ElementNames.Templates);
XElement opcodes = provider.Element(ElementNames.Opcodes);
XElement channels = provider.Element(ElementNames.Channels);
XElement keywords = provider.Element(ElementNames.Keywords);
XElement maps = provider.Element(ElementNames.Maps);
XElement tasks = provider.Element(ElementNames.Tasks);
var sb = new StringBuilder(
@"//
// This code was generated by EtwEventTypeGen.exe
//
using System;");
sb.AppendLine();
sb.AppendLine();
sb.Append("namespace Tx.Windows.");
sb.Append(providerName);
sb.AppendLine();
sb.AppendLine("{");
if (tasks != null)
{
this.EmitTaskValue(tasks, sb);
}
if (maps!=null)
{
this.EmitMapValue(maps, sb);
}
foreach (XElement evt in events.Elements())
{
string className = nameFunction(evt);
string version = "0";
if (evt.Attribute(AttributeNames.Version) != null)
{
version = evt.Attribute(AttributeNames.Version).Value;
}
if (evt.Attribute(AttributeNames.Message) != null)
{
EmitFormatString(ref sb, evt.Attribute(AttributeNames.Message).Value);
}
else
{
EmitDefaultFormatString(ref sb, evt, templates);
}
sb.AppendLine();
sb.AppendFormat(" [ManifestEvent(\"{0}\", {1}, {2},",
providerGuid,
evt.Attribute(AttributeNames.Value).Value,
version);
sb.AppendLine();
sb.AppendFormat(" \"{0}\", \"{1}\", \"{2}\"",
LookupOpcodeName(evt, opcodes),
LookupLevel(evt),
LookupChannelName(evt, channels));
foreach (string keyword in LookupKeywords(evt, keywords))
{
sb.AppendFormat(", \"{0}\"", keyword);
}
sb.AppendLine(")]");
sb.AppendLine();
sb.AppendFormat(" public class {0}{1} : SystemEvent", className, VersionSuffix(evt));
sb.AppendLine();
sb.AppendLine(" {");
EmitTemplate(ref sb, evt, templates);
sb.AppendLine(" }");
sb.AppendLine();
}
sb.AppendLine("}");
_code.Add(providerName, sb.ToString());
}