public void Test_OnlyOneTag() { var closer = new TagCloser(); var closingTag = closer.GetClosingTagIfAny("<xml><", 6); Assert.AreEqual("xml", closingTag); }
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); }
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); }
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); }
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); }
public void Test_OnlyOneTagWithText() { var closer = new TagCloser(); var xml = "<xml>test text<"; var closingTag = closer.GetClosingTagIfAny( xml, xml.Length); Assert.AreEqual("xml", closingTag); }
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()); } }