It's modestly faster, significantly more type-safe, and doesn't assert
when there's too few arguments, which causes problems for plural forms.
Closes#1733.
Most of the dialogs in Aegisub have a public interface consisting of a
single function, so there's really no need to expose the actual dialog
classes to the rest of the program. Add dialogs.h with the declarations
of all of those functions (most of which are just ShowFooDialog()), and
kill a million other headers.
Add a new Project class which is responsible for everything related to
opening and closing audio, video, subtitles, timecodes and keyframes.
This pulls almost everything not directly related to playing audio/video
out of the audio and video controllers, pulls more crap out of
FrameMain, and happens to make things a little simpler in the process.
It is off by default on Windows due to that it breaks if a wx-using
library is loaded with LoadLibrary on XP, but that is not a use-case we
care about.
This eliminates the need for a msys environment to build any part of
Aegisub. Also happens to make building FFmpeg much faster (~3 minutes
vs. ~10 minutes for me).
Eliminates the need to have a copy of git accessible in the msys
build environment and reduces the dependency on msys to just FFmpeg.
Probably trivially faster due to how slow shell scripts are on Windows.
It seems that whitespace around the paths in the PATH, LIB, INCLUDE env
vars can break in some situations, making the build fail entirely.
Unfortunately this also makes the file harder to read and diff.
In preparation for switching to LuaJIT, which doesn't support PUC Lua's
thing of using C++ exceptions for lua_error.
Requires replacing all uses of lua_error (and things calling lua_error)
with custom versions that throw an exception instead and adding an
exception -> lua error wrapper at all C++ -> Lua boundaries.
This requires shuffling a bunch of stuff around to get a CLI lua
executable that uses an automation-like environment, but that's
something that'll be nice to have in the future anyway.
Busted indirectly depends on lfs and we currently can't use external
binary modules, so add a copy of lfs to the repo and build it with
Aegisub.