语法速查表

把项目、正文、节点、跳转、选项、变量、条件、富文本和命令的常用写法收在一页里。

这页给“我记得有这个写法,但忘了标点”的时候查。第一次学某一块,请跟链接读完整解释;速查表只列形状和最容易写错的边界。

项目与入口

一个新项目至少有一份 project.kiw 清单和入口 .kin 文件;既有项目也兼容唯一的其它 .kiwkiny.json。清单里的 entry 指向入口;所有 .kin 会按项目根相对路径组成同一个故事。详见项目结构

{
  "name": "雾港之夜",
  "version": "1.0.0",
  "engine": "0.15.0",
  "entry": "main.kin"
}

入口文件第一个节点之前是开场。开场写了变量或正文后,仍要显式跳到后续节点;否则执行到底就结束。

正文与行内标记

想写什么 形状
一段正文 雾从港口涌上来。(一行一段)
插入表达式 你还有 {gold} 枚金币。
加粗 / 斜体 / 下划线 / 删除线 <b>粗体</b><i>斜体</i><u>下划线</u><s>删除线</s>
颜色 / 字号 / 字体 / 样式类 <color=#c44>红字</color><size=1.2>大字</size><font=霞鹜文楷>字体</font><class=whisper>低语</class>
段内换行 上一行<br>下一行
句中等点击 / 定时续显 等等<pause>还有一句等等<pause=500>还有一句
角色台词 <老板> 想喝点什么?老板: 想喝点什么?
输出语法符号本身 见下方转义速查
注释 // 单行/* 多行 */

富文本标签必须成对;<br><pause><pause=毫秒> 是单标签。完整规则见正文写作;角色表和简称见角色与台词着色

转义速查按符号生效的位置分三组:

  • 任意位置:\{\}\<\/\\
  • 仅文本行首:\=\*\+\>\~\@\->
  • 仅选项文本:\[\]\(\)

节点与跳转

=== 酒馆(category, discount) ===
老板说:“今天的{category}打折。”
-> 结账

= 内室
门在身后合上。
-> END
形状 含义
=== 节点 === 声明项目内全局唯一的节点;左右各三个 =
= 子节点 声明当前节点内的子节点;只有左边一个 =
=== 节点(arg) === 声明带参节点;参数名必须是 ASCII 标识符
-> 节点 静态跳转
-> 父节点.子节点 从别处跳到子节点
-> 节点(value) 给带参节点传实参
-> END / -> DONE 正常结束;当前两者等效
-> {target} 动态跳转;值须为节点引用或节点名字符串
$nodes.节点 / $nodes["节点"] 取得受引擎校验的节点引用
$nodes.节点(value) 取得已绑定实参的带参节点引用

节点名可用中文但不能有空白;变量、参数和标签名必须是 ASCII。详见节点与跳转

选项、分支与粘连

* (ask) {gold >= 5} [买一盏灯]
> ~ gold -= 5
> 你接过灯笼。
+ [再等等] -> 路口
* -> 没招了

所有未跳走的分支在这里汇合。
-> END
形状 含义
* [文字] -> 节点 一次性选项;选过后消失
+ [文字] -> 节点 粘性选项;以后仍可再选
* {条件} [文字] 条件成立才显示
* (label) [文字] 以全局计数标签记录被选择次数
* [按钮文字] 点击后正文 方括号内只上按钮,后半只在选择后输出
* -> 节点 同组选项全不可用时自动触发的唯一 fallback
> 正文 / > > 正文 选项或条件的第一层 / 第二层分支体
上一段<> 取消本段末换行,把下一段(可跨跳转)接上来

> 数量就是总嵌套深度;层级回退时自动汇合,不写结束符。详见选项与分支

变量、条件与函数

~ let gold = 10
~ const MAX_GOLD = 99
~ gold += 1

~~~
function enough(n) {
  return gold >= n
}
~~~

@if {enough(5)}
> 你买得起。
@elif {gold > 0}
> 还差一点。
@else
> 你身无分文。
形状 含义
~ JS 语句 执行一条 JavaScript,不输出正文
~~~~~~ 顶层多行 JavaScript 块,不可放进 > 分支体
{JS 表达式} 求值并插入正文
@if {条件} / @elif {条件} / @else 多行条件链;分支仍用 >
function f(x) { ... } / const f = (x) => ... 在 JS 块里声明函数

文件顶部的声明是全局变量;节点里的声明只活在该节点及其子节点中。完整作用域、表达式和函数规则见变量、条件与逻辑

变体与演出

活文本写在普通插值里:{seq("初见", "又见")} 依次前进并停在末项;cycle 循环;once 用完变空;shuffle 随机取一项。详见文本变体

演出命令统一写成 @命令(参数),独占一行、顶格,不产出正文。参数通常是 JS 表达式;@input 的第一个参数例外,它是要写回的变量名。全部签名见下一篇命令与函数索引,按用途解释与示例见演出命令