A simple bracket matcher for JavaScript
jQuery is a great Framework, but it can be a bit overwhelming in terms of nesting, especially when working with sub-par JavaScript editors like Visual Studio. When working with jQuery, you may end up with many open brackets { that need closing brackets }, but then there are also open brackets like ({ that need }). So when you are at the end of a file that has a bunch of closing brackets, it can be painful to try to figure out if all of them are properly closed.
I hacked together a simple Bracket Matcher tool that takes a JavaScript text and highlights the blocks:
It is not finished - }) end tags are not properly highlighted (even though ({ are) and the "expectedEndTag" part that should automatically tell me if my blocks are properly closed doesn't work. Reason is simply that the current version was good enough to solve a problem at hand, so I might improve it later.
Create a simple WinForms application with a TextBox (MultiLine) and a RichTextEdit (WordWrap = false) and wire it up like this:
private void button1_Click(object sender, EventArgs e) { richTextBox1.Clear(); string input = textBox1.Text.Replace("\r\n", "\n"); var expectedEndTokens = new Stack<string>(); richTextBox1.SelectionColor = Color.Black; for (int i = 0; i < input.Length; i++) { char cprev = (i > 0) ? input[i - 1] : char.MinValue; char c = input[i]; char cnext = (i < input.Length - 1) ? input[i + 1] : char.MinValue; if (c == '{') { ColorChooser.SelectNextColor(); richTextBox1.Select(richTextBox1.Text.Length - 1, 1); richTextBox1.SelectionColor = ColorChooser.Color; if (cprev == '(') { expectedEndTokens.Push("})"); } else { expectedEndTokens.Push("}"); } } if (cprev == '\n') richTextBox1.SelectionColor = ColorChooser.Color; richTextBox1.AppendText(c.ToString()); if (c == '}') { ColorChooser.SelectPreviousColor(); richTextBox1.SelectionColor = ColorChooser.Color; } } } private static class ColorChooser { // Change these to whatever you prefer, add or remove if you want private static readonly Color[] HighlightColors = new Color[]{ Color.Blue, Color.DarkGreen, Color.Violet, Color.Red, Color.DarkCyan, Color.Gray, Color.Magenta }; private static int currentColorIndex = 0; public static Color Color { get { return HighlightColors[currentColorIndex]; } } public static void SelectNextColor() { lock (HighlightColors) { currentColorIndex++; if (currentColorIndex >= HighlightColors.Length) currentColorIndex = 0; } } public static void SelectPreviousColor() { lock (HighlightColors) { currentColorIndex--; if (currentColorIndex < 0) currentColorIndex = HighlightColors.Length-1; } } }
Hi
Is it finished yet?.
I believe this would make a great visual studio plugin.