From 1a45b82d6413c656d4b28cd4615f57fc7f00d6f7 Mon Sep 17 00:00:00 2001 From: rolanmen1 Date: Fri, 20 Jul 2012 22:02:14 +0000 Subject: [PATCH] LuaWriter. Now colors Strings. TODO: Allow to color multiple Strings in the same line. --- BizHawk.MultiClient/tools/LuaWriter.cs | 80 ++++++++++++++++++++------ 1 file changed, 64 insertions(+), 16 deletions(-) diff --git a/BizHawk.MultiClient/tools/LuaWriter.cs b/BizHawk.MultiClient/tools/LuaWriter.cs index 60abfec1b5..497166e4ba 100644 --- a/BizHawk.MultiClient/tools/LuaWriter.cs +++ b/BizHawk.MultiClient/tools/LuaWriter.cs @@ -12,30 +12,60 @@ namespace BizHawk.MultiClient { public partial class LuaWriter : Form { - public Regex keyWords = new Regex("and|break|do|else|elseif|end|false|for|function|if|in|local|nil|not|or|repeat|return|then|true|until|while"); + public Regex keyWords = new Regex("and|break|do|else|elseif|end|false|for|function|if|in|local|nil|not|or|repeat|return|then|true|until|while"); public LuaWriter() { InitializeComponent(); } - private void timer_Tick(object sender, EventArgs e) - { + private void timer_Tick(object sender, EventArgs e) + { int selPos = LuaText.SelectionStart; int selChars = LuaText.SelectedText.Length; - int curPos = 0; - foreach (Match keyWordMatch in keyWords.Matches(LuaText.Text)) + ColorReservedWords(); + + ColorComments(); + + ColorStrings(); + + LuaText.Select(selPos, selChars); + } + + private void ColorStrings() + { + int firstQuote = LuaText.Find("\"", 0); + while (firstQuote > 0) { - LuaText.Select(curPos, keyWordMatch.Index); - LuaText.SelectionColor = Color.Black; - LuaText.Select(keyWordMatch.Index, keyWordMatch.Length); - LuaText.SelectionColor = Color.Blue; - curPos = keyWordMatch.Index + keyWordMatch.Length; + if (LuaText.SelectionColor != Color.Green) + { + if (LuaText.Text[LuaText.SelectionStart - 1] != '\\') + { + int stringStart = LuaText.SelectionStart; + int endLine = LuaText.GetFirstCharIndexFromLine(LuaText.GetLineFromCharIndex(stringStart) + 1) - 1; + int stringEnd = LuaText.Find("\"", stringStart + 1, endLine, RichTextBoxFinds.MatchCase); + + if (stringEnd > 0) + { + LuaText.Select(stringStart, stringEnd - stringStart + 1); + firstQuote = LuaText.Find("\"", stringEnd + 1, RichTextBoxFinds.MatchCase); + } + else + { + LuaText.Select(stringStart, endLine - stringStart); + firstQuote = LuaText.Find("\"", endLine + 1, RichTextBoxFinds.MatchCase); + } + + LuaText.SelectionColor = Color.Gray; + } + } + else + firstQuote = LuaText.Find("\"", LuaText.SelectionStart + 1, RichTextBoxFinds.MatchCase); } + } - LuaText.Select(curPos, selPos); - LuaText.SelectionColor = Color.Black; - + private void ColorComments() + { foreach (Match CommentMatch in new Regex("--").Matches(LuaText.Text)) { int endComment; @@ -61,9 +91,27 @@ namespace BizHawk.MultiClient LuaText.SelectionColor = Color.Green; } } + } - LuaText.Select(selPos, selChars); - } + private void ColorReservedWords() + { + int curPos = 0; + + foreach (Match keyWordMatch in keyWords.Matches(LuaText.Text)) + { + LuaText.Select(curPos, keyWordMatch.Index); + if (LuaText.SelectionColor != Color.Gray) + { + LuaText.SelectionColor = Color.Black; + LuaText.Select(keyWordMatch.Index, keyWordMatch.Length); + LuaText.SelectionColor = Color.Blue; + } + curPos = keyWordMatch.Index + keyWordMatch.Length; + } + + LuaText.Select(curPos, LuaText.Text.Length); + LuaText.SelectionColor = Color.Black; + } } -} +} \ No newline at end of file