using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Resources;
using System.Runtime.CompilerServices;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
using Avalonia.Media;
using Avalonia.Media.Imaging;
using AvaloniaEdit;
using AvaloniaEdit.CodeCompletion;
using AvaloniaEdit.Document;
using AvaloniaEdit.Editing;
using AvaloniaEdit.Folding;
using AvaloniaEdit.Indentation.CSharp;
using AvaloniaEdit.Rendering;
using AvaloniaEdit.TextMate;
using TextMateSharp.Grammars;
namespace ColorMC.Gui.UI.Windows;
public partial class Window1 : Window
{
private RegistryOptions _registryOptions;
private readonly TextMate.Installation _textMateInstallation;
private int _currentTheme = (int)ThemeName.DarkPlus;
public Window1()
{
InitializeComponent();
Editor.Background = Brushes.Transparent;
Editor.ShowLineNumbers = true;
Editor.ContextMenu = new ContextMenu
{
Items = new List<MenuItem>
{
new MenuItem { Header = "Copy", InputGesture = new KeyGesture(Key.C, KeyModifiers.Control) },
new MenuItem { Header = "Paste", InputGesture = new KeyGesture(Key.V, KeyModifiers.Control) },
new MenuItem { Header = "Cut", InputGesture = new KeyGesture(Key.X, KeyModifiers.Control) }
}
};
Editor.TextArea.Background = this.Background;
Editor.Options.ShowBoxForControlCharacters = true;
Editor.TextArea.IndentationStrategy = new CSharpIndentationStrategy(Editor.Options);
Editor.TextArea.RightClickMovesCaret = true;
_registryOptions = new RegistryOptions(
(ThemeName)_currentTheme);
_textMateInstallation = Editor.InstallTextMate(_registryOptions);
TextMateSharp.Grammars.Language csharpLanguage = _registryOptions.GetLanguageByExtension(".cs");
string scopeName = _registryOptions.GetScopeByLanguageId(csharpLanguage.Id);
Editor.Document = new TextDocument(
"// AvaloniaEdit supports displaying control chars: \a or \b or \v" + Environment.NewLine);
_textMateInstallation.SetGrammar(_registryOptions.GetScopeByLanguageId(csharpLanguage.Id));
}
}
code: