コード例 #1
0
        /// <summary>
        /// Create <see cref="NewFolding"/>s for the specified document.
        /// </summary>
        public IEnumerable <NewFolding> CreateNewFoldings(ITextSource document)
        {
            var newFoldings       = new List <NewFolding>();
            var startOffsets      = new Stack <int>();
            var lastNewLineOffset = 0;
            var currentIndex      = 0;
            var json = document.Text;

            //for (var i = 0; i < document.TextLength; i++)
            //{
            //    var c = document.GetCharAt(i);
            //    if (c == '{')
            //    {
            //        startOffsets.Push(i);
            //    }
            //    else if (c == '}' && startOffsets.Count > 0)
            //    {
            //        var startOffset = startOffsets.Pop();
            //        // don't fold if opening and closing brace are on the same line
            //        if (startOffset < lastNewLineOffset)
            //        {
            //            newFoldings.Add(new NewFolding(startOffset, i + 1));
            //        }
            //    }
            //    else if (c == '\n' || c == '\r')
            //    {
            //        lastNewLineOffset = i + 1;
            //    }
            //}
            while (true)
            {
                //¿ªÊ¼±ê¼Ç
                var index = json.IndexOfAny(Braces, currentIndex);
                if (index == -1)
                {
                    break;
                }
                currentIndex = index + 1;
                var brace = json.Substring(index, 1);
                if (OpeningBrace.Contains(brace))
                {
                    startOffsets.Push(index);
                }
                else if (ClosingBrace.Contains(brace) && startOffsets.Any())
                {
                    var start = startOffsets.Pop();
                    if (start < lastNewLineOffset)
                    {
                        newFoldings.Add(new NewFolding(start, index + 1));
                    }
                }
                else if (Line.Contains(brace))
                {
                    lastNewLineOffset = index + 1;
                }
            }
            newFoldings.Sort((a, b) => a.StartOffset.CompareTo(b.StartOffset));
            return(newFoldings);
        }
コード例 #2
0
        private int countEndBlock(string text)
        {
            int           res   = 0;
            List <string> words = Folding.VerilogFoldingStrategy.MySplit(text);

            foreach (string s in words)
            {
                if (ClosingBrace.Contains(s))
                {
                    res++;
                }
            }
            return(res);
        }