Skip to content
This repository has been archived by the owner on May 12, 2024. It is now read-only.

Commit

Permalink
Fixes:
Browse files Browse the repository at this point in the history
 - Update libass to 5733e1c
 - Fix mixin lines not highlighted in 0x Templater
 - Use libass for windows properly.
  • Loading branch information
Ristellise committed Jul 13, 2021
1 parent 8d9ac15 commit a918469
Show file tree
Hide file tree
Showing 21 changed files with 1,417 additions and 984 deletions.
2 changes: 1 addition & 1 deletion src/libresrc/default_config_win.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@
}
},
"Subtitle" : {
"Provider" : "CSRI/xy-vsfilter_aegisub"
"Provider" : "libass"
}
}
2 changes: 1 addition & 1 deletion src/subs_edit_ctrl_stc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ void SubsStyledTextEditCtrl::SetStyles() {

void SubsStyledTextEditCtrl::UpdateStyle() {
AssDialogue *diag = context ? context->selectionController->GetActiveLine() : nullptr;
bool template_line = diag && diag->Comment && boost::istarts_with(diag->Effect.get(), "template");
bool template_line = diag && diag->Comment && (boost::istarts_with(diag->Effect.get(), "template") || boost::istarts_with(diag->Effect.get(), "mixin"));

tokenized_line = agi::ass::TokenizeDialogueBody(line_text, template_line);
agi::ass::SplitWords(line_text, tokenized_line);
Expand Down
Binary file modified vendor/extra/libass/bin/Release_x64/libass.lib
Binary file not shown.
Binary file modified vendor/extra/libass/bin/Release_x64/libass/libass.pdb
Binary file not shown.
10 changes: 10 additions & 0 deletions vendor/extra/libass/bin/Release_x64/libass/libass.write.1.tlog
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,13 @@ F:\AegisubDC-git\vendor\extra\libass\bin\Release_x64\libass\blur.obj
F:\AegisubDC-git\vendor\extra\libass\bin\Release_x64\libass\cpuid.obj
^x86\rasterizer.asm
F:\AegisubDC-git\vendor\extra\libass\bin\Release_x64\libass\rasterizer.obj
^x86\be_blur.asm
F:\AegisubDC-git\vendor\extra\libass\bin\Release_x64\libass\be_blur.obj
^x86\blend_bitmaps.asm
F:\AegisubDC-git\vendor\extra\libass\bin\Release_x64\libass\blend_bitmaps.obj
^x86\blur.asm
F:\AegisubDC-git\vendor\extra\libass\bin\Release_x64\libass\blur.obj
^x86\cpuid.asm
F:\AegisubDC-git\vendor\extra\libass\bin\Release_x64\libass\cpuid.obj
^x86\rasterizer.asm
F:\AegisubDC-git\vendor\extra\libass\bin\Release_x64\libass\rasterizer.obj
2 changes: 1 addition & 1 deletion vendor/extra/libass/libass/ass.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
#include <stdarg.h>
#include "ass_types.h"

#define LIBASS_VERSION 0x01500000
#define LIBASS_VERSION 0x01501000

#ifdef __cplusplus
extern "C" {
Expand Down
100 changes: 32 additions & 68 deletions vendor/extra/libass/libass/ass_coretext.c
Original file line number Diff line number Diff line change
Expand Up @@ -126,29 +126,7 @@ static char *get_name(CTFontDescriptorRef fontd, CFStringRef attr)
return ret;
}

static bool fill_family_name(CTFontDescriptorRef fontd,
ASS_FontProviderMetaData *info)
{
if (info->n_family)
return true;

char *family_name = get_name(fontd, kCTFontFamilyNameAttribute);
if (!family_name)
return false;

info->families = malloc(sizeof(char *));
if (!info->families) {
free(family_name);
return false;
}

info->families[0] = family_name;
info->n_family++;
return true;
}

static bool get_font_info_ct(ASS_Library *lib, FT_Library ftlib,
CTFontDescriptorRef fontd,
static bool get_font_info_ct(CTFontDescriptorRef fontd,
char **path_out,
ASS_FontProviderMetaData *info)
{
Expand All @@ -160,17 +138,19 @@ static bool get_font_info_ct(ASS_Library *lib, FT_Library ftlib,
}

char *ps_name = get_name(fontd, kCTFontNameAttribute);
info->postscript_name = ps_name;
if (!ps_name)
return false;

bool got_info = ass_get_font_info(lib, ftlib, path, ps_name, -1, false, info);
free(ps_name);
char *family_name = get_name(fontd, kCTFontFamilyNameAttribute);
info->extended_family = family_name;
if (!family_name)
return false;

return got_info && fill_family_name(fontd, info);
return true;
}

static void process_descriptors(ASS_Library *lib, FT_Library ftlib,
ASS_FontProvider *provider, CFArrayRef fontsd)
static void process_descriptors(ASS_FontProvider *provider, CFArrayRef fontsd)
{
if (!fontsd)
return;
Expand All @@ -181,21 +161,13 @@ static void process_descriptors(ASS_Library *lib, FT_Library ftlib,
int index = -1;

char *path = NULL;
if (get_font_info_ct(lib, ftlib, fontd, &path, &meta)) {
if (get_font_info_ct(fontd, &path, &meta)) {
CFRetain(fontd);
ass_font_provider_add_font(provider, &meta, path, index, (void*)fontd);
}

for (int j = 0; j < meta.n_family; j++)
free(meta.families[j]);

for (int j = 0; j < meta.n_fullname; j++)
free(meta.fullnames[j]);

free(meta.families);
free(meta.fullnames);

free(meta.postscript_name);
free(meta.extended_family);

free(path);
}
Expand All @@ -204,8 +176,6 @@ static void process_descriptors(ASS_Library *lib, FT_Library ftlib,
static void match_fonts(void *priv, ASS_Library *lib, ASS_FontProvider *provider,
char *name)
{
FT_Library ftlib = priv;

CFStringRef cfname =
CFStringCreateWithCString(NULL, name, kCFStringEncodingUTF8);
if (!cfname)
Expand Down Expand Up @@ -242,15 +212,29 @@ static void match_fonts(void *priv, ASS_Library *lib, ASS_FontProvider *provider
if (!descriptors)
goto cleanup;

ctcoll = CTFontCollectionCreateWithFontDescriptors(descriptors, 0);
const int nonzero = 1;
CFNumberRef cfnonzero = CFNumberCreate(NULL, kCFNumberIntType, &nonzero);
if (!cfnonzero)
goto cleanup;
CFDictionaryRef options =
CFDictionaryCreate(NULL,
(const void **)&kCTFontCollectionRemoveDuplicatesOption,
(const void **)&cfnonzero,
1, NULL, NULL);
CFRelease(cfnonzero);
if (!options)
goto cleanup;

ctcoll = CTFontCollectionCreateWithFontDescriptors(descriptors, options);
CFRelease(options);
if (!ctcoll)
goto cleanup;

fontsd = CTFontCollectionCreateMatchingFontDescriptors(ctcoll);
if (!fontsd)
goto cleanup;

process_descriptors(lib, ftlib, provider, fontsd);
process_descriptors(provider, fontsd);

cleanup:
SAFE_CFRelease(fontsd);
Expand All @@ -266,8 +250,6 @@ static void match_fonts(void *priv, ASS_Library *lib, ASS_FontProvider *provider
static char *get_fallback(void *priv, ASS_Library *lib,
const char *family, uint32_t codepoint)
{
FT_Library ftlib = priv;

CFStringRef name = CFStringCreateWithBytes(
0, (UInt8 *)family, strlen(family), kCFStringEncodingUTF8, false);
if (!name)
Expand All @@ -294,33 +276,15 @@ static char *get_fallback(void *priv, ASS_Library *lib,
if (!fb)
return NULL;

CTFontDescriptorRef fontd = CTFontCopyFontDescriptor(fb);
CFStringRef cffamily = CTFontCopyFamilyName(fb);
CFRelease(fb);
if (!fontd)
if (!cffamily)
return NULL;

char *res_name = NULL;
char *path = NULL;
ASS_FontProviderMetaData meta = {0};
if (get_font_info_ct(lib, ftlib, fontd, &path, &meta))
res_name = meta.families[0];

CFRelease(fontd);

for (int i = 1 /* skip res_name */; i < meta.n_family; i++)
free(meta.families[i]);

for (int i = 0; i < meta.n_fullname; i++)
free(meta.fullnames[i]);

free(meta.families);
free(meta.fullnames);

free(meta.postscript_name);

free(path);
char *res_family = cfstr2buf(cffamily);
CFRelease(cffamily);

return res_name;
return res_family;
}

static void get_substitutions(void *priv, const char *name,
Expand All @@ -343,5 +307,5 @@ ASS_FontProvider *
ass_coretext_add_provider(ASS_Library *lib, ASS_FontSelector *selector,
const char *config, FT_Library ftlib)
{
return ass_font_provider_new(selector, &coretext_callbacks, ftlib);
return ass_font_provider_new(selector, &coretext_callbacks, NULL);
}
Loading

0 comments on commit a918469

Please sign in to comment.