1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2024-12-23 02:06:12 +02:00
OpenIntegrations/.github/workflows/os/docs_main.os
2024-06-21 10:01:09 +03:00

831 lines
39 KiB
Plaintext

#Использовать osparser
#Использовать cmdline
Перем ТекущийМодуль;
Перем Парсер;
Перем Расположение;
Перем СПодкаталогами;
Перем КаталогДокументации;
Перем КаталогЛокализации;
Перем КаталогЛогов;
Перем КаталогПримеров;
Перем КаталогЗначений;
Перем КаталогCLI;
Перем СписокОбластей;
Перем ТекущаяОбласть;
Перем СчетчикОбласти;
Перем Словарь;
Перем Транслитация;
Перем СчетчикБиблиотеки;
Перем СоответствиеЗаголовков;
Процедура ПриСозданииОбъекта()
Расположение = "./src/ru/OInt";
СПодкаталогами = Истина;
КаталогДокументации = "./docs/ru/md";
КаталогЛокализации = "./docs/en/md";
КаталогЛогов = "./docs/ru/results/";
КаталогПримеров = "./docs/ru/examples/";
КаталогЗначений = "./docs/ru/data/";
КаталогCLI = "./docs/ru/cli/";
ПутьКСловарю = "./service/dictionaries/en.json";
СписокОбластей = Новый СписокЗначений();
ТекущаяОбласть = "";
СчетчикОбласти = 0;
СоответствиеЗаголовков = Новый Соответствие();
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.ОткрытьФайл(ПутьКСловарю);
Словарь = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
ПолучитьТаблицуТранслитации();
ПроверитьСоздатьКаталог(КаталогДокументации);
СоздатьФайлыДокументации();
ПеревестиДокументацию();
КонецПроцедуры
#Область СлужебныеПроцедурыИФункции
#Область ФормированиеДокументации
Процедура СоздатьФайлыДокументации()
ОбщийМассивМодулей = Новый Массив;
ФайлыМодулей = НайтиФайлы(Расположение, "*.os", СПодкаталогами);
Для Каждого Модуль Из ФайлыМодулей Цикл
Если Модуль.ИмяБезРасширения = "OPI_YandexID"
Или Модуль.ИмяБезРасширения = "OPI_GoogleWorkspace" Тогда
Продолжить;
КонецЕсли;
ОбщийМассивМодулей.Добавить(Модуль);
КонецЦикла;
Для Каждого Модуль Из ОбщийМассивМодулей Цикл
ТекущийМодуль = Новый ТекстовыйДокумент();
ТекущийМодуль.Прочитать(Модуль.ПолноеИмя);
РазобратьМодуль(ТекущийМодуль, Модуль.ИмяБезРасширения);
КонецЦикла;
КонецПроцедуры
Процедура СоздатьСтраницуДокументации(СтруктураМетода, Счетчик = 1)
Раздел = СтрЗаменить(СтруктураМетода["Каталог"], "_", "");
Результат = ПолучитьРезультатМетода(Раздел, СтруктураМетода["ИмяМетода"]);
Область = СтруктураМетода["Область"];
Если ТекущаяОбласть <> Область Тогда
ТекущаяОбласть = Область;
СчетчикОбласти = 1;
СчетчикБиблиотеки = СчетчикБиблиотеки + 1;
КонецЕсли;
ТранслитированноеИмя = ПеревестиИмя(СтруктураМетода["ИмяМетода"]);
ТранслитированнаяОбласть = ПеревестиИмя(Область);
ТранслитированноеИмя = СтрЗаменить(Синонимайзер(ТранслитированноеИмя), " ", "-");
ТранслитированнаяОбласть = СтрЗаменить(Синонимайзер(ТранслитированнаяОбласть), " ", "-");
СинонимОбласти = СтрЗаменить(ТранслитированнаяОбласть, "-", " ");
ЗаголовокОбласти = Синонимайзер(Область);
СоответствиеЗаголовков.Вставить(ЗаголовокОбласти, СинонимОбласти);
ИмяМодуляБезПрефикса = СтрЗаменить(СтруктураМетода["ИмяМодуля"], "OPI_", "");
КаталогБиблиотеки = КаталогДокументации + "/" + СтруктураМетода["Каталог"];
КаталогОбласти = КаталогБиблиотеки + "/" + ТранслитированнаяОбласть;
КаталогКартинок = КаталогОбласти + "/" + "img";
ПутьДанных = КаталогЗначений + ИмяМодуляБезПрефикса + "/" + СтруктураМетода["ИмяМетода"] + ".json";
ФайлДанных = Новый Файл(ПутьДанных);
Если ФайлДанных.Существует() Тогда
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.ОткрытьФайл(ПутьДанных);
СтруктураЗначений = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
Иначе
СтруктураЗначений = Новый Соответствие();
КонецЕсли;
ПроверитьСоздатьКаталог(КаталогБиблиотеки);
ПроверитьСоздатьКаталог(КаталогОбласти);
ПроверитьСоздатьКаталог(КаталогКартинок);
СтруктураКатегории = Новый Структура("label,position", ЗаголовокОбласти, Строка(СчетчикБиблиотеки));
ФайлКатегории = КаталогОбласти + "/_category_.json";
Запись = Новый ЗаписьJSON;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто);
Запись.ОткрытьФайл(ФайлКатегории, , , ПараметрыЗаписиJSON);
ЗаписатьJSON(Запись, СтруктураКатегории);
Запись.Закрыть();
Макет = Новый ТекстовыйДокумент();
Макет.Прочитать("./.github/workflows/os/template.md", "UTF-8");
Макет = Макет.ПолучитьТекст();
Макет = СтрЗаменить(Макет, "@Счетчик" , Строка(СчетчикОбласти));
Макет = СтрЗаменить(Макет, "@Заголовок" , СтруктураМетода["Заголовок"]);
Макет = СтрЗаменить(Макет, "@Описание" , СтруктураМетода["Описание"]);
Макет = СтрЗаменить(Макет, "@Объявление" , СтруктураМетода["Объявление"]);
Макет = СтрЗаменить(Макет, "@ВозвращаемоеЗначение", СтруктураМетода["ВозвращаемоеЗначение"]);
Макет = СтрЗаменить(Макет, "@Результат" , Результат);
ТаблицаПараметров = "";
Вызов1С = ПолучитьВызов1С(СтруктураМетода["ИмяМодуля"], СтруктураМетода["ИмяМетода"]);
ПутьCLI = КаталогCLI + ИмяМодуляБезПрефикса + "/" + СтруктураМетода["ИмяМетода"] + ".txt";
ФайлCLI = Новый Файл(ПутьCLI);
ВызовCLI = "";
Если Не ФайлCLI.Существует() Тогда
КаталогТекущиегоCLI = КаталогCLI + ИмяМодуляБезПрефикса;
ФайлКаталога = Новый Файл(КаталогТекущиегоCLI);
Если Не ФайлКаталога.Существует() Тогда
СоздатьКаталог(КаталогТекущиегоCLI);
КонецЕсли;
ВызовCLI = "oint " + СтруктураМетода["Команда"] + " " + СтруктураМетода["ИмяМетода"];
Для каждого ПараметрМетода Из СтруктураМетода["Параметры"] Цикл
Если Не ЗначениеЗаполнено(ПараметрМетода.Опция) Или Не СтруктураМетода["ЕстьCLI"] Тогда
Сообщить("Метод не имеет опции: " + СтруктураМетода["Заголовок"]);
Возврат;
КонецЕсли;
ТаблицаПараметров = ТаблицаПараметров + " | "
+ ПараметрМетода.Имя + " | "
+ ПараметрМетода.Опция + " | "
+ ПараметрМетода.Типы + " | "
+ ПараметрМетода.Описание + " |"
+ Символы.ПС;
ВызовCLI = ВызовCLI + " " + ПараметрМетода.Опция + " ";
ВызовCLI = ВызовCLI + ОпределитьЗначениеОпции(ПараметрМетода.Опция, СтруктураЗначений[ПараметрМетода.Имя]);
КонецЦикла;
ВызовCLI = СокрЛП(ВызовCLI);
ТекстCLI = Новый ТекстовыйДокумент();
ТекстCLI.УстановитьТекст(ВызовCLI);
ТекстCLI.Записать(ПутьCLI);
Иначе
Для каждого ПараметрМетода Из СтруктураМетода["Параметры"] Цикл
Если Не ЗначениеЗаполнено(ПараметрМетода.Опция) Или Не СтруктураМетода["ЕстьCLI"] Тогда
Сообщить("Метод не имеет опции: " + СтруктураМетода["Заголовок"]);
Возврат;
КонецЕсли;
ТаблицаПараметров = ТаблицаПараметров + " | "
+ ПараметрМетода.Имя + " | "
+ ПараметрМетода.Опция + " | "
+ ПараметрМетода.Типы + " | "
+ ПараметрМетода.Описание + " |"
+ Символы.ПС;
КонецЦикла;
ТекстCLI = Новый ТекстовыйДокумент();
ТекстCLI.Прочитать(ПутьCLI);
Для Н = 1 По ТекстCLI.КоличествоСтрок() Цикл
ТекущаяСтрока = СокрЛП(ТекстCLI.ПолучитьСтроку(Н));
Если ЗначениеЗаполнено(ТекущаяСтрока) Тогда
ВызовCLI = ВызовCLI + " " + ТекущаяСтрока + Символы.ПС;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(ВызовCLI) Тогда
ВызовCLI = Лев(ВызовCLI, СтрДлина(ВызовCLI) - 1);
КонецЕсли;
КонецЕсли;
Макет = СтрЗаменить(Макет, "@Вызов1С" , Вызов1С);
Макет = СтрЗаменить(Макет, "@ВызовCLI" , ВызовCLI);
Макет = СтрЗаменить(Макет, "@ТаблицаПараметров", ТаблицаПараметров);
НовыйДокумент = Новый ТекстовыйДокумент();
НовыйДокумент.УстановитьТекст(Макет);
НовыйДокумент.Записать(КаталогОбласти + "/" + ТранслитированноеИмя + ".md");
СчетчикОбласти = СчетчикОбласти + 1;
КонецПроцедуры
#КонецОбласти
#Область РазборМодуля
Процедура РазобратьМодуль(ТекущийМодуль, ИмяМодуля)
СчетчикБиблиотеки = 1;
ТекстМодуля = ТекущийМодуль.ПолучитьТекст();
СтруктураОбщихДанных = Новый Структура();
СтруктураОбщихДанных.Вставить("ИмяМодуля", ИмяМодуля);
ПолучитьДанныеМодуля(СтруктураОбщихДанных, ТекущийМодуль);
Если Не ЗначениеЗаполнено(СтруктураОбщихДанных["Библиотека"]) Тогда
Возврат;
КонеЦесли;
Парсер = Новый ПарсерВстроенногоЯзыка;
СтруктураМодуля = Парсер.Разобрать(ТекстМодуля);
Для Каждого Метод Из СтруктураМодуля.Объявления Цикл
Если Метод.Тип = "ОбъявлениеМетода" И Метод.Сигнатура.Экспорт = Истина Тогда
РазобратьМетод(ТекущийМодуль, Метод, СтруктураОбщихДанных);
КонецЕсли;
Если Метод.Тип = "ИнструкцияПрепроцессораОбласть" Тогда
СписокОбластей.Добавить(Метод.Начало.НомерСтроки, Метод.Имя);
КонецЕсли;
КонецЦикла;
СписокОбластей.СортироватьПоЗначению();
КонецПроцедуры
Процедура ПолучитьДанныеМодуля(СтруктураОбщихДанных, ТекущийМодуль)
Имя = ТекущийМодуль.ПолучитьСтроку(2);
CLI = ТекущийМодуль.ПолучитьСтроку(3);
Если СтрНайти(Имя, "Lib") = 0 Тогда
Имя = "";
Иначе
Имя = СтрЗаменить(Имя, "// Lib:", "");
Имя = СокрЛП(Имя);
КонецЕсли;
Если СтрНайти(CLI, "CLI") = 0 Тогда
CLI = "none";
Иначе
CLI = СтрЗаменить(CLI, "// CLI:", "");
CLI = СокрЛП(CLI);
КонецЕсли;
Каталог = СтрЗаменить(Имя, " ", "_");
СтруктураОбщихДанных.Вставить("Библиотека", Имя);
СтруктураОбщихДанных.Вставить("Команда" , CLI);
СтруктураОбщихДанных.Вставить("Каталог" , Каталог);
КонецПроцедуры
#КонецОбласти
#Область РазборМетода
Процедура РазобратьМетод(ТекстовыйДокумент, Метод, СтруктураДанных)
НомерСтроки = Метод.Начало.НомерСтроки;
ИмяМетода = Метод.Сигнатура.Имя;
Объявление = "";
Для Н = НомерСтроки По Метод.Конец.НомерСтроки Цикл
Часть = СокрЛП(ТекстовыйДокумент.ПолучитьСтроку(Н));
Объявление = Объявление + Часть;
Если Не ЗначениеЗаполнено(Часть) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Для Каждого Область Из СписокОбластей Цикл
Если НомерСтроки > Область.Значение Тогда
СтруктураДанных.Вставить("Область", Область.Представление);
КонецЕсли;
КонецЦикла;
МассивКомментария = ПарсингКомментария(ТекстовыйДокумент, НомерСтроки, СтруктураДанных);
МассивПараметров = Новый Массив;
МассивОписанийПараметров = Новый Массив;
Если МассивКомментария.Количество() = 0 Тогда
Возврат;
КонецЕсли;
СформироватьСтруктуруМетода(МассивКомментария, МассивПараметров, СтруктураДанных);
СформироватьМассивОписанийПараметров(МассивПараметров, Метод, МассивОписанийПараметров);
СтруктураДанных.Вставить("ИмяМетода" , ИмяМетода);
СтруктураДанных.Вставить("Объявление", Объявление);
СтруктураДанных.Вставить("Параметры" , МассивОписанийПараметров);
СоздатьСтраницуДокументации(СтруктураДанных);
КонецПроцедуры
Функция ПарсингКомментария(Знач ТекстовыйДокумент, Знач НомерСтроки, СтруктураДанных)
ТекущаяСтрока = ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки - 1);
ТекстКомментария = ТекущаяСтрока;
Счетчик = 1;
Пока СтрНайти(ТекущаяСтрока, "//") > 0 Цикл
Счетчик = Счетчик + 1;
ТекущаяСтрока = ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки - Счетчик);
ТекстКомментария = ТекущаяСтрока + Символы.ПС + ТекстКомментария;
КонецЦикла;
Если СтрНайти(ТекстКомментария, "!NOCLI") > 0 Тогда
СтруктураДанных.Вставить("ЕстьCLI", Ложь);
Иначе
СтруктураДанных.Вставить("ЕстьCLI", Истина);
КонецЕсли;
МассивКомментария = СтрРазделить(ТекстКомментария, "//", Ложь);
Если МассивКомментария.Количество() = 0 Тогда
Возврат Новый Массив;
Иначе
МассивКомментария.Удалить(0);
КонецЕсли;
Возврат МассивКомментария;
КонецФункции
Процедура СформироватьСтруктуруМетода(Знач МассивКомментария, МассивПараметров, СтруктураДанных)
ОписаниеМетода = "";
ЗаписыватьПараметры = Ложь;
ЗаписыватьОписание = Истина;
Счетчик = 0;
Для Каждого СтрокаКомментария Из МассивКомментария Цикл
Счетчик = Счетчик + 1;
Если Не ЗначениеЗаполнено(СокрЛП(СтрокаКомментария)) Тогда
ЗаписыватьОписание = Ложь;
КонецЕсли;
Если ЗаписыватьОписание = Истина И Счетчик > 1 Тогда
ОписаниеМетода = СокрЛП(ОписаниеМетода) + " " + СокрЛП(СтрокаКомментария);
КонецЕсли;
Если СтрНайти(СтрокаКомментария, "Параметры:") > 0 Тогда
ЗаписыватьПараметры = Истина;
ЗаписыватьОписание = Ложь;
ИначеЕсли СтрНайти(СтрокаКомментария, "Возвращаемое значение:") > 0 Тогда
СтруктураДанных.Вставить("ВозвращаемоеЗначение", МассивКомментария[Счетчик]);
Прервать;
ИначеЕсли ЗаписыватьПараметры = Истина
И ЗначениеЗаполнено(СокрЛП(СтрокаКомментария))
И Не СтрНачинаетсяС(СокрЛП(СтрокаКомментария), "*") = 0 Тогда
МассивПараметров.Добавить(СтрокаКомментария);
Иначе
Продолжить;
КонецЕсли;
КонецЦикла;
СтруктураДанных.Вставить("Описание" , ОписаниеМетода);
СтруктураДанных.Вставить("Заголовок", СтрЗаменить(СокрЛП(МассивКомментария[0]), "!NOCLI", ""));
КонецПроцедуры
Процедура СформироватьМассивОписанийПараметров(Знач МассивПараметров, Знач Метод, МассивОписанийПараметров)
Разделитель = "-";
Для Каждого ПараметрМетода Из МассивПараметров Цикл
МассивЭлементовПараметра = СтрРазделить(ПараметрМетода, Разделитель, Ложь);
КоличествоЭлементов = МассивЭлементовПараметра.Количество();
Для Н = 0 По МассивЭлементовПараметра.ВГраница() Цикл
МассивЭлементовПараметра[Н] = СокрЛП(МассивЭлементовПараметра[Н]);
КонецЦикла;
Имя1С = МассивЭлементовПараметра[0];
Если КоличествоЭлементов >= 4 Тогда
Имя = "--" + МассивЭлементовПараметра[3];
Иначе
Имя = "";
Конецесли;
Типы = МассивЭлементовПараметра[1];
Описание = ?(КоличествоЭлементов >= 5, МассивЭлементовПараметра[4], МассивЭлементовПараметра[2]);
СтруктураПараметра = Новый Структура;
СтруктураПараметра.Вставить("Имя" , Имя1С);
СтруктураПараметра.Вставить("Опция" , Имя);
СтруктураПараметра.Вставить("Типы" , Типы);
СтруктураПараметра.Вставить("Описание" , Описание);
СтруктураПараметра.Вставить("ЗначениеПоУмолчанию", ПолучитьЗначениеПараметраПоУмолчанию(Имя1С, Метод));
МассивОписанийПараметров.Добавить(СтруктураПараметра);
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область Инструменты
Функция ПолучитьВызов1С(Модуль, Метод)
Результат = "";
ИмяКаталога = СтрЗаменить(Модуль, "OPI_", "");
ИмяФайла = Метод + ".txt";
ПутьПримера = КаталогПримеров + ИмяКаталога + "/" + ИмяФайла;
ФайлПримера = Новый Файл(ПутьПримера);
Если ФайлПримера.Существует() Тогда
ТекстПримера = Новый ТекстовыйДокумент();
ТекстПримера.Прочитать(ПутьПримера);
Результат = "";
Для Н = 1 По ТекстПримера.КоличествоСтрок() Цикл
ТекущаяСтрока = СокрЛП(ТекстПримера.ПолучитьСтроку(Н));
Результат = Результат + " " + ТекущаяСтрока + Символы.ПС;
КонецЦикла;
Если ЗначениеЗаполнено(Результат) Тогда
Результат = Лев(Результат, СтрДлина(Результат) - 1);
Пока СтрНайти(Результат, Символы.ПС + Символы.ПС) <> 0 Цикл
Результат = СтрЗаменить(Результат, Символы.ПС + Символы.ПС, Символы.ПС);
КонецЦикла;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ОпределитьЗначениеОпции(Опция, Значение = "")
Если ЗначениеЗаполнено(Значение) Тогда
Опция = """" + Строка(Значение) + """";
Иначе
Опция = "%" + СтрЗаменить(Опция, "-", "") + "%";
КонецЕсли;
Возврат Опция;
КонецФункции
Процедура ПроверитьСоздатьКаталог(Путь)
Каталог = Новый Файл(Путь);
Если Не Каталог.Существует() Тогда
СоздатьКаталог(Путь);
КонецЕсли;
КонецПроцедуры
Функция ПолучитьЗначениеПараметраПоУмолчанию(Знач Имя, Знач Метод)
Значение = "";
Для Каждого ПараметрМетода Из Метод.Сигнатура.Параметры Цикл
Если ПараметрМетода.Имя = Имя Тогда
ЗначениеПараметра = ПараметрМетода.Значение;
Если ЗначениеЗаполнено(ЗначениеПараметра) Тогда
Попытка
Значение = ЗначениеПараметра["Элементы"][0]["Значение"];
Исключение
Значение = ЗначениеПараметра.Значение;
КонецПопытки;
Значение = ?(ЗначениеЗаполнено(Значение), Значение, "Пустое значение");
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Значение;
КонецФункции
Функция ТранслитироватьСтроку(Знач Значение)
Значение = нРег(Значение);
Для Каждого ЗаменяемыйСимвол Из Транслитация Цикл
Значение = СтрЗаменить(Значение, ЗаменяемыйСимвол.Ключ, ЗаменяемыйСимвол.Значение);
КонецЦикла;
Значение = ВРег(Лев(Значение,1)) + Сред(Значение,2);
Возврат Значение;
КонецФункции
Функция ПеревестиИмя(Значение)
ПереведенноеИмя = Словарь[Значение];
Если Не ЗначениеЗаполнено(ПереведенноеИмя) Тогда
ПереведенноеИмя = ТранслитироватьСтроку(Значение);
ПереведенноеИмя = СтрЗаменить(ПереведенноеИмя, "(", "");
ПереведенноеИмя = СтрЗаменить(ПереведенноеИмя, ")", "");
ПереведенноеИмя = СтрЗаменить(ПереведенноеИмя, "-", " ");
КонецЕсли;
Возврат ПереведенноеИмя;
КонецФункции
Функция Синонимайзер(ИмяРеквизита)
Перем Синоним, ъ, Символ, ПредСимвол, СледСимвол, Прописная, ПредПрописная, СледПрописная, ДлинаСтроки;
Синоним = ВРег(Сред(ИмяРеквизита, 1, 1));
ДлинаСтроки = СтрДлина(ИмяРеквизита);
Для ъ=2 По ДлинаСтроки Цикл
Символ = Сред(ИмяРеквизита, ъ, 1);
ПредСимвол = Сред(ИмяРеквизита, ъ-1, 1);
СледСимвол = Сред(ИмяРеквизита, ъ+1, 1);
Прописная = Символ = ВРег(Символ);
ПредПрописная = ПредСимвол = ВРег(ПредСимвол);
СледПрописная = СледСимвол = ВРег(СледСимвол);
// Варианты:
Если НЕ ПредПрописная И Прописная Тогда
Синоним = Синоним + " " + Символ;
ИначеЕсли Прописная И НЕ СледПрописная Тогда
Синоним = Синоним + " " + Символ;
Иначе
Синоним = Синоним + Символ;
Конецесли;
КонецЦикла;
Синоним = ВРег(Лев(Синоним,1)) + нРег(Сред(Синоним,2));
Возврат Синоним;
КонецФункции
Функция ПолучитьРезультатМетода(Знач Раздел, Знач Метод)
Результат = "";
ПутьКаталогаРаздела = КаталогЛогов + Раздел;
КаталогРаздела = Новый Файл(ПутьКаталогаРаздела);
Если Не КаталогРаздела.Существует() Тогда
Возврат Результат;
КонецЕсли;
ПутьЛога = ПутьКаталогаРаздела + "/" + Метод + ".log";
ФайлЛога = Новый Файл(ПутьЛога);
Если Не ФайлЛога.Существует() Тогда
Возврат Результат;
КонецЕсли;
ДокументЛога = Новый ТекстовыйДокумент();
ДокументЛога.Прочитать(ПутьЛога);
Результат = "";
Для Н = 1 По ДокументЛога.КоличествоСтрок() Цикл
ТекущаяСтрока = ДокументЛога.ПолучитьСтроку(Н);
Если ЗначениеЗаполнено(ТекущаяСтрока) Тогда
Результат = Результат + ТекущаяСтрока + Символы.ПС;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(Результат) Тогда
Результат = Лев(Результат, СтрДлина(Результат) - 1);
КонецЕсли;
Возврат СокрЛП(Результат);
КонецФункции
Процедура ПолучитьТаблицуТранслитации()
Транслитация = Новый Соответствие();
Транслитация.Вставить("а", "a");
Транслитация.Вставить("б", "b");
Транслитация.Вставить("в", "v");
Транслитация.Вставить("г", "g");
Транслитация.Вставить("д", "d");
Транслитация.Вставить("е", "e");
Транслитация.Вставить("ё", "e");
Транслитация.Вставить("ж", "zh");
Транслитация.Вставить("з", "z");
Транслитация.Вставить("и", "i");
Транслитация.Вставить("й", "y");
Транслитация.Вставить("к", "k");
Транслитация.Вставить("л", "l");
Транслитация.Вставить("м", "m");
Транслитация.Вставить("н", "n");
Транслитация.Вставить("о", "o");
Транслитация.Вставить("п", "p");
Транслитация.Вставить("р", "r");
Транслитация.Вставить("с", "s");
Транслитация.Вставить("т", "t");
Транслитация.Вставить("у", "u");
Транслитация.Вставить("ф", "f");
Транслитация.Вставить("х", "h");
Транслитация.Вставить("ц", "ts");
Транслитация.Вставить("ч", "ch");
Транслитация.Вставить("ш", "sh");
Транслитация.Вставить("щ", "sch");
Транслитация.Вставить("ъ", "");
Транслитация.Вставить("ы", "y");
Транслитация.Вставить("ь", "");
Транслитация.Вставить("э", "e");
Транслитация.Вставить("ю", "u");
Транслитация.Вставить("я", "ya");
КонецПроцедуры
Процедура СкопироватьФайлы(Знач КаталогИсточник, Знач КаталогПриемник)
СоздатьКаталог(КаталогПриемник);
МассивФайлов = НайтиФайлы(КаталогИсточник, "*.*", Истина);
Для Каждого Файл Из МассивФайлов Цикл
Если СтрНайти(Файл.ПолноеИмя, "cli") <> 0 Тогда
Продолжить;
КонецЕсли;
ПолноеИмяИсточник = Файл.ПолноеИмя;
ПолноеИмяПриемник = КаталогПриемник + СтрЗаменить(Файл.ПолноеИмя, КаталогИсточник, "");
Если Файл.ЭтоКаталог() Тогда
СоздатьКаталог(ПолноеИмяПриемник);
Иначе
Если Файл.Расширение = ".gif" Или Файл.Расширение = ".png" Тогда
ФайлПриемник = Новый Файл(ПолноеИмяПриемник);
Если ФайлПриемник.Существует() Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
КопироватьФайл(ПолноеИмяИсточник, ПолноеИмяПриемник);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область Локализация
Процедура ПеревестиДокументацию()
Сообщить("////////////////////////////////////////////////");
Сообщить("");
Сообщить("Начало перевода...");
Сообщить("");
СоответствиеЗаголовков.Вставить("Начало работы", "Getting started");
ФайлКаталогаДокументации = Новый Файл(КаталогДокументации);
ФайлКаталогаЛокализации = Новый Файл(КаталогЛокализации);
//УдалитьФайлы(ФайлКаталогаЛокализации.ПолноеИмя);
СкопироватьФайлы(ФайлКаталогаДокументации.ПолноеИмя, ФайлКаталогаЛокализации.ПолноеИмя);
ТаблицаСловаря = Новый ТаблицаЗначений();
ТаблицаСловаря.Колонки.Добавить("Ключ");
ТаблицаСловаря.Колонки.Добавить("Значение");
ТаблицаСловаря.Колонки.Добавить("Длина");
Для Каждого КлючевоеСлово Из Словарь Цикл
НоваяСтрокаСловаря = ТаблицаСловаря.Добавить();
НоваяСтрокаСловаря.Ключ = КлючевоеСлово.Ключ;
НоваяСтрокаСловаря.Значение = КлючевоеСлово.Значение;
НоваяСтрокаСловаря.Длина = СтрДлина(КлючевоеСлово.Ключ);
КонецЦикла;
ТаблицаСловаря.Сортировать("Длина УБЫВ");
ФайлыЛокализации = НайтиФайлы(ФайлКаталогаЛокализации.ПолноеИмя, "*.md", Истина);
JsonЛокализации = НайтиФайлы(ФайлКаталогаЛокализации.ПолноеИмя, "*.json", Истина);
JSЛокализации = НайтиФайлы(ФайлКаталогаЛокализации.ПолноеИмя, "*.js", Истина);
Для Каждого JSON из JsonЛокализации Цикл
ФайлыЛокализации.Добавить(JSON);
КонецЦикла;
Для Каждого JS из JSЛокализации Цикл
ФайлыЛокализации.Добавить(JS);
КонецЦикла;
Для Каждого Файл Из ФайлыЛокализации Цикл
Если Файл.ЭтоКаталог() Тогда
Продолжить;
КонецЕсли;
Если Файл.Имя = "_category_.json" Тогда
ФайлКатегории = Файл.ПолноеИмя;
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.ОткрытьФайл(ФайлКатегории);
СтруктураКатегории = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
ЛокализированныйЗаголовок = СоответствиеЗаголовков[СтруктураКатегории["label"]];
Если ЗначениеЗаполнено(ЛокализированныйЗаголовок) Тогда
СтруктураКатегории.Вставить("label", ЛокализированныйЗаголовок);
КонецЕсли;
Запись = Новый ЗаписьJSON;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто);
Запись.ОткрытьФайл(ФайлКатегории, , , ПараметрыЗаписиJSON);
ЗаписатьJSON(Запись, СтруктураКатегории);
Запись.Закрыть();
Иначе
ТекущийДокумент = Новый ТекстовыйДокумент();
ТекущийДокумент.Прочитать(Файл.ПолноеИмя, "UTF-8");
ТекстДокумента = ТекущийДокумент.ПолучитьТекст();
Для Каждого Слово Из ТаблицаСловаря Цикл
ТекстДокумента = СтрЗаменить(ТекстДокумента, Слово.Ключ, Слово.Значение);
КонецЦикла;
Пока СтрНайти(ТекстДокумента, " ") <> 0 Цикл
ТекстДокумента = СтрЗаменить(ТекстДокумента, " ", " ");
КонецЦикла;
ТекстДокумента = СтрЗаменить(ТекстДокумента, " ,", ",");
ТекущийДокумент.УстановитьТекст(ТекстДокумента);
ТекущийДокумент.Записать(Файл.ПолноеИмя);
КонецЕсли;
Для Каждого Буква Из Транслитация Цикл
Если СтрНайти(ТекстДокумента, Буква.Ключ) <> 0 Тогда
Сообщить("Ошибка перевода | " + Файл.ПолноеИмя);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Сообщить("Перевод завершен!");
КонецПроцедуры
#КонецОбласти
#КонецОбласти
//ПриСозданииОбъекта();