Skip to content

中文使用文档

op200 edited this page Jun 5, 2024 · 42 revisions

声明

替换类型声明演示图
文件引用类型和预处理命令类型声明演示图

模板替换执行声明行

该行的特效以template为头部,@后跟随n(n>=1)个class值,#后跟m(m>=0)个mode值
多个值之间用;分隔
例如
teplate@abc;class123;temp456#
teplate@class#findtext
teplate@class#cuttag;append

模板内容声明行

该行的特效以beretag为头部,@后跟随n(n>=1)个class值
多个值之间用;分隔
例如
beretag@class1
beretag@one;two;three

预处理命令声明行

该行的特效以template#ppcode为头部 文本中的表达式将被执行,且表达式的返回值不会产生任何作用
该类型行的执行优先级高于模板替换声明行,所以可以像图中进行对其他Lua脚本的引用和预处理

命令声明行

该行的特效以template#code为头部 文本中的表达式将被执行,且表达式的返回值不会产生任何作用
该类型行的执行优先级与模板替换声明行相同


交互逻辑

文本替换

文本替换执行后演示图
template行只有在被注释状态下才会被脚本读取并执行,执行时遍历所有beretag行,对含有任意相同class的beretag行执行替换操作
mode的所有字符值详见Wiki首页
beretag行执行后会被注释,执行初始化后会被还原
template的文本以{...}{...}为头部,会在beretag中寻找与第一个{}中内容相符的内容(支持Lua正则表达式),把找到的部分替换为第二个{}中的内容,最后在}后追加第二个{}后面的文本

关键帧替换

关键帧替换执行前演示图
如图所示,新增的关键帧行将从模板内容声明行的开始时间开始,每行一帧
模板内容声明行必须具有\pos()标签表示起始位置
模板内容声明行可以有\fscx \fscy \frz标签表示起始值,若没有,默认起始值为\fscx100\fscy100\frz0
$forcefps ~= nil,则使用$forcefps的值作为插入每帧的时间的参考,否则将使用关键帧文件内的fps值

字幕缓存

用户可自行在表达式中将任意个行插入$subcache
在遇到存在recache的mode的行时,缓存行会被释放,若非append模式,则被插入到该temp行后
切勿在模板替换执行声明行中进行table.insert($subcache,...),否则会导致不确定的插入次数


变量与表达式

全局变量和预留关键词可以用$作为头部进行扩展
所有全局变量存储在user_var这个table变量内,该变量可在表达式中调用

表达式

在被执行行中使用!!括起来的部分会作为表达式被扩展(本质上是Lua的匿名函数)
切勿在表达式内声明全局变量,例如!var=123! !_G.var=123!
表达式中return后衔接的内容将会被扩展到文本内,例如!local a=123 return a*3!相当于扩展了369

内置变量

sub Aegisub的subtitles接口的引用
$kdur={0,0} \k标签后跟随的值
$begin=find_event(sub) [Events]类型行的第一行
$temp_line 当前所读取的template行的键
$bere_line 当前所读取的beretag行的键
这几个变量是为了方便用户使用相对数据,例如读取当前template的文本内容可以使用sub[$temp_line].text

$keyfile="" 用于存储关键帧文件的路径
$keytext="" 用于存储关键帧文件的内容,当$keytext~=""时,$keyfile会无效,将读取$keytext中的内容作为keyframe模式的输入

本质上是将$keytext写入一个缓存文件,$keyfile的值会被修改为该文件的路径名
使用$keytext时,直接粘贴整个关键帧文件即可,\N会被替换为换行符

$forcefps=nil 强制插入关键帧行时的fps值,否则将使用关键帧文件中的fps值

$subcache={} 用于存储字幕缓存行,在遇到recache mode时,会被释放

$deepCopy(input_table) 输入一个table,返回一个深拷贝的table

预留关键字

$ start mid end kdur
$后衔接的如果不是其他预留关键字,则会被扩展为user_var.
这几个关键字的功能与卡拉OK模版执行器内联变量功能类似,但只在替换\k标签时起效

自定义全局变量

向table类型变量user_var中写入键值对,可以达到在ASS中模拟全局变量的效果
例如!user_var.new_var=123! !$new_var=345!

自定义局部变量

当需要使用局部变量临时存放数据时,使用local关键词进行修饰,本质上就是Lua中的local关键词
例如!local line=sub[$bere_line] karaskel.preproc_line(sub, $meta, $styles, line) return line.top!

自定义函数

因为Lua变量的特性,变量可以直接作为匿名函数的引用,所以全局变量可以直接作为函数使用
例如

!$fun1 = function() return "ABC" end! -- 函数的声明
!return $fun1()! -- 使用函数,将该表达式扩展为"ABC"