private void RenderCode() { if (_rootElement == null || string.IsNullOrEmpty(Code)) { return; } try { IGrammar grammar = null; switch (HighlightLanguage) { case HighlightLanguage.Python: grammar = new PythonGrammar(); break; case HighlightLanguage.JavaScript: grammar = new JavascriptGrammar(); break; case HighlightLanguage.CSharp: grammar = new CSharpGrammar(); break; case HighlightLanguage.XML: grammar = new XMLGrammar(); break; case HighlightLanguage.JSON: grammar = new JSONGrammar(); break; case HighlightLanguage.SQL: grammar = new SQLGrammar(); break; case HighlightLanguage.PHP: grammar = new PHPGrammar(); break; case HighlightLanguage.Ruby: grammar = new RubyGrammar(); break; case HighlightLanguage.CPlusPlus: grammar = new CPlusPlusGrammar(); break; case HighlightLanguage.CSS: grammar = new CSSGrammar(); break; case HighlightLanguage.Java: grammar = new JavaGrammar(); break; default: break; } var textBlock = new RichTextBlock(); var paragraph = new Paragraph() { FontFamily = new FontFamily("Consolas"), }; if (grammar != null) { Tokenizer lexer = new Tokenizer(grammar); StringBuilder builder = new StringBuilder(); foreach (var token in lexer.Tokenize(Code)) { var brush = BrushForTokenType(token.Type); if (brush != null) { if (builder.Length > 0) { paragraph.Inlines.Add(new Run() { Text = builder.ToString() }); builder.Clear(); } paragraph.Inlines.Add(new Run() { Text = Code.Substring(token.StartIndex, token.Length), Foreground = brush, }); } else { builder.Append(Code.Substring(token.StartIndex, token.Length)); } } if (builder.Length > 0) { paragraph.Inlines.Add(new Run() { Text = builder.ToString() }); builder.Clear(); } } else { var run = new Run() { Text = Code, }; paragraph.Inlines.Add(run); } textBlock.Blocks.Add(paragraph); _rootElement.Child = textBlock; } catch (Exception ex) { _rootElement.Child = new TextBlock() { Text = $"Unable to display this code. The error was: {ex.Message}" }; } }