¨ Для структур нельзя задавать default-конструктор. Он создается компилятором и обнуляет все поля.
¨ Нам необходимо создать конструкторы с параметрами, так как данные помечены спецификатором readonly.
Согласно договоренности (convention) в сообществе программистов все public-поля должны начинаться с прописных (больших) букв, а все private- и protected-поля — со строчных (маленьких) букв. Имена классов и методов должны начинаться с прописных букв.
Имея структуры, можно создать вспомогательный класс (назовем его Highlighter), который содержит:
¨ Коллекцию символов, служащих разделителями лексем, например: "/ .,()[]{}<>\r\n':;?\"\t".
¨ Список ключевых слов, например: List<Keyword> keywords;, список ограничителей блоков по типу комментариев, например: List<Comment> comments;. Если вы выбрали затратный вариант, то введите в состав класса: List<ColorWord> words; вместе с List<PairedTags> pairedTags; и т. д. Еще раз повторю, что здесь вы можете проявить свою фантазию и как поступить — решать вам.
¨ Множество свойств, защищающих поля класса. Я использовал лишь 3 свойства: Separators, Keywords и Comments. Все они — однорукие бандиты (имеют только get-аксессор, иначе говоря, все свойства — ReadOnly).
¨ Множество методов, позволяющих управлять указанными коллекциями, например: AddKeyword, AddSeparator, AddSeparators, AddComment, DeleteKeyword, UpdateSeparators, Clear.
¨ Метод UpdateSeparators понадобился для того, чтобы при добавлении комментария начальные символы строк OpenTag и CloseTag попали в множество separators — разделителей лексем. Теги комментариев могут состоять из нескольких символов, например, из двух: /*.
¨ Вы можете использовать в своем проекте элемент управления типа PropertyGrid (окно Properties дизайнера студии является примером использования этого элемента). С его помощью пользователь может изменять настройки компонента прямо во время выполнения программы.
Ссылку на объект класса Highlighter удобно создать и хранить в классе SyntaxBox. Она поможет разработчику клиентского EXE-приложения управлять компонентом SyntaxBox. Логику управления объектом класса Highlighter поясню на примерах. В одном из методов класса MainForm, например, можно использовать такой код.
box.Highlighter.AddKeyword (new Keyword ("Hi, honey!"));
Здесь box — это объект класса SyntaxBox, который был положен на форму в режиме дизайна. Текст "Hi, honey!" не может быть цветным, так как он состоит из нескольких лексем, разделенных знаками препинания. Знаки препинания — это символы, которые входят в коллекцию separators. Цветными могут быть лишь отдельные лексемы — слова, которые входят в коллекцию keywords (или другие созданные вами коллекции). Еще пример:
foreach (string s in keywords)
box.Highlighter.AddKeyword (new Keyword (s, Color.Blue));
Здесь keywords — это массив ключевых слов, который выбирается в зависимости от характера документа (программа или деловое письмо). Например для программы на языке C#:
string[] keywords = {
"abstract", "as", "base", "bool", "break", "byte", "case", "catch",
"char", "checked", . . .
Для документа типа "Деловое письмо" этот массив может иметь другой вид:
string[] keywords = {
"according to", "address", "adjust", "after a", "allow", "a number of",
"application", "approximately", "approved", . . .
Вот пример инициализации объектов классов ColorWord, AutoWord и т. д. (в затратном варианте):
foreach (string s in keywords)
box.Highlighter.AddAutoWord (new AutoWord (s, Color.Blue, true, true));
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.