X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/cc7cb20d6abc0f862e5513b24831bba0eaecaa5f..d3155315c85212f224fc5df0239182dafdfd6284:/src/font.c diff --git a/src/font.c b/src/font.c index a68c3c707c..2ccfd15d43 100644 --- a/src/font.c +++ b/src/font.c @@ -156,7 +156,7 @@ font_make_spec (void) struct font_spec *spec = ((struct font_spec *) allocate_pseudovector (VECSIZE (struct font_spec), - FONT_SPEC_MAX, PVEC_FONT)); + FONT_SPEC_MAX, FONT_SPEC_MAX, PVEC_FONT)); XSETFONT (font_spec, spec); return font_spec; } @@ -168,7 +168,7 @@ font_make_entity (void) struct font_entity *entity = ((struct font_entity *) allocate_pseudovector (VECSIZE (struct font_entity), - FONT_ENTITY_MAX, PVEC_FONT)); + FONT_ENTITY_MAX, FONT_ENTITY_MAX, PVEC_FONT)); XSETFONT (font_entity, entity); return font_entity; } @@ -181,7 +181,8 @@ font_make_object (int size, Lisp_Object entity, int pixelsize) { Lisp_Object font_object; struct font *font - = (struct font *) allocate_pseudovector (size, FONT_OBJECT_MAX, PVEC_FONT); + = (struct font *) allocate_pseudovector (size, FONT_OBJECT_MAX, + FONT_OBJECT_MAX, PVEC_FONT); int i; /* GC can happen before the driver is set up, @@ -373,8 +374,7 @@ font_style_to_value (enum font_property_index prop, Lisp_Object val, elt = Fmake_vector (make_number (2), make_number (100)); ASET (elt, 1, val); ASET (font_style_table, prop - FONT_WEIGHT_INDEX, - Fvconcat (2, ((Lisp_Object []) - { table, Fmake_vector (make_number (1), elt) }))); + CALLN (Fvconcat, table, Fmake_vector (make_number (1), elt))); return (100 << 8) | (i << 4); } else @@ -988,15 +988,14 @@ font_expand_wildcards (Lisp_Object *field, int n) if (i == 0 || ! NILP (tmp[i - 1])) /* None of TMP[X] corresponds to Jth field. */ return -1; - for (; j < range[i].from; j++) - field[j] = Qnil; + memclear (field + j, (range[i].from - j) * word_size); + j = range[i].from; } field[j++] = tmp[i]; } if (! NILP (tmp[n - 1]) && j < XLFD_REGISTRY_INDEX) return -1; - for (; j < XLFD_LAST_INDEX; j++) - field[j] = Qnil; + memclear (field + j, (XLFD_LAST_INDEX - j) * word_size); if (INTEGERP (field[XLFD_ENCODING_INDEX])) field[XLFD_ENCODING_INDEX] = Fintern (Fnumber_to_string (field[XLFD_ENCODING_INDEX]), Qnil); @@ -2137,7 +2136,6 @@ font_score (Lisp_Object entity, Lisp_Object *spec_prop) } /* Score the size. Maximum difference is 127. */ - i = FONT_SIZE_INDEX; if (! NILP (spec_prop[FONT_SIZE_INDEX]) && XINT (AREF (entity, FONT_SIZE_INDEX)) > 0) { @@ -3400,16 +3398,11 @@ font_open_by_spec (struct frame *f, Lisp_Object spec) Lisp_Object font_open_by_name (struct frame *f, Lisp_Object name) { - Lisp_Object args[2]; - Lisp_Object spec, ret; - - args[0] = QCname; - args[1] = name; - spec = Ffont_spec (2, args); - ret = font_open_by_spec (f, spec); + Lisp_Object spec = CALLN (Ffont_spec, QCname, name); + Lisp_Object ret = font_open_by_spec (f, spec); /* Do not lose name originally put in. */ if (!NILP (ret)) - font_put_extra (ret, QCuser_spec, args[1]); + font_put_extra (ret, QCuser_spec, name); return ret; } @@ -3713,10 +3706,10 @@ font_at (int c, ptrdiff_t pos, struct face *face, struct window *w, if (STRINGP (string)) face_id = face_at_string_position (w, string, pos, 0, &endptr, - DEFAULT_FACE_ID, 0); + DEFAULT_FACE_ID, false); else face_id = face_at_buffer_position (w, pos, &endptr, - pos + 100, 0, -1); + pos + 100, false, -1); face = FACE_FROM_ID (f, face_id); } if (multibyte) @@ -3760,7 +3753,7 @@ font_range (ptrdiff_t pos, ptrdiff_t pos_byte, ptrdiff_t *limit, int face_id; face_id = face_at_buffer_position (w, pos, &ignore, - *limit, 0, -1); + *limit, false, -1); face = FACE_FROM_ID (XFRAME (w->frame), face_id); } } @@ -3829,17 +3822,17 @@ They are the same as face attributes of the same name. See `:foundry' -VALUE must be a string or a symbol specifying the font foundry, e.g. ``misc''. +VALUE must be a string or a symbol specifying the font foundry, e.g. `misc'. `:adstyle' VALUE must be a string or a symbol specifying the additional -typographic style information of a font, e.g. ``sans''. +typographic style information of a font, e.g. `sans'. `:registry' VALUE must be a string or a symbol specifying the charset registry and -encoding of a font, e.g. ``iso8859-1''. +encoding of a font, e.g. `iso8859-1'. `:size' @@ -3873,7 +3866,7 @@ required OpenType features. GSUB: List of OpenType GSUB feature tag symbols, or nil if none required. GPOS: List of OpenType GPOS feature tag symbols, or nil if none required. -GSUB and GPOS may contain `nil' element. In such a case, the font +GSUB and GPOS may contain nil elements. In such a case, the font must not have any of the remaining elements. For instance, if the VALUE is `(thai nil nil (mark))', the font must @@ -4181,13 +4174,7 @@ how close they are to PREFER. */) else vec = font_vconcat_entity_vectors (list); if (n == 0 || n >= ASIZE (vec)) - { - Lisp_Object args[2]; - - args[0] = vec; - args[1] = Qnil; - list = Fappend (2, args); - } + list = CALLN (Fappend, vec, Qnil); else { for (list = Qnil, n--; n >= 0; n--) @@ -4532,12 +4519,11 @@ character code corresponding to the glyph or nil if there's no corresponding character. */) (Lisp_Object font_object, Lisp_Object character, Lisp_Object otf_features) { - struct font *font; + struct font *font = CHECK_FONT_GET_OBJECT (font_object); Lisp_Object gstring_in, gstring_out, g; Lisp_Object alternates; int i, num; - CHECK_FONT_GET_OBJECT (font_object, font); if (! font->driver->otf_drive) error ("Font backend %s can't drive OpenType GSUB table", SDATA (SYMBOL_NAME (font->driver->type))); @@ -4647,12 +4633,9 @@ FEATURE is a symbol representing OpenType feature tag. If the font is not OpenType font, CAPABILITY is nil. */) (Lisp_Object font_object) { - struct font *font; - Lisp_Object val; - - CHECK_FONT_GET_OBJECT (font_object, font); + struct font *font = CHECK_FONT_GET_OBJECT (font_object); + Lisp_Object val = make_uninit_vector (9); - val = make_uninit_vector (9); ASET (val, 0, AREF (font_object, FONT_NAME_INDEX)); ASET (val, 1, AREF (font_object, FONT_FILE_INDEX)); ASET (val, 2, make_number (font->pixel_size)); @@ -4691,12 +4674,11 @@ the corresponding element is nil. */) (Lisp_Object font_object, Lisp_Object from, Lisp_Object to, Lisp_Object object) { - struct font *font; + struct font *font = CHECK_FONT_GET_OBJECT (font_object); ptrdiff_t i, len; Lisp_Object *chars, vec; USE_SAFE_ALLOCA; - CHECK_FONT_GET_OBJECT (font_object, font); if (NILP (object)) { ptrdiff_t charpos, bytepos; @@ -5029,7 +5011,7 @@ build_style_table (const struct table_entry *entry, int nelement) static Lisp_Object Vfont_log_deferred; /* Prepend the font-related logging data in Vfont_log if it is not - `t'. ACTION describes a kind of font-related action (e.g. listing, + t. ACTION describes a kind of font-related action (e.g. listing, opening), ARG is the argument for the action, and RESULT is the result of the action. */ void @@ -5298,11 +5280,15 @@ EMACS_FONT_LOG is set. Otherwise, it is set to t. */); #ifdef HAVE_FREETYPE syms_of_ftfont (); #ifdef HAVE_X_WINDOWS +#ifdef USE_CAIRO + syms_of_ftcrfont (); +#else syms_of_xfont (); syms_of_ftxfont (); #ifdef HAVE_XFT syms_of_xftfont (); #endif /* HAVE_XFT */ +#endif /* not USE_CAIRO */ #endif /* HAVE_X_WINDOWS */ #else /* not HAVE_FREETYPE */ #ifdef HAVE_X_WINDOWS