summaryrefslogtreecommitdiffstats
path: root/libass
diff options
context:
space:
mode:
Diffstat (limited to 'libass')
-rw-r--r--libass/ass.c2
-rw-r--r--libass/ass_fontselect.c29
-rw-r--r--libass/ass_library.h2
3 files changed, 32 insertions, 1 deletions
diff --git a/libass/ass.c b/libass/ass.c
index 01dd2eb..b51cf2e 100644
--- a/libass/ass.c
+++ b/libass/ass.c
@@ -1031,7 +1031,7 @@ out:
* \param bufsize out: file size
* \return pointer to file contents. Caller is responsible for its deallocation.
*/
-static char *read_file(ASS_Library *library, char *fname, size_t *bufsize)
+char *read_file(ASS_Library *library, char *fname, size_t *bufsize)
{
int res;
long sz;
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);
diff --git a/libass/ass_library.h b/libass/ass_library.h
index 8faf15e..8144f8e 100644
--- a/libass/ass_library.h
+++ b/libass/ass_library.h
@@ -38,4 +38,6 @@ struct ass_library {
void *msg_callback_data;
};
+char *read_file(struct ass_library *library, char *fname, size_t *bufsize);
+
#endif /* LIBASS_LIBRARY_H */