]> code.delx.au - gnu-emacs/blobdiff - src/font.h
Update copyright year to 2015
[gnu-emacs] / src / font.h
index 539ebeba52a395167b245aaad884e22909a25365..617860c85f121c51b7952e6db552ba74978bd75a 100644 (file)
@@ -1,5 +1,5 @@
 /* font.h -- Interface definition for font handling.
-   Copyright (C) 2006-2013 Free Software Foundation, Inc.
+   Copyright (C) 2006-2015 Free Software Foundation, Inc.
    Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H13PRO009
@@ -25,6 +25,8 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #include "ccl.h"
 #include "frame.h"
 
+INLINE_HEADER_BEGIN
+
 /* We have three types of Lisp objects related to font.
 
    FONT-SPEC
@@ -117,7 +119,7 @@ enum font_property_index
        font.  */
     FONT_AVGWIDTH_INDEX,
 
-#if 0
+#if false
     /* The following two members are to substitute for the above 6
        members (FONT_WEIGHT_INDEX to FONT_AVGWIDTH_INDEX excluding
        FONT_SIZE_INDEX) if it is found that font-entities consumes too
@@ -160,9 +162,6 @@ enum font_property_index
     /* List of font-objects opened from the font-entity.  */
     FONT_OBJLIST_INDEX = FONT_SPEC_MAX,
 
-    /* Font-entity from which the font-object is opened.  */
-    FONT_ENTITY_INDEX = FONT_SPEC_MAX,
-
     /* This value is the length of font-entity vector.  */
     FONT_ENTITY_MAX,
 
@@ -180,9 +179,6 @@ enum font_property_index
        is not available.  */
     FONT_FILE_INDEX,
 
-    /* Format of the font (symbol) or nil if unknown.  */
-    FONT_FORMAT_INDEX,
-
     /* This value is the length of font-object vector.  */
     FONT_OBJECT_MAX
   };
@@ -201,40 +197,44 @@ enum font_property_index
    ? (XINT (AREF ((font), FONT_WIDTH_INDEX)) >> 8) : -1)
 /* Return the symbolic weight value of FONT.  */
 #define FONT_WEIGHT_SYMBOLIC(font)     \
-  font_style_symbolic (font, FONT_WEIGHT_INDEX, 0)
+  font_style_symbolic (font, FONT_WEIGHT_INDEX, false)
 /* Return the symbolic slant value of FONT.  */
 #define FONT_SLANT_SYMBOLIC(font)      \
-  font_style_symbolic (font, FONT_SLANT_INDEX, 0)
+  font_style_symbolic (font, FONT_SLANT_INDEX, false)
 /* Return the symbolic width value of FONT.  */
 #define FONT_WIDTH_SYMBOLIC(font)      \
-  font_style_symbolic (font, FONT_WIDTH_INDEX, 0)
+  font_style_symbolic (font, FONT_WIDTH_INDEX, false)
 /* Return the face-weight corresponding to the weight of FONT.  */
 #define FONT_WEIGHT_FOR_FACE(font)     \
-  font_style_symbolic (font, FONT_WEIGHT_INDEX, 1)
+  font_style_symbolic (font, FONT_WEIGHT_INDEX, true)
 /* Return the face-slant corresponding to the slant of FONT.  */
 #define FONT_SLANT_FOR_FACE(font)      \
-  font_style_symbolic (font, FONT_SLANT_INDEX, 1)
+  font_style_symbolic (font, FONT_SLANT_INDEX, true)
 /* Return the face-swidth corresponding to the slant of FONT.  */
 #define FONT_WIDTH_FOR_FACE(font)      \
-  font_style_symbolic (font, FONT_WIDTH_INDEX, 1)
+  font_style_symbolic (font, FONT_WIDTH_INDEX, true)
 
 /* Return the numeric weight value corresponding ot the symbol NAME.  */
 #define FONT_WEIGHT_NAME_NUMERIC(name) \
-  (font_style_to_value (FONT_WEIGHT_INDEX, (name), 0) >> 8)
+  (font_style_to_value (FONT_WEIGHT_INDEX, (name), false) >> 8)
 /* Return the numeric slant value corresponding ot the symbol NAME.  */
 #define FONT_SLANT_NAME_NUMERIC(name)  \
-  (font_style_to_value (FONT_SLANT_INDEX, (name), 0) >> 8)
+  (font_style_to_value (FONT_SLANT_INDEX, (name), false) >> 8)
 /* Return the numeric width value corresponding ot the symbol NAME.  */
 #define FONT_WIDTH_NAME_NUMERIC(name)  \
-  (font_style_to_value (FONT_WIDTH_INDEX, (name), 0) >> 8)
+  (font_style_to_value (FONT_WIDTH_INDEX, (name), false) >> 8)
 
 /* Set the font property PROP of FONT to VAL.  PROP is one of
    style-related font property index (FONT_WEIGHT/SLANT/WIDTH_INDEX).
    VAL (integer or symbol) is the numeric or symbolic style value.  */
 #define FONT_SET_STYLE(font, prop, val)        \
