/* Interface definitions for display code.
-Copyright (C) 1985, 1993-1994, 1997-2014 Free Software Foundation, Inc.
+Copyright (C) 1985, 1993-1994, 1997-2015 Free Software Foundation, Inc.
This file is part of GNU Emacs.
} bidi_bracket_type_t;
/* The basic directionality data type. */
-typedef enum { NEUTRAL_DIR, L2R, R2L } bidi_dir_t;
+typedef enum { NEUTRAL_DIR = 0, L2R, R2L } bidi_dir_t;
/* Data type for storing information about characters we need to
remember. */
/* Data type for keeping track of information about saved embedding
levels, override status, isolate status, and isolating sequence
- runs. */
+ runs. This should be as tightly packed as possible, because there
+ are 127 such entries in each iterator state, and so the size of
+ cache is directly affected by the size of this struct. */
struct bidi_stack {
- struct bidi_saved_info last_strong;
- struct bidi_saved_info next_for_neutral;
- struct bidi_saved_info prev_for_neutral;
- unsigned level : 7;
- bool_bf isolate_status : 1;
- unsigned override : 2;
- unsigned sos : 2;
+ ptrdiff_t next_for_neutral_pos;
+ unsigned next_for_neutral_type : 3;
+ unsigned last_strong_type : 3;
+ unsigned prev_for_neutral_type : 3;
+ unsigned char level;
+ unsigned char flags; /* sos, override, isolate_status */
};
/* Data type for storing information about a string being iterated on. */
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 */
+ ptrdiff_t bracket_pairing_pos; /* position of pairing bracket */
+ bidi_type_t bracket_enclosed_type; /* type for bracket resolution */
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 */
bidi_dir_t sos; /* direction of start-of-sequence in effect */
int disp_prop; /* if non-zero, there really is a
`display' property/string at disp_pos;
if 2, the property is a `space' spec */
- bool_bf bracket_resolved : 1; /* if 1, this bracket's type is BPA-resolved */
int stack_idx; /* index of current data on the stack */
/* Note: Everything from here on is not copied/saved when the bidi
iterator state is saved, pushed, or popped. So only put here
ptrdiff_t base_level_stop;
/* Maximum string or buffer position + 1. ZV when iterating over
- current_buffer. */
+ current_buffer. When iterating over a string in display_string,
+ this can be smaller or greater than the number of string
+ characters, depending on the values of PRECISION and FIELD_WIDTH
+ with which display_string was called. */
ptrdiff_t end_charpos;
/* C string to iterate over. Non-null means get characters from
/* First and last visible x-position in the display area. If window
is hscrolled by n columns, first_visible_x == n * FRAME_COLUMN_WIDTH
- (f), and last_visible_x == pixel width of W + first_visible_x. */
+ (f), and last_visible_x == pixel width of W + first_visible_x.
+ When truncation or continuation glyphs are produced due to lack of
+ fringes, last_visible_x excludes the space required for these glyphs. */
int first_visible_x, last_visible_x;
/* Last visible y-position + 1 in the display area without a mode
extern void bidi_pop_it (struct bidi_it *);
extern void *bidi_shelve_cache (void);
extern void bidi_unshelve_cache (void *, bool);
+extern ptrdiff_t bidi_find_first_overridden (struct bidi_it *);
/* Defined in xdisp.c */
int window_box_left (struct window *, enum glyph_row_area);
int window_box_left_offset (struct window *, enum glyph_row_area);
int window_box_right (struct window *, enum glyph_row_area);
-int window_box_right_offset (struct window *, enum glyph_row_area);
int estimate_mode_line_height (struct frame *, enum face_id);
int move_it_to (struct it *, ptrdiff_t, int, int, int, int);
void pixel_to_glyph_coords (struct frame *, int, int, int *, int *,
void update_face_from_frame_parameter (struct frame *, Lisp_Object,
Lisp_Object);
Lisp_Object tty_color_name (struct frame *, int);
-void clear_face_cache (int);
+void clear_face_cache (bool);
unsigned long load_color (struct frame *, struct face *, Lisp_Object,
enum lface_attribute_index);
char *choose_face_font (struct frame *, Lisp_Object *, Lisp_Object,
#endif /* HAVE_WINDOW_SYSTEM */
-/* Defined in xmenu.c */
+/* Defined in xmenu.c. */
int popup_activated (void);
-/* Defined in dispnew.c */
+/* Defined in dispnew.c. */
extern Lisp_Object buffer_posn_from_coords (struct window *,
int *, int *,
void clear_glyph_matrix_rows (struct glyph_matrix *, int, int);
void clear_glyph_row (struct glyph_row *);
void prepare_desired_row (struct window *, struct glyph_row *, bool);
-void update_single_window (struct window *, bool);
+void update_single_window (struct window *);
void do_pending_window_change (bool);
void change_frame_size (struct frame *, int, int, bool, bool, bool, bool);
void init_display (void);
extern void spec_glyph_lookup_face (struct window *, GLYPH *);
extern void fill_up_frame_row_with_spaces (struct glyph_row *, int);
-/* Defined in terminal.c */
+/* Defined in terminal.c. */
extern void ring_bell (struct frame *);
extern void update_begin (struct frame *);
extern void produce_glyphs (struct it *);
extern bool tty_capable_p (struct tty_display_info *, unsigned);
extern void set_tty_color_mode (struct tty_display_info *, struct frame *);
-extern struct terminal *get_named_tty (const char *);
extern void create_tty_output (struct frame *);
extern struct terminal *init_tty (const char *, const char *, bool);
extern void tty_append_glyph (struct it *);