/* 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.
/* True means don't display cursor here. */
bool_bf avoid_cursor_p : 1;
- /* Resolved bidirectional level of this character [0..63]. */
- unsigned resolved_level : 5;
+ /* Resolved bidirectional level of this character [0..127]. */
+ unsigned resolved_level : 7;
/* Resolved bidirectional type of this character, see enum
bidi_type_t below. Note that according to UAX#9, only some
NEUTRAL_ON /* other neutrals */
} bidi_type_t;
+/* Data type for describing the Bidi Paired Bracket Type of a character.
+
+ The order of members must be in sync with the 8th element of the
+ member of unidata-prop-alist (in admin/unidata/unidata-gen.el) for
+ Unicode character property `bracket-type'. */
+typedef enum {
+ BIDI_BRACKET_NONE = 1,
+ BIDI_BRACKET_OPEN,
+ BIDI_BRACKET_CLOSE
+} 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. */
struct bidi_saved_info {
- ptrdiff_t bytepos, charpos; /* character's buffer position */
+ ptrdiff_t 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 */
+ bidi_type_t orig_type; /* bidi type as we found it in the buffer */
};
/* 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 {
- char level;
- bool isolate_status;
- bidi_dir_t override;
- struct bidi_saved_info prev;
- struct bidi_saved_info last_strong;
- struct bidi_saved_info next_for_neutral;
- struct bidi_saved_info prev_for_neutral;
- struct bidi_saved_info next_for_ws;
- ptrdiff_t next_en_pos;
- bidi_type_t next_en_type;
- bidi_dir_t sos;
+ 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 nchars; /* its "length", usually 1; it's > 1 for a run
of characters covered by a display string */
ptrdiff_t ch_len; /* its length in bytes */
- bidi_type_t type; /* bidi type of this character, after
+ bidi_type_t type; /* final bidi type of this character, after
resolving weak and neutral types */
- bidi_type_t type_after_w1; /* original type, after overrides and W1 */
- bidi_type_t orig_type; /* original type, as found in the buffer */
+ bidi_type_t type_after_wn; /* bidi type after overrides and Wn */
+ bidi_type_t orig_type; /* original bidi type, as found in the buffer */
char resolved_level; /* final resolved level of this character */
char isolate_level; /* count of isolate initiators unmatched by PDI */
ptrdiff_t invalid_levels; /* how many PDFs to ignore */
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 */
- ptrdiff_t ignore_bn_limit; /* position until which to ignore BNs */
bidi_dir_t sos; /* direction of start-of-sequence in effect */
int scan_dir; /* direction of text scan, 1: forw, -1: back */
ptrdiff_t disp_pos; /* position of display string after ch */
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 *);