private static void GetEndTags(TextIter currentIter, TextIter nextIter, TextTag [] tagArray, ArrayList endTags) { Array.Reverse(tagArray); foreach (TextTag tag in tagArray) { if (!DocumentUtils.TagEndsHere(tag, currentIter, nextIter)) { continue; } endTags.Add(tag); } }
public void TagEndsHereSimple() { DocumentEditor editor = new DocumentEditor(); TextBuffer buffer = editor.Buffer; TextIter insertIter = buffer.StartIter; buffer.InsertWithTagsByName(ref insertIter, "Example Region", "Type"); TextIter endIter = buffer.GetIterAtOffset(insertIter.Offset - 1); TextIter nextIter = buffer.GetIterAtOffset(insertIter.Offset); bool endsTag = DocumentUtils.TagEndsHere(buffer.TagTable.Lookup("Type"), endIter, nextIter); Assert.IsTrue(endsTag, "TEH01"); }
public void AddPaddingEmptyVoidValidRegion() { DocumentEditor editor = new DocumentEditor(); TextBuffer buffer = editor.Buffer; TextIter insertIter = buffer.StartIter; DocumentUtils.AddPaddingEmpty(buffer, ref insertIter, "#0"); TextTag expectedTag = buffer.TagTable.Lookup("padding-empty#0"); bool beginsPadding = buffer.StartIter.BeginsTag(expectedTag); bool endsPadding = DocumentUtils.TagEndsHere(expectedTag, buffer.GetIterAtOffset(insertIter.Offset - 1), insertIter); Assert.IsTrue(beginsPadding, "APEVR01"); Assert.IsTrue(endsPadding, "APEVR02"); }
private static void GetArrays(TextIter currentIter, TextIter nextIter, ArrayList beginTags, ArrayList endTags) { TextTag [] tags = currentIter.Tags; int last_index = tags.Length - 1; TextTag last = tags [last_index]; if (currentIter.BeginsTag(last)) { GetBeginTags(currentIter, tags, beginTags); } if (DocumentUtils.TagEndsHere(last, currentIter, nextIter)) { GetEndTags(currentIter, nextIter, tags, endTags); } }
public void AddNewLineInt() { int initialOffset, endOffset, nextOffset; DocumentEditor editor = new DocumentEditor(); TextBuffer buffer = editor.Buffer; initialOffset = 0; nextOffset = DocumentUtils.AddNewLine(buffer, initialOffset, "#0"); endOffset = nextOffset - 1; TextTag expectedTag = buffer.TagTable.Lookup("newline#0"); bool beginsNewLine = buffer.GetIterAtOffset(initialOffset).BeginsTag(expectedTag); bool endsNewLine = DocumentUtils.TagEndsHere(expectedTag, buffer.GetIterAtOffset(endOffset), buffer.GetIterAtOffset(nextOffset)); Assert.IsTrue(beginsNewLine, "ANLI01"); Assert.IsTrue(endsNewLine, "ANLI02"); }
public void AddStringVoidValidRegion() { string data = "Inserting format Region"; DocumentEditor editor = new DocumentEditor(); TextBuffer buffer = editor.Buffer; TextIter insertIter = buffer.StartIter; DocumentUtils.AddString(buffer, ref insertIter, data, "#0"); TextTag expectedTag = buffer.TagTable.Lookup("format#0"); bool beginsFormat = buffer.StartIter.BeginsTag(expectedTag); bool endsFormat = DocumentUtils.TagEndsHere(expectedTag, buffer.GetIterAtOffset(insertIter.Offset - 2), buffer.GetIterAtOffset(insertIter.Offset - 1)); Assert.IsTrue(beginsFormat, "ASVR01"); Assert.IsTrue(endsFormat, "ASVR02"); }
public void AddPaddingEmptyIntValidRegion() { int initialOffset, endOffset, nextOffset; DocumentEditor editor = new DocumentEditor(); TextBuffer buffer = editor.Buffer; initialOffset = 0; nextOffset = DocumentUtils.AddPaddingEmpty(buffer, initialOffset, "#0"); endOffset = nextOffset - 1; TextTag expectedTag = buffer.TagTable.Lookup("padding-empty#0"); bool beginsPadding = buffer.GetIterAtOffset(initialOffset).BeginsTag(expectedTag); bool endsPadding = DocumentUtils.TagEndsHere(expectedTag, buffer.GetIterAtOffset(endOffset), buffer.GetIterAtOffset(nextOffset)); Assert.IsTrue(beginsPadding, "APEIVR01"); Assert.IsTrue(endsPadding, "APEIVR02"); }
public void AddStringIntValidRegion() { int initialOffset, endOffset, nextOffset; string data = "Inserting format Region"; DocumentEditor editor = new DocumentEditor(); TextBuffer buffer = editor.Buffer; initialOffset = 0; nextOffset = DocumentUtils.AddString(buffer, initialOffset, data, "#0"); endOffset = nextOffset - 2; TextTag expectedTag = buffer.TagTable.Lookup("format#0"); bool beginsFormat = buffer.GetIterAtOffset(initialOffset).BeginsTag(expectedTag); bool endsFormat = DocumentUtils.TagEndsHere(expectedTag, buffer.GetIterAtOffset(endOffset), buffer.GetIterAtOffset(nextOffset - 1)); Assert.IsTrue(beginsFormat, "ASIVR01"); Assert.IsTrue(endsFormat, "ASIVR02"); }
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); } } }
public void TagEndsHereOverlaping() { DocumentEditor editor = new DocumentEditor(); TextBuffer buffer = editor.Buffer; TextIter insertIter = buffer.StartIter; buffer.InsertWithTagsByName(ref insertIter, "Example Region", "Type"); int firstEndOffset = insertIter.Offset; buffer.InsertWithTagsByName(ref insertIter, "Second Region", "Type"); TextIter firstEndIter = buffer.GetIterAtOffset(firstEndOffset - 1); TextIter firstNextIter = buffer.GetIterAtOffset(firstEndOffset); TextIter secondEndIter = buffer.GetIterAtOffset(insertIter.Offset - 1); TextIter secondNextIter = buffer.GetIterAtOffset(insertIter.Offset); bool firstEndsTag = DocumentUtils.TagEndsHere(buffer.TagTable.Lookup("Type"), firstEndIter, firstNextIter); bool secondEndsTag = DocumentUtils.TagEndsHere(buffer.TagTable.Lookup("Type"), secondEndIter, secondNextIter); Assert.IsFalse(firstEndsTag, "TEH01"); Assert.IsTrue(secondEndsTag, "TEH02"); }
public static void Serialize(TextBuffer buffer, TextIter start, TextIter end, XmlTextWriter xmlWriter) { TextIter currentIter = start; TextIter nextIter = start; bool readingValue = false; bool readingText = false; string attributeName = ""; string attributeValue = ""; string elementText = ""; DocumentTag docTag; nextIter.ForwardChar(); // We iterate over all the buffer. while (!currentIter.Equal(end)) { ArrayList beginTags, endTags; beginTags = new ArrayList(); endTags = new ArrayList(); GetArrays(currentIter, nextIter, beginTags, endTags); #if DEBUG Console.WriteLine("Offset: {0} Char: {1}", currentIter.Offset, currentIter.Char); #endif if (readingValue) { attributeValue += currentIter.Char; } if (readingText) { elementText += currentIter.Char; } foreach (TextTag tag in beginTags) { #if DEBUG Console.WriteLine("Begin Tags: {0} Begins: {1} Ends: {2}", tag.Name, currentIter.BeginsTag(tag) ? "True" : "False", DocumentUtils.TagEndsHere(tag, currentIter, nextIter)? "True" : "False"); #endif docTag = tag as DocumentTag; if (docTag.IsElement) { string elementName = docTag.Name.Split('#')[0]; xmlWriter.WriteStartElement(null, elementName, null); #if DEBUG Console.WriteLine("Wrote Start Element: " + elementName); #endif } else if (docTag.IsAttribute) { attributeName = docTag.Name.Split(':')[1].Split('#')[0]; xmlWriter.WriteStartAttribute(null, attributeName, null); #if DEBUG Console.WriteLine("Wrote Start Attribute: {0}", attributeName); #endif readingValue = true; attributeValue = currentIter.Char; } else if (docTag.IsSerializableText) { readingText = true; elementText = currentIter.Char; } } foreach (TextTag tag in endTags) { #if DEBUG Console.WriteLine("End Tags: {0} Begins: {1} Ends: {2}", tag.Name, currentIter.BeginsTag(tag) ? "True" : "False", DocumentUtils.TagEndsHere(tag, currentIter, nextIter)? "True" : "False"); #endif docTag = tag as DocumentTag; if (docTag.IsElement) { xmlWriter.WriteEndElement(); #if DEBUG Console.WriteLine("Wrote End Element: " + docTag.Name); #endif } else if (docTag.IsAttribute) { xmlWriter.WriteString(attributeValue); xmlWriter.WriteEndAttribute(); #if DEBUG Console.WriteLine("Wrote End Attribute: {0} Value: {1}", attributeName, attributeValue); #endif readingValue = false; attributeValue = attributeName = String.Empty; } else if (docTag.IsSerializableText) { if (docTag.Name.IndexOf("significant-whitespace") != -1) { xmlWriter.WriteString(DocumentUtils.Unescape(elementText)); } else { xmlWriter.WriteString(elementText); } elementText = String.Empty; readingText = false; } } currentIter.ForwardChar(); nextIter.ForwardChar(); #if DEBUG Console.WriteLine("State: {0} Char: {1} \n", xmlWriter.WriteState.ToString(), currentIter.Char); #endif // while (Application.EventsPending ()) // Application.RunIteration (); } }