summaryrefslogtreecommitdiffstats
path: root/libass
diff options
context:
space:
mode:
authoreugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-05-01 00:34:26 +0000
committereugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-05-01 00:34:26 +0000
commit92eb522894c4f604ee028b372ec1244fd82f9280 (patch)
tree4a30a9ff1020d0f0758a347f56fec82e20c8e5ea /libass
parent3c5c439c8b5698dcc8358b5d931adce7395dae30 (diff)
downloadlibass-92eb522894c4f604ee028b372ec1244fd82f9280.tar.bz2
libass-92eb522894c4f604ee028b372ec1244fd82f9280.tar.xz
Allow inexact font family matching.
In SSA/ASS fonts are sometimes referenced by their "full name", which is usually a concatenation of family name and font style (ex. Ottawa Bold). Full name is available from FontConfig pattern element FC_FULLNAME, but it is never used for font matching. Therefore, I'm removing words from the end of the name one by one, and adding shortened names to the pattern. It seems that the first value (full name in this case) has precedence in matching. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@26623 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libass')
-rw-r--r--libass/ass_fontconfig.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/libass/ass_fontconfig.c b/libass/ass_fontconfig.c
index b9a8f42c..48b24ad9 100644
--- a/libass/ass_fontconfig.c
+++ b/libass/ass_fontconfig.c
@@ -81,6 +81,26 @@ static char* _select_font(fc_instance_t* priv, const char* family, unsigned bold
goto error;
FcPatternAddString(pat, FC_FAMILY, (const FcChar8*)family);
+
+ // In SSA/ASS fonts are sometimes referenced by their "full name",
+ // which is usually a concatenation of family name and font
+ // style (ex. Ottawa Bold). Full name is available from
+ // FontConfig pattern element FC_FULLNAME, but it is never
+ // used for font matching.
+ // Therefore, I'm removing words from the end of the name one
+ // by one, and adding shortened names to the pattern. It seems
+ // that the first value (full name in this case) has
+ // precedence in matching.
+ // An alternative approach could be to reimplement FcFontSort
+ // using FC_FULLNAME instead of FC_FAMILY.
+ if (strchr(family, ' ')) {
+ char *p, *s = strdup(family);
+ while (p = strrchr(s, ' ')) {
+ *p = '\0';
+ FcPatternAddString(pat, FC_FAMILY, (const FcChar8*)s);
+ }
+ free(s);
+ }
FcPatternAddBool(pat, FC_OUTLINE, FcTrue);
FcPatternAddInteger(pat, FC_SLANT, italic);
FcPatternAddInteger(pat, FC_WEIGHT, bold);