/// <summary> /// Loads a scenario from a text given in our domain-specific language created for this purpose and returns it /// as a list of commands. /// </summary> /// <param name="data">Contents of the scenario file.</param> /// <returns></returns> public static List <ScenarioCommand> LoadFromText(string data) { List <ScenarioCommand> commands = new List <ScenarioCommand>(); string[] lines = data.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < lines.Length; i++) { string line = lines[i]; if (line.Trim() == "") { continue; } ParsedLine parsedLine = ParsedLine.Parse(line); if (parsedLine.Command == "menu") { ParsedLine option1 = ParsedLine.Parse(lines[i + 1]); ParsedLine option1Then = ParsedLine.Parse(lines[i + 2]); ParsedLine option2 = ParsedLine.Parse(lines[i + 3]); ParsedLine option2Then = ParsedLine.Parse(lines[i + 4]); i += 4; commands.Add(new MenuCommand(option1, option1Then, option2, option2Then)); } else { commands.AddRange(ParseCommand(parsedLine)); } } commands.Add(new EndScenarioCommand()); return(commands); }
private void UpdateTextEditor() { Uri tryUri; try { InitGraph(); var nLabel = G.CreateUriNode(UriFactory.Create("http://www.w3.org/2000/01/rdf-schema#label")); G.Assert(new Triple(G.CreateUriNode(UriFactory.Create(GraphUri)), nLabel, G.CreateLiteralNode(GraphLabel))); var lines = textBoxTextEditor.Text.Replace("\t", new string(' ', 4)) .Replace("\r", "") .Split(new[] { '\n' }) .ToList(); var parsedLines = new List <ParsedLine>(); foreach (var line in lines) { if (line.Trim() == "") { continue; } var parsedLine = ParsedLine.Parse(line); parsedLines.Add(parsedLine); parsedLines.AddRange(parsedLine.InnerLines.Select(ParsedLine.Parse)); } var rList = new List <string>(); var pList = new List <string>(); foreach (var parsedLine in parsedLines) { var tab = parsedLine.Tab; for (var i = rList.Count() - 1; i > tab; i--) { rList.RemoveAt(i); } for (var i = rList.Count() - 1; i < tab; i++) { rList.Add(""); } for (var i = pList.Count() - 1; i > tab; i--) { pList.RemoveAt(i); } for (var i = pList.Count() - 1; i < tab; i++) { pList.Add(""); } if (parsedLine.Predicate != "") { pList[tab] = parsedLine.Predicate; } if (parsedLine.Resource == "") { continue; } var predicate = ""; for (var i = pList.Count - 1; i >= 0 && predicate == ""; i--) { predicate = pList[i]; } if (predicate == "") { predicate = "http://rdfs.org/sioc/ns#container_of"; } if (!Uri.TryCreate(predicate, UriKind.Absolute, out tryUri)) { predicate = Uri.EscapeUriString( string.Format("{0}p#{1}", MainForm.config.GlobalPrefix, predicate)); } var resource = parsedLine.Resource; string currUri, currLabel; if (resource[0] == '#') { currUri = Uri.EscapeUriString( string.Format("{0}r#{1}", MainForm.config.GlobalPrefix, resource.Substring(1))); currLabel = resource.Substring(1); } else { if (Uri.TryCreate(resource, UriKind.Absolute, out tryUri)) { currUri = tryUri.ToString(); currLabel = tryUri.Segments.Last().Replace("/", ""); } else { var objUri = resource; if (objUri.Length > 64) { objUri = objUri.Substring(0, 64); } currUri = Uri.EscapeUriString(string.Format("{0}/r#{1}", GraphUri, objUri)); currLabel = resource; } } rList[tab] = currUri; var prevUri = ""; for (var i = tab - 1; i >= 0 && prevUri == ""; i--) { prevUri = rList[i]; } if (prevUri != "") { var nS = G.CreateUriNode(UriFactory.Create(prevUri)); var nP = G.CreateUriNode(UriFactory.Create(predicate)); var nO = G.CreateUriNode(UriFactory.Create(currUri)); G.Assert(new Triple(nS, nP, nO)); var nLabelVal = G.CreateLiteralNode(currLabel); G.Assert(new Triple(nO, nLabel, nLabelVal)); } else { var nO = G.CreateUriNode(UriFactory.Create(currUri)); var nLabelVal = G.CreateLiteralNode(currLabel); G.Assert(new Triple(nO, nLabel, nLabelVal)); } } ReportMsg(""); } catch (Exception ex) { ReportMsg(ex); } }