예제 #1
0
        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());
        }
예제 #2
0
        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);
        }
예제 #3
0
    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()));
    }