diff options
Diffstat (limited to 'libass/ass_fontselect.c')
-rw-r--r-- | libass/ass_fontselect.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/libass/ass_fontselect.c b/libass/ass_fontselect.c index 0514d84..6441caa 100644 --- a/libass/ass_fontselect.c +++ b/libass/ass_fontselect.c @@ -28,7 +28,10 @@ #include <sys/types.h> #include <sys/stat.h> #include <inttypes.h> +#include <limits.h> #include <ft2build.h> +#include <sys/types.h> +#include <dirent.h> #include FT_FREETYPE_H #include FT_SFNT_NAMES_H #include FT_TRUETYPE_IDS_H @@ -156,6 +159,28 @@ static ASS_FontProviderFuncs ft_funcs = { NULL }; +static void load_fonts_from_dir(ASS_Library *library, const char *dir) +{ + DIR *d = opendir(dir); + if (!d) + return; + while (1) { + struct dirent *entry = readdir(d); + if (!entry) + break; + char fullname[PATH_MAX]; + snprintf(fullname, sizeof(fullname), "%s/%s", dir, entry->d_name); + size_t bufsize = 0; + ass_msg(library, MSGL_WARN, "Loading font file '%s'", fullname); + void *data = read_file(library, fullname, &bufsize); + if (data) { + ass_add_font(library, entry->d_name, data, bufsize); + free(data); + } + } + closedir(d); +} + /** * \brief Create a bare font provider. * \param selector parent selector. The provider will be attached to it. @@ -870,6 +895,10 @@ ass_embedded_fonts_add_provider(ASS_Library *lib, ASS_FontSelector *selector, if (priv == NULL) return NULL; + if (lib->fonts_dir && lib->fonts_dir[0]) { + load_fonts_from_dir(lib, lib->fonts_dir); + } + for (i = 0; i < lib->num_fontdata; ++i) process_fontdata(priv, lib, ftlib, i); |