]> git.eshelyaron.com Git - emacs.git/commitdiff
Merge branch 'master' into harfbuzz
authorYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
Sat, 27 Apr 2019 09:33:39 +0000 (18:33 +0900)
committerYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
Sat, 27 Apr 2019 09:33:39 +0000 (18:33 +0900)
23 files changed:
1  2 
configure.ac
etc/NEWS
lisp/composite.el
lisp/language/ethio-util.el
lisp/language/hebrew.el
lisp/language/ind-util.el
lisp/language/japanese.el
lisp/language/lao-util.el
lisp/language/thai-util.el
src/Makefile.in
src/composite.c
src/composite.h
src/font.c
src/font.h
src/ftcrfont.c
src/ftfont.c
src/ftfont.h
src/ftxfont.c
src/indent.c
src/macfont.m
src/w32uniscribe.c
src/xdisp.c
src/xftfont.c

diff --cc configure.ac
index 991ab55c6856b82252a913b46d79db784ebded96,810c3219e4f4623d6dc5399fbfe4c61947ea34ef..26ffc3e3fdf5d6a6a86ae085cebb9e3f62d71b37
@@@ -3307,8 -3406,8 +3407,9 @@@ if test "${HAVE_X11}" = "yes"; the
  
         test "$HAVE_FREETYPE" = "no" && AC_MSG_ERROR(libxft requires libfreetype)
      fi
+   fi                            # $HAVE_CAIRO != yes
  
 +    HAVE_HARFBUZZ=no
      HAVE_LIBOTF=no
      if test "${HAVE_FREETYPE}" = "yes"; then
        AC_DEFINE(HAVE_FREETYPE, 1,
@@@ -5472,12 -5585,13 +5596,13 @@@ Configured for '${canonical}'
  optsep=
  emacs_config_features=
  for opt in XAW3D XPM JPEG TIFF GIF PNG RSVG CAIRO IMAGEMAGICK SOUND GPM DBUS \
 -  GCONF GSETTINGS GLIB NOTIFY ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE M17N_FLT \
 +  GCONF GSETTINGS GLIB NOTIFY ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE HARFBUZZ M17N_FLT \
    LIBOTF XFT ZLIB TOOLKIT_SCROLL_BARS X_TOOLKIT OLDXMENU X11 XDBE XIM \
-   NS MODULES THREADS XWIDGETS LIBSYSTEMD JSON CANNOT_DUMP LCMS2 GMP; do
+   NS MODULES THREADS XWIDGETS LIBSYSTEMD JSON PDUMPER UNEXEC LCMS2 GMP; do
  
      case $opt in
-       CANNOT_DUMP) eval val=\${$opt} ;;
+       PDUMPER) val=${with_pdumper} ;;
+       UNEXEC) val=${with_unexec} ;;
        GLIB) val=${emacs_cv_links_glib} ;;
        NOTIFY|ACL) eval val=\${${opt}_SUMMARY} ;;
        TOOLKIT_SCROLL_BARS|X_TOOLKIT) eval val=\${USE_$opt} ;;
