Aegisub/aegisub/automation/demos/auto3/9-advanced-skeleton.lua
Amar Takhar a067bd560d SVN Transition Step 3/7
1. cd aegisub/
  2. svn mv *cpp *h src/
  3. svn mv Makefile.am MatroskaParser.c auto4_perldata.inc bitmaps boost \
     changelog.txt config gl include libosxutil libresrc md5.c msvc mythes.cxx \
     mythes.hxx res.rc src/
  4. cd ..
  5. svn mv FFmpegSource2/ INSTALL Makefile.am README  acinclude.m4 \
     autogen.sh automation/ bin build configure.in desktop dummy.txt lib \
     libass/ m4macros/ packages/ po/ scripts/ universalchardet/ aegisub/
  6. mkdir -p docs/wiki_convert
  7. svn add docs/wiki_convert
  8. cd docs
  9. svn mv aegisub_convert_docs.pl convert.bat output wiki_convert/

* See r2749 for full description.

Originally committed to SVN as r2752.
2009-03-08 08:30:39 +00:00

50 lines
2.3 KiB
Lua

-- 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