
Процедура ИзвлечениеДанных()
	
	ПутьКДокам       = "./docs/ru/md";
	ПутьКПримерам    = "./docs/ru/examples/";
	ПутьКРезультатам = "./docs/ru/results/";
	ПутьКДанным      = "./docs/ru/data/";

	КаталогиБиблиотек = НайтиФайлы(ПутьКДокам, "*", Ложь);

	Для Каждого Каталог Из КаталогиБиблиотек Цикл

		ФайлыДокументации = НайтиФайлы(Каталог.ПолноеИмя, "*.md", Истина);
		ИмяБиблиотеки     = Каталог.Имя;

		Для Каждого Документ Из ФайлыДокументации Цикл

			ТекущийДокумент = Новый ТекстовыйДокумент();
			ТекущийДокумент.Прочитать(Документ.ПолноеИмя, "UTF-8");

			СоответствиеДанных = Новый Соответствие;

			ЗаписьПримера    = Ложь;
			ЗаписьРезультата = Ложь;
			Пример           = "";
			Результат        = "";
			ИмяФункции       = "";
			Для Н = 1 По ТекущийДокумент.КоличествоСтрок() Цикл

				ТекущаяСтрока = СокрЛП(ТекущийДокумент.ПолучитьСтроку(Н));

				Если СтрНачинаетсяС(ТекущаяСтрока, "*Функция ") 
					Или СтрНачинаетсяС(ТекущаяСтрока, "Функция ") Тогда

					ИмяФункции = СтрЗаменить(ТекущаяСтрока, "*Функция ", "");
					ИмяФункции = СтрЗаменить(ИмяФункции, "Функция ", "");
					ИмяФункции = Лев(ИмяФункции, СтрНайти(ИмяФункции, "(") - 1);

				КонецЕсли;

				Если СтрНачинаетсяС(ТекущаяСтрока, "```bsl") Тогда
					ЗаписьПримера = Истина;
				ИначеЕсли СтрНачинаетсяС(ТекущаяСтрока, "```json") Тогда
					ЗаписьРезультата = Истина;
				ИначеЕсли СтрНачинаетсяС(ТекущаяСтрока, "```") Тогда
					ЗаписьРезультата = Ложь;
					ЗаписьПримера = Ложь;
				Иначе

					Если ЗаписьПримера Тогда
						Пример = Пример + "  " + ТекущаяСтрока + Символы.ПС;
						ОпределитьНаличиеДанных(СоответствиеДанных, ТекущаяСтрока);
					КонецЕсли;

					Если ЗаписьРезультата Тогда
						Результат = Результат + "  " + ТекущаяСтрока + Символы.ПС;
					КонецЕсли;

				КонецЕсли;

			КонецЦикла;

			Если Не ЗначениеЗаполнено(ИмяФункции) Тогда
				Сообщить("Документ без имени функции: " + Документ.ПолноеИмя);
				Продолжить;
			КонецЕсли;

			Если ЗначениеЗаполнено(СокрЛП(Результат)) Тогда

				ПутьБиблиотеки    = ПутьКРезультатам + СтрЗаменить(ИмяБиблиотеки, "_", "");
				КаталогБиблиотеки = Новый Файл(ПутьБиблиотеки);

				Если Не КаталогБиблиотеки.Существует() Тогда
					СоздатьКаталог(ПутьБиблиотеки);
				КонецЕсли;

				ПутьРезультата = ПутьБиблиотеки + "/" + ИмяФункции + ".log";
				ФайлРезультата = Новый Файл(ПутьРезультата);

				Если ФайлРезультата.Существует() Тогда
					Сообщить("Файл результата существует: " + ПутьРезультата);
				Иначе
					ДокументРезультата = Новый ТекстовыйДокумент();
					ДокументРезультата.УстановитьТекст(Результат);
					ДокументРезультата.Записать(ПутьРезультата);
					Сообщить("Файл результата записан: " + ПутьРезультата);
				КонецЕсли;

			КонецЕсли;

			Если ЗначениеЗаполнено(СокрЛП(Пример)) Тогда

				ПутьБиблиотеки    = ПутьКПримерам + СтрЗаменить(ИмяБиблиотеки, "_", "");
				КаталогБиблиотеки = Новый Файл(ПутьБиблиотеки);

				Если Не КаталогБиблиотеки.Существует() Тогда
					СоздатьКаталог(ПутьБиблиотеки);
				КонецЕсли;

				ПутьПримера = ПутьБиблиотеки + "/" + ИмяФункции + ".txt";
				ФайлПримера = Новый Файл(ПутьПримера);

				Если ФайлПримера.Существует() Тогда
					Сообщить("Файл примера существует: " + ПутьПримера);
				Иначе
					ДокументПримера = Новый ТекстовыйДокумент();
					ДокументПримера.УстановитьТекст(Пример);
					ДокументПримера.Записать(ПутьПримера);
					Сообщить("Файл примера записан: " + ПутьПримера);
				КонецЕсли;

			КонецЕсли;

			Если ЗначениеЗаполнено(СоответствиеДанных) Тогда

				ПутьБиблиотеки    = ПутьКДанным + СтрЗаменить(ИмяБиблиотеки, "_", "");
				КаталогБиблиотеки = Новый Файл(ПутьБиблиотеки);

				Если Не КаталогБиблиотеки.Существует() Тогда
					СоздатьКаталог(ПутьБиблиотеки);
				КонецЕсли;

				ПутьДанных = ПутьБиблиотеки + "/" + ИмяФункции + ".json";
				ФайлДанных = Новый Файл(ПутьДанных);

				Если ФайлДанных.Существует() Тогда
					Сообщить("Файл данных существует: " + ПутьДанных);
				Иначе
					ЗаписьJSON = Новый ЗаписьJSON();
					ЗаписьJSON.ОткрытьФайл(ПутьДанных);
					ЗаписатьJSON(ЗаписьJSON, СоответствиеДанных);
					ЗаписьJSON.Закрыть();
					Сообщить("Файл данных записан: " + ПутьДанных);
				КонецЕсли;

			КонецЕсли;
			

		КонецЦикла;

	КонецЦикла;

КонецПроцедуры

Процедура ОпределитьНаличиеДанных(СоответствиеДанных, Знач ТекущаяСтрока)

	ОбрабатываемаяСтрока = СокрЛП(ТекущаяСтрока);

	Если СтрНайти(ТекущаяСтрока, "=") = 0 Тогда
		Возврат;
	КонецЕсли;

	ЕстьДанные = СтрНайти(ТекущаяСтрока, "Новый") = 0 
		И СтрНайти(ТекущаяСтрока, "OPI") = 0
		И СтрНайти(ТекущаяСтрока, "Запрос.") = 0;

	Если ЕстьДанные Тогда

		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока, """", "");
		ОбрабатываемаяСтрока = СтрЗаменить(ОбрабатываемаяСтрока, ";", "");
		МассивДанных         = СтрРазделить(ОбрабатываемаяСтрока, "=", Ложь);

		Если МассивДанных.Количество() = 2 Тогда
			СоответствиеДанных.Вставить(СокрЛП(МассивДанных[0]), СокрЛП(МассивДанных[1]));
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

ИзвлечениеДанных();