/// <summary> /// Create a MarkupRange from a TextRange. /// </summary> /// <param name="textRange"></param> /// <returns></returns> public MarkupRange CreateMarkupRange(IHTMLTxtRange textRange) { MarkupPointer Begin = CreateMarkupPointer(); MarkupPointer End = CreateMarkupPointer(); End.Gravity = _POINTER_GRAVITY.POINTER_GRAVITY_Right; MovePointersToRange(textRange, Begin, End); MarkupRange markupRange = new MarkupRange(Begin, End, this); return(markupRange); }
/// <summary> /// Creates a clone that spans the same range as this MarkupRange. /// Note: The clone can be manipulated without changing the position of this range. /// </summary> /// <returns></returns> public MarkupRange Clone() { MarkupRange clone = MarkupServices.CreateMarkupRange(); clone.Start.MoveToPointer(Start); clone.Start.Cling = Start.Cling; clone.Start.Gravity = Start.Gravity; clone.End.MoveToPointer(End); clone.End.Cling = End.Cling; clone.End.Gravity = End.Gravity; return(clone); }
/// <summary> /// Create a MarkupRange from that surrounds an Element. /// </summary> /// <returns></returns> public MarkupRange CreateMarkupRange(IHTMLElement element, bool outside) { _ELEMENT_ADJACENCY beginAdj = outside ? _ELEMENT_ADJACENCY.ELEM_ADJ_BeforeBegin : _ELEMENT_ADJACENCY.ELEM_ADJ_AfterBegin; _ELEMENT_ADJACENCY endAdj = outside ? _ELEMENT_ADJACENCY.ELEM_ADJ_AfterEnd : _ELEMENT_ADJACENCY.ELEM_ADJ_BeforeEnd; MarkupPointer Begin = CreateMarkupPointer(element, beginAdj); MarkupPointer End = CreateMarkupPointer(element, endAdj); End.Gravity = _POINTER_GRAVITY.POINTER_GRAVITY_Right; MarkupRange markupRange = new MarkupRange(Begin, End, this); return(markupRange); }
} //ProcessTable private MarkupRange GetMarkupRange() { MshtmlMarkupServices markupServices = new MshtmlMarkupServices((IMarkupServicesRaw)Document); MarkupRange range = markupServices.CreateMarkupRange(Document.selection.createRange()); range.Start.Gravity = mshtml._POINTER_GRAVITY.POINTER_GRAVITY_Left; range.End.Gravity = mshtml._POINTER_GRAVITY.POINTER_GRAVITY_Right; range.Start.Cling = false; range.End.Cling = false; return(range); }
/// <summary> /// Create a MarkupRange from a selection object. /// </summary> public MarkupRange CreateMarkupRange(IHTMLSelectionObject selection) { if (selection == null) { return(null); } // see what type of range is selected object range = selection.createRange(); if (range is IHTMLTxtRange) { return(CreateMarkupRange(range as IHTMLTxtRange)); } else if (range is IHTMLControlRange) { // we only support single-selection so a "control-range" can always // be converted into a single-element text range IHTMLControlRange controlRange = range as IHTMLControlRange; if (controlRange.length == 1) { IHTMLElement selectedElement = controlRange.item(0); MarkupRange markupRange = CreateMarkupRange(selectedElement); //return the precisely positioned text range return(markupRange); } else { Debug.Fail("Length of control range not equal to 1 (value was " + controlRange.length.ToString(CultureInfo.InvariantCulture)); return(null); } } else // null or unexpected range type { return(null); } }
/// <summary> /// Create a MarkupRange from a set of MarkupPointers. /// </summary> /// <param name="start"></param> /// <param name="end"></param> /// <returns></returns> public MarkupRange CreateMarkupRange(MarkupPointer start, MarkupPointer end) { MarkupRange markupRange = new MarkupRange(start, end, this); return(markupRange); }
public SelectionPreserver(MarkupRange selectedMarkupRange) { _preservedMarkupRange = selectedMarkupRange.Clone(); _preservedMarkupRange.Start.Cling = true; _preservedMarkupRange.End.Cling = true; }