Пример #1
0
        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);
            }
        }
Пример #2
0
        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");
        }
Пример #3
0
        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");
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
        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");
        }
Пример #6
0
        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");
        }
Пример #7
0
        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");
        }
Пример #8
0
        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");
        }
Пример #9
0
        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);
                }
            }
        }
Пример #10
0
        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");
        }
Пример #11
0
        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 ();
            }
        }