Форматированная строка. Форматирует строку в соответствии с заданным шаблоном.
// Форматирует строку в соответствии с заданным шаблоном.
// Возможные значения тегов в шаблоне:
// - <b> Строка </b> - выделяет строку жирным шрифтом.
// - <a href = "Ссылка"> Строка </a> - добавляет гиперссылку.
// Например, "Минимальная версия программы <b>1.1</b>. <a href = "Обновление">Обновите</a> программу.".
//
// Параметры:
// СтрокаСТегами - Строка - строка, содержащая теги форматирования.
//
// Возвращаемое значение:
// ФорматированнаяСтрока - преобразованная строка.
//
Функция ФорматированнаяСтрока(Знач СтрокаСТегами) Экспорт
СтрокиСВыделением = Новый СписокЗначений;
Пока СтрНайти(СтрокаСТегами, "<b>") <> 0 Цикл
НачалоВыделения = СтрНайти(СтрокаСТегами, "<b>");
СтрокаДоОткрывающегоТега = Лев(СтрокаСТегами, НачалоВыделения - 1);
СтрокиСВыделением.Добавить(СтрокаДоОткрывающегоТега);
СтрокаПослеОткрывающегоТега = Сред(СтрокаСТегами, НачалоВыделения + 3);
КонецВыделения = СтрНайти(СтрокаПослеОткрывающегоТега, "</b>");
ВыделенныйФрагмент = Лев(СтрокаПослеОткрывающегоТега, КонецВыделения - 1);
СтрокиСВыделением.Добавить(ВыделенныйФрагмент,, Истина);
СтрокаПослеВыделения = Сред(СтрокаПослеОткрывающегоТега, КонецВыделения + 4);
СтрокаСТегами = СтрокаПослеВыделения;
КонецЦикла;
СтрокиСВыделением.Добавить(СтрокаСТегами);
СтрокиСоСсылками = Новый СписокЗначений;
Для Каждого ЧастьСтроки Из СтрокиСВыделением Цикл
СтрокаСТегами = ЧастьСтроки.Значение;
Если ЧастьСтроки.Пометка Тогда
СтрокиСоСсылками.Добавить(СтрокаСТегами,, Истина);
Продолжить;
КонецЕсли;
НачалоВыделения = СтрНайти(СтрокаСТегами, "<a href = ");
Пока НачалоВыделения <> 0 Цикл
СтрокаДоОткрывающегоТега = Лев(СтрокаСТегами, НачалоВыделения - 1);
СтрокиСоСсылками.Добавить(СтрокаДоОткрывающегоТега, );
СтрокаПослеОткрывающегоТега = Сред(СтрокаСТегами, НачалоВыделения + 9);
ЗакрывающийТег = СтрНайти(СтрокаПослеОткрывающегоТега, ">");
Ссылка = СокрЛП(Лев(СтрокаПослеОткрывающегоТега, ЗакрывающийТег - 2));
Если СтрНачинаетсяС(Ссылка, """") Тогда
Ссылка = Сред(Ссылка, 2, СтрДлина(Ссылка) - 1);
КонецЕсли;
Если СтрЗаканчиваетсяНа(Ссылка, """") Тогда
Ссылка = Сред(Ссылка, 1, СтрДлина(Ссылка) - 1);
КонецЕсли;
СтрокаПослеСсылки = Сред(СтрокаПослеОткрывающегоТега, ЗакрывающийТег + 1);
КонецВыделения = СтрНайти(СтрокаПослеСсылки, "</a>");
ТекстСсылки = Лев(СтрокаПослеСсылки, КонецВыделения - 1);
СтрокиСоСсылками.Добавить(ТекстСсылки, Ссылка);
СтрокаПослеВыделения = Сред(СтрокаПослеСсылки, КонецВыделения + 4);
СтрокаСТегами = СтрокаПослеВыделения;
НачалоВыделения = СтрНайти(СтрокаСТегами, "<a href = ");
КонецЦикла;
СтрокиСоСсылками.Добавить(СтрокаСТегами);
КонецЦикла;
МассивСтроки = Новый Массив;
Для Каждого ЧастьСтроки Из СтрокиСоСсылками Цикл
Если ЧастьСтроки.Пометка Тогда
МассивСтроки.Добавить(Новый ФорматированнаяСтрока(ЧастьСтроки.Значение, Новый Шрифт(,,Истина)));
ИначеЕсли Не ПустаяСтрока(ЧастьСтроки.Представление) Тогда
МассивСтроки.Добавить(Новый ФорматированнаяСтрока(ЧастьСтроки.Значение,,,, ЧастьСтроки.Представление));
Иначе
МассивСтроки.Добавить(ЧастьСтроки.Значение);
КонецЕсли;
КонецЦикла;
Возврат Новый ФорматированнаяСтрока(МассивСтроки);
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ФорматированнаяСтрокаИзHTML (БСП)
ФорматированныйЗаголовок (БСП)
Пример раскраски текста форматированной строки
ТекстФорматированногоЗаголовка (БСП)
НавигационнаяСсылкаОбработкиРезервногоКопирования (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)