Aegisub 特效随记:音节计数器ci
本文最后更新于 130 天前。

冒号自引用

冒号操作会带入一个self参数,用来代表自己。而点号操作,只是内容的展开。
sub函数用法可参考string.sub

local str = "abcde"
print("case 1:", str:sub(1, 2))
print("case 2:", str.sub(str, 1, 2))

>Output

case 1: ab
case 2: ab

在函数定义时,使用冒号将默认接收一个self参数,而使用点号则需要显式传入self参数。

例如

点号调用

girl = {money = 200}

function girl.goToMarket(girl ,someMoney)
    girl.money = girl.money - someMoney
end

girl.goToMarket(girl ,100)
print(girl.money)

引用参数self

girl = {money = 200}

function girl.goToMarket(self ,someMoney)
    self.money = self.money - someMoney
end

girl.goToMarket(girl ,100)
print(girl.money)

使用冒号调用

girl = {money = 200}

function girl:goToMarket(someMoney)
    self.money = self.money - someMoney
end

girl:goToMarket(100)
print(girl.money)

实际上,冒号的定义省略(或直接隐含定义)了第一个传入参数self。
即,如官方文档,

function t.a.b.c:f(params) 
    body 
end

is syntactic for

t.a.b.c.f = function (self, params) 
    body 
end

Lua gsub函数

需要注意的是,gsub函数与sub函数完全不同。

string.gsub(mainString,findString,replaceString,num)

在字符串中替换。
mainString为要操作的字符串,findString 为被替换的字符,replaceString 要替换的字符,num 替换次数(可以忽略,则全部替换),例如。

txt="abcde"
print(txt:gsub("c","1"))

此处用了:来实现自引用。

Aegisub unicode.len函数

length = unicode.len(instring)

以代码点为单位判断所给UTF-8编码的字符串的长度。

Lua 构建Function

可以参考关于简单lua语句的摘记

计数器代码

参考了未知作者的关于retime函数的介绍中的内容

Comment: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,code once,function char_counter(ref) ci[1] = ci[1] + 1; return "" end
Comment: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,code line,ci = {0}; cn = _G.unicode.len(orgline.text_stripped:gsub(" ",""))
Comment: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,template char,!char_counter(1)! si=!$si! ci=!ci[1]!
Comment: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,karaoke,{\k1}无法{\k1}忘abc{\k1}记{\k1}你{\k1}的{\k1}声{\k1}音
Comment: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,karaoke,{\k1}眼{\k1}泪{\k1}也{\k1}无{\k1}法{\k1}忘{\k1}记

简化版

Comment: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,code line,ci=0
Comment: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,code once,function countc() ci=ci+1 return ""end
Comment: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,template char,!countc()!ci=!ci! si=!$si!
Comment: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,karaoke,{\k1}你{\k1}的声{\k1}音不{\k1}能{\k1}忘{\k1}记
Comment: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,karaoke,泪水也无法忘记

Reference

[1]https://blog.csdn.net/xiejunna/article/details/52143470
[2]https://www.w3cschool.cn/lua/o23m1te6.html
[3]https://www.runoob.com/lua/lua-strings.html

参考

标题:Aegisub 特效随记:音节计数器ci
作者:IKK
除转载和特殊声明外,所有文章采用 CC BY-NC-SA 4.0协议
上一篇
下一篇