private AmlLinkClickedEventArgs InfoFromOffset(int startOffset)
        {
            var settings = new XmlReaderSettings();

            settings.ConformanceLevel             = ConformanceLevel.Fragment;
            settings.DtdProcessing                = DtdProcessing.Ignore;
            settings.IgnoreProcessingInstructions = true;
            var start  = base.CurrentContext.VisualLine.FirstDocumentLine.Offset;
            var stop   = base.CurrentContext.VisualLine.LastDocumentLine.EndOffset;
            var offset = startOffset - start;
            var text   = base.CurrentContext.GetText(start, stop - start).Text;

            using (var reader = new XmlFragmentReader(base.CurrentContext.Document.CreateReader(start, stop - start)))
            {
                var    lineInfo = reader as IXmlLineInfo;
                string type     = null;
                try
                {
                    while (reader.Read())
                    {
                        switch (reader.NodeType)
                        {
                        case XmlNodeType.Element:
                            type = reader.IsEmptyElement ? null : reader.GetAttribute("type");
                            break;

                        case XmlNodeType.EndElement:
                            type = null;
                            break;

                        case XmlNodeType.Text:
                            if (!string.IsNullOrEmpty(type) && reader.Value.IsGuid() && lineInfo.LinePosition >= offset)
                            {
                                return new AmlLinkClickedEventArgs()
                                       {
                                           Id     = reader.Value,
                                           Type   = type,
                                           Offset = lineInfo.LinePosition + start - 1
                                       }
                            }
                            ;
                            break;
                        }
                    }
                }
                catch (XmlException) { }
            }
            return(new AmlLinkClickedEventArgs()
            {
                Offset = -1
            });
        }
    private AmlLinkClickedEventArgs InfoFromOffset(int startOffset)
    {
      var settings = new XmlReaderSettings();
      settings.ConformanceLevel = ConformanceLevel.Fragment;
      settings.DtdProcessing = DtdProcessing.Ignore;
      settings.IgnoreProcessingInstructions = true;
      var start = base.CurrentContext.VisualLine.FirstDocumentLine.Offset;
      var stop = base.CurrentContext.VisualLine.LastDocumentLine.EndOffset;
      var offset = startOffset - start;
      var text = base.CurrentContext.GetText(start, stop - start).Text;

      using (var reader = new XmlFragmentReader(base.CurrentContext.Document.CreateReader(start, stop - start)))
      {
        var lineInfo = reader as IXmlLineInfo;
        string type = null;
        try
        {
          while (reader.Read())
          {
            switch (reader.NodeType)
            {
              case XmlNodeType.Element:
                type = reader.IsEmptyElement ? null : reader.GetAttribute("type");
                break;
              case XmlNodeType.EndElement:
                type = null;
                break;
              case XmlNodeType.Text:
                if (!string.IsNullOrEmpty(type) && reader.Value.IsGuid() && lineInfo.LinePosition >= offset)
                  return new AmlLinkClickedEventArgs()
                  {
                    Id = reader.Value,
                    Type = type,
                    Offset = lineInfo.LinePosition + start
                  };
                break;
            }
          }
        }
        catch (XmlException) { }
      }
      return new AmlLinkClickedEventArgs() { Offset = -1 };
    }