From: Kenichi Handa Date: Wed, 15 Apr 1998 07:12:49 +0000 (+0000) Subject: (x_find_ccl_program): New function. X-Git-Tag: emacs-20.3~1527 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=a65826769eb20d2f901b51a80552f3bf4eb376db;p=emacs.git (x_find_ccl_program): New function. --- diff --git a/src/xterm.c b/src/xterm.c index 4afe386d39a..1d46d725fe9 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -6782,6 +6782,48 @@ x_query_font (f, fontname) return NULL; } +/* Find a CCL program for a font specified by FONTP, and set the memer + `encoder' of the structure. */ + +void +x_find_ccl_program (fontp) + struct font_info *fontp; +{ + extern Lisp_Object Vfont_ccl_encoder_alist, Vccl_program_table; + extern Lisp_Object Qccl_program_idx; + extern Lisp_Object resolve_symbol_ccl_program (); + Lisp_Object list, elt, ccl_prog, ccl_id; + + for (list = Vfont_ccl_encoder_alist; CONSP (list); list = XCONS (list)->cdr) + { + elt = XCONS (list)->car; + if (CONSP (elt) + && STRINGP (XCONS (elt)->car) + && (fast_c_string_match_ignore_case (XCONS (elt)->car, fontp->name) + >= 0)) + { + if (SYMBOLP (XCONS (elt)->cdr) && + (!NILP (ccl_id = Fget (XCONS (elt)->cdr, Qccl_program_idx)))) + { + ccl_prog = XVECTOR (Vccl_program_table)->contents[XUINT (ccl_id)]; + if (!CONSP (ccl_prog)) continue; + ccl_prog = XCONS (ccl_prog)->cdr; + } + else + { + ccl_prog = XCONS (elt)->cdr; + if (!VECTORP (ccl_prog)) continue; + } + + fontp->font_encoder + = (struct ccl_program *) xmalloc (sizeof (struct ccl_program)); + setup_ccl_program (fontp->font_encoder, + resolve_symbol_ccl_program (ccl_prog)); + break; + } + } +} + /* Initialization. */