diff --cc etc/NEWS
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc src/Makefile.in
Simple merge
diff --cc src/composite.c
Simple merge
diff --cc src/composite.h
Simple merge
diff --cc src/font.c
index fc8efa7f235b75dc60e35d409d2139699a8e6b0b,5ca89c97dcf163d104892a6bbfeaa64e7ae60836..f1cb756107042f0375dcdc9a00918aa3f3fdb39b
@@@ -5354,17 -5351,13 +5355,17 @@@ syms_of_font (void
  
    DEFSYM (QCuser_spec, ":user-spec");
  
-   staticpro (&scratch_font_spec);
 +  /* For shapers that need to know text directionality.  */
 +  DEFSYM (QL2R, "L2R");
 +  DEFSYM (QR2L, "R2L");
 +
    scratch_font_spec = Ffont_spec (0, NULL);
-   staticpro (&scratch_font_prefer);
+   staticpro (&scratch_font_spec);
    scratch_font_prefer = Ffont_spec (0, NULL);
+   staticpro (&scratch_font_prefer);
  
-   staticpro (&Vfont_log_deferred);
    Vfont_log_deferred = make_nil_vector (3);
+   staticpro (&Vfont_log_deferred);
  
  #if 0
  #ifdef HAVE_LIBOTF
diff --cc src/font.h
index 52bdaa388994edf44a5ca1fbcba27715c8abd1d1,3720650a2e17957b97393f0b5dd01d4b2938f111..3540a8dba222035c4c2b14b9ec5d8df1eaa9eff8
@@@ -735,12 -730,11 +737,11 @@@ struct font_drive
       output glyphs (M) are more than the input glyphs (N), (N+1)th
       through (M)th elements of GSTRING are updated possibly by making
       a new glyph object and storing it in GSTRING.  If (M) is greater
-      than the length of GSTRING, nil should be return.  In that case,
-      this function is called again with the larger GSTRING.  */
+      than the length of GSTRING, this method should return nil.  In
+      that case, the method is called again with a larger GSTRING.  */
 -  Lisp_Object (*shape) (Lisp_Object lgstring);
 +  Lisp_Object (*shape) (Lisp_Object lgstring, Lisp_Object direction);
  
    /* Optional.
       If FONT is usable on frame F, return 0.  Otherwise return -1.
       This method is used only for debugging.  If this method is NULL,
       Emacs assumes that the font is usable on any frame.  */
diff --cc src/ftcrfont.c
index 45e526d24a44d09cbc9b60d437b9b9d6634df608,8a1c9a48e1f7a079a6802f1e63626f975c1daa78..c0f62e0418e13dc3526a419a28774b24bf46aa0f
@@@ -190,6 -264,44 +264,44 @@@ ftcrfont_text_extents (struct font *fon
      metrics->width = width;
  }
  
 -ftcrfont_shape (Lisp_Object lgstring)
+ static int
+ ftcrfont_get_bitmap (struct font *font, unsigned int code,
+                    struct font_bitmap *bitmap, int bits_per_pixel)
+ {
+   struct font_info *ftcrfont_info = (struct font_info *) font;
+   if (ftcrfont_info->bitmap_strike_index < 0)
+     return ftfont_get_bitmap (font, code, bitmap, bits_per_pixel);
+   return -1;
+ }
+ static int
+ ftcrfont_anchor_point (struct font *font, unsigned int code, int idx,
+                      int *x, int *y)
+ {
+   struct font_info *ftcrfont_info = (struct font_info *) font;
+   if (ftcrfont_info->bitmap_strike_index < 0)
+     return ftfont_anchor_point (font, code, idx, x, y);
+   return -1;
+ }
+ static Lisp_Object
 -#if defined HAVE_M17N_FLT && defined HAVE_LIBOTF
++ftcrfont_shape (Lisp_Object lgstring, Lisp_Object direction)
+ {
 -    return ftfont_shape (lgstring);
++#if (defined HAVE_M17N_FLT && defined HAVE_LIBOTF) || defined HAVE_HARFBUZZ
+   struct font *font = CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring));
+   struct font_info *ftcrfont_info = (struct font_info *) font;
+   if (ftcrfont_info->bitmap_strike_index < 0)
++    return ftfont_shape (lgstring, direction);
+ #endif
+   return make_fixnum (0);
+ }
  static int
  ftcrfont_draw (struct glyph_string *s,
                 int from, int to, int x, int y, bool with_background)
diff --cc src/ftfont.c
index 63df123001faaa5b4320c47cc6b5b4d74fabda8b,d0078a37701ad0fe4d446ae920f60a758172c1c7..58c462a90feb4547f3fdff770a0039c37e32e5f7
@@@ -1158,9 -1165,7 +1178,10 @@@ ftfont_open2 (struct frame *f
    ftfont_info->maybe_otf = (ft_face->face_flags & FT_FACE_FLAG_SFNT) != 0;
    ftfont_info->otf = NULL;
  #endif        /* HAVE_LIBOTF */
 +#ifdef HAVE_HARFBUZZ
 +  ftfont_info->hb_font = NULL;
 +#endif        /* HAVE_HARFBUZZ */
+   ftfont_info->bitmap_strike_index = strike_index;
    /* This means that there's no need of transformation.  */
    ftfont_info->matrix.xx = 0;
    font->pixel_size = size;
diff --cc src/ftfont.h
index 3bbcbfb5d70438db4e50155ad288b76f842cfcb9,adbda49ff1c2ed6d98f3f47624606955202822c6..f877860895e73aedf83b472208e66177b7a8fb6b
@@@ -59,13 -54,14 +59,17 @@@ struct font_inf
  #endif        /* HAVE_LIBOTF */
    FT_Size ft_size;
    int index;
+   /* Index of the bitmap strike used as a fallback for
+      FT_Set_Pixel_Sizes failure.  If the value is non-negative, then
+      ft_size is not of the requested size.  Otherwise it is -1.  */
+   FT_Int bitmap_strike_index;
    FT_Matrix matrix;
 +#ifdef HAVE_HARFBUZZ
 +  hb_font_t *hb_font;
 +#endif  /* HAVE_HARFBUZZ */
  
  #ifdef USE_CAIRO
-   cairo_font_face_t *cr_font_face;
+   cairo_scaled_font_t *cr_scaled_font;
    /* To prevent cairo from cluttering the activated FT_Size maintained
       in ftfont.c, we activate this special FT_Size before drawing.  */
    FT_Size ft_size_draw;
diff --cc src/ftxfont.c
Simple merge
diff --cc src/indent.c
Simple merge
diff --cc src/macfont.m
Simple merge
Simple merge
diff --cc src/xdisp.c
Simple merge
diff --cc src/xftfont.c
Simple merge