Копаем подсветку синтаксиса

Операционная система, написанная на языке Оберон и проект её перевода на русский язык. Только технические вопросы.
Ответить
БудДен
Сообщения: 940
Зарегистрирован: 07.10.18 14:01

Копаем подсветку синтаксиса

Сообщение БудДен » 23.04.20 02:55

В ней не работает "Тест" - от буквы Т становится её плохо. Так где же найти тварь и полечить её?
Пока что ясно, что раскраска называется "Oberon", а где этот оберон? Нашёл, что WMTextView ссылается на SyntaxHighlighter, а в нём слово "Oberon" упоминается. Ура! Класс, к-рый за это отвечает, вроде называется SyntaxHighlighter.Highlighter . Теперь должно быть легко.

БудДен
Сообщения: 940
Зарегистрирован: 07.10.18 14:01

Re: Копаем подсветку синтаксиса

Сообщение БудДен » 23.04.20 03:00

Ого! Но потомков у класса нет. Я в шоке.

GetHighlighter(higlighterName)...

Парсится файл SyntaxHighlighter.XML... огого... И в нём-то есть Oberon и даже oberon.

Вот мы и нашли где оно описано... Не предвещает хорошего.

БудДен
Сообщения: 940
Зарегистрирован: 07.10.18 14:01

Re: Копаем подсветку синтаксиса

Сообщение БудДен » 23.04.20 03:02

Они даже его периодически поддерживают.

БудДен
Сообщения: 940
Зарегистрирован: 07.10.18 14:01

Re: Копаем подсветку синтаксиса

Сообщение БудДен » 23.04.20 03:03

И классно, что у мя в голове было запомнено, что особые строковые литералы были добавлены в 2013 году - так я и найду, где они менялись. Ура.

БудДен
Сообщения: 940
Зарегистрирован: 07.10.18 14:01

Re: Копаем подсветку синтаксиса

Сообщение БудДен » 23.04.20 03:09

Код: Выделить всё

				<Region
					style="String" styleOpen="Bold" styleClose="Bold"
					open='\"' close='"\' nesting="FALSE" multiline="TRUE"
				/>
Избирательно для поиска слово multiline и так мы приходим к

Код: Выделить всё

		highlighter.AddRegion(open, close, nesting, multiline, styleOpen, styleClose, styleContent);
Но это только парсер. А дальше что? Какой-то RegionDescriptor. Блин, парсер-то где?

БудДен
Сообщения: 940
Зарегистрирован: 07.10.18 14:01

Re: Копаем подсветку синтаксиса

Сообщение БудДен » 23.04.20 03:11

О, случайно попался

MatchToken - и сразу же

Код: Выделить всё

token.value[lookaheadIdx] := CHR(char32);
Интересное кино

БудДен
Сообщения: 940
Зарегистрирован: 07.10.18 14:01

Re: Копаем подсветку синтаксиса

Сообщение БудДен » 23.04.20 03:28

Но ведь ORD(CHR(1050)) = 26!

Ай, как не стыдно. Завожу багу о том, чтобы при таких вещах происходило исключение.

В общем, дошёл до операции сравнения, когда один аргумент - это строка из CHAR-ов, а другой - массив из UCS32.Char - это, конечно, надо делать уже не ночью.


БудДен
Сообщения: 940
Зарегистрирован: 07.10.18 14:01

Re: Копаем подсветку синтаксиса

Сообщение БудДен » 25.05.20 18:16

Есть команда SyntaxHighlighter.Highlight. Я подправил её, чтобы она могла преобразовывать файл в файл и так раскрасчик слегка отвязывается от IDE. Перегрузить конфигурацию можно с помощью SyntaxHighlighter.Open.

Ответить