X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/0756b0c3a6e60dd623da6f12bc8d2de05ef7b8f1..a54e2c050b9cf161cbccc3dd4628f8ef6b64f519:/src/dispextern.h diff --git a/src/dispextern.h b/src/dispextern.h index 5c60a5499d..78f6db63cb 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -1,6 +1,6 @@ /* Interface definitions for display code. -Copyright (C) 1985, 1993-1994, 1997-2011 Free Software Foundation, Inc. +Copyright (C) 1985, 1993-1994, 1997-2012 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -68,6 +68,10 @@ typedef Pixmap XImagePtr; typedef XImagePtr XImagePtr_or_DC; #endif +#ifdef HAVE_WINDOW_SYSTEM +# include "systime.h" +#endif + #ifndef HAVE_WINDOW_SYSTEM typedef int Cursor; #define No_Cursor (0) @@ -124,13 +128,6 @@ enum window_part #define GLYPH_DEBUG 0 #endif -/* If XASSERTS is non-zero, additional consistency checks are activated. - Turn it off by defining the macro XASSERTS to zero. */ - -#ifndef XASSERTS -#define XASSERTS 0 -#endif - /* Macros to include code only if GLYPH_DEBUG != 0. */ #if GLYPH_DEBUG @@ -139,12 +136,6 @@ enum window_part #define IF_DEBUG(X) (void) 0 #endif -#if XASSERTS -#define xassert(X) do {if (!(X)) abort ();} while (0) -#else -#define xassert(X) (void) 0 -#endif - /* Macro for displaying traces of redisplay. If Emacs was compiled with GLYPH_DEBUG != 0, the variable trace_redisplay_p can be set to a non-zero value in debugging sessions to activate traces. */ @@ -179,10 +170,10 @@ extern int trace_redisplay_p EXTERNALLY_VISIBLE; struct text_pos { /* Character position. */ - EMACS_INT charpos; + ptrdiff_t charpos; /* Corresponding byte position. */ - EMACS_INT bytepos; + ptrdiff_t bytepos; }; /* Access character and byte position of POS in a functional form. */ @@ -253,7 +244,7 @@ struct display_pos is the index of that overlay string in the sequence of overlay strings at `pos' in the order redisplay processes them. A value < 0 means that this is not a position in an overlay string. */ - int overlay_string_index; + ptrdiff_t overlay_string_index; /* If this is a position in an overlay string, string_pos is the position within that string. */ @@ -320,7 +311,7 @@ struct glyph buffer, this is a position in that buffer. A value of -1 together with a null object means glyph is a truncation glyph at the start of a row. */ - EMACS_INT charpos; + ptrdiff_t charpos; /* Lisp object source of this glyph. Currently either a buffer or a string, if the glyph was produced from characters which came from @@ -405,7 +396,7 @@ struct glyph { /* Metrics of a partial glyph of an image (type == IMAGE_GLYPH). */ struct glyph_slice img; - /* Start and end indices of glyphs of a graphme cluster of a + /* Start and end indices of glyphs of a grapheme cluster of a composition (type == COMPOSITE_GLYPH). */ struct { int from, to; } cmp; /* Pixel offsets for upper and lower part of the acronym. */ @@ -454,7 +445,7 @@ struct glyph /* Length of acronym or hexadecimal code string (at most 8). */ unsigned len : 4; /* Character to display. Actually we need only 22 bits. */ - unsigned ch : 26; + unsigned ch : 25; } glyphless; /* Used to compare all bit-fields above in one step. */ @@ -1510,6 +1501,13 @@ enum face_box_type FACE_SUNKEN_BOX }; +/* Underline type. */ + +enum face_underline_type +{ + FACE_UNDER_LINE, + FACE_UNDER_WAVE +}; /* Structure describing a realized face. @@ -1585,6 +1583,9 @@ struct face drawing shadows. */ unsigned use_box_color_for_shadows_p : 1; + /* Style of underlining. */ + enum face_underline_type underline_type; + /* Non-zero if text in this face should be underlined, overlined, strike-through or have a box drawn around it. */ unsigned underline_p : 1; @@ -1609,15 +1610,12 @@ struct face unsigned strike_through_color_defaulted_p : 1; unsigned box_color_defaulted_p : 1; - /* TTY appearances. Blinking is not yet implemented. Colors are - found in `lface' with empty color string meaning the default - color of the TTY. */ + /* TTY appearances. Colors are found in `lface' with empty color + string meaning the default color of the TTY. */ unsigned tty_bold_p : 1; - unsigned tty_dim_p : 1; + unsigned tty_italic_p : 1; unsigned tty_underline_p : 1; - unsigned tty_alt_charset_p : 1; unsigned tty_reverse_p : 1; - unsigned tty_blinking_p : 1; /* 1 means that colors of this face may not be freed because they have been copied bitwise from a base face (see @@ -1808,7 +1806,7 @@ typedef enum { NEUTRAL_DIR, L2R, R2L } bidi_dir_t; /* Data type for storing information about characters we need to remember. */ struct bidi_saved_info { - EMACS_INT bytepos, charpos; /* character's buffer position */ + ptrdiff_t bytepos, charpos; /* character's buffer position */ bidi_type_t type; /* character's resolved bidi type */ bidi_type_t type_after_w1; /* original type of the character, after W1 */ bidi_type_t orig_type; /* type as we found it in the buffer */ @@ -1825,9 +1823,9 @@ struct bidi_stack { struct bidi_string_data { Lisp_Object lstring; /* Lisp string to reorder, or nil */ const unsigned char *s; /* string data, or NULL if reordering buffer */ - EMACS_INT schars; /* the number of characters in the string, + ptrdiff_t schars; /* the number of characters in the string, excluding the terminating null */ - EMACS_INT bufpos; /* buffer position of lstring, or 0 if N/A */ + ptrdiff_t bufpos; /* buffer position of lstring, or 0 if N/A */ unsigned from_disp_str : 1; /* 1 means the string comes from a display property */ unsigned unibyte : 1; /* 1 means the string is unibyte */ @@ -1835,14 +1833,14 @@ struct bidi_string_data { /* Data type for reordering bidirectional text. */ struct bidi_it { - EMACS_INT bytepos; /* iterator's position in buffer/string */ - EMACS_INT charpos; + ptrdiff_t bytepos; /* iterator's position in buffer/string */ + ptrdiff_t charpos; int ch; /* character at that position, or u+FFFC ("object replacement character") for a run of characters covered by a display string */ - EMACS_INT nchars; /* its "length", usually 1; it's > 1 for a run + ptrdiff_t nchars; /* its "length", usually 1; it's > 1 for a run of characters covered by a display string */ - EMACS_INT ch_len; /* its length in bytes */ + ptrdiff_t ch_len; /* its length in bytes */ bidi_type_t type; /* bidi type of this character, after resolving weak and neutral types */ bidi_type_t type_after_w1; /* original type, after overrides and W1 */ @@ -1856,12 +1854,12 @@ struct bidi_it { struct bidi_saved_info next_for_neutral; /* surrounding characters for... */ struct bidi_saved_info prev_for_neutral; /* ...resolving neutrals */ struct bidi_saved_info next_for_ws; /* character after sequence of ws */ - EMACS_INT next_en_pos; /* pos. of next char for determining ET type */ + ptrdiff_t next_en_pos; /* pos. of next char for determining ET type */ bidi_type_t next_en_type; /* type of char at next_en_pos */ - EMACS_INT ignore_bn_limit; /* position until which to ignore BNs */ + ptrdiff_t ignore_bn_limit; /* position until which to ignore BNs */ bidi_dir_t sor; /* direction of start-of-run in effect */ int scan_dir; /* direction of text scan, 1: forw, -1: back */ - EMACS_INT disp_pos; /* position of display string after ch */ + ptrdiff_t disp_pos; /* position of display string after ch */ int disp_prop; /* if non-zero, there really is a `display' property/string at disp_pos; if 2, the property is a `space' spec */ @@ -1872,7 +1870,7 @@ struct bidi_it { struct bidi_stack level_stack[BIDI_MAXLEVEL]; /* stack of embedding levels */ struct bidi_string_data string; /* string to reorder */ bidi_dir_t paragraph_dir; /* current paragraph direction */ - EMACS_INT separator_limit; /* where paragraph separator should end */ + ptrdiff_t separator_limit; /* where paragraph separator should end */ unsigned first_elt : 1; /* if non-zero, examine current char first */ unsigned new_paragraph : 1; /* if non-zero, we expect a new paragraph */ unsigned frame_window_p : 1; /* non-zero if displaying on a GUI frame */ @@ -2058,7 +2056,7 @@ enum it_method { struct composition_it { /* Next position at which to check the composition. */ - EMACS_INT stop_pos; + ptrdiff_t stop_pos; /* ID number of the composition or glyph-string. If negative, we are not iterating over a composition now. */ ptrdiff_t id; @@ -2076,7 +2074,7 @@ struct composition_it /* If this is an automatic composition, how many characters to look back from the position where a character triggering the composition exists. */ - int lookback; + ptrdiff_t lookback; /* If non-negative, number of glyphs of the glyph-string. */ int nglyphs; /* Nonzero iff the composition is created while buffer is scanned in @@ -2087,7 +2085,7 @@ struct composition_it /** The following members contain information about the current grapheme cluster. */ /* Position of the first character of the current grapheme cluster. */ - EMACS_INT charpos; + ptrdiff_t charpos; /* Number of characters and bytes of the current grapheme cluster. */ int nchars, nbytes; /* Indices of the glyphs for the current grapheme cluster. */ @@ -2112,19 +2110,19 @@ struct it /* The next position at which to check for face changes, invisible text, overlay strings, end of text etc., which see. */ - EMACS_INT stop_charpos; + ptrdiff_t stop_charpos; /* Previous stop position, i.e. the last one before the current iterator position in `current'. */ - EMACS_INT prev_stop; + ptrdiff_t prev_stop; /* Last stop position iterated across whose bidi embedding level is equal to the current paragraph's base embedding level. */ - EMACS_INT base_level_stop; + ptrdiff_t base_level_stop; /* Maximum string or buffer position + 1. ZV when iterating over current_buffer. */ - EMACS_INT end_charpos; + ptrdiff_t end_charpos; /* C string to iterate over. Non-null means get characters from this string, otherwise characters are read from current_buffer @@ -2133,14 +2131,14 @@ struct it /* Number of characters in the string (s, or it->string) we iterate over. */ - EMACS_INT string_nchars; + ptrdiff_t string_nchars; /* Start and end of a visible region; -1 if the region is not visible in the window. */ - EMACS_INT region_beg_charpos, region_end_charpos; + ptrdiff_t region_beg_charpos, region_end_charpos; /* Position at which redisplay end trigger functions should be run. */ - EMACS_INT redisplay_end_trigger_charpos; + ptrdiff_t redisplay_end_trigger_charpos; /* 1 means multibyte characters are enabled. */ unsigned multibyte_p : 1; @@ -2152,6 +2150,10 @@ struct it Don't handle some `display' properties in these strings. */ unsigned string_from_display_prop_p : 1; + /* 1 means `string' comes from a `line-prefix' or `wrap-prefix' + property. */ + unsigned string_from_prefix_prop_p : 1; + /* 1 means we are iterating an object that came from a value of a `display' property. */ unsigned from_disp_prop_p : 1; @@ -2204,14 +2206,18 @@ struct it struct display_pos current; /* Total number of overlay strings to process. This can be > - OVERLAY_STRING_CHUNK_SIZE. */ - int n_overlay_strings; + OVERLAY_STRING_CHUNK_SIZE. Value is dependable only when + current.overlay_string_index >= 0. Use the latter to determine + whether an overlay string is being iterated over, because + n_overlay_strings can be positive even when we are not rendering + an overlay string. */ + ptrdiff_t n_overlay_strings; /* The charpos where n_overlay_strings was calculated. This should be set at the same time as n_overlay_strings. It is needed because we show before-strings at the start of invisible text; see handle_invisible_prop in xdisp.c. */ - EMACS_INT overlay_strings_charpos; + ptrdiff_t overlay_strings_charpos; /* Vector of overlays to process. Overlay strings are processed OVERLAY_STRING_CHUNK_SIZE at a time. */ @@ -2223,7 +2229,8 @@ struct it /* If non-nil, a Lisp string being processed. If current.overlay_string_index >= 0, this is an overlay string from - pos. */ + pos. Use STRINGP (it.string) to test whether we are rendering a + string or something else; do NOT use BUFFERP (it.object). */ Lisp_Object string; /* If non-nil, we are processing a string that came @@ -2238,10 +2245,10 @@ struct it { Lisp_Object string; int string_nchars; - EMACS_INT end_charpos; - EMACS_INT stop_charpos; - EMACS_INT prev_stop; - EMACS_INT base_level_stop; + ptrdiff_t end_charpos; + ptrdiff_t stop_charpos; + ptrdiff_t prev_stop; + ptrdiff_t base_level_stop; struct composition_it cmp_it; int face_id; @@ -2272,6 +2279,7 @@ struct it bidi_dir_t paragraph_embedding; unsigned multibyte_p : 1; unsigned string_from_display_prop_p : 1; + unsigned string_from_prefix_prop_p : 1; unsigned display_ellipsis_p : 1; unsigned avoid_cursor_p : 1; unsigned bidi_p:1; @@ -2290,7 +2298,7 @@ struct it /* -1 means selective display hides everything between a \r and the next newline; > 0 means hide lines indented more than that value. */ - EMACS_INT selective; + ptrdiff_t selective; /* An enumeration describing what the next display element is after a call to get_next_display_element. */ @@ -2411,6 +2419,9 @@ struct it and continuation glyphs, or blanks that extend each line to the edge of the window on a TTY. + Do NOT use !BUFFERP (it.object) as a test whether we are + iterating over a string; use STRINGP (it.string) instead. + Position is the current iterator position in object. */ Lisp_Object object; struct text_pos position; @@ -2649,11 +2660,11 @@ struct redisplay_interface void (*flush_display) (struct frame *f); /* Flush the display of frame F if non-NULL. This is called - during redisplay, and should be NULL on systems which flushes + during redisplay, and should be NULL on systems which flush automatically before reading input. */ void (*flush_display_optional) (struct frame *f); - /* Clear the mouse hightlight in window W, if there is any. */ + /* Clear the mouse highlight in window W, if there is any. */ void (*clear_window_mouse_face) (struct window *w); /* Set *LEFT and *RIGHT to the left and right overhang of GLYPH on @@ -2760,7 +2771,7 @@ struct image { /* The time in seconds at which the image was last displayed. Set in prepare_image_for_display. */ - time_t timestamp; + EMACS_TIME timestamp; /* Pixmaps of the image. */ Pixmap pixmap, mask; @@ -2974,8 +2985,7 @@ enum tool_bar_item_image #define TTY_CAP_UNDERLINE 0x02 #define TTY_CAP_BOLD 0x04 #define TTY_CAP_DIM 0x08 -#define TTY_CAP_BLINK 0x10 -#define TTY_CAP_ALT_CHARSET 0x20 +#define TTY_CAP_ITALIC 0x10 /*********************************************************************** @@ -2984,7 +2994,7 @@ enum tool_bar_item_image /* Defined in bidi.c */ -extern void bidi_init_it (EMACS_INT, EMACS_INT, int, struct bidi_it *); +extern void bidi_init_it (ptrdiff_t, ptrdiff_t, int, struct bidi_it *); extern void bidi_move_to_visually_next (struct bidi_it *); extern void bidi_paragraph_init (bidi_dir_t, struct bidi_it *, int); extern int bidi_mirror_char (int); @@ -2995,11 +3005,11 @@ extern void bidi_unshelve_cache (void *, int); /* Defined in xdisp.c */ -struct glyph_row *row_containing_pos (struct window *, EMACS_INT, +struct glyph_row *row_containing_pos (struct window *, ptrdiff_t, struct glyph_row *, struct glyph_row *, int); int line_bottom_y (struct it *); -int display_prop_intangible_p (Lisp_Object, Lisp_Object, EMACS_INT, EMACS_INT); +int display_prop_intangible_p (Lisp_Object, Lisp_Object, ptrdiff_t, ptrdiff_t); void resize_echo_area_exactly (void); int resize_mini_window (struct window *, int); #if defined USE_TOOLKIT_SCROLL_BARS && !defined USE_GTK @@ -3021,18 +3031,18 @@ void remember_mouse_glyph (struct frame *, int, int, NativeRectangle *); void mark_window_display_accurate (Lisp_Object, int); void redisplay_preserve_echo_area (int); -void init_iterator (struct it *, struct window *, EMACS_INT, - EMACS_INT, struct glyph_row *, enum face_id); +void init_iterator (struct it *, struct window *, ptrdiff_t, + ptrdiff_t, struct glyph_row *, enum face_id); void init_iterator_to_row_start (struct it *, struct window *, struct glyph_row *); void start_display (struct it *, struct window *, struct text_pos); -void move_it_to (struct it *, EMACS_INT, int, int, int, int); +void move_it_to (struct it *, ptrdiff_t, int, int, int, int); void move_it_vertically (struct it *, int); void move_it_vertically_backward (struct it *, int); -void move_it_by_lines (struct it *, int); +void move_it_by_lines (struct it *, ptrdiff_t); void move_it_past_eol (struct it *); void move_it_in_display_line (struct it *it, - EMACS_INT to_charpos, int to_x, + ptrdiff_t to_charpos, int to_x, enum move_operation_enum op); int in_display_vector_p (struct it *); int frame_mode_line_height (struct frame *); @@ -3042,15 +3052,15 @@ extern int help_echo_showing_p; extern int current_mode_line_height, current_header_line_height; extern Lisp_Object help_echo_string, help_echo_window; extern Lisp_Object help_echo_object, previous_help_echo_string; -extern EMACS_INT help_echo_pos; +extern ptrdiff_t help_echo_pos; extern struct frame *last_mouse_frame; extern int last_tool_bar_item; extern void reseat_at_previous_visible_line_start (struct it *); extern Lisp_Object lookup_glyphless_char_display (int, struct it *); -extern EMACS_INT compute_display_string_pos (struct text_pos *, +extern ptrdiff_t compute_display_string_pos (struct text_pos *, struct bidi_string_data *, int, int *); -extern EMACS_INT compute_display_string_end (EMACS_INT, +extern ptrdiff_t compute_display_string_end (ptrdiff_t, struct bidi_string_data *); extern void produce_stretch_glyph (struct it *); @@ -3096,7 +3106,7 @@ extern void get_glyph_string_clip_rect (struct glyph_string *, extern Lisp_Object find_hot_spot (Lisp_Object, int, int); extern void handle_tool_bar_click (struct frame *, - int, int, int, unsigned int); + int, int, int, int); extern void expose_frame (struct frame *, int, int, int, int); extern int x_intersect_rectangles (XRectangle *, XRectangle *, @@ -3126,6 +3136,9 @@ void compute_fringe_widths (struct frame *, int); void w32_init_fringe (struct redisplay_interface *); void w32_reset_fringes (void); #endif + +extern unsigned row_hash (struct glyph_row *); + /* Defined in image.c */ #ifdef HAVE_WINDOW_SYSTEM @@ -3190,7 +3203,11 @@ void unload_color (struct frame *, unsigned long); char *choose_face_font (struct frame *, Lisp_Object *, Lisp_Object, int *); void prepare_face_for_display (struct frame *, struct face *); +#ifdef HAVE_STRCASECMP +#define xstrcasecmp(x,y) strcasecmp ((x), (y)) +#else int xstrcasecmp (const char *, const char *); +#endif int lookup_named_face (struct frame *, Lisp_Object, int); int lookup_basic_face (struct frame *, int); int smaller_face (struct frame *, int, int); @@ -3199,19 +3216,19 @@ int lookup_derived_face (struct frame *, Lisp_Object, int, int); void init_frame_faces (struct frame *); void free_frame_faces (struct frame *); void recompute_basic_faces (struct frame *); -int face_at_buffer_position (struct window *w, EMACS_INT pos, - EMACS_INT region_beg, EMACS_INT region_end, - EMACS_INT *endptr, EMACS_INT limit, +int face_at_buffer_position (struct window *w, ptrdiff_t pos, + ptrdiff_t region_beg, ptrdiff_t region_end, + ptrdiff_t *endptr, ptrdiff_t limit, int mouse, int base_face_id); -int face_for_overlay_string (struct window *w, EMACS_INT pos, - EMACS_INT region_beg, EMACS_INT region_end, - EMACS_INT *endptr, EMACS_INT limit, +int face_for_overlay_string (struct window *w, ptrdiff_t pos, + ptrdiff_t region_beg, ptrdiff_t region_end, + ptrdiff_t *endptr, ptrdiff_t limit, int mouse, Lisp_Object overlay); int face_at_string_position (struct window *w, Lisp_Object string, - EMACS_INT pos, EMACS_INT bufpos, - EMACS_INT region_beg, EMACS_INT region_end, - EMACS_INT *endptr, enum face_id, int mouse); -int merge_faces (struct frame *, Lisp_Object, EMACS_INT, int); + ptrdiff_t pos, ptrdiff_t bufpos, + ptrdiff_t region_beg, ptrdiff_t region_end, + ptrdiff_t *endptr, enum face_id, int mouse); +int merge_faces (struct frame *, Lisp_Object, int, int); int compute_char_face (struct frame *, int, Lisp_Object); void free_all_realized_faces (Lisp_Object); extern Lisp_Object Qforeground_color, Qbackground_color; @@ -3235,7 +3252,6 @@ extern Window tip_window; EXFUN (Fx_hide_tip, 0); extern void start_hourglass (void); extern void cancel_hourglass (void); -extern int hourglass_started (void); extern int hourglass_shown_p; struct atimer; /* Defined in atimer.h. */ /* If non-null, an asynchronous timer that, when it expires, displays @@ -3277,11 +3293,11 @@ extern Lisp_Object buffer_posn_from_coords (struct window *, Lisp_Object *, int *, int *, int *, int *); extern Lisp_Object mode_line_string (struct window *, enum window_part, - int *, int *, EMACS_INT *, + int *, int *, ptrdiff_t *, Lisp_Object *, int *, int *, int *, int *); extern Lisp_Object marginal_area_string (struct window *, enum window_part, - int *, int *, EMACS_INT *, + int *, int *, ptrdiff_t *, Lisp_Object *, int *, int *, int *, int *); extern void redraw_frame (struct frame *); @@ -3301,7 +3317,7 @@ void shift_glyph_matrix (struct window *, struct glyph_matrix *, int, int, int); void rotate_matrix (struct glyph_matrix *, int, int, int); void increment_matrix_positions (struct glyph_matrix *, - int, int, EMACS_INT, EMACS_INT); + int, int, ptrdiff_t, ptrdiff_t); void blank_row (struct window *, struct glyph_row *, int); void enable_glyph_matrix_rows (struct glyph_matrix *, int, int, int); void clear_glyph_row (struct glyph_row *);