Мне нужно создать текстовый редактор, для которого пользователи могут писать плагины.Я буду использовать привязываемый richtextbox, где я могу связать документ.
Эти плагины могут изменять текст редактора, выделяя, изменяя слова и т. Д.
Редактору также необходимо обрабатывать несколько плагинов одновременно, например, вы вставляете текст и первый плагинслова выделяются жирным шрифтом, а второе - синим.
Теперь моя идея состояла в том, чтобы передать методу плагина (производному от интерфейса плагина) строку в форме документа потока в поле расширенного текста.Затем пользователь может искать слова в тексте и делать свое дело, например, добавляя прогон с определенным цветом вокруг слова.
// <Run FontWeight=\"Bold\" Foreground=\"#FF0000FF\"> WordToHighlight </Run>
Метод возвращает строку или документ потока.
Проблема: если несколько плагинов работают и хотят отредактировать одно и то же слово, уже будет прогон вокруг конкретного слова, но пользователь, пишущий плагин, конечно, не будет знать об этом.
Я пытался исследовать, но я еще не нашел что-то существенное.
Моя общая идея полностью неверна или есть способ решить проблему?
Буду признателен за любую помощь.
public interface IPluginInterface
{
// The input text would be the flowdocument of the richtextbox
// The returned string would be the edited flowdocument
string AlterText(string text);
}
public class HighlightPlugin : IPluginInterface
{
// The input text would be the flowdocument of the richtextbox
// The returned string would be the edited flowdocument
string AlterText(string text)
{
// Code that alters the text
}
}