Skip to content

Commit

Permalink
add: 删除对白特效, 检查中日符号一致性;
Browse files Browse the repository at this point in the history
fix: 以\N开头没有中字时无法添加特效;
update: README
  • Loading branch information
barryZZJ committed Jun 15, 2024
1 parent c545a99 commit 31c9f81
Show file tree
Hide file tree
Showing 7 changed files with 258 additions and 80 deletions.
159 changes: 104 additions & 55 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,18 @@

组内用于Aegisub的实用lua脚本

目录:
- [lua\_scripts](#lua_scripts)
- [安装方式](#安装方式)
- [脚本功能介绍](#脚本功能介绍)
- [添加对白特效(2304)](#添加对白特效2304)
- [删除对白特效](#删除对白特效)
- [检查中日符号一致性](#检查中日符号一致性)
- [歌词排序](#歌词排序)
- [智能合并对话](#智能合并对话)
- [添加对白特效(2304).拆解步骤](#添加对白特效2304拆解步骤)

<!-- TODO 更细这个readme;更新aegisub的readme,同步更新release中的readme -->

## 安装方式

Expand All @@ -11,81 +23,57 @@

## 脚本功能介绍

### 织梦.对白处理(2304) (选中行) `zmsub.set_tags_for_dialogues.lua`
### 添加对白特效(2304)

配合'织梦-对白-2304'样式使用,为选中的`中字\N日字`格式的对白添加特效,并规范空格、数字宽度。具体操作解释及实例见[拆解步骤](#织梦对白处理拆解步骤-zmsubnewline-space-processor-selectedlua)
文件名:`zmsub.set_tags_for_dialogues.lua`

配合'织梦-对白-2304'样式使用,为选中的`中字\N日字`格式的对白添加特效`{\fnSource Han Sans JP Bold\fs55\fsvp10}`,并规范空格、数字宽度。具体操作解释及实例见[拆解步骤](#织梦对白处理拆解步骤-zmsubnewline-space-processor-selectedlua)

可以放心对已经添加过特效的行再次执行脚本,不用担心重复添加特效标签。

示例:

|执行前|执行后|备注|
|---|---|---|
|`比如说\N例えば`|`{\blur3\yshad2.5\xshad1.5}比如说\N{\fnSource Han Sans JP Bold\fs55\fsvp10}例えば`|普通对白|
|`比如说\N{\fnSource Han Sans JP Bold\fs55\fsvp10}例えば`|`{\blur3\yshad2.5\xshad1.5}比如说\N{\fnSource Han Sans JP Bold\fs55\fsvp10}例えば`|缺少部分标签|
|`{\blur3\yshad2.5\xshad1.5}比如说\N例えば`|`{\blur3\yshad2.5\xshad1.5}比如说\N{\fnSource Han Sans JP Bold\fs55\fsvp10}例えば`|缺少部分标签|

|`比如说\N例えば`|`{\blur3\yshad2.5\xshad1.5}比如说\N{\fnSource Han Sans JP Bold\fs55\fsvp10}例えば`|完整添加特效|
|`比如说\N{\fnSource Han Sans JP Bold\fs55\fsvp10}例えば`|`{\blur3\yshad2.5\xshad1.5}比如说\N{\fnSource Han Sans JP Bold\fs55\fsvp10}例えば`|添加模糊阴影|
|`{\blur3\yshad2.5\xshad1.5}比如说\N例えば`|`{\blur3\yshad2.5\xshad1.5}比如说\N{\fnSource Han Sans JP Bold\fs55\fsvp10}例えば`|添加日字特效|



### 织梦.对白处理.拆解步骤 `zmsub.newline-space-processor-selected.lua`
### 删除对白特效

"织梦.对白处理(2304) (选中行)" 脚本按顺序依次执行了下面几个功能,你可以按需手动运行其中的步骤。
文件名:`zmsub.remove_tags_for_dialogues.lua`

> 一般不需要用到,就算只做了下面的部分步骤(如已经插入日字特效,需要单独插入模糊阴影),直接运行"织梦.对白处理(2304) (选中行)"也可以达到目的。
直接把所有特效(花括号部分)删除

1. 插入日字特效
示例:

为选中的`中字\N日字`格式插入`{\fnSource Han Sans JP Bold\fs55\fsvp10}`,并删掉(忽略特效标签后的)头尾的`\N`
|执行前|执行后|
|---|---|
|`{\blur3\yshad2.5\xshad1.5}比如说\N{\fnSource Han Sans JP Bold\fs55\fsvp10}例えば`|`比如说\N例えば`|

对于`\N`含有一定的容错识别能力,如:`/N``\\N``\NN`等等;头尾的识别还包括`/``\`等等。

具体使用的正则表达式为:

- 句中: `([\\\\/]+N+)+`
- 开头: `^([\\\\/]+N*)+`
- 结尾: `([\\\\/]+N*)+$`
### 检查中日符号一致性

示例:
文件名:`zmsub.check_symbols.lua`

|执行前|执行后|备注|
|---|---|---|
|`谢谢\Nありがとう`|`谢谢\N{\fnSource Han Sans JP Bold\fs55\fsvp10}ありがとう`|正常情况|
|`\N谢谢\\N//N\NNありがとう\N`|`谢谢\N{\fnSource Han Sans JP Bold\fs55\fsvp10}ありがとう`|`\N`的容错处理|
|`{\blur3\yshad2.5\xshad1.5}\N谢谢\Nありがとう\N{\bord3}`|`{\blur3\yshad2.5\xshad1.5}谢谢\N{\fnSource Han Sans JP Bold\fs55\fsvp10}ありがとう{\bord3}`|清理头尾`\N`时忽略特效标签|
检查中字和日字部分(以\N区分)的符号是否一致,即一边出现的符号另一边也要出现。目前检查的符号有`…,。?!,.!、「」『』【】`

不一致的行会被选中并注释。

2. 插入模糊阴影(2304)
不一致示例:
> `好\Nは…はい`
> `「求你了 別砍到我」\N「頼む 当てないでくれ`
每行开头插入`\blur3\yshad2.5\xshad1.5`特效。
一致示例:
> `好…\Nは…はい`
> `「求你了 別砍到我」\N「頼む 当てないでくれ」`
示例:

|执行前|执行后|备注|
|---|---|---|
|`但是啊\Nでもなぁ`|`{\blur3\yshad2.5\xshad1.5}但是啊\Nでもなぁ`|原文无特效标签|
|`{\fn40}但是啊\Nでもなぁ`|`{\blur3\yshad2.5\xshad1.5\fn40}但是啊\Nでもなぁ`|原文已有特效标签|
### 歌词排序


3. 规范空格、数字宽度

全角空格替换为半角、多个连续空格替换为一个空格;开头、结尾的空格将被删除。
1. 按语言拆分

对白(中日分别处理)只有一个数字则全角,出现两个以上数字全部半角。

示例:

|执行前|执行后|备注|
|---|---|---|
|开头结尾、中间存在(多个)半角/全角空格|`[开头] 但 但是 [结尾]\N[开头] だ  だけど [结尾]`|`但 但是\Nだ だけど`|
|开头结尾空格处理无视特效标签|`{\blur3\yshad2.5\xshad1.5} 但 但是 \N だ  だけど {\blur0}`|`{\blur3\yshad2.5\xshad1.5}但 但是\Nだ だけど{\blur0}`|
|一个半角数字|`1年左右\N1年くらい`|`1年左右\N1年くらい`|
|多个全角数字|`15或16万吧\N15 16万かな`|`15或16万吧\N15 16万かな`|
|多个全角数字|`5或6万吧\N5 6万かな`|`5或6万吧\N5 6万かな`|

### 织梦.歌词排序

1. 按语言拆分 `zmsub.lyric_sort_by_lang.lua`
文件名: `zmsub.lyric_sort_by_lang.lua`

选中按时间交错排序的双字台词,会把台词按语言拆为两块。

Expand Down Expand Up @@ -117,7 +105,9 @@
[ZH4]日子一天天流淌 带来愈发深厚的羁绊
```
2. 按时间交错 `zmsub.lyric_sort_by_time.lua`
2. 按时间交错
文件名:`zmsub.lyric_sort_by_time.lua`
选中按语言聚集排序的双字台词,会把前半部分和后半部分交错在一起。
Expand Down Expand Up @@ -151,9 +141,11 @@
```
### 织梦.智能合并对话 `zmsub.smart_join_lines_wspace.lua`、`zmsub.smart_join_lines_nospace.lua`
### 智能合并对话
文件名:`zmsub.smart_join_lines_wspace.lua`(用空格分隔)、`zmsub.smart_join_lines_nospace.lua`(无分隔符)
直接合并多行已处理过的对白。按\N区分,把中文和日文分别合并至各自部分,并保留`模糊阴影(2304)`特效。
直接合并多行已处理过的对白。把中文和日文分别合并至各自部分(以`\N`区分),并保留`模糊阴影(2304)`特效。
合并时的分隔符分为`空格`或`不含分隔符`。
Expand All @@ -162,6 +154,63 @@
执行前:
{\blur3\yshad2.5\xshad1.5}好重\N{\fnSource Han Sans JP Bold\fs55\fsvp10}重っ
{\blur3\yshad2.5\xshad1.5}原来这么厚啊\N{\fnSource Han Sans JP Bold\fs55\fsvp10}こんな分厚いんだね
执行后:
执行后(使用空格分隔)
{\blur3\yshad2.5\xshad1.5}好重 原来这么厚啊\N{\fnSource Han Sans JP Bold\fs55\fsvp10}重っ こんな分厚いんだね
```
### 添加对白特效(2304).拆解步骤
文件名: `zmsub.detailed_steps.lua`
添加对白特效脚本按顺序依次执行了下面几个功能,你可以按需手动运行其中的步骤。
> 一般不需要用到,就算只做了下面的部分步骤(如已经插入日字特效,需要单独插入模糊阴影),直接运行完整版也可以达到目的。
1. 插入日字特效
为选中的`中字\N日字`格式插入`{\fnSource Han Sans JP Bold\fs55\fsvp10}`,并删掉(忽略特效标签后的)头尾的`\N`。
对于`\N`含有一定的容错识别能力,如:`/N`、`\\N`、`\NN`等等;头尾的识别还包括`/`、`\`等等。
具体使用的正则表达式为:
- 句中: `([\\\\/]+N+)+`
- 开头: `^([\\\\/]+N*)+`
- 结尾: `([\\\\/]+N*)+$`
示例:
|执行前|执行后|备注|
|---|---|---|
|`谢谢\Nありがとう`|`谢谢\N{\fnSource Han Sans JP Bold\fs55\fsvp10}ありがとう`|正常情况|
|`\N谢谢\\N//N\NNありがとう\N`|`谢谢\N{\fnSource Han Sans JP Bold\fs55\fsvp10}ありがとう`|`\N`的容错处理|
|`{\blur3\yshad2.5\xshad1.5}\N谢谢\Nありがとう\N{\bord3}`|`{\blur3\yshad2.5\xshad1.5}谢谢\N{\fnSource Han Sans JP Bold\fs55\fsvp10}ありがとう{\bord3}`|清理头尾`\N`时忽略特效标签|
2. 规范空格、数字宽度
全角空格替换为半角、多个连续空格替换为一个空格;开头、结尾的空格将被删除。
对白(中日分别处理)只有一个数字则全角,出现两个以上数字全部半角。
示例:
|执行前|执行后|备注|
|---|---|---|
|开头结尾、中间存在(多个)半角/全角空格|`[开头] 但 但是 [结尾]\N[开头] だ  だけど [结尾]`|`但 但是\Nだ だけど`|
|开头结尾空格处理无视特效标签|`{\blur3\yshad2.5\xshad1.5} 但 但是 \N だ  だけど {\blur0}`|`{\blur3\yshad2.5\xshad1.5}但 但是\Nだ だけど{\blur0}`|
|一个半角数字|`1年左右\N1年くらい`|`1年左右\N1年くらい`|
|多个全角数字|`15或16万吧\N15 16万かな`|`15或16万吧\N15 16万かな`|
|多个全角数字|`5或6万吧\N5 6万かな`|`5或6万吧\N5 6万かな`|
3. 插入模糊阴影(2304)
每行开头插入`\blur3\yshad2.5\xshad1.5`特效。
示例:
|执行前|执行后|备注|
|---|---|---|
|`但是啊\Nでもなぁ`|`{\blur3\yshad2.5\xshad1.5}但是啊\Nでもなぁ`|原文无特效标签|
|`{\fn40}但是啊\Nでもなぁ`|`{\blur3\yshad2.5\xshad1.5\fn40}但是啊\Nでもなぁ`|原文已有特效标签|
98 changes: 98 additions & 0 deletions zmsub.check_symbols.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
local tr = aegisub.gettext

script_name = tr"织梦.检查中日符号一致性 (所有行)"
script_description = tr"检查中字和日字部分的符号是否一致。目前检查的符号有…,。?!,.!、「」『』【】"
script_author = "谢耳朵w"
script_version = "0.1"

re = require 'aegisub.re'
require 'zmsub_utils.general'
local exp_sep = re.compile("(.*)(\\\\N(?:\\{\\\\fnSource Han Sans JP Bold.*?\\})?)(.*)")
local exp_lstrip_nl = re.compile('^(?:[\\\\/]+N*)+')
local exp_rstrip_nl = re.compile('(?:[\\\\/]+N*)+$')

function replace_until_same(text, exp, newtxt)
local ot = text
repeat
ot = text
text = exp:sub(text, newtxt)
until ot == text
return text
end

local exp_SYMBOLS_CHECK = re.compile("[…,。?!,.!、「」『』【】]")
function check_symbol_consistency(tleft, tright)
local symbols_found = {}
local symbol = ''
for symbol, start_idx, end_idx in exp_SYMBOLS_CHECK:gfind(tleft) do
-- aegisub.debug.out('symbol lefft: ' .. symbol .. '\n')
table.insert(symbols_found, symbol)
end

local index = 1
for symbol, start_idx, end_idx in exp_SYMBOLS_CHECK:gfind(tright) do
-- aegisub.debug.out('symbol right: ' .. symbol .. '\n')
if symbols_found[index] ~= symbol then
return false
end
index = index + 1
end
return true
end

function proc_lines(subs, sels, curr)
local offset = linenum_offset(subs)
-- 记录正常和异常的编号,用于显示处理结果
local normalsels = {}
local errsels = {}
for i = 1, #subs do
aegisub.progress.set(i * 100 / #subs)
if subs[i].class == "dialogue" then
local oline = subs[i]
local line = subs[i]

-- 删除特效标签
line.text = line.text:gsub("{[^}]+}", "")

-- 去除开头和结尾多余的\N
line.text = replace_until_same(line.text, exp_lstrip_nl, '')
line.text = replace_until_same(line.text, exp_rstrip_nl, '')

-- 拆分中日字
local res = exp_sep:match(line.text)
if not res or #res ~= 4 then
aegisub.debug.out('格式错误,无法检查:')
aegisub.debug.out(i-offset .. ": " .. line.text .. "\n")
return {i}
else
local tleft = res[2]['str']
local tright = res[4]['str']

-- 检查中日字符号是否一致
if not check_symbol_consistency(tleft, tright) then
-- 不一致则注释并选中
aegisub.debug.out(i-offset .. ": " .. line.text .. "\n")
oline.comment = true
subs[i] = oline
table.insert(errsels, i)
else
table.insert(normalsels, i)
end

end
end
end
aegisub.set_undo_point(script_name)

-- 提示哪些行处理错误,注释并选中这些行
if #errsels > 0 then
aegisub.debug.out('\n以上对白的符号不一致,将被选中并注释!')
return errsels
else
-- 不存在异常行,则选中所有被处理过的行
aegisub.debug.out('全部检查通过!')
return normalsels
end
end

aegisub.register_macro(script_name, script_description, proc_lines)
22 changes: 11 additions & 11 deletions zmsub.detailed_steps.lua
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
local tr = aegisub.gettext
script_name = tr("织梦.对白处理.拆解步骤")
script_description = tr("允许你分开运行'织梦.对白处理'里的特定步骤")
script_name = tr("织梦.添加对白特效(2304).拆解步骤")
script_description = tr("允许你分步骤执行'织梦.添加对白特效(2304)',一般用不到")
script_author = "谢耳朵w"
script_version = "0.1"
script_version = "0.1.1"

re = require 'aegisub.re'
require 'zmsub_utils.general'
Expand Down Expand Up @@ -80,20 +80,20 @@ TLL_macros = {
validation = false,
version = versions.insert_jptag,
},
{
script_name = "2.插入模糊阴影(2304)",
script_description = "每行开头插入'\\blur3\\yshad2.5\\xshad1.5'特效",
entry = function(subs,sel) switches.insert_zmsub2304_tags=true return proc_lines(subs, sel) end,
validation = false,
version = versions.insert_zmsub2304_tags,
},
{
script_name = "3.规范空格、数字宽度",
script_name = "2.规范空格、数字宽度",
script_description = "连续的全/半角空格全部替换为一个半角空格;对白只有一位数字则全角,两位以上数字全部半角。",
entry = function(subs,sel) switches.proc_space_digits=true return proc_lines(subs, sel) end,
validation = false,
version = versions.proc_space_digits,
},
{
script_name = "3.插入模糊阴影(2304)",
script_description = "每行开头插入'\\blur3\\yshad2.5\\xshad1.5'特效",
entry = function(subs,sel) switches.insert_zmsub2304_tags=true return proc_lines(subs, sel) end,
validation = false,
version = versions.insert_zmsub2304_tags,
},
}

for i = 1, #TLL_macros do
Expand Down
15 changes: 15 additions & 0 deletions zmsub.remove_tags_for_dialogues.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
local tr = aegisub.gettext

require 'strip-tags'

script_name = tr"织梦.删除对白特效 (选中行)"
script_description = tr"删除选中行的特效代码(花括号部分)。"
script_author = "谢耳朵w"
script_version = "1.0"


function proc_lines(subs, sels)
strip_tags(subs, sels)
end

aegisub.register_macro(script_name, script_description, proc_lines)
8 changes: 4 additions & 4 deletions zmsub.set_tags_for_dialogues.lua
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
local tr = aegisub.gettext

script_name = tr"织梦.对白处理(2304) (选中行)"
script_description = tr"配合'织梦-对白-2304'使用,为选中的'中字\\N日字'格式的对白添加特效,并规范空格、数字宽度。"
script_name = tr"织梦.添加对白特效(2304) (选中行)"
script_description = tr"配合'织梦-对白-2304'样式使用,为选中的'中字\\N日字'格式的对白添加特效,并规范空格、数字宽度。"
script_author = "谢耳朵w"
script_version = "1.0"
script_version = "1.0.1"

re = require 'aegisub.re'
require 'zmsub_utils.general'
Expand Down Expand Up @@ -50,7 +50,7 @@ function proc_lines(subs, sels, curr)

-- 提示哪些行处理错误,注释并选中这些行
if #errsels > 0 then
aegisub.debug.out('\n处理以上对白时发生错误,将被选中并注释!\n请修复后,选中这些对白然后重新执行本脚本。')
aegisub.debug.out('\n处理以上对白时发生错误,将被选中并注释!\n请确保对白中存在\\N。\n修复后,选中这些对白然后重新执行本脚本。')
return errsels
else
-- 不存在异常行,则选中所有被处理过的行
Expand Down
Loading

0 comments on commit 31c9f81

Please sign in to comment.