mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-02-03 13:22:19 +02:00
Переработка автоматических процессов
This commit is contained in:
parent
69d743d92b
commit
ae1c349cc0
280
.github/workflows/os/convert.os
vendored
280
.github/workflows/os/convert.os
vendored
@ -1,44 +1,35 @@
|
||||
Функция ПолучитьСопоставлениеФайлов()
|
||||
#Использовать "./internal"
|
||||
|
||||
Сопоставление = Новый Соответствие();
|
||||
ФайлыМодулей = НайтиФайлы("./src/ru/", "*.bsl", Истина);
|
||||
Признак = "// OneScript: ";
|
||||
Перем ПутьPackagedef;
|
||||
Перем ОсновнойПутьИсходников;
|
||||
Перем СоответствиеЗамен;
|
||||
Перем ПутьПакета;
|
||||
Перем Версия;
|
||||
Перем Языки;
|
||||
Перем КаталогСловарей;
|
||||
Перем ФайлыПеревода;
|
||||
Перем ФайлыРазбораСловаря;
|
||||
Перем ФайлыФорматирования;
|
||||
Перем Корень;
|
||||
Перем ОсновнойЯзык;
|
||||
|
||||
Для Каждого Файл Из ФайлыМодулей Цикл
|
||||
Процедура ПриСозданииОбъекта()
|
||||
|
||||
ТекущийФайл = Файл.ПолноеИмя;
|
||||
ТекстФайла = Новый ТекстовыйДокумент();
|
||||
ТекстФайла.Прочитать(ТекущийФайл, "UTF-8");
|
||||
ДанныеПроекта = ОбщиеМетоды.ПолучитьДанныеПроекта();
|
||||
|
||||
Для Н = 1 По ТекстФайла.КоличествоСтрок() Цикл
|
||||
// Основные
|
||||
Корень = ДанныеПроекта["root"];
|
||||
КаталогПакета = ДанныеПроекта["packageSrc"];
|
||||
ОсновнойЯзык = ДанныеПроекта["mainLang"];
|
||||
Версия = ДанныеПроекта["version"];
|
||||
Языки = ДанныеПроекта["additionalLangs"];
|
||||
КаталогСловарей = ДанныеПроекта["dictionariesSrc"];
|
||||
|
||||
ТекущаяСтрока = СокрЛП(ТекстФайла.ПолучитьСтроку(Н));
|
||||
|
||||
Если Не ЗначениеЗаполнено(ТекущаяСтрока) Тогда
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
Если СтрНайти(ТекущаяСтрока, Признак) > 0 Тогда
|
||||
|
||||
ПутьOS = СтрЗаменить(ТекущаяСтрока, Признак, "");
|
||||
ПутьOS = СокрЛП(ПутьOS);
|
||||
ПутьOS = СтрЗаменить(ПутьOS, "./", "./src/ru/");
|
||||
Сопоставление.Вставить(ТекущийФайл, ПутьOS);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ОбновитьLibConfig(Сопоставление);
|
||||
|
||||
Возврат Сопоставление;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьСоответствиеЗамен()
|
||||
ОсновнойПутьИсходников = Корень + ОсновнойЯзык + "/";
|
||||
ПутьПакета = ОсновнойПутьИсходников + КаталогПакета;
|
||||
ПутьPackagedef = ПутьПакета + "packagedef";
|
||||
|
||||
// Замены для OneScript
|
||||
СоответствиеЗамен = Новый Соответствие();
|
||||
СоответствиеЗамен.Вставить("// #Использовать" , "#Использовать");
|
||||
СоответствиеЗамен.Вставить("//#Использовать" , "#Использовать");
|
||||
@ -46,175 +37,98 @@
|
||||
СоответствиеЗамен.Вставить("УстановитьБезопасныйРежим(Ложь);" , "");
|
||||
СоответствиеЗамен.Вставить("// !OInt " , "");
|
||||
|
||||
Возврат СоответствиеЗамен;
|
||||
// Файлы перевода
|
||||
ФайлыРазбораСловаря = ОпределитьНаборФайловДляСловаря();
|
||||
ФайлыПеревода = ОпределитьНаборФайловПеревода();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОсновнаяОбработка() Экспорт
|
||||
|
||||
СоответствиеМодулей = МетодыКонвертации.ПолучитьСопоставлениеФайлов(ОсновнойПутьИсходников);
|
||||
|
||||
МетодыВерсионирования.ОбновитьНомераВерсий(ПутьPackagedef, Версия);
|
||||
МетодыВерсионирования.ОбновитьLibConfig(СоответствиеМодулей, ПутьПакета);
|
||||
МетодыКонвертации.ПортироватьНабор(СоответствиеМодулей, СоответствиеЗамен);
|
||||
МетодыСловарей.СоздатьНаборСловарей(ФайлыРазбораСловаря, Языки, КаталогСловарей);
|
||||
МетодыПеревода.ПеревестиПроект(КаталогСловарей, Корень, ОсновнойЯзык, Языки, ФайлыПеревода);
|
||||
|
||||
ФайлыФорматирования = ОпределитьНаборФайловФорматирования();
|
||||
|
||||
МетодыФорматирования.ОтформатироватьНабор(ФайлыФорматирования);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ОпределитьНаборФайловДляСловаря()
|
||||
|
||||
ВсеФайлы = НайтиФайлы(ОсновнойПутьИсходников, "*", Истина);
|
||||
МассивФайлов = Новый Массив;
|
||||
|
||||
Для Каждого ФайлПроекта Из ВсеФайлы Цикл
|
||||
|
||||
Признак =
|
||||
СтрНайти(ФайлПроекта.ПолноеИмя, "cli\data") = 0
|
||||
И СтрНайти(ФайлПроекта.ПолноеИмя, "cli/data") = 0
|
||||
И Не ФайлПроекта.ЭтоКаталог();
|
||||
|
||||
|
||||
Если Признак Тогда
|
||||
МассивФайлов.Добавить(ФайлПроекта);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат МассивФайлов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ВыполнитьОбработку()
|
||||
Функция ОпределитьНаборФайловФорматирования()
|
||||
|
||||
ОбновитьНомерВерсии();
|
||||
// Наборы файлов
|
||||
ВсеФайлы = НайтиФайлы(ОсновнойПутьИсходников, "*", Истина);
|
||||
МассивФайлов = Новый Массив;
|
||||
|
||||
Сообщить("Начало конвертации OPI -> OInt");
|
||||
Сообщить("------------------------------");
|
||||
Для Каждого ФайлПроекта Из ВсеФайлы Цикл
|
||||
|
||||
Начало = ТекущаяДата();
|
||||
Признак =
|
||||
(ФайлПроекта.Расширение = "os"
|
||||
Или ФайлПроекта.Расширение = "bsl")
|
||||
И СтрНайти(ФайлПроекта.ПолноеИмя, "cli/") = 0
|
||||
И СтрНайти(ФайлПроекта.ПолноеИмя, "cli\") = 0;
|
||||
|
||||
СоответствиеМодулей = ПолучитьСопоставлениеФайлов();
|
||||
|
||||
Для Каждого ПараМодулей Из СоответствиеМодулей Цикл
|
||||
|
||||
Сообщить(Символы.ПС);
|
||||
ПортироватьФайл(ПараМодулей.Ключ, ПараМодулей.Значение);
|
||||
Если Признак Тогда
|
||||
МассивФайлов.Добавить(ФайлПроекта);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Сообщить("------------------------------");
|
||||
Сообщить("Обработка завершена! Длительность - " + Строка(ТекущаяДата() - Начало));
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Процедура ПортироватьФайл(Знач Файл1С, Знач ФайлОС)
|
||||
|
||||
ФайлМодуля = Новый Файл(Файл1С);
|
||||
|
||||
МодульОС = Новый Файл(ФайлОС);
|
||||
ИмяМодуля = МодульОС.Имя;
|
||||
|
||||
Если ФайлМодуля.Существует() Тогда
|
||||
ВыводСообщенияПроцесса(ИмяМодуля, "Начало обработки файла");
|
||||
Иначе
|
||||
ВыводСообщенияПроцесса(ИмяМодуля, "Файл не существует. Пропускаем");
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Модуль = ПрочитатьМодуль(Файл1С, ИмяМодуля);
|
||||
|
||||
Если СтрДлина(Модуль) = 0 Тогда
|
||||
ВыводСообщенияПроцесса(ИмяМодуля, "Модуль пустой. Пропускаем");
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ОбработатьЗаменыМодуля(ИмяМодуля, Модуль);
|
||||
ЗаписатьМодуль(ФайлОС, Модуль, ИмяМодуля);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПрочитатьМодуль(Знач ФайлМодуля, Знач ИмяМодуля)
|
||||
|
||||
ВыводСообщенияПроцесса(ИмяМодуля, "Начало чтения текста модуля");
|
||||
|
||||
ЧтениеТекста = Новый ЧтениеТекста(ФайлМодуля, "UTF-8");
|
||||
Модуль = ЧтениеТекста.Прочитать();
|
||||
ЧтениеТекста.Закрыть();
|
||||
|
||||
ВыводСообщенияПроцесса(ИмяМодуля, "Модуль прочитан. Длина - " + Строка(СтрДлина(Модуль)));
|
||||
|
||||
Возврат Модуль;
|
||||
Возврат МассивФайлов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ЗаписатьМодуль(Знач ФайлМодуля, Знач Модуль, Знач ИмяМодуля)
|
||||
Функция ОпределитьНаборФайловПеревода()
|
||||
|
||||
ВыводСообщенияПроцесса(ИмяМодуля, "Начало записи модуля");
|
||||
// Наборы файлов
|
||||
ВсеФайлы = НайтиФайлы(ОсновнойПутьИсходников, "*", Истина);
|
||||
МассивФайлов = Новый Массив;
|
||||
|
||||
ТекстовыйДокумент = Новый ТекстовыйДокумент();
|
||||
ТекстовыйДокумент.УстановитьТекст(Модуль);
|
||||
ТекстовыйДокумент.Записать(ФайлМодуля);
|
||||
Для Каждого ФайлПроекта Из ВсеФайлы Цикл
|
||||
|
||||
ВыводСообщенияПроцесса(ИмяМодуля, "Модуль записан");
|
||||
Признак =
|
||||
СтрНайти(ФайлПроекта.ПолноеИмя, "cli") = 0
|
||||
И СтрНайти(ФайлПроекта.ПолноеИмя, "packagedef") = 0
|
||||
И Не ФайлПроекта.ЭтоКаталог();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВыводСообщенияПроцесса(Знач ИмяФайла, Знач Действие)
|
||||
|
||||
Длина = 30;
|
||||
|
||||
Пока СтрДлина(ИмяФайла) < Длина Цикл
|
||||
ИмяФайла = ИмяФайла + " ";
|
||||
КонецЦикла;
|
||||
|
||||
Сообщить("Конвертация | " + ИмяФайла + " | " + Действие);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбработатьЗаменыМодуля(Знач ИмяМодуля, Модуль)
|
||||
|
||||
ВыводСообщенияПроцесса(ИмяМодуля, "Начало произведения замен");
|
||||
|
||||
СоответствиеЗамен = ПолучитьСоответствиеЗамен();
|
||||
|
||||
Для Каждого Замена Из СоответствиеЗамен Цикл
|
||||
Модуль = СтрЗаменить(Модуль, Замена.Ключ, Замена.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
ВыводСообщенияПроцесса(ИмяМодуля, "Окончание произведения замен");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбновитьНомерВерсии()
|
||||
|
||||
ПутьПД = "./src/ru/OInt/packagedef";
|
||||
ПутьКФ = "./src/ru/OPI/src/Configuration/Configuration.mdo";
|
||||
Версия = "";
|
||||
|
||||
ЧтениеДанныхКонфигурации = Новый ЧтениеXML();
|
||||
ЧтениеДанныхКонфигурации.ОткрытьФайл(ПутьКФ);
|
||||
|
||||
Пока ЧтениеДанныхКонфигурации.Прочитать() Цикл
|
||||
Если Строка(ЧтениеДанныхКонфигурации.Имя) = "version" Тогда
|
||||
ЧтениеДанныхКонфигурации.Прочитать();
|
||||
Версия = Строка(ЧтениеДанныхКонфигурации.Значение);
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Признак = ".Версия(""";
|
||||
Packagedef = Новый ТекстовыйДокумент();
|
||||
Packagedef.Прочитать(ПутьПД);
|
||||
|
||||
Для Н = 1 По Packagedef.КоличествоСтрок() Цикл
|
||||
|
||||
ТекущаяСтрока = СокрЛП(Packagedef.ПолучитьСтроку(Н));
|
||||
Если СтрНайти(ТекущаяСтрока, Признак) Тогда
|
||||
Packagedef.ЗаменитьСтроку(Н, " .Версия(""" + Версия + """)");
|
||||
Packagedef.Записать(ПутьПД);
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбновитьLibConfig(Знач СоответствиеКовертации)
|
||||
|
||||
Документ = Новый ТекстовыйДокумент();
|
||||
Документ.ДобавитьСтроку("<package-def>");
|
||||
|
||||
Макет = " <module name=""%1"" file=""%2""/>";
|
||||
|
||||
Для Каждого Модуль Из СоответствиеКовертации Цикл
|
||||
|
||||
ТекущийМодуль = Модуль.Значение;
|
||||
ФайлМодуля = Новый Файл(ТекущийМодуль);
|
||||
ПутьМодуля = СтрЗаменить(ТекущийМодуль, "./src/ru/OInt/", "");
|
||||
Бибилотека = ФайлМодуля.ИмяБезРасширения;
|
||||
|
||||
Если Бибилотека = "OPI_Тесты" Тогда
|
||||
Продолжить;
|
||||
Если Признак Тогда
|
||||
МассивФайлов.Добавить(ФайлПроекта);
|
||||
КонецЕсли;
|
||||
|
||||
ТекущаяСтрока = СтрШаблон(Макет, Бибилотека, СокрЛП(ПутьМодуля));
|
||||
Документ.ДобавитьСтроку(ТекущаяСтрока);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Документ.ДобавитьСтроку("</package-def>");
|
||||
Документ.Записать("./src/ru/OInt/lib.config");
|
||||
Возврат МассивФайлов;
|
||||
|
||||
КонецПроцедуры
|
||||
КонецФункции
|
||||
|
||||
ПриСозданииОбъекта();
|
||||
ОсновнаяОбработка();
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
ВыполнитьОбработку();
|
||||
|
87
.github/workflows/os/internal/Modules/internal/Modules/Инструменты.os
vendored
Normal file
87
.github/workflows/os/internal/Modules/internal/Modules/Инструменты.os
vendored
Normal file
@ -0,0 +1,87 @@
|
||||
Функция ПрочитатьФайлJSON(Знач Путь) Экспорт
|
||||
|
||||
ЧтениеJSON = Новый ЧтениеJSON();
|
||||
ЧтениеJSON.ОткрытьФайл(Путь);
|
||||
Данные = ПрочитатьJSON(ЧтениеJSON, Истина);
|
||||
ЧтениеJSON.Закрыть();
|
||||
|
||||
Возврат Данные;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ЗаписатьФайлJSON(Знач Путь, Знач Данные) Экспорт
|
||||
|
||||
Запись = Новый ЗаписьJSON;
|
||||
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто);
|
||||
Запись.ОткрытьФайл(Путь, , , ПараметрыЗаписиJSON);
|
||||
ЗаписатьJSON(Запись, Данные);
|
||||
Запись.Закрыть();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПолучитьАлфавит() Экспорт
|
||||
|
||||
Алфавит = Новый Массив;
|
||||
|
||||
Алфавит.Добавить("а");
|
||||
Алфавит.Добавить("б");
|
||||
Алфавит.Добавить("в");
|
||||
Алфавит.Добавить("г");
|
||||
Алфавит.Добавить("д");
|
||||
Алфавит.Добавить("е");
|
||||
Алфавит.Добавить("ё");
|
||||
Алфавит.Добавить("ж");
|
||||
Алфавит.Добавить("з");
|
||||
Алфавит.Добавить("и");
|
||||
Алфавит.Добавить("й");
|
||||
Алфавит.Добавить("к");
|
||||
Алфавит.Добавить("л");
|
||||
Алфавит.Добавить("м");
|
||||
Алфавит.Добавить("н");
|
||||
Алфавит.Добавить("о");
|
||||
Алфавит.Добавить("п");
|
||||
Алфавит.Добавить("р");
|
||||
Алфавит.Добавить("с");
|
||||
Алфавит.Добавить("т");
|
||||
Алфавит.Добавить("у");
|
||||
Алфавит.Добавить("ф");
|
||||
Алфавит.Добавить("х");
|
||||
Алфавит.Добавить("ц");
|
||||
Алфавит.Добавить("ч");
|
||||
Алфавит.Добавить("ш");
|
||||
Алфавит.Добавить("щ");
|
||||
Алфавит.Добавить("ъ");
|
||||
Алфавит.Добавить("ы");
|
||||
Алфавит.Добавить("ь");
|
||||
Алфавит.Добавить("э");
|
||||
Алфавит.Добавить("ю");
|
||||
Алфавит.Добавить("я");
|
||||
|
||||
Возврат Алфавит;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьМассивСимволов() Экспорт
|
||||
|
||||
МассивСимволов = Новый Массив();
|
||||
МассивСимволов.Добавить(";");
|
||||
МассивСимволов.Добавить(".");
|
||||
МассивСимволов.Добавить(",");
|
||||
МассивСимволов.Добавить(")");
|
||||
МассивСимволов.Добавить("(");
|
||||
МассивСимволов.Добавить("/");
|
||||
МассивСимволов.Добавить("\");
|
||||
МассивСимволов.Добавить("[");
|
||||
МассивСимволов.Добавить("]");
|
||||
МассивСимволов.Добавить("=");
|
||||
МассивСимволов.Добавить("+");
|
||||
МассивСимволов.Добавить("-");
|
||||
МассивСимволов.Добавить("*");
|
||||
МассивСимволов.Добавить("#");
|
||||
МассивСимволов.Добавить(" ");
|
||||
МассивСимволов.Добавить("_");
|
||||
МассивСимволов.Добавить("""");
|
||||
|
||||
Возврат МассивСимволов;
|
||||
|
||||
КонецФункции
|
49
.github/workflows/os/internal/Modules/МетодыВерсионирования.os
vendored
Normal file
49
.github/workflows/os/internal/Modules/МетодыВерсионирования.os
vendored
Normal file
@ -0,0 +1,49 @@
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Процедура ОбновитьНомераВерсий(Знач ПутьPackagedef, Знач Версия) Экспорт
|
||||
|
||||
Признак = ".Версия(""";
|
||||
Packagedef = Новый ТекстовыйДокумент();
|
||||
Packagedef.Прочитать(ПутьPackagedef);
|
||||
|
||||
Для Н = 1 По Packagedef.КоличествоСтрок() Цикл
|
||||
|
||||
ТекущаяСтрока = СокрЛП(Packagedef.ПолучитьСтроку(Н));
|
||||
Если СтрНайти(ТекущаяСтрока, Признак) Тогда
|
||||
Packagedef.ЗаменитьСтроку(Н, " .Версия(""" + Версия + """)");
|
||||
Packagedef.Записать(ПутьPackagedef);
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбновитьLibConfig(Знач СоответствиеКовертации, Знач ПутьПакета) Экспорт
|
||||
|
||||
Документ = Новый ТекстовыйДокумент();
|
||||
Документ.ДобавитьСтроку("<package-def>");
|
||||
|
||||
Макет = " <module name=""%1"" file=""%2""/>";
|
||||
|
||||
Для Каждого Модуль Из СоответствиеКовертации Цикл
|
||||
|
||||
ТекущийМодуль = Модуль.Значение;
|
||||
ФайлМодуля = Новый Файл(ТекущийМодуль);
|
||||
ПутьМодуля = СтрЗаменить(ТекущийМодуль, ПутьПакета, "");
|
||||
Бибилотека = ФайлМодуля.ИмяБезРасширения;
|
||||
|
||||
Если Бибилотека = "OPI_Тесты" Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
ТекущаяСтрока = СтрШаблон(Макет, Бибилотека, СокрЛП(ПутьМодуля));
|
||||
Документ.ДобавитьСтроку(ТекущаяСтрока);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Документ.ДобавитьСтроку("</package-def>");
|
||||
Документ.Записать(ПутьПакета + "lib.config");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
99
.github/workflows/os/internal/Modules/МетодыКонвертации.os
vendored
Normal file
99
.github/workflows/os/internal/Modules/МетодыКонвертации.os
vendored
Normal file
@ -0,0 +1,99 @@
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Процедура ПортироватьНабор(Знач Набор, Знач СоответствиеЗамен) Экспорт
|
||||
|
||||
Для Каждого Элемент Из Набор Цикл
|
||||
ПортироватьФайл(Элемент.Ключ, Элемент.Значение, СоответствиеЗамен);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПортироватьФайл(Знач Файл1С, Знач ФайлОС, Знач СоответствиеЗамен) Экспорт
|
||||
|
||||
ФайлМодуля = Новый Файл(Файл1С);
|
||||
|
||||
Если Не ФайлМодуля.Существует() Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Модуль = ПрочитатьМодуль(Файл1С);
|
||||
|
||||
Если СтрДлина(Модуль) = 0 Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ОбработатьЗаменыМодуля(Модуль, СоответствиеЗамен);
|
||||
ЗаписатьМодуль(ФайлОС, Модуль);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПолучитьСопоставлениеФайлов(Знач ОсновнойПутьИсходников) Экспорт
|
||||
|
||||
Сопоставление = Новый Соответствие();
|
||||
ФайлыМодулей = НайтиФайлы(ОсновнойПутьИсходников, "*.bsl", Истина);
|
||||
Признак = "// OneScript: ";
|
||||
|
||||
Для Каждого Файл Из ФайлыМодулей Цикл
|
||||
|
||||
ТекущийФайл = Файл.ПолноеИмя;
|
||||
ТекстФайла = Новый ТекстовыйДокумент();
|
||||
ТекстФайла.Прочитать(ТекущийФайл, "UTF-8");
|
||||
|
||||
Для Н = 1 По ТекстФайла.КоличествоСтрок() Цикл
|
||||
|
||||
ТекущаяСтрока = СокрЛП(ТекстФайла.ПолучитьСтроку(Н));
|
||||
|
||||
Если Не ЗначениеЗаполнено(ТекущаяСтрока) Тогда
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
Если СтрНайти(ТекущаяСтрока, Признак) > 0 Тогда
|
||||
|
||||
ПутьOS = СтрЗаменить(ТекущаяСтрока, Признак, "");
|
||||
ПутьOS = СокрЛП(ПутьOS);
|
||||
ПутьOS = СтрЗаменить(ПутьOS, "./", ОсновнойПутьИсходников);
|
||||
Сопоставление.Вставить(ТекущийФайл, ПутьOS);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Сопоставление;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция ПрочитатьМодуль(Знач ФайлМодуля)
|
||||
|
||||
ЧтениеТекста = Новый ЧтениеТекста(ФайлМодуля, "UTF-8");
|
||||
Модуль = ЧтениеТекста.Прочитать();
|
||||
ЧтениеТекста.Закрыть();
|
||||
|
||||
Возврат Модуль;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ЗаписатьМодуль(Знач ФайлМодуля, Знач Модуль)
|
||||
|
||||
ТекстовыйДокумент = Новый ТекстовыйДокумент();
|
||||
ТекстовыйДокумент.УстановитьТекст(Модуль);
|
||||
ТекстовыйДокумент.Записать(ФайлМодуля);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбработатьЗаменыМодуля(Модуль, СоответствиеЗамен)
|
||||
|
||||
Для Каждого Замена Из СоответствиеЗамен Цикл
|
||||
Модуль = СтрЗаменить(Модуль, Замена.Ключ, Замена.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
247
.github/workflows/os/internal/Modules/МетодыПеревода.os
vendored
Normal file
247
.github/workflows/os/internal/Modules/МетодыПеревода.os
vendored
Normal file
@ -0,0 +1,247 @@
|
||||
Перем ТаблицаСловаря;
|
||||
Перем КаталогОригинала;
|
||||
|
||||
Процедура ПеревестиПроект(Знач КаталогСловарей, Знач Корень, Знач ОсновнойЯзык, Знач Языки, Знач ФайлыПеревода) Экспорт
|
||||
|
||||
ТаблицаСловаря = Новый ТаблицаЗначений();
|
||||
ТаблицаСловаря.Колонки.Добавить("Ключ");
|
||||
ТаблицаСловаря.Колонки.Добавить("Значение");
|
||||
ТаблицаСловаря.Колонки.Добавить("Длина");
|
||||
ТаблицаСловаря.Колонки.Добавить("ИмяМодуля");
|
||||
|
||||
ПутьОригинала = Корень + ОсновнойЯзык;
|
||||
КаталогОригинала = Новый Файл(ПутьОригинала);
|
||||
КаталогОригинала = КаталогОригинала.ПолноеИмя;
|
||||
|
||||
Для Каждого Язык Из Языки Цикл
|
||||
|
||||
ПеревестиПоСловарю(КаталогСловарей, Язык, ФайлыПеревода, Корень);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПеревестиПоСловарю(Знач КаталогСловарей, Знач Язык, Знач Файлы, Знач Корень);
|
||||
|
||||
ПутьПеревода = Корень + Язык;
|
||||
ПутьСловаря = КаталогСловарей + Язык + ".json";
|
||||
Словарь = Новый Файл(ПутьСловаря);
|
||||
|
||||
Если Не Словарь.Существует() Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
КаталогПриемник = Новый Файл(ПутьПеревода);
|
||||
ПутьКСловарю = Словарь.ПолноеИмя;
|
||||
Язык = Словарь.ИмяБезРасширения;
|
||||
|
||||
ПолучитьТаблицуСловаря(ПутьКСловарю);
|
||||
|
||||
СкопироватьФайлы(Файлы, КаталогПриемник);
|
||||
|
||||
ФайлыМодулей = НайтиФайлы(ПутьПеревода, "*", Истина);
|
||||
|
||||
Для Каждого ФайлМодуля Из ФайлыМодулей Цикл
|
||||
|
||||
Если ФайлМодуля.ЭтоКаталог() Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
ПеревестиМодуль(ФайлМодуля.ПолноеИмя);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ПеревестиИменаФайлов(ФайлыМодулей);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПеревестиИменаФайлов(ВсеФайлыЛокализации)
|
||||
|
||||
ОтборИменМодулей = Новый Структура("ИмяМодуля", Истина);
|
||||
СтрокиИмен = ТаблицаСловаря.НайтиСтроки(ОтборИменМодулей);
|
||||
УдаляемыеКаталоги = Новый Массив;
|
||||
|
||||
Для Каждого ФайлЛокализации Из ВсеФайлыЛокализации Цикл
|
||||
|
||||
Если Не ФайлЛокализации.ЭтоКаталог() Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
ТекущийПуть = ФайлЛокализации.ПолноеИмя;
|
||||
НовыйПуть = ТекущийПуть;
|
||||
|
||||
Для Каждого Имя Из СтрокиИмен Цикл
|
||||
НовыйПуть = СтрЗаменить(НовыйПуть, Имя.Ключ, Имя.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
ФайлНовогоПути = Новый Файл(НовыйПуть);
|
||||
|
||||
Если Не ФайлНовогоПути.Существует() Тогда
|
||||
УдаляемыеКаталоги.Добавить(ТекущийПуть);
|
||||
СоздатьКаталог(НовыйПуть);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Для Каждого ФайлЛокализации Из ВсеФайлыЛокализации Цикл
|
||||
|
||||
Если ФайлЛокализации.ЭтоКаталог() Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
ТекущийПуть = ФайлЛокализации.ПолноеИмя;
|
||||
НовыйПуть = ТекущийПуть;
|
||||
|
||||
Для Каждого Имя Из СтрокиИмен Цикл
|
||||
НовыйПуть = СтрЗаменить(НовыйПуть, Имя.Ключ, Имя.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
ФайлНовогоПути = Новый Файл(НовыйПуть);
|
||||
|
||||
Если Не ФайлНовогоПути.Существует() Тогда
|
||||
ПереместитьФайл(ТекущийПуть, НовыйПуть);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Для Каждого Каталог Из УдаляемыеКаталоги Цикл
|
||||
УдалитьФайлы(Каталог);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПеревестиМодуль(ПутьКМодулю)
|
||||
|
||||
ДокументМодуля = Новый ТекстовыйДокумент();
|
||||
ДокументМодуля.Прочитать(ПутьКМодулю, "UTF-8");
|
||||
|
||||
Для Н = 1 По ДокументМодуля.КоличествоСтрок() Цикл
|
||||
|
||||
ТекущаяСтрока = СокрЛП(ДокументМодуля.ПолучитьСтроку(Н));
|
||||
|
||||
Если Не ЗначениеЗаполнено(ТекущаяСтрока) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Пока СтрНайти(ТекущаяСтрока, " ") <> 0 Цикл
|
||||
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, " ", " ");
|
||||
КонецЦикла;
|
||||
|
||||
ВыводимаяСтрока = СтрЗаменить(ДокументМодуля.ПолучитьСтроку(Н), СокрЛП(ДокументМодуля.ПолучитьСтроку(Н)), ТекущаяСтрока);
|
||||
ДокументМодуля.ЗаменитьСтроку(Н, ВыводимаяСтрока);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ТекстМодуля = ДокументМодуля.ПолучитьТекст();
|
||||
|
||||
Для Каждого Элемент Из ТаблицаСловаря Цикл
|
||||
|
||||
ТекущееЗначение = Элемент.Значение;
|
||||
|
||||
Пока СтрДлина(ТекущееЗначение) < Элемент.Длина Цикл
|
||||
ТекущееЗначение = ТекущееЗначение + " ";
|
||||
КонецЦикла;
|
||||
|
||||
ТекстМодуля = СтрЗаменить(ТекстМодуля, Элемент.Ключ, Элемент.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
ОбработатьНесовпаденияOneScript(ТекстМодуля, ПутьКМодулю);
|
||||
|
||||
ДокументМодуля.УстановитьТекст(ТекстМодуля);
|
||||
ДокументМодуля.Записать(ПутьКМодулю);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПолучитьТаблицуСловаря(ПутьКСловарю)
|
||||
|
||||
Сообщить("Чтение словаря " + ПутьКСловарю);
|
||||
ТаблицаСловаря.Очистить();
|
||||
|
||||
ЧтениеJSON = Новый ЧтениеJSON();
|
||||
ЧтениеJSON.ОткрытьФайл(ПутьКСловарю);
|
||||
ДанныеСловаря = ПрочитатьJSON(ЧтениеJSON, Истина);
|
||||
ЧтениеJSON.Закрыть();
|
||||
|
||||
Для Каждого Элемент Из ДанныеСловаря Цикл
|
||||
|
||||
НоваяСтрокаСловаря = ТаблицаСловаря.Добавить();
|
||||
НоваяСтрокаСловаря.Ключ = Элемент.Ключ;
|
||||
НоваяСтрокаСловаря.Значение = Элемент.Значение;
|
||||
НоваяСтрокаСловаря.Длина = СтрДлина(Элемент.Ключ);
|
||||
НоваяСтрокаСловаря.ИмяМодуля = СтрНайти(Элемент.Ключ, "OPI_") <> 0;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ТаблицаСловаря.Сортировать("Длина УБЫВ");
|
||||
|
||||
ПутьКСловарюКлючевыхСлов = "./service/dictionaries/en_post.json";
|
||||
ЧтениеJSON = Новый ЧтениеJSON();
|
||||
ЧтениеJSON.ОткрытьФайл(ПутьКСловарюКлючевыхСлов);
|
||||
СоответствиеКС = ПрочитатьJSON(ЧтениеJSON, Истина);
|
||||
ЧтениеJSON.Закрыть();
|
||||
|
||||
Для Каждого КлючевоеСлово Из СоответствиеКС Цикл
|
||||
НоваяСтрокаСловаря = ТаблицаСловаря.Добавить();
|
||||
НоваяСтрокаСловаря.Ключ = КлючевоеСлово.Ключ;
|
||||
НоваяСтрокаСловаря.Значение = КлючевоеСлово.Значение;
|
||||
НоваяСтрокаСловаря.Длина = СтрДлина(КлючевоеСлово.Ключ);
|
||||
НоваяСтрокаСловаря.ИмяМодуля = Ложь;
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура СкопироватьФайлы(Знач МассивФайлов, Знач КаталогПриемник)
|
||||
|
||||
ПутьПриемник = КаталогПриемник.ПолноеИмя;
|
||||
|
||||
Если КаталогПриемник.Существует() Тогда
|
||||
УдалитьФайлы(ПутьПриемник);
|
||||
КонецЕсли;
|
||||
|
||||
СоздатьКаталог(ПутьПриемник);
|
||||
|
||||
Для Каждого Файл Из МассивФайлов Цикл
|
||||
Если Файл.ЭтоКаталог() Тогда
|
||||
|
||||
ПолноеИмяИсточник = Файл.ПолноеИмя;
|
||||
ПолноеИмяПриемник = ПутьПриемник + СтрЗаменить(Файл.ПолноеИмя, КаталогОригинала, "");
|
||||
|
||||
СоздатьКаталог(ПолноеИмяПриемник);
|
||||
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Для Каждого Файл Из МассивФайлов Цикл
|
||||
Если Не Файл.ЭтоКаталог() Тогда
|
||||
|
||||
ПолноеИмяИсточник = Файл.ПолноеИмя;
|
||||
ПолноеИмяПриемник = ПутьПриемник + СтрЗаменить(Файл.ПолноеИмя, КаталогОригинала, "");
|
||||
|
||||
КопироватьФайл(ПолноеИмяИсточник, ПолноеИмяПриемник);
|
||||
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбработатьНесовпаденияOneScript(ТекстМодуля, ПутьКМодулю)
|
||||
|
||||
СоответствиеОшибок = Новый Соответствие();
|
||||
СоответствиеОшибок.Вставить("ConcatBinaryData" , "ConcatenateBinaryData");
|
||||
СоответствиеОшибок.Вставить("GetTestList" , "ПолучитьСписокТестов");
|
||||
СоответствиеОшибок.Вставить("Exists" , "Exist");
|
||||
СоответствиеОшибок.Вставить("SetBodyFromBinaryData", "SetBodyFromBinary");
|
||||
СоответствиеОшибок.Вставить("GetBodyAsBinaryData" , "ПолучитьТелоКакДвоичныеДанные");
|
||||
СоответствиеОшибок.Вставить("FileCopy" , "CopyFile");
|
||||
|
||||
ФайлМодуля = Новый Файл(ПутьКМодулю);
|
||||
|
||||
Если СтрНайти(ФайлМодуля.Имя, ".os") <> 0 Тогда
|
||||
Для Каждого Ошибка Из СоответствиеОшибок Цикл
|
||||
ТекстМодуля = СтрЗаменить(ТекстМодуля, Ошибка.Ключ, Ошибка.Значение);
|
||||
КонецЦикла;
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
//ПриСозданииОбъекта();
|
267
.github/workflows/os/internal/Modules/МетодыСловарей.os
vendored
Normal file
267
.github/workflows/os/internal/Modules/МетодыСловарей.os
vendored
Normal file
@ -0,0 +1,267 @@
|
||||
#Использовать "./internal"
|
||||
|
||||
Перем МассивСимволов;
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Процедура СоздатьНаборСловарей(Знач ФайлыМодулей, Знач Языки, Знач КаталогСловарей) Экспорт
|
||||
|
||||
Для Каждого Язык Из Языки Цикл
|
||||
|
||||
ПутьСловаря = КаталогСловарей + Язык + ".json";
|
||||
ФайлСловаря = Новый Файл(ПутьСловаря);
|
||||
|
||||
Если ФайлСловаря.Существует() Тогда
|
||||
СоздатьСловарь(ФайлыМодулей, ПутьСловаря);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура СоздатьСловарь(Знач ФайлыМодулей, Знач ПутьСловаря) Экспорт
|
||||
|
||||
МассивСимволов = Инструменты.ПолучитьМассивСимволов();
|
||||
|
||||
СоответствиеСловаря = Инструменты.ПрочитатьФайлJSON(ПутьСловаря);
|
||||
СписокСлов = Новый СписокЗначений();
|
||||
|
||||
Для Каждого Модуль Из ФайлыМодулей Цикл
|
||||
|
||||
ПолучитьМассивСловОригинала(Модуль.ПолноеИмя, СписокСлов);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Для Каждого Слово Из СписокСлов Цикл
|
||||
|
||||
СловоОригинал = Слово.Значение;
|
||||
СуществующийПеревод = СоответствиеСловаря[СловоОригинал];
|
||||
|
||||
Если Не ЗначениеЗаполнено(СуществующийПеревод) Тогда
|
||||
СоответствиеСловаря.Вставить(СловоОригинал, "");
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ЗаписатьJSONСловаря(СоответствиеСловаря, ПутьСловаря);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Процедура ЗаписатьJSONСловаря(СоответствиеСловаря, ПутьСловаря)
|
||||
|
||||
ТЗ = Новый ТаблицаЗначений();
|
||||
ТЗ.Колонки.Добавить("Ключ");
|
||||
ТЗ.Колонки.Добавить("Значение");
|
||||
ТЗ.Колонки.Добавить("ДлинаКлюча");
|
||||
ТЗ.Колонки.Добавить("Заполнено");
|
||||
|
||||
Для Каждого Элемент Из СоответствиеСловаря Цикл
|
||||
|
||||
НоваяСтрока = ТЗ.Добавить();
|
||||
НоваяСтрока.Ключ = Элемент.Ключ;
|
||||
НоваяСтрока.Значение = Элемент.Значение;
|
||||
НоваяСтрока.ДлинаКлюча = СтрДлина(Элемент.Ключ);
|
||||
НоваяСтрока.Заполнено = ЗначениеЗаполнено(Элемент.Значение);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ТЗ.Сортировать("Заполнено УБЫВ, ДлинаКлюча");
|
||||
|
||||
JSON = Новый ЗаписьJSON;
|
||||
|
||||
JSON.ОткрытьФайл(ПутьСловаря);
|
||||
JSON.ЗаписатьНачалоОбъекта();
|
||||
|
||||
Для Каждого СтрокаТЗ Из ТЗ Цикл
|
||||
|
||||
JSON.ЗаписатьИмяСвойства(СтрокаТЗ["Ключ"]);
|
||||
JSON.ЗаписатьЗначение(СтрокаТЗ["Значение"]);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
JSON.ЗаписатьКонецОбъекта();
|
||||
JSON.Закрыть();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПолучитьМассивСловОригинала(Знач ПутьКФайлу, СписокСлов)
|
||||
|
||||
Документ = Новый ТекстовыйДокумент();
|
||||
Документ.Прочитать(ПутьКФайлу, "UTF-8");
|
||||
|
||||
Для Н = 1 По Документ.КоличествоСтрок() Цикл
|
||||
|
||||
ТекущаяСтрока = СокрЛП(Документ.ПолучитьСтроку(Н));
|
||||
|
||||
РазобратьСтрокуНаСлова(ТекущаяСтрока, СписокСлов);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура РазобратьСтрокуНаСлова(Знач ТекущаяСтрока, СписокСлов)
|
||||
|
||||
Если СтрНачинаетсяС(ТекущаяСтрока, "// !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог") Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Если СтрНачинаетсяС(ТекущаяСтрока, "//") Тогда
|
||||
|
||||
РазобратьСтрокуКомментария(ТекущаяСтрока, СписокСлов);
|
||||
|
||||
Иначе
|
||||
|
||||
ЭтоВыражение = СтрНайти(ТекущаяСтрока, """") <> 0
|
||||
Или СтрНайти(ТекущаяСтрока, "|") <> 0
|
||||
Или СтрНайти(ТекущаяСтрока, "<") <> 0
|
||||
Или СтрНайти(ТекущаяСтрока, ">") <> 0;
|
||||
|
||||
Если ЭтоВыражение Тогда
|
||||
РазобратьВыражение(ТекущаяСтрока, СписокСлов);
|
||||
Иначе
|
||||
РазобратьОбычнуюСтроку(ТекущаяСтрока, СписокСлов);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура РазобратьСтрокуКомментария(ТекущаяСтрока, СписокСлов)
|
||||
|
||||
ТекущаяСтрока = СокрЛП(СтрЗаменить(ТекущаяСтрока, "//", ""));
|
||||
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, " - ", "$");
|
||||
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, ": [", "$");
|
||||
МассивСтроки = СтрРазделить(ТекущаяСтрока, "$", Ложь);
|
||||
|
||||
Для Г = 0 По МассивСтроки.ВГраница() Цикл
|
||||
ДобавитьСлово(СписокСлов, МассивСтроки[Г]);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура РазобратьВыражение(ТекущаяСтрока, СписокСлов)
|
||||
|
||||
ТекущаяСтрока = " " + ТекущаяСтрока;
|
||||
|
||||
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, """", "$");
|
||||
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, "|", "$");
|
||||
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, "<", "$");
|
||||
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, ">", "$");
|
||||
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, "$$", """""");
|
||||
|
||||
МассивСтроки = СтрРазделить(ТекущаяСтрока, "$", Истина);
|
||||
|
||||
Цельный = Ложь;
|
||||
Для Каждого Элемент Из МассивСтроки Цикл
|
||||
|
||||
Если Не ЗначениеЗаполнено(СокрЛП(Элемент)) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Если Цельный Тогда
|
||||
ДобавитьСлово(СписокСлов, Элемент);
|
||||
Иначе
|
||||
РазобратьОбычнуюСтроку(Элемент, СписокСлов);
|
||||
КонецЕсли;
|
||||
|
||||
Цельный = Не Цельный;
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура РазобратьОбычнуюСтроку(ТекущаяСтрока, СписокСлов)
|
||||
|
||||
Для Каждого Символ Из МассивСимволов Цикл
|
||||
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, Символ, "$");
|
||||
КонецЦикла;
|
||||
|
||||
Пока СтрНайти(ТекущаяСтрока, "$$") <> 0 Цикл
|
||||
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, "$$", "$");
|
||||
КонецЦикла;
|
||||
|
||||
МассивЭлемента = СтрРазделить(ТекущаяСтрока, "$", Ложь);
|
||||
Для Каждого Дробный Из МассивЭлемента Цикл
|
||||
ДобавитьСлово(СписокСлов, Дробный);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ДобавитьСлово(Список, Слово)
|
||||
|
||||
НормализоватьСлово(Слово);
|
||||
|
||||
Если Не ЗначениеЗаполнено(Слово) Или Не НайтиКириллицу(Слово) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
СуществующееЗначение = Список.НайтиПоЗначению(Слово);
|
||||
|
||||
Если СуществующееЗначение = Неопределено Тогда
|
||||
Список.Добавить(Слово, СтрДлина(Слово));
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура НормализоватьСлово(Слово)
|
||||
|
||||
Слово = СокрЛП(Слово);
|
||||
|
||||
Нормализовано = Ложь;
|
||||
|
||||
Пока Не Нормализовано Цикл
|
||||
|
||||
ПервыйСимвол = Ложь;
|
||||
ПоследнийСимвол = Ложь;
|
||||
|
||||
Для Каждого Символ Из МассивСимволов Цикл
|
||||
|
||||
ПервыйСимвол = СтрНачинаетсяС(Слово, Символ);
|
||||
ПоследнийСимвол = СтрЗаканчиваетсяНа(Слово, Символ);
|
||||
|
||||
Если ПервыйСимвол Или ПоследнийСимвол Тогда
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если ПервыйСимвол Тогда
|
||||
Слово = Прав(Слово, СтрДлина(Слово) - 1);
|
||||
КонецЕсли;
|
||||
|
||||
Если ПоследнийСимвол Тогда
|
||||
Слово = Лев(Слово, СтрДлина(Слово) - 1);
|
||||
КонецЕсли;
|
||||
|
||||
Если Не ПервыйСимвол И Не ПоследнийСимвол Тогда
|
||||
Нормализовано = Истина;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Слово = СокрЛП(Слово);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция НайтиКириллицу(Знач Слово)
|
||||
|
||||
Алфавит = Инструменты.ПолучитьАлфавит();
|
||||
СловоНРег = НРег(Слово);
|
||||
|
||||
Для Каждого Буква Из Алфавит Цикл
|
||||
Если СтрНайти(СловоНРег, Буква) <> 0 Тогда
|
||||
Возврат Истина;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
|
||||
|
239
.github/workflows/os/internal/Modules/МетодыФорматирования.os
vendored
Normal file
239
.github/workflows/os/internal/Modules/МетодыФорматирования.os
vendored
Normal file
@ -0,0 +1,239 @@
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Процедура ОтформатироватьНабор(Знач МассивФайлов) Экспорт
|
||||
|
||||
Для Каждого Файл Из МассивФайлов Цикл
|
||||
ОтформатироватьМодуль(Файл.ПолноеИмя);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
Процедура ОтформатироватьМодуль(Знач ПутьКМодулю) Экспорт
|
||||
|
||||
ТекстовыйДокумент = Новый ТекстовыйДокумент();
|
||||
ТекстовыйДокумент.Прочитать(ПутьКМодулю, "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 Тогда
|
||||
ВыровнятьЗапятые(МассивСтрокБлока, ПолноеСоответствиеРасположений);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
41
.github/workflows/os/internal/Modules/ОбщиеМетоды.os
vendored
Normal file
41
.github/workflows/os/internal/Modules/ОбщиеМетоды.os
vendored
Normal file
@ -0,0 +1,41 @@
|
||||
#Использовать "./internal"
|
||||
|
||||
Функция ПолучитьДанныеПроекта() Экспорт
|
||||
|
||||
ФайлДанныхПроекта = "./service/project.json";
|
||||
|
||||
ДанныеПроекта = Инструменты.ПрочитатьФайлJSON(ФайлДанныхПроекта);
|
||||
ОбновитьНомерВерсии(ДанныеПроекта);
|
||||
|
||||
Инструменты.ЗаписатьФайлJSON(ФайлДанныхПроекта, ДанныеПроекта);
|
||||
|
||||
Возврат ДанныеПроекта;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ОбновитьНомерВерсии(ДанныеПроекта)
|
||||
|
||||
Корень = ДанныеПроекта["root"];
|
||||
ОсновнойЯзык = ДанныеПроекта["mainLang"];
|
||||
КаталогКонфигурации = ДанныеПроекта["configurationSrc"];
|
||||
|
||||
ОсновнойПутьИсходников = Корень + ОсновнойЯзык + "/";
|
||||
ПутьКонфигурации = ОсновнойПутьИсходников + КаталогКонфигурации;
|
||||
ПутьMDO = ПутьКонфигурации + "Configuration/Configuration.mdo";
|
||||
|
||||
Версия = "";
|
||||
|
||||
ЧтениеДанныхКонфигурации = Новый ЧтениеXML();
|
||||
ЧтениеДанныхКонфигурации.ОткрытьФайл(ПутьMDO);
|
||||
|
||||
Пока ЧтениеДанныхКонфигурации.Прочитать() Цикл
|
||||
Если Строка(ЧтениеДанныхКонфигурации.Имя) = "version" Тогда
|
||||
ЧтениеДанныхКонфигурации.Прочитать();
|
||||
Версия = Строка(ЧтениеДанныхКонфигурации.Значение);
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
ДанныеПроекта.Вставить("version", Версия);
|
||||
|
||||
КонецПроцедуры
|
File diff suppressed because it is too large
Load Diff
11
service/project.json
Normal file
11
service/project.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"root": "./src/",
|
||||
"mainLang": "ru",
|
||||
"packageSrc": "OInt/",
|
||||
"configurationSrc": "OPI/src/",
|
||||
"dictionariesSrc": "./service/dictionaries/",
|
||||
"version": "1.11.1",
|
||||
"additionalLangs": [
|
||||
"en"
|
||||
]
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user