private void ParseManifestProvider()

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