LuaWriter. Now colors Strings. TODO: Allow to color multiple Strings in the same line.

This commit is contained in:
rolanmen1 2012-07-20 22:02:14 +00:00
parent 5f4ad218a2
commit 1a45b82d64
1 changed files with 64 additions and 16 deletions

View File

@ -12,30 +12,60 @@ namespace BizHawk.MultiClient
{ {
public partial class LuaWriter : Form 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() public LuaWriter()
{ {
InitializeComponent(); InitializeComponent();
} }
private void timer_Tick(object sender, EventArgs e) private void timer_Tick(object sender, EventArgs e)
{ {
int selPos = LuaText.SelectionStart; int selPos = LuaText.SelectionStart;
int selChars = LuaText.SelectedText.Length; 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); if (LuaText.SelectionColor != Color.Green)
LuaText.SelectionColor = Color.Black; {
LuaText.Select(keyWordMatch.Index, keyWordMatch.Length); if (LuaText.Text[LuaText.SelectionStart - 1] != '\\')
LuaText.SelectionColor = Color.Blue; {
curPos = keyWordMatch.Index + keyWordMatch.Length; 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); private void ColorComments()
LuaText.SelectionColor = Color.Black; {
foreach (Match CommentMatch in new Regex("--").Matches(LuaText.Text)) foreach (Match CommentMatch in new Regex("--").Matches(LuaText.Text))
{ {
int endComment; int endComment;
@ -61,9 +91,27 @@ namespace BizHawk.MultiClient
LuaText.SelectionColor = Color.Green; 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;
}
} }
} }