Экспорт вводных

Организация процесса

Рано или поздно все необходимые данные будут внесены в НИМС и будет нужно преобразовать набранные тексты во вводные. Для этой цели используется подсистема выгрузки данных. В текущий момент поддерживаются два формата выгрузки: текстовые файлы и docx файлы. Чтобы произвести выгрузку, НИМСу требуются указать список персонажей для выгрузки и шаблон, по которому будет осуществляться выгрузка. Выбрать персонажей можно тремя способами: указать диапазон персонажей, выбрать всех и выбрать точечно нескольких персонажей. Думаю это не вызовет трудностей. Далее речь пойдет о работе с шаблонами.

Шаблон это инструкция для НИМСа, как преобразовать вспомогательное представление базы в конечный текст/docx файл. Вспомогательное представление базы это представление базы, содержащее данные для экспорта. Например, при работе над вводными инвентарь отслеживается для каждой истории отдельно, но в выгрузке указываться один список предметов для каждого персонажа. Часть досье может не выгружаться во вводные. Для пустых адаптаций подставляется текст оригинала события и так далее. Некоторые ограничения накладывает сам процесс использования шаблонов. В итоге вспомогательное представление сильно отличается от внутреннего.

Структура вспомогательного представления определяет какие данные и каким образом мы можем выгрузить с помощью шаблона. Ниже приведена полная схема данных для выгрузки:

  • gameName, строка - название игры.

  • briefings, массив данных - данные по каждому выбранному персонажу.

    • gameName, строка - название игры, чтобы мы при желании могли добавить его в каждую вводную.

    • charName, строка - имя персонажа.

    • inventory, строка - инвентарь персонажа.

    • profileInfo-"название поля досье", строка или текст - данные поля досье персонажа.

    • profileInfo-splitted-"название поля досье", строка или текст - данные поля досье персонажа, разбитые по строкам.

      • string, строка.
    • profileInfoArray, массив данных - массив полей персонажа.

      • itemName, строка - название поля досье.

      • value, строка или текст - данные поля досье персонажа.

      • splittedText, массив строк - данные поля досье персонажа, разбитые построчно.

        • string, строка.
    • groupTexts, массив данных - массив текстов групп.

      • groupName, строка - название группы.

      • text, текст - текст группы.

      • splittedText, массив строк - текст группы, разбитый построчно.

        • string, строка.
    • relations, массив данных - отношения персонажа.

      • toCharacter, строка - имя персонажа к которому описано отношение.

      • text, текст - текстовое описание отношения.

      • splittedText, массив строк - построчно разбитый текст отношения.

        • string, строка.
      • stories, строка - список историй, в которых персонажи пересекались.

      • profile, объект - досье персонажа, к которому прописано отношение. Данные досье извлекаются с помощью названия поля досье.

    • eventsInfo, массив данных - массив событий персонажа, отсортированный по хронологии.

      • eventName, строка - название события.

      • storyName, строка - название истории.

      • time, строка - время события.

      • displayTime, строка - субъективное время события.

      • text, текст - текст события.

      • splittedText, массив строк - текст события, разбитый построчно.

        • string, строка.
    • storiesInfo, массив данных - массив историй персонажа, отсортированный по алфавиту.

      • storyName, строка - название истории.
      • eventsInfo, массив данных - массив событий персонажа. События имеют ту же структуру, что и в массиве eventsInfo.

Шаблон описывает какие данные и в каком порядке мы хотим разместить в сформированной вводной. Данные бывают двух типов - массив и не массив. Не массивы это строки и тексты, они вставляются как есть. Массивы используются для перечисления объектов, содержащих фактические данные - строки и тексты. Особый случай это построчные разбиения текстов, но об этом я расскажу позже.

Примеры создания шаблонов

Рассмотрим создание шаблонов на нескольких примерах. Далее приводятся шаблоны для работы с текстами. Эти шаблоны можно проверять на вкладке Вводные->Экспорт->Продвинутая текстовая выгрузка. При вставке в ворд вместо двойных и тройных фигурных скобок необходимо использовать одинарные. Для начала создадим шаблон для получения списка инвентаря. Данные которые нам понадобятся - имя персонажа и его инвентарь, полученные из массива всех вводных. Минимальный шаблон, получающий эти данные выглядит так:

