Актуально для версий 0.0.x. Примите во внимание, что Storytailor работает в экспериментальном режиме, и некоторые правила могут быть в дальнейшем изменены
Это - краткая инструкция пользователя языка программирования Storytailor в Microsoft Visual Studio Code
Установите Microsoft Visual Studio Code
Установите Storytailor плагин для vscode
Самый простой способ приступить к работе - это открыть пустую папку в vscode и скопировать в нее тестовый проект
Кликните правой клавишей мыши в корне проекта и выберите из выпадающего меню "Initialize example project in a working root"
Эта операция скопирует в корневую папку тестовый проект. Учтите, что если в корневой папке уже есть такие файлы, то они будут перетерты. Подтверждайте копирование
Тестовый проект скопирован в корневую папку. Примерно так должна выглядеть файловая структура проекта
Обновите node-модули. Для этого
Вбейте комманду "npm install" или "npm i" и нажмите "ENTER"
Исходные файлы истории хранятся в папке story (*.sts)
Подготовка проекта завершена. Это его рабочее состояние
Откройте файл с исходниками истории. Например, story/index.sts
Открывайте Command Palette (Меню View -> Command Palette или комбинация клавиш Ctrl+Shift+P)
Выбирайте комманду "Compile: Compile and show preview" (по-умолчанию Ctrl+Alt+P)
В папке src сохраняется история на typescript. В папке out будет эта история на javascript
Когда сборка истории завершена, открывается предпросмотр
Окно предпросмотра можно размещать как удобно
Текст, показанный в окне предпросмотра, сохраняется в файл "story output.txt" в корне проекта
Упрощенная инструкция затрагивает только базовый функционал. Этого хватит, чтобы собрать сценарий, и предполагается, что пользователю не понадобится никаких технических знаний
Давайте удалим все содержимое файла story/index.sts и начнем историю с чистого листа
Обычный текст попадает в финальную сборку "как есть", без изменений
Комментарии - это фрагмент текста, который не пойдет в финальную сборку. Комментарии нужны для самих разработчиков истории. Весь текст от символов // и до конца строки будет считаться комментарием
Есть три спец-символа, которые попадают в финальную сборку нестандартно.
Символы конца строки и табуляции
Экранирование спец-символов - это маркировка этих символов таким образом, чтобы компилятор не считал их спец-символами. Вот пример:
Если оформить текст в виде списка, то элементы этого списка можно будет вставлять в других местах истории Переменная пишется так (отступ из пробелов, потом звездочка, потом пробел, потом название переменной):
* Название Переменной
Содержание переменной пишется
с новой строки и отступом от края
на 2 (два) пробела больше, чем у названия
* Подпеременная
Содержание подпеременной
Вот пример объявленной переменной
// Вставка в текст начинается со звездочки (*) и заканчивается точкой с запятой (;)
// Например:
Текст до вставки переменной, *Переменная; текст после вставки переменной
А вот переменная вставлена в текст, и что из этого получается:
// если содержание переменной задается через знак "=", то у нее не может быть вложенных переменных:
* Переменная = 100500
* Подпеременная // Ошибка! Значение переменной "Переменная" - цифра, у нее не может быть вложенных переменных
А вот переменная вставлена в текст, и что из этого получается:
А вот так можно между строк совершать операции над данными:
Мы работаем в файле story/index.sts Давайте посмотрим, что у нас еще есть в папке story:
И вставим персонажа из того файла в наш текст
Усложненная инструкция. Предполагается, что без объяснений ее должны понять программисты и всякие технари
Storytailor задуман как диалект javascript по аналогии с typescript. Каждый sts модуль из папки projectRoot/story компилируется в соответствующий .ts файл и складывается это все в папке projectRoot/src. После чего typescript компилирует содержимое папки projectRoot/src в projectRoot/out - это уже javascript файлы.
строка формата (звездочка, пробел, скоп с инструкциями "{}")
-> storytailor
* {
instructions;
}
компилируется как скоп с инструкциями
-> typescript
{
instructions;
}
Строка без спец-символов компилируется как инструкция:
-> 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