private static void ParseContextLine(CapabilitiesCollection collection, string line, int lineIndex,
                                             ref ConceptBuilder conceptBuilder)
        {
            if (!line.StartsWith("Concept"))
            {
                InvalidData(line, lineIndex, "Invalid line to parse. Expected Concept keyword");
            }
            var words = line.Split('\"');

            if (words.Length < 2)
            {
                InvalidData(line, lineIndex, "Expected concept name to be defined");
            }
            var conceptList = new List <string>();

            for (var i = 1; i < words.Length; i += 2)
            {
                conceptList.Add(words[i]);
            }
            if (conceptList.Count == 0)
            {
                InvalidData(line, lineIndex, "Expected concept name between quotes");
            }
            conceptBuilder = collection.AddConcept(conceptList[0]);
            conceptList.RemoveAt(0);
            foreach (var concept in conceptList)
            {
                collection.AddRelation(conceptBuilder, concept);
            }
        }
        public static CapabilitiesCollection LoadFileCapabilities(string fileName)
        {
            var collection   = new CapabilitiesCollection();
            var lines        = File.ReadAllLines(fileName);
            var parseContext = ParseContext.None;
            var lineIndex    = 0;
            var concept      = new ConceptBuilder(null);

            foreach (var codeLine in lines)
            {
                lineIndex++;
                var line = codeLine.TrimEnd();
                if (line.Contains("'"))
                {
                    var pos = line.IndexOf("'");
                    line = line.Remove(pos).TrimEnd();
                }
                if (string.IsNullOrEmpty(line.Trim()))
                {
                    continue;
                }
                switch (parseContext)
                {
                case ParseContext.None:
                    ParseContextLine(collection, line, lineIndex, ref concept);
                    parseContext = ParseContext.Concept;
                    break;

                case ParseContext.Concept:
                    ParseContextBody(line, lineIndex, ref parseContext);
                    break;

                case ParseContext.Keys:
                    ParseSectionKeys(concept, line, lineIndex, ref parseContext);
                    break;

                case ParseContext.Excluded:
                    ParseSectionExcluded(concept, line, lineIndex, ref parseContext);
                    break;
                }
            }
            return(collection);
        }