public void InsertLink(string url, string linkText, string title, string rel, bool newWindow, MarkupRange range) { string html = HtmlGenerationService.GenerateHtmlFromLink(url, linkText, title, rel, newWindow); if (range == null) { range = SelectedMarkupRange; } IHTMLTxtRange txtRange = range.ToTextRange(); if (txtRange.text != null) { int length = txtRange.text.TrimEnd(null).Length; txtRange.moveEnd("CHARACTER", length - txtRange.text.Length); if (txtRange.text != null) { length = txtRange.text.Length; int startLength = txtRange.text.TrimStart(null).Length; txtRange.moveStart("CHARACTER", length - startLength); } range.MoveToTextRange(txtRange); } //put the cursor at the end of the link, but outside of it range.Start.PushGravity(_POINTER_GRAVITY.POINTER_GRAVITY_Left); range.End.PushGravity(_POINTER_GRAVITY.POINTER_GRAVITY_Right); try { InsertHtml(range.Start, range.End, html); range.Start.MoveToPointer(range.End); range.ToTextRange().select(); } finally { range.Start.PopGravity(); range.End.PopGravity(); } }