1
0
mirror of https://github.com/ret-Phoenix/SmartConfigurator.git synced 2026-06-11 22:31:02 +02:00
Files
2019-10-03 11:56:21 +03:00

154 lines
6.3 KiB
Plaintext

#Использовать logging
Перем Обмен;
Перем _Лог;
////////////////////////////////////////////////////////////
// Вспомогательные методы
Функция ПолучитьТекст()
Возврат Обмен.ПолучитьВыделенныйТекст();
КонецФункции // ПолучитьТекст()
Процедура УстановитьТекст(Результат)
Обмен.УстановитьТекстВВыделение(Результат);
КонецПроцедуры
Функция УбратьПробелыСправа(Данные)
Регулярка = Новый РегулярноеВыражение("[ \t]+\r*\n");
Возврат Регулярка.Заменить(Данные, Символы.ПС);
КонецФункции
Функция ВыравнитьПоЗначению(ЗначениеВыравнивания)
Данные = "";
МаксПозицияЗначенияВыравнивания = 0;
МассивСтрок = Новый Массив;
Текст = ПолучитьТекст();
СтрокиМодуля = СтрРазделить(Текст, Символы.ПС, Истина);
// Получаем макс.позицию значения выравнивания
Для Каждого Стр Из СтрокиМодуля Цикл
Если Лев(СокрЛП(Стр), 2) = "//" Тогда
МассивСтрок.Добавить(Стр);
Иначе
ТекПозиция = Найти(Стр, ЗначениеВыравнивания);
Подстрока = Лев(Стр, ТекПозиция - 1);
ТекПозиция = СтрДлина(СокрП(Подстрока));
МаксПозицияЗначенияВыравнивания = Макс(МаксПозицияЗначенияВыравнивания, ТекПозиция);
МассивСтрок.Добавить(Стр);
КонецЕсли;
КонецЦикла;
// выравниваем по значению
Для Каждого Стр Из МассивСтрок Цикл
Если СокрЛП(Стр) = "" Тогда
Данные = Данные + ?(Данные = "", "", Символы.ПС);
Продолжить;
КонецЕсли;
ТекПозиция = Найти(Стр, ЗначениеВыравнивания);
Если ТекПозиция > 0 Тогда
ПодстрокаЛевая = Лев(Стр, ТекПозиция - 1);
ПодстрокаЛевая = ДополнитьСтрокуПробелами(СокрП(ПодстрокаЛевая), МаксПозицияЗначенияВыравнивания);
ПодстрокаПравая = СокрЛП(Сред(Стр, ТекПозиция + 1));
НоваяСтр = ПодстрокаЛевая + " " + ЗначениеВыравнивания + " " + ПодстрокаПравая;
Данные = Данные + ?(Данные = "", "", Символы.ПС) + НоваяСтр;
Иначе
Данные = Данные + ?(Данные = "", "", Символы.ПС) + Стр;
КонецЕсли;
КонецЦикла;
Возврат (УбратьПробелыСправа(Данные));
КонецФункции
Функция ДополнитьСтрокуПробелами(Приемник, НужнаяДлинаСтроки)
ДлинаСтроки = СтрДлина(Приемник);
Разница = НужнаяДлинаСтроки - ДлинаСтроки - 1;
Пробелы = "";
Для А = 0 По Разница Цикл
Пробелы = Пробелы + " ";
КонецЦикла;
НоваяСтрока = Приемник + Пробелы;
Возврат НоваяСтрока;
КонецФункции
// Вспомогательные методы
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
// Обработчики данных
Процедура УбратьЛишниеПробелыСправа() Экспорт
Данные = ПолучитьТекст();
УстановитьТекст(УбратьПробелыСправа(Данные));
КонецПроцедуры
Процедура ВыравнитьПоВведеномуСимволу() Экспорт
Стр = Обмен.ВвестиЗначение("");
Если СокрЛП(Стр) = "" Тогда
Возврат;
КонецЕсли;
УстановитьТекст(ВыравнитьПоЗначению(Стр));
КонецПроцедуры
Процедура ВыравнитьПоЗапятой() Экспорт
УстановитьТекст(ВыравнитьПоЗначению(","));
КонецПроцедуры
Процедура ВыравнитьПоРавно() Экспорт
УстановитьТекст(ВыравнитьПоЗначению("="));
КонецПроцедуры
// Обработчики данных
////////////////////////////////////////////////////////////
Процедура ПриСозданииОбъекта()
Обмен = ЗагрузитьСценарий("core/Обмен.os");
_Лог = Новый ЛогированиеВФайл("tmp/log.log");
Параметры = АргументыКоманднойСтроки;
Если Параметры.Количество() > 0 Тогда
ВариантОбработки = Параметры[0];
Если ВариантОбработки = "align-equal-sign" Тогда
ВыравнитьПоРавно();
ИначеЕсли ВариантОбработки = "align-first-comma" Тогда
ВыравнитьПоЗапятой();
ИначеЕсли ВариантОбработки = "align-user-symbol" Тогда
ВыравнитьПоВведеномуСимволу();
ИначеЕсли ВариантОбработки = "rtrim" Тогда
УбратьЛишниеПробелыСправа();
Иначе
Обмен.Предупреждение("Работа скрипта прекращена. Не определено действие: " + ВариантОбработки);
КонецЕсли;
КонецЕсли;
КонецПроцедуры