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