-  ASET ((font), prop, make_number (font_style_to_value (prop, val, 1)))
+  ASET ((font), prop, make_number (font_style_to_value (prop, val, true)))
 
+#ifndef MSDOS
 #define FONT_WIDTH(f) ((f)->max_width)
+#else
+#define FONT_WIDTH(f) 1
+#endif
 #define FONT_HEIGHT(f) ((f)->height)
 #define FONT_BASE(f) ((f)->ascent)
 #define FONT_DESCENT(f) ((f)->descent)
@@ -424,43 +424,37 @@ struct font_bitmap
 
 /* Predicates to check various font-related objects.  */
 
-/* 1 iff X is one of font-spec, font-entity, and font-object.  */
+/* True iff X is one of font-spec, font-entity, and font-object.  */
 #define FONTP(x) PSEUDOVECTORP (x, PVEC_FONT)
-/* 1 iff X is font-spec.  */
+/* True iff X is font-spec.  */
 #define FONT_SPEC_P(x) \
   (FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_SPEC_MAX)
-/* 1 iff X is font-entity.  */
+/* True iff X is font-entity.  */
 #define FONT_ENTITY_P(x)       \
   (FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_ENTITY_MAX)
-/* 1 iff X is font-object.  */
+/* True iff X is font-object.  */
 #define FONT_OBJECT_P(x)       \
   (FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_OBJECT_MAX)
 
-/* 1 iff ENTITY can't be loaded.  */
-#define FONT_ENTITY_NOT_LOADABLE(entity)       \
-  EQ (AREF (entity, FONT_OBJLIST_INDEX), Qt)
-
-/* Flag ENTITY not loadable.  */
-#define FONT_ENTITY_SET_NOT_LOADABLE(entity)   \
-  ASET (entity, FONT_OBJLIST_INDEX, Qt)
-
-
 /* Check macros for various font-related objects.  */
 
 #define CHECK_FONT(x)  \
-  do { if (! FONTP (x)) wrong_type_argument (Qfont, x); } while (0)
+  do { if (! FONTP (x)) wrong_type_argument (Qfont, x); } while (false)
 #define CHECK_FONT_SPEC(x)     \
-  do { if (! FONT_SPEC_P (x)) wrong_type_argument (Qfont_spec, x); } while (0)
+  do { if (! FONT_SPEC_P (x)) wrong_type_argument (Qfont_spec, x); } \
+  while (false)
 #define CHECK_FONT_ENTITY(x)   \
-  do { if (! FONT_ENTITY_P (x)) wrong_type_argument (Qfont_entity, x); } while (0)
+  do { if (! FONT_ENTITY_P (x)) wrong_type_argument (Qfont_entity, x); } \
+  while (false)
 #define CHECK_FONT_OBJECT(x)   \
-  do { if (! FONT_OBJECT_P (x)) wrong_type_argument (Qfont_object, x); } while (0)
+  do { if (! FONT_OBJECT_P (x)) wrong_type_argument (Qfont_object, x); } \
+  while (false)
 
 #define CHECK_FONT_GET_OBJECT(x, font) \
   do {                                 \
     CHECK_FONT_OBJECT (x);             \
     font = XFONT_OBJECT (x);           \
-  } while (0)
+  } while (false)
 
 #define XFONT_SPEC(p)  \
   (eassert (FONT_SPEC_P (p)), (struct font_spec *) XUNTAG (p, Lisp_Vectorlike))
@@ -555,11 +549,9 @@ struct font_driver
   /* Close FONT.  NOTE: this can be called by GC.  */
   void (*close) (struct font *font);
 
-  /* Optional (if FACE->extra is not used).
-     Prepare FACE for displaying characters by FONT on frame F by
-     storing some data in FACE->extra.  If successful, return 0.
-     Otherwise, return -1.  */
-  int (*prepare_face) (struct frame *f, struct face *face);
+  /* Prepare FACE for displaying characters by FONT on frame F by
+     storing some data in FACE->extra.  */
+  void (*prepare_face) (struct frame *f, struct face *face);
 
   /* Optional.
      Done FACE for displaying characters by FACE->font on frame F.  */
@@ -578,9 +570,9 @@ struct font_driver
   /* Compute the total metrics of the NGLYPHS glyphs specified by
      the font FONT and the sequence of glyph codes CODE, and store the
      result in METRICS.  */
-  int (*text_extents) (struct font *font,
-                       unsigned *code, int nglyphs,
-                       struct font_metrics *metrics);
+  void (*text_extents) (struct font *font,
+                       unsigned *code, int nglyphs,
+                       struct font_metrics *metrics);
 
 #ifdef HAVE_WINDOW_SYSTEM
 
