Mercurial > emacs
changeset 91214:998b9da240f0
(struct OpenTypeSpec): Members script_tag renamed to
script, langsys_tag renamed to langsys, new member script.
(OTF_TAG_STR): Terminate by '\0'.
(ftfont_get_open_type_spec): If :otf prop is is spec, Limit the
listing to the script specified in that property. Fix arg to
OTF_check_features.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Sun, 09 Dec 2007 12:29:51 +0000 |
parents | aaf0103455b0 |
children | bbe57de1a9ef |
files | src/ftfont.c |
diffstat | 1 files changed, 22 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ftfont.c Sun Dec 09 07:26:53 2007 +0000 +++ b/src/ftfont.c Sun Dec 09 12:29:51 2007 +0000 @@ -324,7 +324,8 @@ struct OpenTypeSpec { - unsigned int script, langsys; + Lisp_Object script; + unsigned int script_tag, langsys_tag; int nfeatures[2]; unsigned int *features[2]; }; @@ -341,6 +342,7 @@ (P)[1] = (char) ((TAG >> 16) & 0xFF); \ (P)[2] = (char) ((TAG >> 8) & 0xFF); \ (P)[3] = (char) (TAG & 0xFF); \ + (P)[4] = '\0'; \ } while (0) static struct OpenTypeSpec * @@ -352,17 +354,24 @@ if (! spec) return NULL; - val = XCAR (otf_spec); + spec->script = XCAR (otf_spec); if (! NILP (val)) - OTF_SYM_TAG (val, spec->script); + { + OTF_SYM_TAG (spec->script, spec->script_tag); + val = assq_no_quit (spec->script, Votf_script_alist); + if (CONSP (val) && SYMBOLP (XCDR (val))) + spec->script = XCDR (val); + else + spec->script = Qnil; + } else - spec->script = 0x44464C54; /* "DFLT" */ + spec->script_tag = 0x44464C54; /* "DFLT" */ otf_spec = XCDR (otf_spec); val = XCAR (otf_spec); if (! NILP (val)) - OTF_SYM_TAG (val, spec->langsys); + OTF_SYM_TAG (val, spec->langsys_tag); else - spec->langsys = 0; + spec->langsys_tag = 0; spec->nfeatures[0] = spec->nfeatures[1] = 0; for (i = 0; i < 2; i++) { @@ -464,10 +473,11 @@ if (EQ (key, QCotf)) { otspec = ftfont_get_open_type_spec (val); - if (otspec) + if (! otspec) return null_vector; strcat (otlayout, "otlayout:"); - OTF_TAG_STR (otspec->script, otlayout + 9); + OTF_TAG_STR (otspec->script_tag, otlayout + 9); + script = otspec->script; } else if (EQ (key, QClanguage)) { @@ -634,12 +644,12 @@ otf = OTF_open ((char *) file); if (! otf) continue; - if (OTF_check_features (otf, 0, - otspec->script, otspec->langsys, + if (OTF_check_features (otf, 1, + otspec->script_tag, otspec->langsys_tag, otspec->features[0], otspec->nfeatures[0]) != 1 - || OTF_check_features (otf, 1, - otspec->script, otspec->langsys, + || OTF_check_features (otf, 0, + otspec->script_tag, otspec->langsys_tag, otspec->features[1], otspec->nfeatures[1]) != 1) continue;