Skip to content

Commit

Permalink
Возможность запуска как библиотека
Browse files Browse the repository at this point in the history
  • Loading branch information
ChernyakAI committed Mar 31, 2023
1 parent 2191c91 commit 86e4a9d
Show file tree
Hide file tree
Showing 6 changed files with 96 additions and 27 deletions.
38 changes: 37 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,40 @@
#### Обработчик офисных документов
Реализация специально придуманной задачи с целью ~~упороться желудями~~ пощупать [Осень](https://github.com/autumn-library/autumn), [OneScript](https://github.com/EvilBeaver/OneScript), [библиотеки](https://github.com/oscript-library) и вот это вот всё.

Поделка позволяет взять специально подготовленный [шаблон](templates/template1.docx) и заполнить его на основании [конфигурационного файла](config/example.json). Производится распаковка контейнера Office Open XML во временный каталог, разбирается файл document.xml, производится замена параметров в соответствии в прописанным в конфигурационном файле, затем собирается обратно и кладётся в выходной каталог.
Поделка позволяет взять специально подготовленный [шаблон](templates/template1.docx) и заполнить его на основании [конфигурационного файла](config/example.json). Производится распаковка контейнера Office Open XML во временный каталог, разбирается файл document.xml, производится замена параметров в соответствии в прописанным в конфигурационном файле, затем собирается обратно и кладётся в выходной каталог.

#### Варианты использования

###### 1. Запуск с помощью исходного кода
Клонируйте исходные коды на локальный компьютер.
Наполните файл настроек подстановки (config/example.json). Либо переопределите его и другие параметры в настройках приложения (autumn-properties.json).
Запустите приложение в настроенном окружении:
```code
oscript src/main.os
```

###### 2. Использование в качестве библиотеки

Скачать файл *.ospx из раздела releases
Воспользоваться командой:
```code
opm install -f <ПутьКФайлу>
```
Создать файл oscript следующего содержания:
```code
#Использовать autumn
#Использовать officer
Поделка = Новый Поделка();
Поделка.ЗапуститьПриложение();
Настройки = Поделка.НайтиЖелудь("НастройкиOfficer");
Настройки.УстановитьНастройку("КаталогШаблонов", "templates/");
Настройки.УстановитьНастройку("КаталогСохранения", "output/");
Настройки.УстановитьНастройку("КаталогВременныхФайлов", "temp/");
Настройки.УстановитьНастройку("ПутьКФайлуНастройкиПодстановки", "config/example.json");
Приложение = Поделка.НайтиЖелудь("ПриложениеOfficer");
Приложение.Запустить();
```
Проверить, что указанные в настройках каталоги существуют.
6 changes: 1 addition & 5 deletions package-loader.os
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
// BSLLS:UnusedLocalMethod-off
// BSLLS:UnusedParameters-off
// BSLLS-off

Перем ПоказатьСообщенияЗагрузки; // сообщения о порядке загрузки пакетов
Перем ВыдаватьОшибкуПриЗагрузкеУжеСуществующихКлассовМодулей; // сообщения о повторной загрузке
Expand Down Expand Up @@ -106,6 +105,3 @@

// для установки других значений переменных среды и запуска скриптов можно юзать следующую командную строку
// (set OSLIB_LOADER_TRACE=1) && (oscript .\tasks\test.os)

// BSLLS:UnusedLocalMethod-on
// BSLLS:UnusedParameters-on
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

Процедура ПриИнициализацииПоделки(Поделка) Экспорт
ДобавитьЖелудиПриложения(Поделка);
КонецПроцедуры
Expand All @@ -9,5 +8,6 @@
КонецПроцедуры

&Заготовка
Процедура ПриСозданииОбъекта()
Процедура ПриСозданииОбъекта()

КонецПроцедуры
23 changes: 14 additions & 9 deletions src/Классы/МенеджерФайлов.os
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
// BSLLS:LatinAndCyrillicSymbolInWord-off

Перем _Поделка; // само приложение
// само приложение
Перем _Поделка;
// настройки приложения
Перем _Настройки;

Перем _ФайлыDocx; // массив желудей с обрабатываемыми файлами
Перем _НастройкиПодстановки; // массив с настройками для замены в шаблонах
// массив желудей с обрабатываемыми файлами
Перем _ФайлыDocx;
// массив с настройками для замены в шаблонах
Перем _НастройкиПодстановки;

&Желудь
Процедура ПриСозданииОбъекта(
Expand All @@ -14,6 +17,7 @@
_Настройки = Настройки;
_Поделка = Поделка;
_ФайлыDocx = Новый Массив;
_НастройкиПодстановки = Новый Массив;
КонецПроцедуры

Процедура СоздатьЗаготовкиФайловИзШаблонов() Экспорт
Expand Down Expand Up @@ -97,11 +101,12 @@
Процедура ПрочитатьНастройкиПодстановки() Экспорт

ФайлНастроекПодстановки = _Настройки.ПутьКФайлуНастройкиПодстановки();

ЧтениеЖсон = Новый ЧтениеJSON();
ЧтениеЖсон.ОткрытьФайл(ФайлНастроекПодстановки);
_НастройкиПодстановки = ПрочитатьJSON(ЧтениеЖсон, Истина);
ЧтениеЖсон.Закрыть();
Если ФайлНастроекПодстановки <> Неопределено Тогда
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.ОткрытьФайл(ФайлНастроекПодстановки);
_НастройкиПодстановки = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
КонецЕсли;

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

Expand Down
36 changes: 31 additions & 5 deletions src/Классы/Настройки.os
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
Перем _КаталогШаблонов; // каталог, где храняться подготовленные шаблоны с параметрами
Перем _КаталогСохранения; // каталог сохранения итоговых файлов
Перем _КаталогВременныхФайлов; // каталог временных файлов
// каталог, где хранятся подготовленные шаблоны с параметрами
Перем _КаталогШаблонов;
// каталог сохранения итоговых файлов
Перем _КаталогСохранения;
// каталог временных файлов
Перем _КаталогВременныхФайлов;
// путь к файлу json с настройками подстановки в шаблоны
Перем _ПутьКФайлуНастройкиПодстановки;
// запуск приложения не в режиме подключения как библиотека
Перем _ЗапускКакСкрипт;

&Дуб
&Прозвище("НастройкиOfficer")
Процедура ПриСозданииОбъекта(
&Деталька КаталогШаблонов,
&Деталька КаталогСохранения,
Expand Down Expand Up @@ -33,5 +40,24 @@

&Завязь(Тип = "Строка")
Функция ПутьКФайлуНастройкиПодстановки() Экспорт
Возврат ОбъединитьПути(ТекущийКаталог(), _ПутьКФайлуНастройкиПодстановки);
КонецФункции
Если _ПутьКФайлуНастройкиПодстановки = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Возврат ОбъединитьПути(ТекущийКаталог(), _ПутьКФайлуНастройкиПодстановки);
КонецФункции

Процедура УстановитьНастройку(Настройка, Значение) Экспорт

Если Настройка = "КаталогШаблонов" Тогда
_КаталогШаблонов = Значение;
ИначеЕсли Настройка = "КаталогСохранения" Тогда
_КаталогСохранения = Значение;
ИначеЕсли Настройка = "КаталогВременныхФайлов" Тогда
_КаталогВременныхФайлов = Значение;
ИначеЕсли Настройка = "ПутьКФайлуНастройкиПодстановки" Тогда
_ПутьКФайлуНастройкиПодстановки = Значение;
Иначе
Сообщить(СтрШаблон("Неизвестная настройка %1", Настройка));
КонецЕсли;

КонецПроцедуры
16 changes: 11 additions & 5 deletions src/Классы/Приложение.os
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
Перем _Настройки; // Настройки приложения
Перем _МенеджерФайлов; // Желудь для работы с файлами
// Настройки приложения
Перем _Настройки;
// Желудь - диспетчер файлов
Перем _МенеджерФайлов;

&Рогатка
&Прозвище("ПриложениеOfficer")
Процедура ПриСозданииОбъекта(
&Пластилин Настройки,
&Пластилин МенеджерФайлов)
Expand All @@ -12,6 +15,7 @@
КонецПроцедуры

Процедура ПриЗапускеПриложения() Экспорт
Запустить();
КонецПроцедуры

Процедура Запустить() Экспорт
Expand All @@ -21,11 +25,13 @@
_МенеджерФайлов.ЗаполнитьФайлы();
_МенеджерФайлов.СохранитьВВыходнойКаталог();

ВременныйКаталог = ОбъединитьПути(ТекущийКаталог(), _Настройки.КаталогВременныхФайлов());
УдалитьФайлы(ВременныйКаталог, "*.*");
Если _Настройки.КаталогВременныхФайлов() <> Неопределено Тогда
ВременныйКаталог = ОбъединитьПути(ТекущийКаталог(), _Настройки.КаталогВременныхФайлов());
УдалитьФайлы(ВременныйКаталог, "*.*");
КонецЕсли;

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

Функция Настройки() Экспорт
Возврат _Настройки;
КонецФункции
КонецФункции

0 comments on commit 86e4a9d

Please sign in to comment.