Для тех, кому лень качать - делюсь своей реализацией функции раскраски кода
//Вспомогательная, используется в "РаскраситьКод1С8"
Процедура ДобавитьСлово(Код, Слово, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, ТипСлова=Неопределено)
Если ПустаяСтрока(Слово) Тогда
Код = Код + СтрЗаменить(СтрЗаменить(СтрЗаменить(Слово, " ", " "), Символы.НПП, " "), Символы.Таб, " ");
Возврат;
ИначеЕсли ТипСлова=Неопределено Тогда
нсл = НРег(СокрП(Слово));
Если Найти(СписокКлючевыхСлов, нсл)>0 Тогда
ТипСлова = "<keywrd>";
ИначеЕсли Слово = "0" или мОписаниеТипаЧисло.ПривестиЗначение(Слово)<>0 Тогда
ТипСлова = "<num>";
Иначе
ТипСлова = "<text>";
ЭтоЧисло = Истина;
Для сч=1 по СтрДлина(нсл) Цикл
ТекСимв=Сред(нсл, сч, 1);
Если Найти(ДопустимыеЗнаки, ТекСимв)=0 Тогда
ТипСлова="<unwn>";
Прервать;
ИначеЕсли ТекСимв<>"0" Тогда
ЭтоЧисло = Ложь;
КонецЕсли;
КонецЦикла;
Если ЭтоЧисло Тогда
ТипСлова = "<num>";
КонецЕсли;
КонецЕсли;
КонецЕсли;
Код = Код + ?(ТекТипСлова=ТипСлова, "", ТипСлова) + СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Слово, "<", "<"), ">", ">"), " ", " "), Символы.НПП, " "), Символы.Таб, " ");
ТекТипСлова = ТипСлова;
Слово = "";
КонецПроцедуры
//Реализует функционал "Оформить фрагмент кода"
Функция РаскраситьКод1С8(ТекстКод) Экспорт
мОписаниеТипаЧисло = Новый ОписаниеТипов("Число");
Таб = Символы.Таб;
НПП = Символы.НПП;
ДопустимыеЗнаки = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя0123456789abcdefghijklmnopqrstyvwxyz_";
СписокКлючевыхСлов = "асинх|async|ждать|await|if|если|then|тогда|elsif|иначеесли|else|иначе|endif|конецесли|do|цикл|for|для|to|по|each|каждого|in|из|while|пока|enddo|конеццикла|procedure|процедура|endprocedure|конецпроцедуры|function|функция|endfunction|конецфункции|var|перем|export|экспорт|goto|перейти|and|и|or|или|not|не|val|знач|break|прервать|continue|продолжить|return|возврат|try|попытка|except|исключение|endtry|конецпопытки|raise|вызватьисключение|false|ложь|true|истина|undefined|неопределено|null|new|новый|execute|выполнить|";
Ответ = "<span style=""text-align: left; font-family: courier new,courier; color: blue; font-size: 10pt; white-space: pre; display: inline-block; ""><font>";
ТекТипСлова = "<text>";
Для нс=1 По СтрЧислоСтрок(ТекстКод) Цикл
ТекСтрока = СокрП(СтрПолучитьСтроку(ТекстКод, нс));
дл = СтрДлина(ТекСтрока);
сч = 0;
ТекСлово = "";
КодНеНачался = Истина;
Пока сч<дл Цикл
сч = сч + 1;
ТекущийСимвол = Сред(ТекСтрока, сч, 1);
Если КодНеНачался Тогда
Если ТекущийСимвол=" " Или ТекущийСимвол=Таб Или ТекущийСимвол=НПП Тогда
//ТекущийСимвол = ?(ТекущийСимвол=" " или ТекущийСимвол=НПП, " ", " ");
Ответ = Ответ + ТекущийСимвол;
Продолжить;
ИначеЕсли ТекущийСимвол="#" или ТекущийСимвол="&" Тогда
ТекСлово = "";
ДобавитьСлово(Ответ, Сред(ТекСтрока, сч), ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, "<dir>");
Прервать;
КонецЕсли;
КонецЕсли;
КодНеНачался = Ложь;
Если ТекущийСимвол=" " Или ТекущийСимвол=Таб Или ТекущийСимвол=НПП Тогда
Если КодНеНачался Тогда
Ответ = Ответ + ТекущийСимвол;
Продолжить;
КонецЕсли;
//ТекущийСимвол = ?(ТекущийСимвол=" " или ТекущийСимвол=НПП, " ", " ");
ДобавитьСлово(Ответ, ТекСлово+ТекущийСимвол, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло);
ТекСлово = "";
Продолжить;
ИначеЕсли Найти("():;.,=+-*<>?[]%/", ТекущийСимвол) > 0 Тогда
ДобавитьСлово(Ответ, ТекСлово, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло);
ТекСлово = "";
//Проверяем на комментарий
Если ТекущийСимвол="/" и Сред(ТекСтрока, сч+1, 1)="/" Тогда
ТекСлово = "";
ДобавитьСлово(Ответ, СокрП(Сред(ТекСтрока, сч)), ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, "<cmnt>");
Прервать;
КонецЕсли;
ДобавитьСлово(Ответ, ТекущийСимвол, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, "<symb>");
Продолжить;
ИначеЕсли ТекущийСимвол="""" или ТекущийСимвол="|" Тогда
ДобавитьСлово(Ответ, ТекСлово, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло);
// найти закрывающую кавычку
нач = сч;
сч = сч + 1;
СледующийСимвол = Сред(ТекСтрока, сч, 1);
Пока сч<дл Цикл
сч = сч + 1;
ТекущийСимвол = СледующийСимвол;
СледующийСимвол = Сред(ТекСтрока, сч, 1);
Если ТекущийСимвол="""" Тогда
Если СледующийСимвол="""" Тогда
сч = сч + 1;
СледующийСимвол = Сред(ТекСтрока, сч, 1);
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ТекСлово = "";
ДобавитьСлово(Ответ, Сред(ТекСтрока, нач, сч-нач), ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, "<str>");
сч = сч - 1;
Продолжить;
ИначеЕсли ТекущийСимвол="'" Тогда
нач = сч;
сч = сч + 1;
СледующийСимвол = Сред(ТекСтрока, сч, 1);
Пока сч<дл Цикл
сч = сч + 1;
ТекущийСимвол = СледующийСимвол;
СледующийСимвол = Сред(ТекСтрока, сч, 1);
Если ТекущийСимвол="'" Тогда
Если СледующийСимвол="'" Тогда
сч = сч + 1;
СледующийСимвол = Сред(ТекСтрока, сч, 1);
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ТекСлово = "";
ДобавитьСлово(Ответ, Сред(ТекСтрока, нач, сч-нач), ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, "<str>");
сч = сч - 1;
Продолжить;
КонецЕсли;
ТекСлово = ТекСлово + ТекущийСимвол;
КонецЦикла;
Если Не ПустаяСтрока(ТекСлово) Тогда
ДобавитьСлово(Ответ,СокрП(ТекСлово), ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло);
КонецЕсли;
Ответ = Ответ + "";
КонецЦикла;
Ответ = Ответ + Символы.ПС+"</font></span>";
Ответ = СтрЗаменить(Ответ, "<keywrd>", "</font><font color=red>");
Ответ = СтрЗаменить(Ответ, "<text>", "</font><font color=blue>");
Ответ = СтрЗаменить(Ответ, "<str>", "</font><font color=black>");
Ответ = СтрЗаменить(Ответ, "<num>", "</font><font color=black>");
Ответ = СтрЗаменить(Ответ, "<unwn>", "</font><font color=black>");
Ответ = СтрЗаменить(Ответ, "<symb>", "</font><font color=red>");
Ответ = СтрЗаменить(Ответ, "<cmnt>", "</font><font color=green>");
Ответ = СтрЗаменить(Ответ, "<dir>", "</font><font color=brown>");
Ответ = СтрЗаменить(Ответ, Символы.Таб, " ");
Возврат Ответ;
КонецФункции
Показать