Exemplo n.º 1
0
        public void Test_OnlyOneTag()
        {
            var closer     = new TagCloser();
            var closingTag = closer.GetClosingTagIfAny("<xml><", 6);

            Assert.AreEqual("xml", closingTag);
        }
Exemplo n.º 2
0
        public void FindPrevTag_Opening()
        {
            var closer = new TagCloser();
            var xml    = "<xml><str>hello, world</str><s";
            var tag    = closer.FindPrevTag(xml, 15);

            Assert.AreEqual("str", tag.TagName);
            Assert.AreEqual(false, tag.IsClosing);
            Assert.AreEqual(5, tag.StartIndex);
        }
Exemplo n.º 3
0
        public void FindPrevTag_Closing()
        {
            var closer = new TagCloser();
            var xml    = "<xml><str>hello, world</str><s";
            var tag    = closer.FindPrevTag(xml, xml.Length);

            Assert.AreEqual("str", tag.TagName);
            Assert.AreEqual(true, tag.IsClosing);
            Assert.AreEqual(22, tag.StartIndex);
        }
Exemplo n.º 4
0
        public void Test_SelfClosingTag()
        {
            var closer     = new TagCloser();
            var xml        = "<xml><str>hello, <self-closing-tag /> world</str><";
            var closingTag = closer.GetClosingTagIfAny(
                xml,
                xml.Length);

            Assert.AreEqual("xml", closingTag);
        }
Exemplo n.º 5
0
        public void Test_NestedTags()
        {
            var closer     = new TagCloser();
            var xml        = "<xml><str>hello, world</str><";
            var closingTag = closer.GetClosingTagIfAny(
                xml,
                xml.Length);

            Assert.AreEqual("xml", closingTag);
        }
Exemplo n.º 6
0
        public void Test_OnlyOneTagWithText()
        {
            var closer     = new TagCloser();
            var xml        = "<xml>test text<";
            var closingTag = closer.GetClosingTagIfAny(
                xml,
                xml.Length);

            Assert.AreEqual("xml", closingTag);
        }
Exemplo n.º 7
0
        private void TextEditor_TextArea_TextEntering(object sender, TextCompositionEventArgs e)
        {
            if (e.Text.Length <= 0)
            {
                return;
            }

            if (_completionWindow != null && (e.Text[0] == '>' || e.Text[0] == '/'))
            {
                _completionWindow?.Close();
            }

            try
            {
                if (e.Text[0] == '/')
                {
                    var textArea       = e.Source as TextArea;
                    var xml            = textArea.Document.Text;
                    var cursorPosition = textArea.Caret.Offset;
                    if (cursorPosition == 0)
                    {
                        return;
                    }
                    var prevSymbol = xml[cursorPosition - 1];
                    if (prevSymbol != '<')
                    {
                        return;
                    }
                    var closer          = new TagCloser();
                    var autocompleteTag = closer.GetClosingTagIfAny(xml, cursorPosition);
                    Console.WriteLine($"Autocomplete tag: {autocompleteTag}");
                    if (!string.IsNullOrWhiteSpace(autocompleteTag))
                    {
                        textArea.Document.Insert(textArea.Caret.Offset, $"/{autocompleteTag}>");
                        e.Handled = true;
                    }
                }
            }
            catch (Exception ex)
            {
                // We do not want to be disrupting anyone with crashes in this
                // autocomplete. Also, I do not know when I am going to come back
                // to this code to fix any bugs that can be here.
                Console.WriteLine(ex.ToString());
            }
        }