private string formatBuildGradle(GradleBlockElement rootElement, int indent = 0) { StringBuilder strb = new StringBuilder(); string indentText = new string(' ', indent * 4); foreach (var element in rootElement.Elements) { if (element is GradleTextElement) { var textElement = element as GradleTextElement; strb.AppendLine(indentText + textElement.Text); } else if (element is GradleBlockElement) { var blockElement = element as GradleBlockElement; strb.AppendLine(indentText + blockElement.Key + " {"); string blockContent = formatBuildGradle(blockElement, indent + 1); strb.AppendLine(blockContent); strb.AppendLine(indentText + "}"); } } return(strb.ToString()); }
private GradleBlockElement findBlockElement(params string[] keys) { GradleBlockElement targetBlockElement = null; var targetElements = this.Elements; foreach (string key in keys) { bool found = false; foreach (var element in targetElements) { if (element is GradleBlockElement) { var blockElement = element as GradleBlockElement; if (blockElement.Key == key) { targetElements = blockElement.Elements; targetBlockElement = blockElement; found = true; break; } } } if (!found) { Debug.LogError("key not found : " + key); return(null); } } return(targetBlockElement); }
public static GradleRootElement ParseBuildGradle(string buildGradleText) { var rootElementList = new List <GradleElement>(); var stack = new Stack <KeyValuePair <string, List <GradleElement> > >(); var matches = Regex.Matches(buildGradleText, "([a-zA-Z0-9_]+\\s*{|})"); var currentElemenList = rootElementList; int prevIndex = 0; foreach (Match match in matches) { string subString = buildGradleText.Substring(prevIndex, match.Index - prevIndex); string[] lines = subString.Split(new char[] { ';', '\n' }); var textElementList = new List <GradleElement>(); foreach (string line in lines) { var l = line.Trim(); if (l.Length > 0) { textElementList.Add(new GradleTextElement(l)); } } currentElemenList.AddRange(textElementList); if (match.Value.EndsWith("{", System.StringComparison.Ordinal)) { string key = match.Value.Substring(0, match.Value.Length - 1).Trim(); var pair = new KeyValuePair <string, List <GradleElement> >(key, currentElemenList); stack.Push(pair); prevIndex = match.Index + match.Value.Length; currentElemenList = new List <GradleElement>(); } else if (match.Value == "}") { prevIndex = match.Index + 1; var pair = stack.Pop(); var blockElement = new GradleBlockElement(pair.Key, currentElemenList.ToArray()); currentElemenList = pair.Value; currentElemenList.Add(blockElement); } } return(new GradleRootElement(rootElementList.ToArray())); }