/// <summary>
        /// Creates an XmlFoldStart for the start tag of an element.
        /// </summary>
        AmlFoldStart CreateElementFoldStart(TextDocument document, XmlReader reader)
        {
            // Take off 1 from the offset returned
            // from the xml since it points to the start
            // of the element name and not the beginning
            // tag.
            //XmlFoldStart newFoldStart = new XmlFoldStart(reader.Prefix, reader.LocalName, reader.LineNumber - 1, reader.LinePosition - 2);
            AmlFoldStart newFoldStart = new AmlFoldStart();

            IXmlLineInfo lineInfo = (IXmlLineInfo)reader;

            newFoldStart.StartLine   = lineInfo.LineNumber;
            newFoldStart.StartOffset = document.GetOffset(newFoldStart.StartLine, lineInfo.LinePosition - 1);

            if (this.ShowAttributesWhenFolded && reader.HasAttributes)
            {
                newFoldStart.Name = reader.Name;
                newFoldStart.AddAttr(reader);
            }
            else
            {
                newFoldStart.Name = reader.Name;
            }

            return(newFoldStart);
        }
        public void SetStartPropOffset(TextDocument document, XmlReader reader)
        {
            IXmlLineInfo lineInfo = (IXmlLineInfo)reader;

            if (!_properties.Any() || lineInfo.LineNumber > _properties.Last().EndLine + 1)
            {
                var prop = new AmlFoldStart();
                prop.StartLine   = lineInfo.LineNumber;
                prop.StartOffset = document.GetOffset(lineInfo.LineNumber, lineInfo.LinePosition - 1);
                _properties.Add(prop);
            }
        }
        /// <summary>
        /// Create an element fold if the start and end tag are on
        /// different lines.
        /// </summary>
        static void CreateElementFold(TextDocument document, List <NewFolding> foldMarkers, XmlReader reader, AmlFoldStart foldStart)
        {
            IXmlLineInfo lineInfo = (IXmlLineInfo)reader;
            int          endLine  = lineInfo.LineNumber;

            if (endLine > foldStart.StartLine)
            {
                int endCol = lineInfo.LinePosition + reader.Name.Length + 1;
                foldStart.EndOffset = document.GetOffset(endLine, endCol);

                if (foldStart.Properties.Any())
                {
                    foreach (var prop in foldStart.Properties)
                    {
                        foldMarkers.Add(prop);
                    }
                }

                foldMarkers.Add(foldStart);
            }
        }
 public void SetStartPropOffset(TextDocument document, XmlReader reader)
 {
     IXmlLineInfo lineInfo = (IXmlLineInfo)reader;
       if (!_properties.Any() || lineInfo.LineNumber > _properties.Last().EndLine + 1)
       {
     var prop = new AmlFoldStart();
     prop.StartLine = lineInfo.LineNumber;
     prop.StartOffset = document.GetOffset(lineInfo.LineNumber, lineInfo.LinePosition - 1);
     _properties.Add(prop);
       }
 }
        /// <summary>
        /// Creates an XmlFoldStart for the start tag of an element.
        /// </summary>
        AmlFoldStart CreateElementFoldStart(TextDocument document, XmlReader reader)
        {
            // Take off 1 from the offset returned
              // from the xml since it points to the start
              // of the element name and not the beginning
              // tag.
              //XmlFoldStart newFoldStart = new XmlFoldStart(reader.Prefix, reader.LocalName, reader.LineNumber - 1, reader.LinePosition - 2);
              AmlFoldStart newFoldStart = new AmlFoldStart();

              IXmlLineInfo lineInfo = (IXmlLineInfo)reader;
              newFoldStart.StartLine = lineInfo.LineNumber;
              newFoldStart.StartOffset = document.GetOffset(newFoldStart.StartLine, lineInfo.LinePosition - 1);

              if (this.ShowAttributesWhenFolded && reader.HasAttributes)
              {
            newFoldStart.Name = reader.Name;
            newFoldStart.AddAttr(reader);
              }
              else
              {
            newFoldStart.Name = reader.Name;
              }

              return newFoldStart;
        }
        /// <summary>
        /// Create an element fold if the start and end tag are on
        /// different lines.
        /// </summary>
        static void CreateElementFold(TextDocument document, List<NewFolding> foldMarkers, XmlReader reader, AmlFoldStart foldStart)
        {
            IXmlLineInfo lineInfo = (IXmlLineInfo)reader;
              int endLine = lineInfo.LineNumber;
              if (endLine > foldStart.StartLine)
              {
            int endCol = lineInfo.LinePosition + reader.Name.Length + 1;
            foldStart.EndOffset = document.GetOffset(endLine, endCol);

            if (foldStart.Properties.Any())
            {
              foreach (var prop in foldStart.Properties)
              {
            foldMarkers.Add(prop);
              }
            }

            foldMarkers.Add(foldStart);
              }
        }