mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2024-12-23 02:06:12 +02:00
239 lines
11 KiB
Plaintext
239 lines
11 KiB
Plaintext
|
#Область СлужебныйПрограммныйИнтерфейс
|
||
|
|
||
|
Процедура ОтформатироватьНабор(Знач МассивФайлов) Экспорт
|
||
|
|
||
|
Для Каждого Файл Из МассивФайлов Цикл
|
||
|
ОтформатироватьМодуль(Файл.ПолноеИмя);
|
||
|
КонецЦикла;
|
||
|
|
||
|
КонецПроцедуры
|
||
|
Процедура ОтформатироватьМодуль(Знач ПутьКМодулю) Экспорт
|
||
|
|
||
|
ТекстовыйДокумент = Новый ТекстовыйДокумент();
|
||
|
ТекстовыйДокумент.Прочитать(ПутьКМодулю, "UTF-8");
|
||
|
|
||
|
БлокиКода = РазобратьМодульНаБлоки(ТекстовыйДокумент);
|
||
|
ТекстФайла = ОтформатироватьБлоки(БлокиКода);
|
||
|
|
||
|
ТекстовыйДокумент.УстановитьТекст(ТекстФайла);
|
||
|
ТекстовыйДокумент.Записать(ПутьКМодулю);
|
||
|
|
||
|
КонецПроцедуры
|
||
|
|
||
|
#КонецОбласти
|
||
|
|
||
|
#Область СлужебныеПроцедурыИФункции
|
||
|
|
||
|
Функция РазобратьМодульНаБлоки(Знач ТекстовыйДокумент)
|
||
|
|
||
|
Для Н = 1 По ТекстовыйДокумент.КоличествоСтрок() Цикл
|
||
|
|
||
|
ТекущаяСтрока = ТекстовыйДокумент.ПолучитьСтроку(Н);
|
||
|
|
||
|
Если Не ЗначениеЗаполнено(СокрЛП(ТекущаяСтрока)) Тогда
|
||
|
ТекстовыйДокумент.ЗаменитьСтроку(Н, "⣿");
|
||
|
Иначе
|
||
|
ТекстовыйДокумент.ЗаменитьСтроку(Н, СокрП(ТекущаяСтрока));
|
||
|
КонецЕсли;
|
||
|
|
||
|
КонецЦикла;
|
||
|
|
||
|
ТекстФайла = ТекстовыйДокумент.ПолучитьТекст();
|
||
|
БлокиФайла = СтрРазделить(ТекстФайла, "⣿");
|
||
|
|
||
|
Возврат БлокиФайла;
|
||
|
|
||
|
КонецФункции
|
||
|
|
||
|
Функция ОтформатироватьБлоки(Знач БлокиКода)
|
||
|
|
||
|
Для Н = 0 По БлокиКода.ВГраница() Цикл
|
||
|
|
||
|
МассивСтрокБлока = СтрРазделить(БлокиКода[Н], Символы.ПС);
|
||
|
|
||
|
Если МассивСтрокБлока.Количество() < 2 Тогда
|
||
|
Продолжить;
|
||
|
ИначеЕсли СтрНачинаетсяС(СокрЛП(МассивСтрокБлока[1]), "//") Тогда
|
||
|
Продолжить;
|
||
|
Иначе
|
||
|
ВыровнятьЗнакиРавно(МассивСтрокБлока);
|
||
|
ВыровнятьЗапятые(МассивСтрокБлока);
|
||
|
КонецЕсли;
|
||
|
|
||
|
БлокиКода[Н] = СтрСоединить(МассивСтрокБлока, Символы.ПС);
|
||
|
|
||
|
КонецЦикла;
|
||
|
|
||
|
ТекстФайла = СтрСоединить(БлокиКода, "");
|
||
|
ТекстФайла = СтрЗаменить(ТекстФайла, Символы.Таб, " ");
|
||
|
|
||
|
Возврат ТекстФайла;
|
||
|
|
||
|
КонецФункции
|
||
|
|
||
|
Процедура ВыровнятьЗнакиРавно(МассивСтрокБлока)
|
||
|
|
||
|
СоответствиеРасположений = Новый Соответствие();
|
||
|
МаксимальноеРасположение = 0;
|
||
|
ЧислоЗнаковРавно = 0;
|
||
|
|
||
|
Для Н = 0 По МассивСтрокБлока.ВГраница() Цикл
|
||
|
|
||
|
РасположениеРавно = СтрНайти(МассивСтрокБлока[Н], "=");
|
||
|
|
||
|
Если Не РасположениеРавно = 0 Тогда
|
||
|
|
||
|
МассивЧастей = СтрРазделить(МассивСтрокБлока[Н], "=");
|
||
|
НеПроверять = Ложь;
|
||
|
|
||
|
Для А = 0 По МассивЧастей.ВГраница() - 1 Цикл
|
||
|
|
||
|
ЧислоКавычек = СтрЧислоВхождений(МассивЧастей[А], """");
|
||
|
|
||
|
Если ЧислоКавычек <> 0 И ЧислоКавычек % 2 <> 0 Тогда
|
||
|
СоответствиеРасположений.Вставить(Н, 0);
|
||
|
НеПроверять = Истина;
|
||
|
Прервать;
|
||
|
КонецЕсли;
|
||
|
|
||
|
КонецЦикла;
|
||
|
|
||
|
Если НеПроверять Тогда
|
||
|
Продолжить;
|
||
|
КонецЕсли;
|
||
|
|
||
|
КонецЕсли;
|
||
|
|
||
|
СоответствиеРасположений.Вставить(Н, РасположениеРавно);
|
||
|
МаксимальноеРасположение = ?(РасположениеРавно > МаксимальноеРасположение, РасположениеРавно, МаксимальноеРасположение);
|
||
|
|
||
|
Если Не РасположениеРавно = 0 Тогда
|
||
|
ЧислоЗнаковРавно = ЧислоЗнаковРавно + 1;
|
||
|
КонецЕсли;
|
||
|
|
||
|
КонецЦикла;
|
||
|
|
||
|
Если МаксимальноеРасположение = 0 Или ЧислоЗнаковРавно < 2 Тогда
|
||
|
Возврат;
|
||
|
КонецЕсли;
|
||
|
|
||
|
Для Каждого СтрокаБлока Из СоответствиеРасположений Цикл
|
||
|
|
||
|
РасположениеРавно = СтрокаБлока.Значение;
|
||
|
Индекс = СтрокаБлока.Ключ;
|
||
|
|
||
|
Если РасположениеРавно = 0 Или МаксимальноеРасположение - РасположениеРавно > 12 Тогда
|
||
|
Продолжить;
|
||
|
КонецЕсли;
|
||
|
|
||
|
Для Н = РасположениеРавно По МаксимальноеРасположение - 1 Цикл
|
||
|
МассивСтрокБлока[Индекс] = СтрЗаменить(МассивСтрокБлока[Индекс], "=", " =");
|
||
|
КонецЦикла;
|
||
|
|
||
|
КонецЦикла;
|
||
|
|
||
|
КонецПроцедуры
|
||
|
|
||
|
Процедура ВыровнятьЗапятые(МассивСтрокБлока, СоответствиеМаксимумов = "")
|
||
|
|
||
|
ПолноеСоответствиеРасположений = Новый Соответствие();
|
||
|
СтрокаСЗапятыми = 0;
|
||
|
НачалоСтроки = "";
|
||
|
|
||
|
Для Н = 0 По МассивСтрокБлока.ВГраница() Цикл
|
||
|
|
||
|
МассивУчастков = СтрРазделить(МассивСтрокБлока[Н], ",");
|
||
|
МассивУчастков_ = Новый Массив;
|
||
|
Соединение = Ложь;
|
||
|
СтрокаСоединения = "";
|
||
|
|
||
|
Для Каждого Участок Из МассивУчастков Цикл
|
||
|
|
||
|
ЧислоКавычек = СтрЧислоВхождений(Участок, """");
|
||
|
|
||
|
Если (ЧислоКавычек = 0 Или ЧислоКавычек % 2 = 0 ) И Не Соединение Тогда
|
||
|
|
||
|
МассивУчастков_.Добавить(Участок);
|
||
|
|
||
|
ИначеЕсли Соединение И ЧислоКавычек % 2 <> 0 Тогда
|
||
|
МассивУчастков_.Добавить(СтрокаСоединения + "," + Участок);
|
||
|
СтрокаСоединения = "";
|
||
|
Соединение = Ложь;
|
||
|
|
||
|
Иначе
|
||
|
СтрокаСоединения = ?(ЗначениеЗаполнено(СтрокаСоединения), СтрокаСоединения + "," + Участок, Участок);
|
||
|
Соединение = Истина;
|
||
|
КонецЕсли;
|
||
|
|
||
|
КонецЦикла;
|
||
|
|
||
|
МассивУчастков = МассивУчастков_;
|
||
|
|
||
|
Если МассивУчастков.Количество() < 2 Тогда
|
||
|
Продолжить;
|
||
|
Иначе
|
||
|
СтрокаСЗапятыми = СтрокаСЗапятыми + 1;
|
||
|
КонецЕсли;
|
||
|
|
||
|
МассивНачалаСтроки = СтрРазделить(МассивУчастков[0], "(");
|
||
|
|
||
|
Если МассивНачалаСтроки.Количество() < 2 Тогда
|
||
|
Продолжить;
|
||
|
КонецЕсли;
|
||
|
|
||
|
НачалоСтроки = МассивНачалаСтроки[0];
|
||
|
СоответствиеРасположений = ПолноеСоответствиеРасположений[НачалоСтроки];
|
||
|
|
||
|
Если Не ЗначениеЗаполнено(СоответствиеРасположений) Тогда
|
||
|
СоответствиеРасположений = Новый Соответствие;
|
||
|
КонецЕсли;
|
||
|
|
||
|
Для Р = 0 По МассивУчастков.ВГраница() - 1 Цикл
|
||
|
|
||
|
Если Не ЗначениеЗаполнено(СоответствиеМаксимумов) Тогда
|
||
|
|
||
|
ДлинаУчастка = СтрДлина(МассивУчастков[Р]);
|
||
|
|
||
|
ТекущийМаксимум = СоответствиеРасположений.Получить(Р);
|
||
|
ТекущийМаксимум = ?(ЗначениеЗаполнено(ТекущийМаксимум), ТекущийМаксимум, 0);
|
||
|
ТекущийМаксимум = ?(ДлинаУчастка > ТекущийМаксимум , ДлинаУчастка , ТекущийМаксимум);
|
||
|
|
||
|
СоответствиеРасположений.Вставить(Р, ТекущийМаксимум);
|
||
|
|
||
|
Иначе
|
||
|
|
||
|
ТекущееСоответствиеМаксимумов = СоответствиеМаксимумов[НачалоСтроки];
|
||
|
|
||
|
Если Не ЗначениеЗаполнено(ТекущееСоответствиеМаксимумов) Тогда
|
||
|
Прервать;
|
||
|
КонецЕсли;
|
||
|
|
||
|
НеобходимаяДлина = ТекущееСоответствиеМаксимумов[Р];
|
||
|
|
||
|
Если НеобходимаяДлина = Неопределено Тогда
|
||
|
Продолжить;
|
||
|
КонецЕсли;
|
||
|
|
||
|
Пока СтрДлина(МассивУчастков[Р]) < НеобходимаяДлина Цикл
|
||
|
МассивУчастков[Р] = МассивУчастков[Р] + " ";
|
||
|
КонецЦикла;
|
||
|
|
||
|
КонецЕсли;
|
||
|
|
||
|
КонецЦикла;
|
||
|
|
||
|
ПолноеСоответствиеРасположений.Вставить(НачалоСтроки, СоответствиеРасположений);
|
||
|
|
||
|
МассивСтрокБлока[Н] = СтрСоединить(МассивУчастков, ",");
|
||
|
|
||
|
КонецЦикла;
|
||
|
|
||
|
Если Не ЗначениеЗаполнено(СоответствиеМаксимумов)
|
||
|
И ЗначениеЗаполнено(ПолноеСоответствиеРасположений)
|
||
|
И СтрокаСЗапятыми > 1 Тогда
|
||
|
ВыровнятьЗапятые(МассивСтрокБлока, ПолноеСоответствиеРасположений);
|
||
|
КонецЕсли;
|
||
|
|
||
|
КонецПроцедуры
|
||
|
|
||
|
#КонецОбласти
|