HI Guys.
I'm trying to make my own lite program that can highlight specified chosen words (Syntax highlighting in short).
I have a working method using Regex, but it is TOO SLOW.
Here is what is currently:
My Regex Statements:
public Regex SettingsAndComments = new Regex("--settings|-|", RegexOptions.IgnoreCase);
public Regex Numbers = new Regex("0|1|2|3|4|5|6|7|8|9|");
public Regex TTrue = new Regex("true|", RegexOptions.IgnoreCase);
public Regex FFalse = new Regex("false|", RegexOptions.IgnoreCase);
public Regex MainTitles = new Regex("Logging & Displaying|Char Builds|GAME DELAYS|POTION & CHICKEN SETTINGS|MERC POTION & RESURRECT SETTINGS|BOT ACTIONS & BEHAVIORS|IN TOWN SETTINGS|" +
"CUBE SETTINGS|GAME CONFIGURATION & OPTIONS|GRUSH SETTINGS|DIA CLONE HUNT SETTINGS|IMMUNITY SETTINGS|AURA SKIP FUNCTIONS|INVENTORY LOCK|BAAL SETTINGS|" +
"BAAL MESSAGES & SETTINGS|WAVE-BASED AURA CHANGES|ADVANCED BAAL OPTIONS|DON'T MODIFY UNLESS YOU KNOW WHAT TO DO|PRECAST LOCATION|THRONE TELEPORT LOCATION|" +
"THRONE TOWN PORTAL LOCATION|DIABLO SETTINGS|CHAOS-DIABLO-GRUSH MESSAGES|SEAL ORDER - TP LOCATION|MEPHISTO SETTINGS|SHRINE PICKING|PICKIT REVOLUTION|" +
"Pickit Settings|Pickit Version|", RegexOptions.IgnoreCase);
// Potions
public Regex PRed = new Regex("PotionType.Red|", RegexOptions.IgnoreCase);
public Regex PBlue = new Regex("PotionType.Blue|", RegexOptions.IgnoreCase);
public Regex PPurple = new Regex("PotionType.Purple|", RegexOptions.IgnoreCase);
The "Colourize function" that makes them all work:
public void Colorize()
{
MainText.BackColor = Color.White;
int selPos = MainText.SelectionStart;
// Colours
# region Basic "Settings" Syntax Highlighting
foreach (Match keyWordMatch in SettingsAndComments.Matches(MainText.Text))
{
MainText.Select(keyWordMatch.Index, keyWordMatch.Length);
MainText.SelectionColor = Color.MidnightBlue;
MainText.SelectionStart = selPos;
}
foreach (Match keyWordMatch in Numbers.Matches(MainText.Text))
{
MainText.Select(keyWordMatch.Index, keyWordMatch.Length);
MainText.SelectionColor = Color.DeepPink;
MainText.SelectionStart = selPos;
}
foreach (Match keyWordMatch in TTrue.Matches(MainText.Text))
{
MainText.Select(keyWordMatch.Index, keyWordMatch.Length);
MainText.SelectionColor = Color.Green;
MainText.SelectionStart = selPos;
}
foreach (Match keyWordMatch in FFalse.Matches(MainText.Text))
{
MainText.Select(keyWordMatch.Index, keyWordMatch.Length);
MainText.SelectionColor = Color.Red;
MainText.SelectionStart = selPos;
}
foreach (Match keyWordMatch in MainTitles.Matches(MainText.Text))
{
MainText.Select(keyWordMatch.Index, keyWordMatch.Length);
MainText.SelectionColor = Color.DarkOrange;
MainText.SelectionStart = selPos;
}
#region Potions
foreach (Match keyWordMatch in PPurple.Matches(MainText.Text))
{
MainText.Select(keyWordMatch.Index, keyWordMatch.Length);
MainText.SelectionColor = Color.DarkViolet;
MainText.SelectionStart = selPos;
}
foreach (Match keyWordMatch in PRed.Matches(MainText.Text))
{
MainText.Select(keyWordMatch.Index, keyWordMatch.Length);
MainText.SelectionColor = Color.DarkRed;
MainText.SelectionStart = selPos;
}
foreach (Match keyWordMatch in PBlue.Matches(MainText.Text))
{
MainText.Select(keyWordMatch.Index, keyWordMatch.Length);
MainText.SelectionColor = Color.DarkBlue;
MainText.SelectionStart = selPos;
}
#endregion
#endregion
MainText.SelectionColor = Color.Black;
}
And the Private void that brings everything together.
private void MainText_TextChanged(object sender, EventArgs e)
{
Colorize();
}
Does anyone know how I can speed this up? or a BETTER alternitive?
When it runs, (IE if I load a document into here) it freezes my program, and takes forever checking them.
I would like this too not take 10 minutes to open a 63 kb lua file.
:P
Thanks!
Edit: Sorry, forgot to mention it is in a Rich Text Box!