Mercurial > emacs
diff src/buffer.c @ 107595:69c12db7031d
Retrospective commit from 2009-10-05.
Continue working on paragraph base direction.
Support per-buffer default paragraph direction.
buffer.h (struct buffer): New member paragraph_direction.
buffer.c (init_buffer_once): Initialize it.
(syms_of_buffer): Declare Lisp variables
default-paragraph-direction and paragraph-direction.
dispextern.h (struct it): New member paragraph_embedding.
xdisp.c (init_iterator): Initialize it from the buffer's value
of paragraph-direction.
<Qright_to_left, Qleft_to_right>: New variables.
(syms_of_xdisp): Initialize and staticpro them.
(set_iterator_to_next, next_element_from_buffer): Use the value of
paragraph_embedding to determine the paragraph direction.
bidi.c (bidi_line_init): Fix second argument to
bidi_set_sor_type.
(bidi_init_it): Initialize paragraph_dir to NEUTRAL_DIR.
(bidi_get_next_char_visually): Record the last character of the
separator in separator_limit, not the character after that.
(bidi_find_paragraph_start): Accept character and byte positions
instead of the whole iterator stricture. All callers changed.
| author | Eli Zaretskii <eliz@gnu.org> |
|---|---|
| date | Fri, 01 Jan 2010 06:22:52 -0500 |
| parents | e0df0337f248 |
| children | 866e76f8ad75 |
line wrap: on
line diff
--- a/src/buffer.c Fri Jan 01 06:17:13 2010 -0500 +++ b/src/buffer.c Fri Jan 01 06:22:52 2010 -0500 @@ -5188,6 +5188,7 @@ buffer_defaults.ctl_arrow = Qt; buffer_defaults.bidi_display_reordering = Qnil; buffer_defaults.direction_reversed = Qnil; + buffer_defaults.paragraph_direction = Qnil; buffer_defaults.cursor_type = Qt; buffer_defaults.extra_line_spacing = Qnil; buffer_defaults.cursor_in_non_selected_windows = Qt; @@ -5274,6 +5275,7 @@ XSETFASTINT (buffer_local_flags.category_table, idx); ++idx; XSETFASTINT (buffer_local_flags.bidi_display_reordering, idx); ++idx; XSETFASTINT (buffer_local_flags.direction_reversed, idx); ++idx; + XSETFASTINT (buffer_local_flags.paragraph_direction, idx); ++idx; XSETFASTINT (buffer_local_flags.buffer_file_coding_system, idx); /* Make this one a permanent local. */ buffer_permanent_local_flags[idx++] = 1; @@ -5545,6 +5547,11 @@ doc: /* *Default value of `enable-multibyte-characters' for buffers not overriding it. This is the same as (default-value 'enable-multibyte-characters). */); + DEFVAR_LISP_NOPRO ("default-paragraph-direction", + &buffer_defaults.paragraph_direction, + doc: /* Default value of `paragraph-direction' for buffers that do not override it. +This is the same as (default-value 'paragraph-direction). */); + DEFVAR_LISP_NOPRO ("default-buffer-file-coding-system", &buffer_defaults.buffer_file_coding_system, doc: /* Default value of `buffer-file-coding-system' for buffers not overriding it. @@ -5806,6 +5813,18 @@ doc: /*Non-nil means reorder bidirectional text for display in the visual order. See also the variable `direction-reversed'. */); + DEFVAR_PER_BUFFER ("paragraph-direction", + ¤t_buffer->paragraph_direction, Qnil, + doc: /* *If non-nil, forces directionality of text paragraphs in the buffer. + +If this is nil (the default), the direction of each paragraph is +determined by the first strong directional character of its text. +The values of `right-to-left' and `left-to-right' override that. +Any other value is treated as nil. + +This variable has no effect unless the buffer's value of +\`bidi-display-reordering' is non-nil. */); + DEFVAR_PER_BUFFER ("truncate-lines", ¤t_buffer->truncate_lines, Qnil, doc: /* *Non-nil means do not display continuation lines. Instead, give each line of text just one screen line.
