-- Aegisub Automation demonstration script
-- Original written by Niels Martin Hansen
-- Given into the public domain

name = "Advanced skeleton demo"
description = "This script demonstrates using the karaskel-adv.lua include file to make rceation of per-syllable positioning effects easier."

version, kind, configuration = 3, 'basic_ass', {}

include("karaskel-adv.lua")

-- What kind of effect this makes:
-- Each syllable "jumps" up and down once during its duration
-- This is achieved using two \move operations, and as known, gabest's TextSub can only handle one \move per line
-- So we need two lines per syllable, split exactly in the middle of the duration of the syllable

function do_syllable(meta, styles, config, line, syl)
	-- Make two copies of the original line (having the right timings etc)
	local half1, half2 = copy_line(line), copy_line(line)
	-- Make the first half line end halfway into the duration of the syllable
	half1.end_time = half1.start_time + syl.start_time/10 + syl.duration/2
	-- And make the second half line start where the first one ends
	half2.start_time = half1.end_time
	-- Where to move the syllable to/from
	local fromx, fromy = line.centerleft+syl.center, line.height*2 + 20
	local tox, toy = fromx, fromy - 10
	-- Generate some text for the syllable
	half1.text = string.format("{\\an8\\move(%d,%d,%d,%d,%d,%d)}%s", fromx, fromy, tox, toy, syl.start_time, syl.start_time+syl.duration*5, syl.text_stripped)
	half2.text = string.format("{\\an8\\move(%d,%d,%d,%d,%d,%d)}%s", tox, toy, fromx, fromy, 0, syl.duration*5, syl.text_stripped)
	-- Things will look bad with overlapping borders and stuff unless
	-- we manually layer borders lower than text,
	-- and shadows lower than borders, so let's do that
	local half1b, half1s = copy_line(half1), copy_line(half1)
	half1b.text = "{\\1a&HFF&\\shad0}" .. half1b.text
	half1s.text = "{\\1a&HFF&\\bord0}" .. half1s.text
	half1.text = "{\\bord0\\shad0}" .. half1.text
	half1.layer = 2
	half1b.layer = 1
	half1s.layer = 0
	local half2b, half2s = copy_line(half2), copy_line(half2)
	half2b.text = "{\\1a&HFF&\\shad0}" .. half2b.text
	half2s.text = "{\\1a&HFF&\\bord0\\shad2}" .. half2s.text
	half2.text = "{\\bord0\\shad0}" .. half2.text
	half2.layer = 2
	half2b.layer = 1
	half2s.layer = 0
	-- Done, return the two new lines
	return {n=6, [1]=half1, [2]=half2b, [3]=half1s, [4]=half2, [5]=half2b, [6]=half2s}
end