X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/ca23cc8840efb1354ebe16c6bb99bf1f8880e9b6..acaf905b1130aae80fa59d2c861ffd4c8eb75486:/src/fontset.c diff --git a/src/fontset.c b/src/fontset.c index eea65535c7..d06491ddf2 100644 --- a/src/fontset.c +++ b/src/fontset.c @@ -1,6 +1,6 @@ /* Fontset handler. -Copyright (C) 2001-2011 Free Software Foundation, Inc. +Copyright (C) 2001-2012 Free Software Foundation, Inc. Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 National Institute of Advanced Industrial Science and Technology (AIST) @@ -58,8 +58,6 @@ along with GNU Emacs. If not, see . */ #undef xassert #ifdef FONTSET_DEBUG #define xassert(X) do {if (!(X)) abort ();} while (0) -#undef INLINE -#define INLINE #else /* not FONTSET_DEBUG */ #define xassert(X) (void) 0 #endif /* not FONTSET_DEBUG */ @@ -168,7 +166,7 @@ along with GNU Emacs. If not, see . */ These structures are hidden from the other codes than this file. The other codes handle fontsets only by their ID numbers. They usually use the variable name `fontset' for IDs. But, in this - file, we always use varialbe name `id' for IDs, and name `fontset' + file, we always use variable name `id' for IDs, and name `fontset' for an actual fontset object, i.e., char-table. */ @@ -238,7 +236,7 @@ fontset_id_valid_p (int id) /* Macros to access special values of (realized) FONTSET. */ #define FONTSET_BASE(fontset) XCHAR_TABLE (fontset)->extras[2] #define FONTSET_FRAME(fontset) XCHAR_TABLE (fontset)->extras[3] -#define FONTSET_OBJLIST(fontset) XCHAR_TABLE (fontset)->extras[4] +/* #define FONTSET_OBJLIST(fontset) XCHAR_TABLE (fontset)->extras[4] */ #define FONTSET_NOFONT_FACE(fontset) XCHAR_TABLE (fontset)->extras[5] /* #define FONTSET_REPERTORY(fontset) XCHAR_TABLE (fontset)->extras[6] */ #define FONTSET_DEFAULT(fontset) XCHAR_TABLE (fontset)->extras[7] @@ -449,7 +447,7 @@ reorder_font_vector (Lisp_Object font_group, struct font *font) /* Return a font-group (actually a cons (-1 . FONT-GROUP-VECTOR)) for character C in FONTSET. If C is -1, return a fallback font-group. If C is not -1, the value may be Qt (FONTSET doesn't have a font - for C even in the fallback group, or 0 (a font for C may be found + for C even in the fallback group), or 0 (a font for C may be found only in the fallback group). */ static Lisp_Object @@ -467,7 +465,9 @@ fontset_get_font_group (Lisp_Object fontset, int c) if (! NILP (font_group)) return font_group; base_fontset = FONTSET_BASE (fontset); - if (c >= 0) + if (NILP (base_fontset)) + font_group = Qnil; + else if (c >= 0) font_group = char_table_ref_and_range (base_fontset, c, &from, &to); else font_group = FONTSET_FALLBACK (base_fontset); @@ -478,6 +478,8 @@ fontset_get_font_group (Lisp_Object fontset, int c) char_table_set_range (fontset, from, to, font_group); return font_group; } + if (!VECTORP (font_group)) + return font_group; font_group = Fcopy_sequence (font_group); for (i = 0; i < ASIZE (font_group); i++) if (! NILP (AREF (font_group, i))) @@ -629,7 +631,7 @@ fontset_find_font (Lisp_Object fontset, int c, struct face *face, int id, int fa { /* Something strange happened, perhaps because of a Font-backend problem. Too avoid crashing, record - that this spec is unsable. It may be better to find + that this spec is unusable. It may be better to find another font of the same spec, but currently we don't have such an API. */ RFONT_DEF_SET_FACE (rfont_def, -1); @@ -641,7 +643,7 @@ fontset_find_font (Lisp_Object fontset, int c, struct face *face, int id, int fa if (font_has_char (f, font_object, c)) goto found; - /* Find a font already opened, maching with the current spec, + /* Find a font already opened, matching with the current spec, and supporting C. */ font_def = RFONT_DEF_FONT_DEF (rfont_def); for (; found_index + 1 < ASIZE (vec); found_index++) @@ -838,6 +840,7 @@ fontset_ascii (int id) static void free_realized_fontset (FRAME_PTR f, Lisp_Object fontset) { +#if 0 Lisp_Object tail; if (0) @@ -846,6 +849,7 @@ free_realized_fontset (FRAME_PTR f, Lisp_Object fontset) xassert (FONT_OBJECT_P (XCAR (tail))); font_close_object (f, XCAR (tail)); } +#endif } /* Free fontset of FACE defined on frame F. Called from @@ -881,6 +885,7 @@ free_face_fontset (FRAME_PTR f, struct face *face) } +#if 0 /* Return 1 if FACE is suitable for displaying character C. Otherwise return 0. Called from the macro FACE_SUITABLE_FOR_CHAR_P when C is not an ASCII character. */ @@ -896,10 +901,11 @@ face_suitable_for_char_p (struct face *face, int c) && INTEGERP (RFONT_DEF_FACE (rfont_def)) && face->id == XINT (RFONT_DEF_FACE (rfont_def))); } +#endif /* Return ID of face suitable for displaying character C on frame F. - FACE must be reazlied for ASCII characters in advance. Called from + FACE must be realized for ASCII characters in advance. Called from the macro FACE_FOR_CHAR. */ int @@ -1082,7 +1088,7 @@ fontset_pattern_regexp (Lisp_Object pattern) nescs++; } - /* If PATTERN is not full XLFD we conert "*" to ".*". Otherwise + /* If PATTERN is not full XLFD we convert "*" to ".*". Otherwise we convert "*" to "[^-]*" which is much faster in regular expression matching. */ if (ndashes < 14) @@ -1340,7 +1346,7 @@ accumulate_script_ranges (Lisp_Object arg, Lisp_Object range, Lisp_Object val) In FONTSET, set FONT_DEF in a fashion specified by ADD for characters in RANGE and ranges in SCRIPT_RANGE_LIST before RANGE. - The consumed ranges are poped up from SCRIPT_RANGE_LIST, and the + The consumed ranges are popped up from SCRIPT_RANGE_LIST, and the new SCRIPT_RANGE_LIST is stored in ARG. If ASCII is nil, don't set FONT_DEF for ASCII characters. It is @@ -1694,9 +1700,9 @@ FONT-SPEC is a vector, a cons, or a string. See the documentation of static Lisp_Object auto_fontset_alist; /* Number of automatically created fontsets. */ -static int num_auto_fontsets; +static printmax_t num_auto_fontsets; -/* Retun a fontset synthesized from FONT-OBJECT. This is called from +/* Return a fontset synthesized from FONT-OBJECT. This is called from x_new_font when FONT-OBJECT is used for the default ASCII font of a frame, and the returned fontset is used for the default fontset of that frame. The fontset specifies a font of the same registry as @@ -1709,7 +1715,7 @@ int fontset_from_font (Lisp_Object font_object) { Lisp_Object font_name = font_get_name (font_object); - Lisp_Object font_spec = Fcopy_font_spec (font_object); + Lisp_Object font_spec = copy_font_spec (font_object); Lisp_Object registry = AREF (font_spec, FONT_REGISTRY_INDEX); Lisp_Object fontset_spec, alias, name, fontset; Lisp_Object val; @@ -1721,12 +1727,12 @@ fontset_from_font (Lisp_Object font_object) alias = intern ("fontset-startup"); else { - char temp[32]; + char temp[sizeof "fontset-auto" + INT_STRLEN_BOUND (printmax_t)]; - sprintf (temp, "fontset-auto%d", num_auto_fontsets - 1); + sprintf (temp, "fontset-auto%"pMd, num_auto_fontsets - 1); alias = intern (temp); } - fontset_spec = Fcopy_font_spec (font_spec); + fontset_spec = copy_font_spec (font_spec); ASET (fontset_spec, FONT_REGISTRY_INDEX, alias); name = Ffont_xlfd_name (fontset_spec, Qnil); if (NILP (name)) @@ -1782,7 +1788,7 @@ update_auto_fontset_alist (Lisp_Object font_object, Lisp_Object fontset) /* Return a cons (FONT-OBJECT . GLYPH-CODE). FONT-OBJECT is the font for the character at POSITION in the current buffer. This is computed from all the text properties and overlays - that apply to POSITION. POSTION may be nil, in which case, + that apply to POSITION. POSITION may be nil, in which case, FONT-SPEC is the font for displaying the character CH with the default face. @@ -1849,7 +1855,7 @@ DEFUN ("internal-char-font", Finternal_char_font, Sinternal_char_font, 1, 2, 0, face_id = face_at_buffer_position (w, pos, -1, -1, &dummy, pos + 100, 0, -1); } - if (! CHAR_VALID_P (c, 0)) + if (! CHAR_VALID_P (c)) return Qnil; face_id = FACE_FOR_CHAR (f, FACE_FROM_ID (f, face_id), c, pos, Qnil); face = FACE_FROM_ID (f, face_id); @@ -1857,17 +1863,11 @@ DEFUN ("internal-char-font", Finternal_char_font, Sinternal_char_font, 1, 2, 0, { unsigned code = face->font->driver->encode_char (face->font, c); Lisp_Object font_object; - /* Assignment to EMACS_INT stops GCC whining about limited range - of data type. */ - EMACS_INT cod = code; if (code == FONT_INVALID_CODE) return Qnil; XSETFONT (font_object, face->font); - if (cod <= MOST_POSITIVE_FIXNUM) - return Fcons (font_object, make_number (code)); - return Fcons (font_object, Fcons (make_number (code >> 16), - make_number (code & 0xFFFF))); + return Fcons (font_object, INTEGER_TO_CONS (code)); } return Qnil; } @@ -2104,6 +2104,8 @@ DEFUN ("fontset-list", Ffontset_list, Sfontset_list, 0, 0, 0, #ifdef FONTSET_DEBUG +Lisp_Object dump_fontset (Lisp_Object) EXTERNALLY_VISIBLE; + Lisp_Object dump_fontset (Lisp_Object fontset) {