1С 8.3 Раскрасить код в синтаксис 1С - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Раскрасить код в синтаксис 1С

Данные > Примеры кода 1С > 1С 8.3 Строка, текст, буквы
Перейти в раздел примеры кода 1С 8.3:
Раскраска строк кода в синтаксис 1С 8.3:
Процедура ДобавитьСлово(Код, Слово, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, ТипСлова=Неопределено)
   Если ПустаяСтрока(Слово) Тогда
       Код = Код + СтрЗаменить(СтрЗаменить(СтрЗаменить(Слово, " ", " "), Символы.НПП, " "), Символы.Таб, "    ");
       Возврат;
   ИначеЕсли ТипСлова=Неопределено Тогда
       нсл = НРег(СокрП(Слово));
       Если Найти(СписокКлючевыхСлов, нсл)>0 Тогда
           ТипСлова = "<keywrd>";
       ИначеЕсли Слово = "0" или мОписаниеТипаЧисло.ПривестиЗначение(Слово)<>0 Тогда
           ТипСлова = "<num>";
       Иначе
           ТипСлова = "<text>";
           ЭтоЧисло = Истина;
           Для сч=1 по СтрДлина(нсл) Цикл
               ТекСимв=Сред(нсл, сч, 1);
               Если Найти(ДопустимыеЗнаки, ТекСимв)=0 Тогда
                   ТипСлова="<unwn>";
                   Прервать;
               ИначеЕсли ТекСимв<>"0" Тогда
                   ЭтоЧисло = Ложь;
               КонецЕсли;
           КонецЦикла;
           Если ЭтоЧисло Тогда
               ТипСлова = "<num>";
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
   Код = Код + ?(ТекТипСлова=ТипСлова, "", ТипСлова) + СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Слово, "<", "<"), ">", ">"), " ", " "), Символы.НПП, " "), Символы.Таб, "    ");
   ТекТипСлова = ТипСлова;
   Слово = "";
КонецПроцедуры

//Реализует функционал "Оформить фрагмент кода"
Функция РаскраситьКод1С8(ТекстКод) Экспорт
   мОписаниеТипаЧисло = Новый ОписаниеТипов("Число");
   Таб = Символы.Таб;
   НПП = Символы.НПП;
   ДопустимыеЗнаки = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя0123456789abcdefghijklmnop­qrstyvwxyz_";
   СписокКлючевыхСлов = "асинх|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>");    
   Ответ = СтрЗаменить(Ответ, Символы.Таб, "    ");
   Возврат Ответ;
КонецФункции
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 05.02.2022
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому