X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/996ad1b846a0865245df008bdb551093278b3c30..9bf31d1d3f35880c652f76509d1e27d33e454121:/src/composite.c diff --git a/src/composite.c b/src/composite.c index 0b52a9fcd2..8aa6974659 100644 --- a/src/composite.c +++ b/src/composite.c @@ -1,5 +1,5 @@ /* Composite sequence support. - Copyright (C) 2001-2014 Free Software Foundation, Inc. + Copyright (C) 2001-2016 Free Software Foundation, Inc. Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 National Institute of Advanced Industrial Science and Technology (AIST) Registration Number H14PRO021 @@ -11,8 +11,8 @@ This file is part of GNU Emacs. GNU Emacs is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. +the Free Software Foundation, either version 3 of the License, or (at +your option) any later version. GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -26,13 +26,12 @@ along with GNU Emacs. If not, see . */ #include "lisp.h" #include "character.h" +#include "composite.h" #include "buffer.h" #include "coding.h" #include "intervals.h" -#include "window.h" #include "frame.h" #include "dispextern.h" -#include "font.h" #include "termhooks.h" @@ -134,8 +133,6 @@ along with GNU Emacs. If not, see . */ */ -Lisp_Object Qcomposition; - /* Table of pointers to the structure `composition' indexed by COMPOSITION-ID. This structure is for storing information about each composition except for COMPONENTS-VEC. */ @@ -152,8 +149,6 @@ ptrdiff_t n_compositions; COMPOSITION-ID. */ Lisp_Object composition_hash_table; -static Lisp_Object Qauto_composed; -static Lisp_Object Qauto_composition_function; /* Maximum number of characters to look back for auto-compositions. */ #define MAX_AUTO_COMPOSITION_LOOKBACK 3 @@ -736,9 +731,11 @@ composition_gstring_width (Lisp_Object gstring, ptrdiff_t from, ptrdiff_t to, if (FONT_OBJECT_P (font_object)) { struct font *font = XFONT_OBJECT (font_object); + int font_ascent, font_descent; - metrics->ascent = font->ascent; - metrics->descent = font->descent; + get_font_ascent_descent (font, &font_ascent, &font_descent); + metrics->ascent = font_ascent; + metrics->descent = font_descent; } else { @@ -894,7 +891,6 @@ autocmp_chars (Lisp_Object rule, ptrdiff_t charpos, ptrdiff_t bytepos, if (len <= 0) return unbind_to (count, Qnil); to = limit = charpos + len; -#ifdef HAVE_WINDOW_SYSTEM if (FRAME_WINDOW_P (f)) { font_object = font_range (charpos, bytepos, &to, win, face, string); @@ -905,7 +901,6 @@ autocmp_chars (Lisp_Object rule, ptrdiff_t charpos, ptrdiff_t bytepos, return unbind_to (count, Qnil); } else -#endif /* not HAVE_WINDOW_SYSTEM */ font_object = win->frame; lgstring = Fcomposition_get_gstring (pos, make_number (to), font_object, string); @@ -929,7 +924,7 @@ char_composable_p (int c) { Lisp_Object val; return (c > ' ' - && (c == 0x200C || c == 0x200D + && (c == ZERO_WIDTH_NON_JOINER || c == ZERO_WIDTH_JOINER || (val = CHAR_TABLE_REF (Vunicode_category_table, c), (INTEGERP (val) && (XINT (val) <= UNICODE_CATEGORY_So))))); } @@ -1311,7 +1306,8 @@ composition_reseat_it (struct composition_it *cmp_it, ptrdiff_t charpos, int composition_update_it (struct composition_it *cmp_it, ptrdiff_t charpos, ptrdiff_t bytepos, Lisp_Object string) { - int i, c IF_LINT (= 0); + int i; + int c UNINIT; if (cmp_it->ch < 0) { @@ -1895,36 +1891,18 @@ syms_of_composite (void) DEFSYM (Qcomposition, "composition"); /* Make a hash table for static composition. */ - { - Lisp_Object args[6]; - - args[0] = QCtest; - args[1] = Qequal; - args[2] = QCweakness; - /* We used to make the hash table weak so that unreferenced - compositions can be garbage-collected. But, usually once - created compositions are repeatedly used in an Emacs session, - and thus it's not worth to save memory in such a way. So, we - make the table not weak. */ - args[3] = Qnil; - args[4] = QCsize; - args[5] = make_number (311); - composition_hash_table = Fmake_hash_table (6, args); - staticpro (&composition_hash_table); - } + /* We used to make the hash table weak so that unreferenced + compositions can be garbage-collected. But, usually once + created compositions are repeatedly used in an Emacs session, + and thus it's not worth to save memory in such a way. So, we + make the table not weak. */ + Lisp_Object args[] = {QCtest, Qequal, QCsize, make_number (311)}; + composition_hash_table = CALLMANY (Fmake_hash_table, args); + staticpro (&composition_hash_table); /* Make a hash table for glyph-string. */ - { - Lisp_Object args[6]; - args[0] = QCtest; - args[1] = Qequal; - args[2] = QCweakness; - args[3] = Qnil; - args[4] = QCsize; - args[5] = make_number (311); - gstring_hash_table = Fmake_hash_table (6, args); - staticpro (&gstring_hash_table); - } + gstring_hash_table = CALLMANY (Fmake_hash_table, args); + staticpro (&gstring_hash_table); staticpro (&gstring_work_headers); gstring_work_headers = make_uninit_vector (8); @@ -1952,7 +1930,6 @@ The default value is the function `compose-chars-after'. */); Vcompose_chars_after_function = intern_c_string ("compose-chars-after"); DEFSYM (Qauto_composed, "auto-composed"); - DEFSYM (Qauto_composition_function, "auto-composition-function"); DEFVAR_LISP ("auto-composition-mode", Vauto_composition_mode, doc: /* Non-nil if Auto-Composition mode is enabled.