/* 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. */
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
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 */
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 *);