aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJimmy Aguilar Mena2019-09-04 17:27:28 +0200
committerJimmy Aguilar Mena2019-10-14 14:18:39 +0200
commitbc8db39775eb3af36a45d51130cd4dbd3b3e7210 (patch)
tree9d7d643568943137bc436a7ecd021b2e07245e0e /src
parentf9206f34d63104c50659a15d3615646a09df87bf (diff)
downloademacs-bc8db39775eb3af36a45d51130cd4dbd3b3e7210.tar.gz
emacs-bc8db39775eb3af36a45d51130cd4dbd3b3e7210.zip
Added face parameter :extend.
This is an initial change to add a parameter :extend that will be used in the display engine later.
Diffstat (limited to 'src')
-rw-r--r--src/dispextern.h16
-rw-r--r--src/xfaces.c40
2 files changed, 48 insertions, 8 deletions
diff --git a/src/dispextern.h b/src/dispextern.h
index 57400ae047a..519cc36345c 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -1677,11 +1677,9 @@ struct face
1677 /* Pixel value or color index of background color. */ 1677 /* Pixel value or color index of background color. */
1678 unsigned long background; 1678 unsigned long background;
1679 1679
1680 /* Pixel value or color index of underline color. */ 1680 /* Pixel value or color index of underline, overlined,
1681 strike-through, or box color. */
1681 unsigned long underline_color; 1682 unsigned long underline_color;
1682
1683 /* Pixel value or color index of overlined, strike-through, or box
1684 color. */
1685 unsigned long overline_color; 1683 unsigned long overline_color;
1686 unsigned long strike_through_color; 1684 unsigned long strike_through_color;
1687 unsigned long box_color; 1685 unsigned long box_color;
@@ -1864,6 +1862,9 @@ struct face_cache
1864 ? FRAME_FACE_CACHE (F)->faces_by_id[ID] \ 1862 ? FRAME_FACE_CACHE (F)->faces_by_id[ID] \
1865 : NULL) 1863 : NULL)
1866 1864
1865#define FACE_EXTENSIBLE_P(F) \
1866 (!NILP (F->lface[LFACE_EXTEND_INDEX]))
1867
1867/* True if FACE is suitable for displaying ASCII characters. */ 1868/* True if FACE is suitable for displaying ASCII characters. */
1868INLINE bool 1869INLINE bool
1869FACE_SUITABLE_FOR_ASCII_CHAR_P (struct face *face) 1870FACE_SUITABLE_FOR_ASCII_CHAR_P (struct face *face)
@@ -2373,7 +2374,7 @@ struct it
2373 /* Face id of the iterator saved in case a glyph from dpvec contains 2374 /* Face id of the iterator saved in case a glyph from dpvec contains
2374 a face. The face is restored when all glyphs from dpvec have 2375 a face. The face is restored when all glyphs from dpvec have
2375 been delivered. */ 2376 been delivered. */
2376 int saved_face_id; 2377 int saved_face_id, saved_extend_face_id;
2377 2378
2378 /* Vector of glyphs for control character translation. The pointer 2379 /* Vector of glyphs for control character translation. The pointer
2379 dpvec is set to ctl_chars when a control character is translated. 2380 dpvec is set to ctl_chars when a control character is translated.
@@ -2435,7 +2436,7 @@ struct it
2435 ptrdiff_t prev_stop; 2436 ptrdiff_t prev_stop;
2436 ptrdiff_t base_level_stop; 2437 ptrdiff_t base_level_stop;
2437 struct composition_it cmp_it; 2438 struct composition_it cmp_it;
2438 int face_id; 2439 int face_id, extend_face_id;
2439 2440
2440 /* Save values specific to a given method. */ 2441 /* Save values specific to a given method. */
2441 union { 2442 union {
@@ -2493,6 +2494,9 @@ struct it
2493 /* Face to use. */ 2494 /* Face to use. */
2494 int face_id; 2495 int face_id;
2495 2496
2497 /* Face to extend at EOL/ */
2498 int extend_face_id;
2499
2496 /* Setting of buffer-local variable selective-display-ellipses. */ 2500 /* Setting of buffer-local variable selective-display-ellipses. */
2497 bool_bf selective_display_ellipsis_p : 1; 2501 bool_bf selective_display_ellipsis_p : 1;
2498 2502
diff --git a/src/xfaces.c b/src/xfaces.c
index c7d6990f505..889bf83561c 100644
--- a/src/xfaces.c
+++ b/src/xfaces.c
@@ -1590,6 +1590,7 @@ the WIDTH times as wide as FACE on FRAME. */)
1590#define LFACE_FONT(LFACE) AREF ((LFACE), LFACE_FONT_INDEX) 1590#define LFACE_FONT(LFACE) AREF ((LFACE), LFACE_FONT_INDEX)
1591#define LFACE_INHERIT(LFACE) AREF ((LFACE), LFACE_INHERIT_INDEX) 1591#define LFACE_INHERIT(LFACE) AREF ((LFACE), LFACE_INHERIT_INDEX)
1592#define LFACE_FONTSET(LFACE) AREF ((LFACE), LFACE_FONTSET_INDEX) 1592#define LFACE_FONTSET(LFACE) AREF ((LFACE), LFACE_FONTSET_INDEX)
1593#define LFACE_EXTEND(LFACE) AREF ((LFACE), LFACE_EXTEND_INDEX)
1593#define LFACE_DISTANT_FOREGROUND(LFACE) \ 1594#define LFACE_DISTANT_FOREGROUND(LFACE) \
1594 AREF ((LFACE), LFACE_DISTANT_FOREGROUND_INDEX) 1595 AREF ((LFACE), LFACE_DISTANT_FOREGROUND_INDEX)
1595 1596
@@ -1633,6 +1634,10 @@ check_lface_attrs (Lisp_Object attrs[LFACE_VECTOR_SIZE])
1633 || SYMBOLP (attrs[LFACE_UNDERLINE_INDEX]) 1634 || SYMBOLP (attrs[LFACE_UNDERLINE_INDEX])
1634 || STRINGP (attrs[LFACE_UNDERLINE_INDEX]) 1635 || STRINGP (attrs[LFACE_UNDERLINE_INDEX])
1635 || CONSP (attrs[LFACE_UNDERLINE_INDEX])); 1636 || CONSP (attrs[LFACE_UNDERLINE_INDEX]));
1637 eassert (UNSPECIFIEDP (attrs[LFACE_EXTEND_INDEX])
1638 || IGNORE_DEFFACE_P (attrs[LFACE_EXTEND_INDEX])
1639 || SYMBOLP (attrs[LFACE_EXTEND_INDEX])
1640 || STRINGP (attrs[LFACE_EXTEND_INDEX]));
1636 eassert (UNSPECIFIEDP (attrs[LFACE_OVERLINE_INDEX]) 1641 eassert (UNSPECIFIEDP (attrs[LFACE_OVERLINE_INDEX])
1637 || IGNORE_DEFFACE_P (attrs[LFACE_OVERLINE_INDEX]) 1642 || IGNORE_DEFFACE_P (attrs[LFACE_OVERLINE_INDEX])
1638 || SYMBOLP (attrs[LFACE_OVERLINE_INDEX]) 1643 || SYMBOLP (attrs[LFACE_OVERLINE_INDEX])
@@ -2512,6 +2517,13 @@ merge_face_ref (struct window *w,
2512 err_msgs, named_merge_points)) 2517 err_msgs, named_merge_points))
2513 err = true; 2518 err = true;
2514 } 2519 }
2520 else if (EQ (keyword, QCextend))
2521 {
2522 if (EQ (value, Qt) || NILP (value))
2523 to[LFACE_EXTEND_INDEX] = value;
2524 else
2525 err = true;
2526 }
2515 else 2527 else
2516 err = true; 2528 err = true;
2517 2529
@@ -3030,6 +3042,17 @@ FRAME 0 means change the face on all frames, and change the default
3030 old_value = LFACE_INVERSE (lface); 3042 old_value = LFACE_INVERSE (lface);
3031 ASET (lface, LFACE_INVERSE_INDEX, value); 3043 ASET (lface, LFACE_INVERSE_INDEX, value);
3032 } 3044 }
3045 else if (EQ (attr, QCextend))
3046 {
3047 if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value))
3048 {
3049 CHECK_SYMBOL (value);
3050 if (!EQ (value, Qt) && !NILP (value))
3051 signal_error ("Invalid extend face attribute value", value);
3052 }
3053 old_value = LFACE_EXTEND (lface);
3054 ASET (lface, LFACE_EXTEND_INDEX, value);
3055 }
3033 else if (EQ (attr, QCforeground)) 3056 else if (EQ (attr, QCforeground))
3034 { 3057 {
3035 /* Compatibility with 20.x. */ 3058 /* Compatibility with 20.x. */
@@ -3503,7 +3526,9 @@ DEFUN ("internal-set-lisp-face-attribute-from-resource",
3503 value = face_boolean_x_resource_value (value, true); 3526 value = face_boolean_x_resource_value (value, true);
3504 else if (EQ (attr, QCweight) || EQ (attr, QCslant) || EQ (attr, QCwidth)) 3527 else if (EQ (attr, QCweight) || EQ (attr, QCslant) || EQ (attr, QCwidth))
3505 value = intern (SSDATA (value)); 3528 value = intern (SSDATA (value));
3506 else if (EQ (attr, QCreverse_video) || EQ (attr, QCinverse_video)) 3529 else if (EQ (attr, QCreverse_video)
3530 || EQ (attr, QCinverse_video)
3531 || EQ (attr, QCextend))
3507 value = face_boolean_x_resource_value (value, true); 3532 value = face_boolean_x_resource_value (value, true);
3508 else if (EQ (attr, QCunderline) 3533 else if (EQ (attr, QCunderline)
3509 || EQ (attr, QCoverline) 3534 || EQ (attr, QCoverline)
@@ -3727,6 +3752,8 @@ frames). If FRAME is omitted or nil, use the selected frame. */)
3727 value = LFACE_SWIDTH (lface); 3752 value = LFACE_SWIDTH (lface);
3728 else if (EQ (keyword, QCinherit)) 3753 else if (EQ (keyword, QCinherit))
3729 value = LFACE_INHERIT (lface); 3754 value = LFACE_INHERIT (lface);
3755 else if (EQ (keyword, QCextend))
3756 value = LFACE_EXTEND (lface);
3730 else if (EQ (keyword, QCfont)) 3757 else if (EQ (keyword, QCfont))
3731 value = LFACE_FONT (lface); 3758 value = LFACE_FONT (lface);
3732 else if (EQ (keyword, QCfontset)) 3759 else if (EQ (keyword, QCfontset))
@@ -3754,7 +3781,9 @@ Value is nil if ATTR doesn't have a discrete set of valid values. */)
3754 3781
3755 if (EQ (attr, QCunderline) || EQ (attr, QCoverline) 3782 if (EQ (attr, QCunderline) || EQ (attr, QCoverline)
3756 || EQ (attr, QCstrike_through) 3783 || EQ (attr, QCstrike_through)
3757 || EQ (attr, QCinverse_video) || EQ (attr, QCreverse_video)) 3784 || EQ (attr, QCinverse_video)
3785 || EQ (attr, QCreverse_video)
3786 || EQ (attr, QCextend))
3758 result = list2 (Qt, Qnil); 3787 result = list2 (Qt, Qnil);
3759 3788
3760 return result; 3789 return result;
@@ -4784,6 +4813,9 @@ gui_supports_face_attributes_p (struct frame *f,
4784 || (!UNSPECIFIEDP (attrs[LFACE_INVERSE_INDEX]) 4813 || (!UNSPECIFIEDP (attrs[LFACE_INVERSE_INDEX])
4785 && face_attr_equal_p (attrs[LFACE_INVERSE_INDEX], 4814 && face_attr_equal_p (attrs[LFACE_INVERSE_INDEX],
4786 def_attrs[LFACE_INVERSE_INDEX])) 4815 def_attrs[LFACE_INVERSE_INDEX]))
4816 || (!UNSPECIFIEDP (attrs[LFACE_EXTEND_INDEX])
4817 && face_attr_equal_p (attrs[LFACE_EXTEND_INDEX],
4818 def_attrs[LFACE_EXTEND_INDEX]))
4787 || (!UNSPECIFIEDP (attrs[LFACE_FOREGROUND_INDEX]) 4819 || (!UNSPECIFIEDP (attrs[LFACE_FOREGROUND_INDEX])
4788 && face_attr_equal_p (attrs[LFACE_FOREGROUND_INDEX], 4820 && face_attr_equal_p (attrs[LFACE_FOREGROUND_INDEX],
4789 def_attrs[LFACE_FOREGROUND_INDEX])) 4821 def_attrs[LFACE_FOREGROUND_INDEX]))
@@ -5362,6 +5394,9 @@ realize_default_face (struct frame *f)
5362 ASET (lface, LFACE_FONTSET_INDEX, Qnil); 5394 ASET (lface, LFACE_FONTSET_INDEX, Qnil);
5363 } 5395 }
5364 5396
5397 if (UNSPECIFIEDP (LFACE_EXTEND (lface)))
5398 ASET (lface, LFACE_EXTEND_INDEX, Qnil);
5399
5365 if (UNSPECIFIEDP (LFACE_UNDERLINE (lface))) 5400 if (UNSPECIFIEDP (LFACE_UNDERLINE (lface)))
5366 ASET (lface, LFACE_UNDERLINE_INDEX, Qnil); 5401 ASET (lface, LFACE_UNDERLINE_INDEX, Qnil);
5367 5402
@@ -6539,6 +6574,7 @@ syms_of_xfaces (void)
6539 DEFSYM (QCstrike_through, ":strike-through"); 6574 DEFSYM (QCstrike_through, ":strike-through");
6540 DEFSYM (QCbox, ":box"); 6575 DEFSYM (QCbox, ":box");
6541 DEFSYM (QCinherit, ":inherit"); 6576 DEFSYM (QCinherit, ":inherit");
6577 DEFSYM (QCextend, ":extend");
6542 6578
6543 /* Symbols used for Lisp face attribute values. */ 6579 /* Symbols used for Lisp face attribute values. */
6544 DEFSYM (QCcolor, ":color"); 6580 DEFSYM (QCcolor, ":color");