1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2024-12-29 02:57:35 +02:00
OpenIntegrations/ci/os/docs_extract.os
2024-09-16 19:14:17 +03:00

169 lines
8.1 KiB
Plaintext

Процедура ИзвлечениеДанных()
ПутьКДокам = "./docs/en/md";
ПутьКПримерам = "./docs/en/examples/";
ПутьКРезультатам = "./docs/en/results/";
ПутьКДанным = "./docs/en/data/";
КаталогиБиблиотек = НайтиФайлы(ПутьКДокам, "*", Ложь);
Для Каждого Каталог Из КаталогиБиблиотек Цикл
ФайлыДокументации = НайтиФайлы(Каталог.ПолноеИмя, "*.md", Истина);
ИмяБиблиотеки = Каталог.Имя;
Для Каждого Документ Из ФайлыДокументации Цикл
ТекущийДокумент = Новый ТекстовыйДокумент();
ТекущийДокумент.Прочитать(Документ.ПолноеИмя, "UTF-8");
СоответствиеДанных = Новый Соответствие;
ЗаписьПримера = Ложь;
ЗаписьРезультата = Ложь;
Пример = "";
Результат = "";
ИмяФункции = "";
Для Н = 1 По ТекущийДокумент.КоличествоСтрок() Цикл
ТекущаяСтрока = СокрЛП(ТекущийДокумент.ПолучитьСтроку(Н));
Если СтрНачинаетсяС(ТекущаяСтрока, "*Function ")
Или СтрНачинаетсяС(ТекущаяСтрока, "`Function ") Тогда
ИмяФункции = СтрЗаменить(ТекущаяСтрока, "*Function ", "");
ИмяФункции = СтрЗаменить(ИмяФункции, "`Function ", "");
ИмяФункции = Лев(ИмяФункции, СтрНайти(ИмяФункции, "(") - 1);
КонецЕсли;
Если СтрНачинаетсяС(ТекущаяСтрока, "```bsl") Тогда
ЗаписьПримера = Истина;
ИначеЕсли СтрНачинаетсяС(ТекущаяСтрока, "```json") Тогда
ЗаписьРезультата = Истина;
ИначеЕсли СтрНачинаетсяС(ТекущаяСтрока, "```") Тогда
ЗаписьРезультата = Ложь;
ЗаписьПримера = Ложь;
Иначе
Если ЗаписьПримера Тогда
Пример = Пример + " " + ТекущаяСтрока + Символы.ПС;
ОпределитьНаличиеДанных(СоответствиеДанных, ТекущаяСтрока);
КонецЕсли;
Если ЗаписьРезультата Тогда
Результат = Результат + " " + ТекущаяСтрока + Символы.ПС;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если Не ЗначениеЗаполнено(ИмяФункции) Тогда
Сообщить("Документ без имени функции: " + Документ.ПолноеИмя);
Продолжить;
КонецЕсли;
Если ЗначениеЗаполнено(СокрЛП(Результат)) Тогда
ПутьБиблиотеки = ПутьКРезультатам + СтрЗаменить(ИмяБиблиотеки, "_", "");
КаталогБиблиотеки = Новый Файл(ПутьБиблиотеки);
Если Не КаталогБиблиотеки.Существует() Тогда
СоздатьКаталог(ПутьБиблиотеки);
КонецЕсли;
ПутьРезультата = ПутьБиблиотеки + "/" + ИмяФункции + ".log";
ФайлРезультата = Новый Файл(ПутьРезультата);
Если ФайлРезультата.Существует() Тогда
Сообщить("Файл результата существует: " + ПутьРезультата);
Иначе
ДокументРезультата = Новый ТекстовыйДокумент();
ДокументРезультата.УстановитьТекст(Результат);
ДокументРезультата.Записать(ПутьРезультата);
Сообщить("Файл результата записан: " + ПутьРезультата);
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(СокрЛП(Пример)) Тогда
ПутьБиблиотеки = ПутьКПримерам + СтрЗаменить(ИмяБиблиотеки, "_", "");
КаталогБиблиотеки = Новый Файл(ПутьБиблиотеки);
Если Не КаталогБиблиотеки.Существует() Тогда
СоздатьКаталог(ПутьБиблиотеки);
КонецЕсли;
ПутьПримера = ПутьБиблиотеки + "/" + ИмяФункции + ".txt";
ФайлПримера = Новый Файл(ПутьПримера);
Если ФайлПримера.Существует() Тогда
Сообщить("Файл примера существует: " + ПутьПримера);
Иначе
ДокументПримера = Новый ТекстовыйДокумент();
ДокументПримера.УстановитьТекст(Пример);
ДокументПримера.Записать(ПутьПримера);
Сообщить("Файл примера записан: " + ПутьПримера);
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(СоответствиеДанных) Тогда
ПутьБиблиотеки = ПутьКДанным + СтрЗаменить(ИмяБиблиотеки, "_", "");
КаталогБиблиотеки = Новый Файл(ПутьБиблиотеки);
Если Не КаталогБиблиотеки.Существует() Тогда
СоздатьКаталог(ПутьБиблиотеки);
КонецЕсли;
ПутьДанных = ПутьБиблиотеки + "/" + ИмяФункции + ".json";
ФайлДанных = Новый Файл(ПутьДанных);
Если ФайлДанных.Существует() Тогда
Сообщить("Файл данных существует: " + ПутьДанных);
Иначе
ЗаписьJSON = Новый ЗаписьJSON();
ЗаписьJSON.ОткрытьФайл(ПутьДанных);
ЗаписатьJSON(ЗаписьJSON, СоответствиеДанных);
ЗаписьJSON.Закрыть();
Сообщить("Файл данных записан: " + ПутьДанных);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура ОпределитьНаличиеДанных(СоответствиеДанных, Знач ТекущаяСтрока)
ОбрабатываемаяСтрока = СокрЛП(ТекущаяСтрока);
Если СтрНайти(ТекущаяСтрока, "=") = 0 Тогда
Возврат;
КонецЕсли;
ЕстьДанные = СтрНайти(ТекущаяСтрока, "New") = 0
И СтрНайти(ТекущаяСтрока, "OPI") = 0
И СтрНайти(ТекущаяСтрока, "Request.") = 0;
Если ЕстьДанные Тогда
ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока, """", "");
ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока, ";", "");
МассивДанных = СтрРазделить(ОбрабатываемаяСтрока, "=", Ложь);
Если МассивДанных.Количество() = 2 Тогда
СоответствиеДанных.Вставить(СокрЛП(МассивДанных[0]), СокрЛП(МассивДанных[1]));
КонецЕсли;
КонецЕсли;
КонецПроцедуры
ИзвлечениеДанных();