Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
355 lines (240 sloc) 15.3 KB

Storytailor. Инструкция

Презентация storytailor

Актуально для версий 0.0.x. Примите во внимание, что Storytailor работает в экспериментальном режиме, и некоторые правила могут быть в дальнейшем изменены

Это - краткая инструкция пользователя языка программирования Storytailor в Microsoft Visual Studio Code

Начало работы

Установите Microsoft Visual Studio Code vscode

Установите Storytailor плагин для vscode пустая папка

Начинаем

Самый простой способ приступить к работе - это открыть пустую папку в vscode и скопировать в нее тестовый проект

Откройте пустую папку пустая папка

Кликните правой клавишей мыши в корне проекта и выберите из выпадающего меню "Initialize example project in a working root" скопировать тестовый проект в корневую папку

Эта операция скопирует в корневую папку тестовый проект. Учтите, что если в корневой папке уже есть такие файлы, то они будут перетерты. Подтверждайте копирование подтвердить копирование

Тестовый проект скопирован в корневую папку. Примерно так должна выглядеть файловая структура проекта тестовый проект создан

Обновите node-модули. Для этого

Откройте терминал npm install в терминале

Вбейте комманду "npm install" или "npm i" и нажмите "ENTER" npm install в терминале

node-модули обновлены npm install в терминале

терминал можно закрыть закрыть терминал

Исходные файлы истории хранятся в папке story (*.sts) исходники истории

Подготовка проекта завершена. Это его рабочее состояние

Теперь выполним сборку тестового проекта.

Откройте файл с исходниками истории. Например, story/index.sts

Открывайте Command Palette (Меню View -> Command Palette или комбинация клавиш Ctrl+Shift+P) command palette

command palette openned

Выбирайте комманду "Compile: Compile and show preview" (по-умолчанию Ctrl+Alt+P) compile and show preview

В папке src сохраняется история на typescript. В папке out будет эта история на javascript compiled story

Когда сборка истории завершена, открывается предпросмотр compiled story

Окно предпросмотра можно размещать как удобно compiled story compiled story

Текст, показанный в окне предпросмотра, сохраняется в файл "story output.txt" в корне проекта story output

Для всех (база)

Упрощенная инструкция затрагивает только базовый функционал. Этого хватит, чтобы собрать сценарий, и предполагается, что пользователю не понадобится никаких технических знаний

Текст истории

Давайте удалим все содержимое файла story/index.sts и начнем историю с чистого листа

Обычный текст

Обычный текст попадает в финальную сборку "как есть", без изменений simple text

Комментарии

Комментарии - это фрагмент текста, который не пойдет в финальную сборку. Комментарии нужны для самих разработчиков истории. Весь текст от символов // и до конца строки будет считаться комментарием comments

Спец-символы (перенос строки, табуляция)

Есть три спец-символа, которые попадают в финальную сборку нестандартно.

Это символ переноса строки endline symbol

Символы конца строки и табуляции endline and tab symbols

Экранирование спец-символов

Экранирование спец-символов - это маркировка этих символов таким образом, чтобы компилятор не считал их спец-символами. Вот пример: escaped symbols

Переменные

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

* Название Переменной
  Содержание переменной пишется
  с новой строки и отступом от края 
  на 2 (два) пробела больше, чем у названия
  
  * Подпеременная
    Содержание подпеременной

Вот пример объявленной переменной outer variables

Вставки в текст

// Вставка в текст начинается со звездочки (*) и заканчивается точкой с запятой (;)
// Например:
Текст до вставки переменной, *Переменная; текст после вставки переменной

А вот переменная вставлена в текст, и что из этого получается: outer variables inserted

Многоуровневые переменные

outer variables hierarchy

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

* Переменная = 100500
  * Подпеременная // Ошибка! Значение переменной "Переменная" - цифра, у нее не может быть вложенных переменных

Вставка в текст мат. выражения

А вот переменная вставлена в текст, и что из этого получается: include expression

Операции над данными

А вот так можно между строк совершать операции над данными: insert operations

Импорт других файлов

Мы работаем в файле story/index.sts Давайте посмотрим, что у нас еще есть в папке story: external file

Импортируем этот файл к нам import characters

И вставим персонажа из того файла в наш текст inserted imported characters

Для программистов

Усложненная инструкция. Предполагается, что без объяснений ее должны понять программисты и всякие технари

Идея

Storytailor задуман как диалект javascript по аналогии с typescript. Каждый sts модуль из папки projectRoot/story компилируется в соответствующий .ts файл и складывается это все в папке projectRoot/src. После чего typescript компилирует содержимое папки projectRoot/src в projectRoot/out - это уже javascript файлы. compiled typescript compiled javascript

Как это работает

строка формата (звездочка, пробел, скоп с инструкциями "{}")

-> storytailor
* {
  instructions;
}

компилируется как скоп с инструкциями

-> typescript
{
  instructions;
}

operations

Строка без спец-символов компилируется как инструкция:

  -> storytailor:
  строка без спец-символов

  -> typescript
  __context['__text'] = [...__context['__text'], `строка без спец-символов`];

Строка с вставкой:

  -> storytailor
  строка с *Переменная;

  -> typescript
  __context['__text'] = [...__context['__text'], `строка с ${__serializer.serialize( __context['Переменная'], '\r\n' )} `];

Переменная

  -> storytailor
  * Переменная

  -> typescript
  __context['Переменная'] = __context['Переменная'] || { __text: [] };

№2

  -> storytailor
  * Переменная = 100500

  -> typescript
  __context['Переменная'] = 100500;

Raw-переменная (с префиксом "@")

  -> storytailor
  * { @Переменная = 100500; }

  -> typescript
  Переменная = 100500;

Синтаксис

Строки, числа, булевые

Строка

 "Содержание строки"

Строка с инклудами (инклуд пишется так: звездочка, потом без пробела экспрешн, а в конце перенос строки или точка с запятой: *includeExpression;)

 "Содержание строки *include1; *include2;"

Число

 100500

Булевые

  true false

Операторы

  +
  -
  /
  *
  = 
  ==
  ===
  !
  != 
  !==
  <
  >
  <=
  >=
  |
  ||
  &
  &&
  ++
  --

Функции

varname = function (params) {
  instruction1;
  ...
  instruction2;
}

Объекты, массивы

Объекты

let obj = {
  ...otherObj,
  fieldName: "fieldValue",
  otherVariable,
  "fieldName2": 100500,
  "isTrue": false
}

Конструктор

let obj = new Object(prototype);

Массивы

let array = [
  ...otherArray,
  newValue
] 

Инструкции

Import

import * as varname from './module/Path'

If

if (condition) {
  instructions;
} else if (condition2) {
  instructions2;
} else {
  instructions3
}

For

for (var i; @i < 10; @i++) {
 instructions;  
}

For In

for (let key in obj) {
  instructions;
}

While

while (condition) {
  instructions;
}

Do while

do {
  instructions;
} while (condition)

Switch case

switch (condition) {

  case condition: 
    instructions;
  break;

  default:
    instructions;
  break;

}

Delete

delete obj.field;

Сидоренко Евгений, февраль 2019

You can’t perform that action at this time.