语法速查表
把项目、正文、节点、跳转、选项、变量、条件、富文本和命令的常用写法收在一页里。
这页给“我记得有这个写法,但忘了标点”的时候查。第一次学某一块,请跟链接读完整解释;速查表只列形状和最容易写错的边界。
项目与入口
一个新项目至少有一份 project.kiw 清单和入口 .kin 文件;既有项目也兼容唯一的其它 .kiw 或 kiny.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 的第一个参数例外,它是要写回的变量名。全部签名见下一篇命令与函数索引,按用途解释与示例见演出命令。