} //EditHtmlForm private void InitializeSyntaxHighlighting() { // Match Visual Studio as far as possible _syntaxPatterns = new List <HtmlSyntaxPattern>(); _reOLE = new RichOLE(this.htmlText); // Tags within but excluding angled brackets { var tags = @"[a-zA-Z][a-zA-Z0-9]*"; var withinAngledBrackets = @"(?<=</?)({0})(?=[/?>| ])"; AddSyntaxPattern(string.Format(withinAngledBrackets, tags), Color.DarkRed); } // Attributes within tags { var attribs = @"([a-zA-Z][a-zA-Z0-9]*)"; var withinTags = @"(?<=<[^>]+\s)({0})(?=[\s=>])"; AddSyntaxPattern(string.Format(withinTags, attribs), Color.Red); } // Attribute values { var besideAttrib = @"(?<=<([^>]+))({0})(?=[>/ ])"; // Unquoted values var values = @"(=\s*.+?)"; AddSyntaxPattern(string.Format(besideAttrib, values), Color.Blue); // Double quoted values values = @"\""([^""]|\""\"")*\"""; AddSyntaxPattern(string.Format(besideAttrib, values), Color.Blue); } // Angled brackets AddSyntaxPattern(@"</?", Color.Blue); AddSyntaxPattern(@"/?>", Color.Blue); // Comments kept separate to overwrite any other (custom) formatting _commentsPattern = new HtmlSyntaxPattern(@"(<!--.*?-->)|(<!--.*)", RegexOptions.Singleline, Color.Green, Color.Transparent, FontStyle.Regular); // Change handling _changeTimer = new Timer(); _changeTimer.Tick += new EventHandler(OnChangeTimer); _changeTimer.Interval = 500; _changeTimer.Start(); this.htmlText.TextChanged += new System.EventHandler(this.OnTextChanged); }
private void HightlightPattern(HtmlSyntaxPattern syntax) { MatchCollection matches = syntax.Pattern.Matches(htmlText.Text); foreach (Match match in matches) { htmlText.SelectionStart = match.Index; htmlText.SelectionLength = match.Length; htmlText.SelectionColor = syntax.TextColor; htmlText.SelectionBackColor = syntax.BackColor; if (syntax.Style == FontStyle.Regular) { htmlText.SelectionFont = htmlText.Font; } else { htmlText.SelectionFont = new Font(htmlText.Font, syntax.Style); } } }