@@ -606,15 +598,6 @@ struct font_driver
 
 #endif /* HAVE_WINDOW_SYSTEM */
 
-  /* Optional.
-     Return an outline data for glyph-code CODE of FONT.  The format
-     of the outline data depends on the font-driver.  */
-  void *(*get_outline) (struct font *font, unsigned code);
-
-  /* Optional.
-     Free OUTLINE (that is obtained by the above method).  */
-  void (*free_outline) (struct font *font, void *outline);
-
   /* Optional.
      Get coordinates of the INDEXth anchor point of the glyph whose
      code is CODE.  Store the coordinates in *X and *Y.  Return 0 if
@@ -716,25 +699,14 @@ struct font_driver_list
   struct font_driver_list *next;
 };
 
-
-/* Chain of arbitrary data specific to each font driver.
-   Each frame has its own font data list at F->font_data_list.  */
-
-struct font_data_list
-{
-  /* Pointer to the font driver.  */
-  struct font_driver *driver;
-  /* Data specific to the font driver.  */
-  void *data;
-  /* Pointer to the next element of the chain.  */
-  struct font_data_list *next;
-};
-
 extern Lisp_Object copy_font_spec (Lisp_Object);
 extern Lisp_Object merge_font_spec (Lisp_Object, Lisp_Object);
 
 extern Lisp_Object font_make_entity (void);
 extern Lisp_Object font_make_object (int, Lisp_Object, int);
+#if defined (HAVE_XFT) || defined (HAVE_FREETYPE) || defined (HAVE_NS)
+extern Lisp_Object font_build_object (int, Lisp_Object, Lisp_Object, double);
+#endif
 
 extern Lisp_Object find_font_encoding (Lisp_Object);
 extern int font_registry_charsets (Lisp_Object, struct charset **,
@@ -780,10 +752,17 @@ extern void font_parse_family_registry (Lisp_Object family,
 extern int font_parse_xlfd (char *name, ptrdiff_t len, Lisp_Object font);
 extern ptrdiff_t font_unparse_xlfd (Lisp_Object font, int pixel_size,
                                    char *name, int bytes);
-extern int font_unparse_fcname (Lisp_Object font, int pixel_size,
-                                char *name, int bytes);
 extern void register_font_driver (struct font_driver *driver, struct frame *f);
 extern void free_font_driver_list (struct frame *f);
+#ifdef ENABLE_CHECKING
+extern bool valid_font_driver (struct font_driver *);
+#else
+INLINE bool
+valid_font_driver (struct font_driver *d)
+{
+  return true;
+}
+#endif
 extern Lisp_Object font_update_drivers (struct frame *f, Lisp_Object list);
 extern Lisp_Object font_range (ptrdiff_t, ptrdiff_t, ptrdiff_t *,
                               struct window *, struct face *,
@@ -793,11 +772,10 @@ extern void font_fill_lglyph_metrics (Lisp_Object, Lisp_Object);
 extern Lisp_Object font_put_extra (Lisp_Object font, Lisp_Object prop,
                                    Lisp_Object val);
 
-extern int font_put_frame_data (struct frame *f,
-                                struct font_driver *driver,
-                                void *data);
-extern void *font_get_frame_data (struct frame *f,
-                                  struct font_driver *driver);
+#if defined (HAVE_XFT) || defined (HAVE_FREETYPE)
+extern void font_put_frame_data (struct frame *, Lisp_Object, void *);
+extern void *font_get_frame_data (struct frame *f, Lisp_Object);
+#endif /* HAVE_XFT || HAVE_FREETYPE */
 
 extern void font_filter_properties (Lisp_Object font,
                                    Lisp_Object alist,
@@ -816,7 +794,8 @@ extern void syms_of_ftxfont (void);
 extern Lisp_Object Qxft;
 extern struct font_driver xftfont_driver;
 extern void syms_of_xftfont (void);
-#elif defined HAVE_FREETYPE
+#endif
+#if defined HAVE_FREETYPE || defined HAVE_XFT
 extern struct font_driver ftxfont_driver;
 #endif
 #ifdef HAVE_BDFFONT
@@ -848,12 +827,14 @@ extern void font_deferred_log (const char *, Lisp_Object, Lisp_Object);
   do {                                         \
     if (! EQ (Vfont_log, Qt))                  \
       font_add_log ((ACTION), (ARG), (RESULT));        \
-  } while (0)
+  } while (false)
 
 #define FONT_DEFERRED_LOG(ACTION, ARG, RESULT)         \
   do {                                                 \
     if (! EQ (Vfont_log, Qt))                          \
       font_deferred_log ((ACTION), (ARG), (RESULT));   \
-  } while (0)
+  } while (false)
+
+INLINE_HEADER_END
 
 #endif /* not EMACS_FONT_H */