Раскрашивание кода (реинкарнация обработки с ИТС)

04.02.22

Разработка - Инструментарий разработчика

Обработка для раскраски кода, написанного на встроенном языке 1С:Предприятия, работающая в управляемых формах с возможностью сохранения результата в html.

Скачать файлы

Наименование Файл Версия Размер
Раскрашивание кода (реинкарнация обработки с ИТС):
.epf 11,81Kb
19
.epf 20220207 11,81Kb 19 Скачать

После перехода платформы на движок WebKit стало невозможно использовать стандартную обработку для раскраски кода с ИТС.

Можно, конечно, использовать Консоль кода для управляемых форм, но когда требуется только раскрасить код, это больше похоже на стрельбу из пушки по воробьям 😱

Ни в коем случае не претендую на оригинальность, ведь на Инфостарте великое множество обработок, которые выполняют похожую функцию. Возможно, некоторые из них уже не актуальны, но на всякий случай приведу небольшой список из них:

Мне всего лишь захотелось починить версию обработки от 1С и перенести её на управляемые формы. Ну и куда в наше время без раскраски Асинх/Ждать 😊

 

Раскрашивание

 

Для работы требуется версия платформы не ниже 8.3.14.1565

Тестировалось в следующих условиях:

ОС Windows 10 x64, релизы платформы 8.3.15.1830, 8.3.16.1148, 8.3.18.1747, 8.3.20.1613

Раскраска раскрашивание консоль кода разукрашка

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    122256    673    389    

715

SALE! 25%

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 15300 руб.

06.10.2023    7320    22    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 8000 руб.

10.11.2023    3565    11    1    

34

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2520 руб.

14.01.2013    177770    1074    0    

849

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99364    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18128    6    8    

40

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28114    3    10    

15

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23605    15    15    

32
Отзывы
6. DrAku1a 1679 05.02.22 12:46 Сейчас в теме
Для тех, кому лень качать - делюсь своей реализацией функции раскраски кода
//Вспомогательная, используется в "РаскраситьКод1С8"
Процедура ДобавитьСлово(Код, Слово, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, ТипСлова=Неопределено)
	Если ПустаяСтрока(Слово) Тогда
		Код = Код + СтрЗаменить(СтрЗаменить(СтрЗаменить(Слово, " ", " "), Символы.НПП, " "), Символы.Таб, "    ");
		Возврат;
	ИначеЕсли ТипСлова=Неопределено Тогда
		нсл = НРег(СокрП(Слово));
		Если Найти(СписокКлючевыхСлов, нсл)>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>");	
	Ответ = СтрЗаменить(Ответ, Символы.Таб, "    ");
	Возврат Ответ;
КонецФункции
Показать
damdam; semagin@gmail.com; Merkalov; Totoro; Jeka44; cosmo2004; Batman; fancy; mrChOP93; pavlov_dv; starik-2005; ubnkfl; salexdv; +13 Ответить
19. DrAku1a 1679 07.02.22 14:58 Сейчас в теме
(17) В функции "РаскраситьКод1С8"
после
// найти закрывающую кавычку
будет цикл.
После цикла - добавьте
				Если ТекущийСимвол<>"""" или СледующийСимвол="""" Тогда
					сч = сч + 1;
				КонецЕсли;
Прикрепленные файлы:
ТестРаскраскиКода1Сv8.epf
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. jan-pechka 403 04.02.22 12:23 Сейчас в теме
Спасибо огромное!
Obertone; +1 Ответить
2. 1v7 235 04.02.22 17:35 Сейчас в теме
Класс! п.с. - В сети еще есть Онлайн сервис по раскраске кода 1С 8.3
Obertone; +1 Ответить
3. salexdv 2327 04.02.22 18:22 Сейчас в теме
4. 1v7 235 04.02.22 18:23 Сейчас в теме
5. webester 26 05.02.22 03:31 Сейчас в теме
(2) Да сервисов то даже особо не надо) Было дело баловался в детстве с библиотекой highlight.js https://26226.selcdn.ru/paint_1c/export.html но это было давно. Тогда ключевые слова сами добавляли и собирали библиотеку, теперь 1с уже зашит в библиотеку.
6. DrAku1a 1679 05.02.22 12:46 Сейчас в теме
Для тех, кому лень качать - делюсь своей реализацией функции раскраски кода
//Вспомогательная, используется в "РаскраситьКод1С8"
Процедура ДобавитьСлово(Код, Слово, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, ТипСлова=Неопределено)
	Если ПустаяСтрока(Слово) Тогда
		Код = Код + СтрЗаменить(СтрЗаменить(СтрЗаменить(Слово, " ", " "), Символы.НПП, " "), Символы.Таб, "    ");
		Возврат;
	ИначеЕсли ТипСлова=Неопределено Тогда
		нсл = НРег(СокрП(Слово));
		Если Найти(СписокКлючевыхСлов, нсл)>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>");	
	Ответ = СтрЗаменить(Ответ, Символы.Таб, "    ");
	Возврат Ответ;
