public void GetLastTag() { DocumentEditor editor = new DocumentEditor(); TextBuffer buffer = editor.Buffer; TextIter insertIter = buffer.StartIter; buffer.Insert(ref insertIter, "Start Extern Region "); buffer.InsertWithTagsByName(ref insertIter, "Intern Region", "Type:Attributes"); int index = insertIter.Offset - 1; buffer.Insert(ref insertIter, "End Extern Region"); buffer.ApplyTag("Type", buffer.StartIter, insertIter); TextTag expectedTag = buffer.TagTable.Lookup("Type:Attributes"); TextTag actualTag = DocumentUtils.GetLastTag(buffer.GetIterAtOffset(index)); Assert.AreEqual(expectedTag, actualTag, "GLT01"); }
private void OnInsertText(object sender, InsertTextArgs args) { int offset = args.Pos.Offset - args.Length; string text = args.Text; TextIter previousIter = GetIterAtOffset(offset - 1); // Previous is the iter before the insert offset. TextIter startIter = GetIterAtOffset(offset); TextIter endIter = GetIterAtOffset(offset + text.Length); // Only handle special inserting cases when we have a fully loaded document. if (document_loaded) { #if DEBUG Console.WriteLine("DEBUG: Inserting: {0}", text); Console.WriteLine("DEBUG: Start Offset: {0} Char: {1}", startIter.Offset, startIter.Char); Console.WriteLine("DEBUG: End Offset: {0} Char: {1}", endIter.Offset, endIter.Char); #endif TextTag lastEnd = DocumentUtils.GetLastTag(endIter); TextTag lastPrevious = DocumentUtils.GetLastTag(previousIter); if (endIter.BeginsTag(lastEnd) && lastEnd.Editable) { #if DEBUG Console.WriteLine("DEBUG: Inserting text at start of editable region."); Console.WriteLine("DEBUG: Tag Name: {0} Char: {1}", lastEnd.Name, endIter.Char); #endif ApplyTag(lastEnd, startIter, endIter); } else if (DocumentUtils.TagEndsHere(lastPrevious, previousIter, startIter) && lastPrevious.Editable) { #if DEBUG Console.WriteLine("DEBUG: Inserting text at end of editable region."); Console.WriteLine("DEBUG: Tag Name: {0} Char: {1}", lastPrevious.Name, previousIter.Char); #endif ApplyTag(lastPrevious, startIter, endIter); } } }
private void OnDeleteRange(object sender, DeleteRangeArgs args) { TextIter startIter = GetIterAtOffset(args.Start.Offset - 1); TextIter endIter = GetIterAtOffset(args.Start.Offset); #if DEBUG Console.WriteLine("DEBUG: Deleting range"); #endif bool startsRegion = startIter.Char.Equals("["); bool endsRegion = endIter.Char.Equals("]"); if (startsRegion && endsRegion) { #if DEBUG Console.WriteLine("DEBUG: Deleting whole editing region."); #endif TextTag last = DocumentUtils.GetAssociatedTextTag(this, DocumentUtils.GetLastTag(startIter)); Undoer.FreezeUndo(); InsertWithTags(ref endIter, "Documentation for this section has not yet been entered.", last); Undoer.ThrawUndo(); } }