{{#briefings}}
{{charName}}
{{inventory}}
{{/briefings}}

Теперь нам нужно красиво это напечатать. Например, давайте напечатаем список инвентаря в текстовом формате:

{{#briefings}}{{charName}}: {{inventory}}
{{/briefings}}

Обратите внимание, если {{/briefings}} так же поставить в первую строчку, то все значения склеятся. Перевод строки является частью шаблона, поэтому он должен здесь быть.

Если мы хотим добавить личное снаряжение персонажа из досье, то мы можем сделать например такой шаблон:

{{#briefings}}{{charName}}: {{profileInfo-Снаряжение}}; {{inventory}}
{{/briefings}}

Здесь личное снаряжения отделено от инвентаря историй точкой с запятой.

Чтобы вывести только досье персонажа необходим минимальный шаблон:

{{#briefings}}
{{charName}}

{{#profileInfoArray}}
{{itemName}}
{{value}}
{{/profileInfoArray}}

{{/briefings}}

Можно выводить досье, указывая каждый элемент отдельно:

{{#briefings}}
{{charName}}

{{profileInfo-Игрок}}
{{profileInfo-Раса}}
{{profileInfo-Пол}}

{{/briefings}}

Минимальный шаблон вывода событий по хронологии:

{{#briefings}}
{{charName}}

{{#eventsInfo}}
{{{displayTime}}}
{{text}}
{{/eventsInfo}}

{{/briefings}}

Минимальный шаблон вывода событий по историям:

{{#briefings}}
{{charName}}

{{#storiesInfo}}
{{storyName}}

{{#eventsInfo}}
{{{displayTime}}}
{{text}}
{{/eventsInfo}}

{{/storiesInfo}}

{{/briefings}}

Соответственно все это можно комбинировать и менять местами. Например, элементы досье можно перечислять в любом порядке, а события можно вывести перед досье.

Тонкости

Шаблонизаторы имеют свои особенности и о некоторых из них необходимо сразу упомянуть. Начнем с работы с многострочными текстами.

Пусть у вас есть адаптация с текстом:

Раз, два, три, четыре, пять,
Вышел зайчик погулять.

В этом фрагменте текста две строчки. Если вывести этот текст в ворд с помощью {text}, то получим:

Раз, два, три, четыре, пять, Вышел зайчик погулять.

При вставке в ворд имеющиеся переводы строк игнорируются, поэтому текст из нескольких абзацев слипается в один. Чтобы избавится от этого эффекта необходимо обрабатывать каждый абзац исходного текста отдельно. Для этого в шаблоне используется конструкция вида (ворд шаблон):

{#splittedText}{string}
{/splittedText}

В этом случае исходный текст автоматически разбивается в НИМС на строки по символу перевода строки и каждая строка вставляется отдельно в ворд.

Это разбиение может пригодиться не только для работы с вордом. Например, при экспорте в html переводы строк так же игнорируются. Чтобы явно указать разбиение на абзацы используется конструкция вида (текстовый шаблон):

{{#splittedText}}<p>{{string}}</p>
{{/splittedText}}

Разбиение на строки реализовано не только для текстов событий, но и для досье. Например, биографию по абзацам можно вывести так (ворд шаблон):

{#profileInfo-splitted-Биография}{string}
{/profileInfo-splitted-Биография}

Ещё одна тонкость для работы с текстовыми шаблонами заключается в том, что некоторые символы по умолчанию кодируются. Простой пример - вывод времени события. Если выводить время шаблоном {{time}}, то на выходе получим 3018&#x2F;09&#x2F;30 20:00. Чтобы этого не происходило, необходимо указать тройные фигурные скобки. Для шаблона {{{time}}} получим 3018/09/30 20:00. Так что если у вас в текст попадают странные символы, попробуйте заменить двойные скобки на тройные.