КонецФункции
Показать
damdam; semagin@gmail.com; Merkalov; Totoro; Jeka44; cosmo2004; Batman; fancy; mrChOP93; pavlov_dv; starik-2005; ubnkfl; salexdv; +13 Ответить
11. salexdv 2327 07.02.22 13:21 Сейчас в теме
(6) Чтобы избежать ошибок при раскраске кода, содержащего html-сущности, которые могут сломать разметку, добавьте в начало функции РаскраситьКод1С8 следующие строки:

ТекстКод= СтрЗаменить(ТекстКод, "<", "& lt;");
ТекстКод= СтрЗаменить(ТекстКод, ">", "& gt;");
damdam; DrAku1a; +2 Ответить
14. salexdv 2327 07.02.22 14:31 Сейчас в теме
(11) Вернее не совсем так. Данную замену надо производить, когда указанные сущности встречаются внутри строки или комментария.
16. DrAku1a 1679 07.02.22 14:45 Сейчас в теме
(11) Не в начале функции "РаскраситьКод1С8", а в функции "ДобавитьСлово"
Это на самом деле было реализовано, просто верстка кода на сайте Инфостарта немного скорректировала некоторые символы.
В итоге получилась вот такая глупость: СтрЗаменить(Слово, "<", "<"), ">", ">"), " ", " ")...
Тестовую обработку прилагаю - она делает нормальный HTML-код.
semagin@gmail.com; salexdv; +2 Ответить
17. salexdv 2327 07.02.22 14:48 Сейчас в теме
(16) Всё равно есть небольшая ошибка.
Прикрепленные файлы:
19. DrAku1a 1679 07.02.22 14:58 Сейчас в теме
(17) В функции "РаскраситьКод1С8"
после
// найти закрывающую кавычку
будет цикл.
После цикла - добавьте
				Если ТекущийСимвол<>"""" или СледующийСимвол="""" Тогда
					сч = сч + 1;
				КонецЕсли;
Прикрепленные файлы:
ТестРаскраскиКода1Сv8.epf
7. 1v7 235 07.02.22 11:21 Сейчас в теме
Протестировал. На типовых кусках кода хорошо работает. Но если в коде есть теги html - всё - баста. Попробуйте вставить код от DrAku1a (сообщение выше).
Прикрепленные файлы:
8. salexdv 2327 07.02.22 11:26 Сейчас в теме
(7) Спасибо! Проверю
damdam; 1v7; +2 Ответить
9. salexdv 2327 07.02.22 13:01 Сейчас в теме
(7) Исправил. Справедливости ради замечу, что сервис, ссылку на который вы давали выше тоже выдает ошибку на данном коде. Вернее отображает раскрашенный код он правильно, а вот код для вставки содержит ошибку. Вся проблема в том, что такие HTML-сущности как <> не преобразуются в соответствующие символы. Алгоритм от DrAku1a (6) имеет ту же проблему.
10. 1v7 235 07.02.22 13:08 Сейчас в теме
(9) О! Теперь работает как надо. Спасибо!
12. 1v7 235 07.02.22 13:43 Сейчас в теме
(9) Теперь не корректно красит где в тексте знаки сравнения (<>). Из-за:
Код = СтрЗаменить(Код, "<", "<");
Код = СтрЗаменить(Код, ">", ">");
Но если закомментировать эти замены, ожидаемо сносит html.
По мне так очень сложно пофиксить данный баг. Одни и те же символы выполняют разные роли. Тут даже логику не применить никак
13. salexdv 2327 07.02.22 13:46 Сейчас в теме
(12) Да. такое действительно может быть. Чуть позже исправлю. Скорее всего надо заменять только парные HTML-сущности
15. salexdv 2327 07.02.22 14:37 Сейчас в теме
18. 1v7 235 07.02.22 14:52 Сейчас в теме
20. user1259182 2 07.02.22 16:08 Сейчас в теме
А в режиме реального времени чтоб красил это же текстовое поле с сохранением позиции курсора можно сделать?
21. salexdv 2327 07.02.22 16:13 Сейчас в теме
(20) Для раскрашивания в режиме реального времени лучше использовать эту разработку или, например, решения на основе библиотек SyntaxHighlighter и highlight.js
22. ctahok2 04.08.22 16:02 Сейчас в теме
Оставьте свое сообщение