private Func FindNameFunction()

in Source/Tx.Windows.TypeGeneration/ManifestParser.cs [405:478]


        private Func<XElement, string> FindNameFunction(XElement provider)
        {
            Func<XElement, string> function = e =>
                                              e.Attribute(AttributeNames.Symbol) != null
                                                  ? e.Attribute(AttributeNames.Symbol).Value
                                                  : null;

            IEnumerable<string> names = from e in _earliestVersions.Values select function(e);

            if (AreNamesUseful(names.ToArray()))
            {
                return function;
            }

            XElement opcodes = provider.Element(ElementNames.Opcodes);

            function = e => LookupOpcodeName(e, opcodes);

            names = from e in _earliestVersions.Values select function(e);
            if (AreNamesUseful(names.ToArray()))
            {
                return function;
            }

            XElement tasks = provider.Element(ElementNames.Tasks);

            function = e => LookupTaskName(e, tasks);

            names = from e in _earliestVersions.Values select function(e);
            if (AreNamesUseful(names.ToArray()))
            {
                return function;
            }

            function = e => e.Attribute(AttributeNames.Task) == null
                                ? null
                                : e.Attribute(AttributeNames.Task).Value;

            names = from e in _earliestVersions.Values select function(e);
            if (AreNamesUseful(names.ToArray()))
            {
                return function;
            }

            function = e => LookupTaskName(e, tasks) + "_" +
                            (e.Attribute(AttributeNames.Opcode) == null
                                 ? ""
                                 : e.Attribute(AttributeNames.Opcode).Value.Replace("win:", ""));
            names = from e in _earliestVersions.Values select function(e);
            if (AreNamesUseful(names.ToArray()))
            {
                return function;
            }

            function = e => LookupTaskName(e, tasks) + "_"
                            + (e.Attribute(AttributeNames.Opcode) == null
                                   ? ""
                                   : e.Attribute(AttributeNames.Opcode).Value.Replace("win:", ""))
                            + "_" + e.Attribute(AttributeNames.Value).Value;

            names = from e in _earliestVersions.Values select function(e);
            if (AreNamesUseful(names.ToArray()))
            {
                return function;
            }

            // could not find useful heuristics
            // so, generate default names
            function = e => "Event_"
                            + e.Attribute(AttributeNames.Value).Value
                            + "_V" + e.Attribute(AttributeNames.Version).Value;

            return function;
        }