public void Parse(string data, ref TemplateElementContainer parent) { var newMemberReference = new MemberReference(parent) { Member = data }; parent.Children.Add(newMemberReference); }
private void ParseTagData(string tagData, ref TemplateElementContainer parent) { if (tagData.StartsWith("#")) { var memberReference = new MemberReference(parent) { Member = tagData.Substring(1) }; parent.Children.Add(memberReference); return; } else if (tagData.StartsWith("//")) { // Ignore comment return; } var keyword = GetKeyWord(tagData); switch (keyword) { case KeyWords.Break: new BreakParser().Parse(tagData, ref parent); break; case KeyWords.Input: new InputParser().Parse(tagData, ref parent); break; case KeyWords.Name: new NameParser().Parse(tagData, ref parent); break; case KeyWords.ForEach: new ForEachParser().Parse(tagData, ref parent); break; case KeyWords.Call: new CallParser().Parse(tagData, ref parent); break; case KeyWords.End: new EndParser().Parse(tagData, ref parent); break; case KeyWords.If: case KeyWords.Else: case KeyWords.Case: case KeyWords.When: case KeyWords.Default: break; default: throw new InvalidOperationException($"Keyword: {keyword} not implemented."); } }
private void ParseData(string templateData, TemplateElementContainer template) { const string tagStart = "<@"; const string tagEnd = "@>"; var index = 0; var parent = template; while (index < templateData.Length) { var s = templateData.IndexOf(tagStart, index); var e = s; if (s < 0) { var literal = new LiteralText(parent) { Text = templateData.Substring(index).Trim('\n', '\r') }; if (!string.IsNullOrWhiteSpace(literal.Text)) { parent.Children.Add(literal); } index = templateData.Length; continue; } if (s >= 0 && s > index) { var literal = new LiteralText(parent) { Text = templateData.Substring(index, s - index).Trim('\n', '\r') }; if (!string.IsNullOrWhiteSpace(literal.Text)) { parent.Children.Add(literal); } } e = templateData.IndexOf(tagEnd, s); if (e == -1) { throw new InvalidOperationException($"Missing end {tagEnd}"); } var tagData = templateData.Substring(s + tagStart.Length, e - s - tagStart.Length).Trim(); ParseTagData(tagData, ref parent); index = e + tagEnd.Length; } }
public void Parse(string data, ref TemplateElementContainer parent) { var regex = @"name\s(?<name>.*)"; var match = Regex.Match(data, regex); if (!match.Success) { throw new InvalidOperationException($"Unable to parse name epxression: {data}"); } var newName = new NameElement(parent) { Name = match.Groups["name"].Value, }; parent.Children.Add(newName); }
public void Parse(string data, ref TemplateElementContainer parent) { var regex = @"call\(\s*(?<property>.*)\s*\)"; var match = Regex.Match(data, regex); if (!match.Success) { throw new InvalidOperationException($"Unable to parse call epxression: {data}"); } var newCall = new CallElement(parent) { TypeReference = match.Groups["property"].Value }; parent.Children.Add(newCall); }
public void Parse(string data, ref TemplateElementContainer parent) { var regex = @"input\s(?<type>.*)\sas\s(?<alias>.*)"; var match = Regex.Match(data, regex); if (!match.Success) { throw new InvalidOperationException($"Unable to parse input epxression: {data}"); } var newInput = new InputElement(parent) { Type = match.Groups["type"].Value, Alias = match.Groups["alias"].Value }; parent.Children.Add(newInput); }
public void Parse(string data, ref TemplateElementContainer parent) { var regex = @"foreach\(\s*(?<identifier>.*)\s+in\s+(?<source>.*)\s*\)"; var match = Regex.Match(data, regex); if (!match.Success) { throw new InvalidOperationException($"Unable to parse foreach epxression: {data}"); } var newForeach = new ForEachElement(parent) { Identifier = match.Groups["identifier"].Value, SourceReference = match.Groups["source"].Value }; parent.Children.Add(newForeach); parent = newForeach; }
public void Parse(string data, ref TemplateElementContainer parent) { parent = parent?.Parent as TemplateElementContainer; }
public void Parse(string data, ref TemplateElementContainer parent) { parent.Children.Add(new BreakElement(parent)); }