Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
7d44d87
Update zh-CN po
op200 Mar 18, 2025
3de5040
Update zh-CN po (cmp with 3.4)
op200 Mar 19, 2025
e78ac4b
Update zh_CN.po
op200 Mar 19, 2025
d116e1a
Update zh-CN po
op200 Mar 19, 2025
d04975f
Update zh-CN po
op200 Mar 19, 2025
ad7c464
Update zh-CN po
op200 Mar 23, 2025
96af6d7
Update po/zh_CN.po
op200 Mar 24, 2025
ebd7fe8
git merge
op200 Jun 26, 2025
64079ce
restore po file
op200 Jun 26, 2025
4502b56
update po from pot
op200 Jun 26, 2025
e639c6c
update zh-CN po
op200 Jun 26, 2025
5303e6f
update zh-CN po
op200 Jun 26, 2025
62a9003
ci: Don't install lua modules on mac
arch1t3cht Jun 26, 2025
7185a0f
Simple corrections and consistency fixes
witchymary Jun 26, 2025
b578d3a
Translate New Strings Added Since
witchymary Jun 26, 2025
d1acdbf
Additional Small Corrections
witchymary Jun 26, 2025
e600e47
Fix version.sh when calling meson outside the source repository
arch1t3cht Aug 5, 2025
c85903e
update zh-CN po
op200 Aug 17, 2025
bcdb656
Properly parse SRT subtitles in MKV files
arch1t3cht Aug 30, 2025
9db75a9
meson: Update wrapdb v1 wrap to v2
arch1t3cht Oct 9, 2025
32e4da2
Update Catalan translation
Ereza Oct 14, 2025
93e5acc
Fix broken encodings in automation script error messages
arch1t3cht Oct 24, 2025
05e028b
Fix OOM loop in CSRI when path contains special characters
arch1t3cht Oct 24, 2025
27de4a0
Fix integer conversion warning in subtitles_provider_csri.cpp
arch1t3cht Oct 24, 2025
4af33ad
meson: Require boost.regex on old boost versions
arch1t3cht Mar 24, 2025
b805797
Add note about minimum gcc version in README
arch1t3cht Oct 30, 2025
a8f9004
Rename the video's zoom to "window zoom"
arch1t3cht Jun 15, 2025
f002b8e
Pass canvas size to visual tools
arch1t3cht Aug 10, 2025
ff678fc
Fix mirrored coordinates in cross tool with detached video
arch1t3cht Aug 10, 2025
8cb7296
Rename video_res to video_size in visual tools
arch1t3cht Aug 10, 2025
dd78e03
Add comments for coordinate setters in visual_tool.h
arch1t3cht Aug 10, 2025
bd61a4e
Add video panning and zoom
arch1t3cht Aug 10, 2025
e053add
Reset video zoom when unloading video
arch1t3cht Aug 20, 2025
97305ae
Allow video zooming using zoom touchpad gestures
arch1t3cht Aug 20, 2025
5a5875f
Extract dedicated pan function
arch1t3cht Aug 20, 2025
e349a4c
Add command to reset video pan
arch1t3cht Sep 8, 2025
489fd72
Ignore stray zoom gesture event on X11
arch1t3cht Oct 24, 2025
63992e2
Fix squished video on large video zoom
arch1t3cht Oct 26, 2025
3dd979a
Add editorconfig for default_*.json
arch1t3cht Oct 30, 2025
2a8c3b0
Allow configuring the actions of ctrl/shift/normal scroll on the video
arch1t3cht Oct 27, 2025
80352a5
Fix grid in RotateXY visual tool
arch1t3cht Jan 14, 2023
4342422
Repaint karaoke split/join bar immediately after changing fonts
0tkl Jun 2, 2025
26b1fd4
Support libass's BorderStyle=4 in style editor
arch1t3cht Nov 5, 2025
7879436
Update all remaining user-facing URLs
arch1t3cht Nov 11, 2025
fdb8a94
Bump safe wrapdb deps
0tkl Oct 4, 2025
8a74f77
Bump nasm to 3.01
0tkl Oct 4, 2025
7efdd8f
Bump hunspell to 1.7.2
0tkl Oct 4, 2025
b9793a9
Update wxWidgets to track 3.2 branch
0tkl Oct 7, 2025
903bfce
ci: Bump Windows gettext-iconv to v0.26-v1.17
0tkl Oct 4, 2025
3c3a7d3
ci: Unpin meson
0tkl Oct 4, 2025
d1bf466
Add build option to force fallback NASM usage
0tkl Oct 6, 2025
815a5f3
Use U+00D7 × to display multiplication on UI instead of lowercase let…
0tkl Nov 17, 2025
e805e7c
ci: Bump mac runners to macos-15-intel
arch1t3cht Nov 11, 2025
c1b63f7
Work around boost GIL compile error
arch1t3cht Nov 17, 2025
cbd9aae
Remove assertion that charset has nonzero nul_size
arch1t3cht Nov 17, 2025
7fcdca9
Remove nul_size logic in iconv wrapper
arch1t3cht Nov 17, 2025
c46b46e
Remove vertical borders added to a static text
0tkl Nov 17, 2025
ed62416
Add "FHD vertical" to video resolution list
0tkl Nov 17, 2025
1fd46d9
Update zh_TW.po with new and revised translations (#472)
Howardisme Nov 18, 2025
e406807
update zh-CN po
op200 Nov 20, 2025
b194c92
update zh-CN po
op200 Nov 20, 2025
86a8cc4
update zh-CN po
op200 Nov 20, 2025
c996df9
update zh-CN po
op200 Nov 20, 2025
5d54168
Clarify README note about libstdc++ bug
arch1t3cht Nov 22, 2025
7c761ee
Fix crash when failing to save a file
arch1t3cht Nov 22, 2025
0ae5af2
Add CFBundleSupportedPlatforms to Info.plist (#478)
9vult Nov 24, 2025
9ab43b4
Make border style dropdown values translatable
arch1t3cht Nov 26, 2025
1d90374
Regenerate aegisub.pot file
KerimDemirkaynak Nov 26, 2025
8c61f47
Update Turkish Translation
KerimDemirkaynak Nov 26, 2025
1f0fcf9
Add ability for automation scripts to raise warnings
arch1t3cht Nov 26, 2025
286f7bb
Deprecate luabins library
arch1t3cht Nov 26, 2025
a62ad43
Sign osx-bundle if necessary
arch1t3cht Nov 24, 2025
1ba8934
ci: Add macos arm64 runners
arch1t3cht Nov 24, 2025
6f7e314
Make more strings translatable
zlomzlom Nov 29, 2025
9120a91
Fix strings in commands
zlomzlom Nov 29, 2025
1ad6844
Regenerate pot file
arch1t3cht Dec 1, 2025
46a42da
Fix indentation in dummy video resolution list
arch1t3cht Dec 2, 2025
39f6912
Regenerate zh_CN.po
0tkl Dec 1, 2025
277b7fe
Update Turkish Translation
KerimDemirkaynak Dec 5, 2025
65e804e
Bump safe wrapdb deps
0tkl Dec 5, 2025
7e5207b
Bump version string of ffms2's meson wrap to 5.0
0tkl Dec 5, 2025
7bfef87
ci: Bump GitHub Actions versions
0tkl Dec 5, 2025
ea130ae
Improvement to the size of main frame in high DPI
0tkl Dec 5, 2025
490b73f
Simplify wxFrame constructor call using defaults
0tkl Dec 5, 2025
a63edfe
Allow translating choices for string options in preferences
arch1t3cht Dec 6, 2025
7601881
Merge branch 'master' and update zh_CN.po
op200 Dec 7, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,8 @@ indent_style = tab
indent_size = 2
tab_width = 8
trim_trailing_whitespace = false

[src/libresrc/**default_*.json]
indent_style = tab
indent_size = 2
trim_trailing_whitespace = true
41 changes: 26 additions & 15 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ jobs:
args: >-
-Ddefault_library=static
--force-fallback-for=zlib,harfbuzz,freetype2,fribidi,libpng
-Dfallback_nasm=true
-Dfreetype2:harfbuzz=disabled
-Dharfbuzz:freetype=disabled
-Dharfbuzz:cairo=disabled
Expand Down Expand Up @@ -52,31 +53,43 @@ jobs:
args: -Db_pch=false
}
- {
name: macOS Debug,
os: macos-13,
name: macOS x86_64 Debug,
os: macos-15-intel,
buildtype: debugoptimized,
args: -Ddefault_library=static -Dbuild_osx_bundle=true -Dlocal_boost=true --force-fallback-for=ffms2
}
- {
name: macOS Release,
os: macos-13,
name: macOS x86_64 Release,
os: macos-15-intel,
buildtype: release,
args: -Ddefault_library=static -Dbuild_osx_bundle=true -Dlocal_boost=true --force-fallback-for=ffms2
}
- {
name: macOS arm64 Debug,
os: macos-15,
buildtype: debugoptimized,
args: -Ddefault_library=static -Dbuild_osx_bundle=true -Dlocal_boost=true --force-fallback-for=ffms2
}
- {
name: macOS arm64 Release,
os: macos-15,
buildtype: release,
args: -Ddefault_library=static -Dbuild_osx_bundle=true -Dlocal_boost=true --force-fallback-for=ffms2
}

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
fetch-depth: '0'

- uses: actions/setup-python@v5
- uses: actions/setup-python@v6
with:
python-version: '3.x'

- name: Setup Meson
run: |
python -m pip install --upgrade pip setuptools
pip install meson==1.7.2
pip install meson

- name: Setup MSVC
if: matrix.config.os == 'windows-latest' && matrix.config.msvc == true
Expand All @@ -95,7 +108,7 @@ jobs:
Get-Location | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
popd

$gettexturl = "https://github.com/mlocati/gettext-iconv-windows/releases/download/v0.21-v1.16/gettext0.21-iconv1.16-static-64.zip"
$gettexturl = "https://github.com/mlocati/gettext-iconv-windows/releases/download/v0.26-v1.17/gettext0.26-iconv1.17-static-64.zip"
Invoke-WebRequest -Uri $gettexturl -OutFile ".\gettext.zip"
Expand-Archive ".\gettext.zip" -DestinationPath gettext
pushd gettext/bin
Expand All @@ -109,9 +122,7 @@ jobs:
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
# Skip brew update for now, see https://github.com/actions/setup-python/issues/577
# brew update
brew install luarocks ninja
sudo luarocks install luafilesystem 1.8.0
sudo luarocks install moonscript --dev
brew install ninja
brew install libass zlib ffms2 fftw hunspell
brew install pulseaudio # NO OpenAL in github CI

Expand Down Expand Up @@ -143,15 +154,15 @@ jobs:
run: cd build && ninja win-portable

- name: Upload artifacts - win_installer
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: matrix.config.os == 'windows-latest'
with:
name: ${{ matrix.config.name }} - installer
path: build/Aegisub-*.exe
if-no-files-found: error

- name: Upload artifacts - portable.zip
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: matrix.config.os == 'windows-latest'
with:
name: ${{ matrix.config.name }} - portable
Expand All @@ -165,7 +176,7 @@ jobs:
meson compile osx-build-dmg -C build

- name: Upload artifacts - macOS dmg
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.config.os, 'macos-')
with:
name: ${{ matrix.config.name }} - installer
Expand All @@ -187,7 +198,7 @@ jobs:
test -e distcheck/*/subprojects/LuaJIT*/meson.build

- name: Upload artifacts - tarball
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: matrix.config.os == 'ubuntu-latest' && matrix.config.buildtype == 'release'
with:
name: Source Tarball
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,8 @@ If you are packaging Aegisub for a Linux distribution, here are a few things you

Like for its other dependencies, Aegisub includes a meson subproject for LuaJIT that can be used to statically link a version of LuaJIT with 5.2 compatibility.
For distributions that do not allow downloading additional sources at build time, the downloaded LuaJIT subproject is included in the source tarballs distributed with releases.
- When linked against libstdc++, Aegisub needs libstdc++ 6.0.32 or later due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95048.
Aegisub's tests will detect this bug, but if you're not running tests on packaging you'll need to make sure the libstdc++ version is recent enough.

The following commands are an example for how to build Aegisub with the goal of creating a distribution package:

Expand Down
4 changes: 2 additions & 2 deletions automation/autoload/macro-2-mkfullwitdh.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@

local tr = aegisub.gettext

script_name = tr("Make text fullwidth")
script_description = tr("Shows how to use the unicode include to iterate over characters and a lookup table to convert those characters to something else.")
script_name = tr"Make text fullwidth"
script_description = tr"Shows how to use the unicode include to iterate over characters and a lookup table to convert those characters to something else."
script_author = "Niels Martin Hansen"
script_version = "1"

Expand Down
27 changes: 1 addition & 26 deletions libaegisub/common/charset_conv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -114,26 +114,6 @@ namespace {
}
}

// Calculate the size of NUL in the given character set
size_t nul_size(const char *encoding) {
// We need a character set to convert from with a known encoding of NUL
// UTF-8 seems like the obvious choice
auto cd = Converter::create(false, "UTF-8", encoding);

char dbuff[4];
char sbuff[] = "";
char* dst = dbuff;
const char* src = sbuff;
size_t dstLen = sizeof(dbuff);
size_t srcLen = 1;

size_t ret = cd->Convert(&src, &srcLen, &dst, &dstLen);
assert(ret != iconv_failed);
assert(dst - dbuff > 0);

return dst - dbuff;
}

#ifdef ICONV_POSIX
class ConverterImpl final : public Converter {
size_t bomSize;
Expand Down Expand Up @@ -287,12 +267,7 @@ std::unique_ptr<Converter> Converter::create(bool subst, const char *src, const

IconvWrapper::IconvWrapper(const char *sourceEncoding, const char *destEncoding, bool enableSubst)
: conv(Converter::create(enableSubst, sourceEncoding, destEncoding))
{
// These need to be set only after we verify that the source and dest
// charsets are valid
toNulLen = nul_size(destEncoding);
fromNulLen = nul_size(sourceEncoding);
}
{ }

IconvWrapper::~IconvWrapper() = default;

Expand Down
2 changes: 0 additions & 2 deletions libaegisub/include/libaegisub/charset_conv.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,6 @@ struct Converter {

/// @brief A C++ wrapper for iconv
class IconvWrapper {
size_t toNulLen = 0;
size_t fromNulLen = 0;
std::unique_ptr<Converter> conv;

public:
Expand Down
2 changes: 2 additions & 0 deletions libaegisub/include/libaegisub/io.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

#pragma once

#include <libaegisub/exception.h>
#include <libaegisub/fs.h>

Expand Down
13 changes: 12 additions & 1 deletion libaegisub/lua/modules.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,17 @@ extern "C" int luaopen_lpeg(lua_State *L);
namespace agi::lua {
int regex_init(lua_State *L);

int wrap_luaopen_luabins(lua_State *L) {
lua_getfield(L, LUA_GLOBALSINDEX, "aegisub");
lua_getfield(L, -1, "__raise_warning");
lua_remove(L, -2);

push_value(L, "This automation script uses the library luabins. This library is deprecated and will be removed in a future version of Aegisub. If your script critically depends on luabins and cannot be adapted to work without it, please let us know at https://github.com/TypesettingTools/Aegisub/issues/382 .");
lua_call(L, 1, 0);

return luaopen_luabins(L);
}

void preload_modules(lua_State *L) {
luaL_openlibs(L);

Expand All @@ -38,7 +49,7 @@ void preload_modules(lua_State *L) {
set_field(L, "aegisub.__unicode_impl", luaopen_unicode_impl);
set_field(L, "aegisub.__lfs_impl", luaopen_lfs_impl);
set_field(L, "lpeg", luaopen_lpeg);
set_field(L, "luabins", luaopen_luabins);
set_field(L, "luabins", wrap_luaopen_luabins);

lua_pop(L, 2);

Expand Down
20 changes: 18 additions & 2 deletions meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ if host_machine.system() == 'windows'
add_global_arguments('-DCSRI_NO_EXPORT', language: 'c')
endif

sys_nasm = find_program('nasm', required: false)
if not sys_nasm.found()
if get_option('fallback_nasm') or \
not find_program('nasm', required: false).found()
nasm = subproject('nasm').get_variable('nasm')
meson.override_find_program('nasm', nasm)
endif
Expand Down Expand Up @@ -110,6 +110,15 @@ if not get_option('local_boost')
modules: boost_modules,
required: false,
static: get_option('default_library') == 'static')

if boost_dep.version().version_compare('<1.77.0')
# boost regex is header-only since version 1.77.0, and some distributions have stopped shipping the stub module since then.
# So we need to require boost.regex for older versions but can't require it for newer versions.
boost_dep = dependency('boost', version: '>=1.70.0',
modules: boost_modules + ['regex'],
required: false,
static: get_option('default_library') == 'static')
endif
endif

if get_option('local_boost') or not boost_dep.found()
Expand All @@ -120,6 +129,13 @@ if get_option('local_boost') or not boost_dep.found()
endforeach
endif

if cc.get_argument_syntax() == 'gcc'
# Work around compile error in Boost GIL, can be removed once
# https://github.com/boostorg/gil/commit/2956a0e9ef71f5c4f3163c8b8d675679e0fbaaff
# is in a boost release that's available everywhere
add_project_arguments(cc.get_supported_arguments(['-Wno-missing-template-arg-list-after-template-kw']), language: 'cpp')
endif

deps += boost_dep
if host_machine.system() == 'windows'
conf.set('BOOST_USE_WINDOWS_H', 1)
Expand Down
1 change: 1 addition & 0 deletions meson_options.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ option('csri', type: 'feature', description: 'CSRI support')

option('system_luajit', type: 'boolean', value: false, description: 'Force using system luajit')
option('local_boost', type: 'boolean', value: false, description: 'Force using locally compiled Boost')
option('fallback_nasm', type: 'boolean', value: false, description: 'Force using fallback nasm')

option('wx_version', type: 'string', value: '3.2.2', description: 'The minimum wxWidgets version to use')

Expand Down
10 changes: 8 additions & 2 deletions packages/osx_bundle/Contents/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
<string>@PLIST_VERSION@</string>

<key>CFBundleLongVersionString</key>
<string>@PLIST_VERSION@, Copyright 2005-2014, aegisub http://www.aegisub.org/</string>
<string>@PLIST_VERSION@, Copyright 2005-2014, aegisub https://aegisub.org/</string>

<!-- Values: i386, ppc, x86_65, ppc64 -->
<key>LSArchitecturePriority</key>
Expand All @@ -42,9 +42,15 @@
<string>i386</string>
</array>

<!-- Target platform -->
<key>CFBundleSupportedPlatforms</key>
<array>
<string>MacOSX</string>
</array>

<!-- Displayed in the 'Get Info' context menu dialogue -->
<key>CFBundleGetInfoString</key>
<string>aegisub version @PLIST_VERSION@ built on @PLIST_BUILD_DATE@ http://www.aegisub.org/</string>
<string>aegisub version @PLIST_VERSION@ built on @PLIST_BUILD_DATE@ https://aegisub.org/</string>

<!-- Whether to allow multiple instances across user logins -->
<key>LSMultipleInstancesProhibited</key>
Expand Down
4 changes: 2 additions & 2 deletions packages/win_installer/dictionaries/fragment_dictbase.iss
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ AppName=Aegisub
AppVerName=Aegisub 3.1.0
AppVersion=3.1.0
AppPublisher=Aegisub Team
AppPublisherURL=http://www.aegisub.org/
AppSupportURL=http://forum.aegisub.org/
AppPublisherURL=https://aegisub.org/
AppSupportURL=https://github.com/TypesettingTools/Aegisub/issues
AppCopyright=� 2005-2014 The Aegisub Team
VersionInfoVersion=3.1.0
DefaultDirName={pf}\Aegisub
Expand Down
Loading