コード例 #1
0
        private YamlFoldStart CreateElementFoldStart(TextDocument document, YamlReader reader)
        {
            var yamlFoldStart = new YamlFoldStart {
                StartLine   = reader.LineNumber,
                StartOffset = document.GetOffset(reader.LineNumber, 1),
                Name        = reader.Key
            };

            return(yamlFoldStart);
        }
コード例 #2
0
        /// <summary>
        /// Create <see cref="T:ICSharpCode.AvalonEdit.Folding.NewFolding" />s for the specified document.
        /// </summary>
        public IEnumerable <NewFolding> CreateNewFoldings(TextDocument document, YamlReader reader, out int firstErrorOffset)
        {
            Stack <YamlFoldStart> yamlFoldStarts = new Stack <YamlFoldStart>();
            List <NewFolding>     foldMarkers    = new List <NewFolding>();

            try {
                while (reader.ReadLine())
                {
                    if (reader.Indent == 0 && !reader.IsEmptyLine)
                    {
                        if (yamlFoldStarts.Count > 0)
                        {
                            var foldStart = yamlFoldStarts.Pop();
                            if (foldStart.StartLine < reader.LineNumber - 1)
                            {
                                CreateElementFold(document, foldMarkers, reader, foldStart);
                            }
                        }
                        var elementFoldStart = CreateElementFoldStart(document, reader);
                        yamlFoldStarts.Push(elementFoldStart);
                        continue;
                    }
                }
                while (yamlFoldStarts.Count > 0)
                {
                    var foldStart = yamlFoldStarts.Pop();
                    if (foldStart.StartLine < reader.LineNumber)
                    {
                        CreateElementFold(document, foldMarkers, reader, foldStart);
                    }
                }
                firstErrorOffset = -1;
            }
            catch (XmlException ex) {
                firstErrorOffset = ex.LineNumber <1 || ex.LineNumber> document.LineCount
                                        ? 0
                                        : document.GetOffset(ex.LineNumber, ex.LinePosition);
            }
            foldMarkers.Sort((Comparison <NewFolding>)((a, b) => a.StartOffset.CompareTo(b.StartOffset)));
            return((IEnumerable <NewFolding>)foldMarkers);
        }
コード例 #3
0
        private static void CreateElementFold(TextDocument document, List <NewFolding> foldMarkers, YamlReader reader, YamlFoldStart foldStart)
        {
            if (reader.IsLastLine)
            {
                foldStart.EndOffset = reader.LineOffset + reader.LineLength;
            }
            else
            {
                foldStart.EndOffset = reader.LineOffset - 2;
            }

            foldMarkers.Add((NewFolding)foldStart);
        }