]> code.delx.au - gnu-emacs/blobdiff - src/ChangeLog.bidi
Retrospective commit from 2009-1219.
[gnu-emacs] / src / ChangeLog.bidi
index bcdb1ad309ac3f580b33bcaf22230acc4a7c108f..b9fb7457cfd9a6245b1b321e82032e95ca31c6a6 100644 (file)
@@ -1,3 +1,263 @@
+2009-12-19  Eli Zaretskii  <eliz@gnu.org>
+
+       * buffer.c (Fbuffer_swap_text): Swap the values of
+       bidi_display_reordering and bidi_paragraph_direction.
+
+       * bidi.c (bidi_resolve_weak): Fix nesting of conditions for Wn
+       processing.  Move W3 after W1 and W2.  Simplify W4 because it is
+       now always after W1.
+
+       * .gdbinit (pbiditype): New command.
+       (pgx): Use it to display bidi level and type of the glyph.
+
+2009-12-12  Eli Zaretskii  <eliz@gnu.org>
+
+       * dispextern.h (struct it): New members prev_stop and
+       base_level_stop.
+
+       * xdisp.c (handle_stop_backwards): New function.
+       (next_element_from_buffer): Handle the situation where we
+       overstepped stop_charpos due to non-linearity of the bidi
+       iteration.  Likewise for when we back up beyond the previous
+       stop_charpos.
+       (reseat_1, pop_it, push_it): Set prev_stop and base_level_stop.
+
+       * dispextern.h (BIDI_AT_BASE_LEVEL): New macro.
+
+       * bidi.c (bidi_copy_it): Fix compiler warning due to cast of a
+       pointer to `int'.  Don't preserve the first_elt member, as it is
+       no longer copied, because its position in the structure was
+       changed, see below.
+
+       * dispextern.h (struct bidi_it): Move first_elt, new_paragraph,
+       separator_limit, and paragraph_dir to after bidi_stack.  Add a
+       note that anything beyond the level stack is not preserved when
+       the bidi iterator state is copied/saved.
+
+2009-11-21  Eli Zaretskii  <eliz@gnu.org>
+
+       * xdisp.c (set_cursor_from_row): Fix cursor positioning on empty
+       lines when integer values of `cursor' property is used on display
+       strings.
+
+2009-11-14  Eli Zaretskii  <eliz@gnu.org>
+
+       * xdisp.c (init_iterator, text_outside_line_unchanged_p)
+       (try_window_id): Rename paragraph_direction to
+       bidi_paragraph_direction.
+       (set_cursor_from_row): Handle integer values of `cursor' property
+       on display strings.
+
+       * buffer.c (init_buffer_once, syms_of_buffer): Rename
+       paragraph_direction to bidi_paragraph_direction.
+
+       * buffer.h (struct buffer): Rename paragraph_direction to
+       bidi_paragraph_direction.
+
+2009-11-07  Eli Zaretskii  <eliz@gnu.org>
+
+       * bidi.c (bidi_paragraph_init): Don't overstep end of buffer.
+       Treat end of buffer as a NEUTRAL_B character.
+       (bidi_resolve_explicit): Don't special-case ZV when bidi_it->type
+       is NEUTRAL_B, since bidi_set_paragraph_end no longer sets the
+       new_paragraph flag.
+
+2009-10-31  Eli Zaretskii  <eliz@gnu.org>
+
+       * xdisp.c (display_line): Always extend reversed_p rows to the end
+       of line.
+       (set_cursor_from_row): In R2L rows that don't display text, put
+       the cursor on the rightmost glyph.
+
+2009-10-24  Eli Zaretskii  <eliz@gnu.org>
+
+       * xdisp.c (set_cursor_from_row): Fix off-by-one error when
+       skipping over non-character glyphs at end of a reversed row.
+
+       * dispextern.h (struct glyph): The `resolved_level' member needs
+       only 5 bits, not 6.  The `bidi_type' member needs only 3 bits.
+       (bidi_type_t): Rearrange so that types that can appear in the
+       resolved type are at the beginning and have values less than 8.
+
+2009-10-23  Eli Zaretskii  <eliz@gnu.org>
+
+       * bidi.c: Include setjmp.h.
+
+2009-10-17  Eli Zaretskii  <eliz@gnu.org>
+
+       * dispextern.h (struct glyph): New members resolved_level and
+       bidi_type.
+
+       * xdisp.c (append_glyph, append_composite_glyph)
+       (produce_image_glyph, append_stretch_glyph): Set them.
+
+       * term.c (append_glyph): Ditto.
+
+       * xdisp.c (display_line, next_element_from_buffer): Set the glyph
+       row's reversed_p flag if the paragraph base direction is odd.
+       (extend_face_to_end_of_line): Don't reverse the glyphs here.
+
+       * term.c (append_glyph): Reverse glyphs here.
+
+       * bidi.c (bidi_get_next_char_visually): Don't exit early when at
+       ZV.
+       (bidi_paragraph_init): Don't step over a newline if at BEGV.
+
+2009-10-16  Eli Zaretskii  <eliz@gnu.org>
+
+       * bidi.c (bidi_paragraph_init): Handle empty buffers.
+
+2009-10-10  Eli Zaretskii  <eliz@gnu.org>
+
+       * xdisp.c (set_cursor_from_row): Skip over glyphs near end of row
+       with integer OBJECT even if their CHARPOS is zero.
+
+       * bidi.c (bidi_cache_iterator_state): Don't cache NEW_PARAGRAPH.
+       Abort if someone tries to add a cached state whose position is not
+       the immediate successor to that of the last cached state.
+       (bidi_paragraph_init): Don't bail out too early after a reseat.
+
+2009-10-09  Eli Zaretskii  <eliz@gnu.org>
+
+       * xdisp.c (text_outside_line_unchanged_p, try_window_id): Disable
+       optimizations if we are reordering bidirectional text and the
+       paragraph direction can be affected by the change.
+
+2009-10-08  Eli Zaretskii  <eliz@gnu.org>
+
+       * xdisp.c (string_buffer_position_lim): New function.
+       (string_buffer_position): Most of code moved to
+       string_buffer_position_lim.  Last argument and return value are
+       now EMACS_INT; all callers changed.
+       (set_cursor_from_row): Rewritten to support bidirectional text and
+       reversed glyph rows.
+
+       dispextern.h <string_buffer_position>: Update prototype.
+
+2009-10-07  Eli Zaretskii  <eliz@gnu.org>
+
+       * bidi.c (bidi_paragraph_init): Fix initialization of POS.
+
+       * dispextern.h (struct glyph_row): New member reversed_p.
+
+2009-10-06  Eli Zaretskii  <eliz@gnu.org>
+
+       * buffer.c (syms_of_buffer): Remove DEFVAR_LISP_NOPRO for
+       default-direction-reversed, default-bidi-display-reordering, and
+       default-paragraph-direction.
+
+2009-10-05  Eli Zaretskii  <eliz@gnu.org>
+
+       * 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.
+
+2009-10-04  Eli Zaretskii  <eliz@gnu.org>
+
+       * bidi.c (bidi_at_paragraph_end): Check for paragraph-start if
+       paragraph-separate failed to match.  Return the length of the
+       matched separator.
+       (bidi_line_init): New function.
+       (bidi_paragraph_init): Use bidi_line_init.  Do nothing if in the
+       middle of a paragraph-separate sequence.  Don't override existing
+       paragraph direction if no strong characters found in this
+       paragraph.  Set separator_limit according to what
+       bidi_at_paragraph_end returns.  Reset new_paragraph flag when a
+       new paragraph is found.
+       (bidi_init_it): Reset separator_limit.
+
+       * dispextern.h (struct bidi_it): New member separator_limit.
+
+       * bidi.c (bidi_find_paragraph_start): Return the byte position of
+       the paragraph beginning.
+
+       * xdisp.c (set_iterator_to_next): Call bidi_paragraph_init if the
+       new_paragraph flag is set in the bidi iterator.
+
+       * bidi.c (bidi_at_paragraph_end, bidi_find_paragraph_start): Use
+       the buffer-local value of paragraph-start and paragraph-separate.
+
+2009-10-03  Eli Zaretskii  <eliz@gnu.org>
+
+       * bidi.c (bidi_set_paragraph_end): Don't set the new_paragraph
+       flag in the iterator.
+       (bidi_init_it): Set the new_paragraph flag.
+       (bidi_at_paragraph_end): Arguments are now character and byte
+       position of the next character.  All callers changed.
+       (bidi_resolve_explicit): Don't call bidi_at_paragraph_end, and
+       don't behave as if at paragraph end if it returns true.
+       (bidi_get_next_char_visually): Don't call bidi_paragraph_init if
+       new_paragraph flags is set.  Set new_paragraph flag when at end of
+       a paragraph.
+       <fallback_paragraph_start_re, fallback_paragraph_separate_re>: New
+       variables.
+       <Qparagraph_start, Qparagraph_separate>: New variables.
+       (bidi_initialize): Initialize and staticpro them.
+
+       * dispextern.h <struct bidi_it>: New element paragraph_dir.  Make
+       positional elements EMACS_INT.
+
+       * bidi.c <bidi_overriding_paragraph_direction>: Delete.
+
+2009-09-28  Eli Zaretskii  <eliz@gnu.org>
+
+       * bidi.c (bidi_init_it): Initialize charpos, bytepos, and
+       first_elt before calling bidi_set_paragraph_end.
+       (bidi_resolve_explicit): Don't call bidi_set_paragraph_end at
+       EOB.
+       (bidi_at_paragraph_end): Don't set new_paragraph flag at EOB.
+       (bidi_get_type): Accept an additional argument OVERRIDE, per UAX#9
+       "Explicit Overrides".  All callers changed.
+
+2009-09-27  Eli Zaretskii  <eliz@gnu.org>
+
+       * xdisp.c (next_element_from_buffer): If called not at line
+       beginning, start bidi iteration from line beginning.
+
+       * bidi.c (bidi_paragraph_init): Use
+       bidi_overriding_paragraph_direction instead of a literal zero.
+       (bidi_initialize): Fix some character types, per Unicode 5.x.
+       (bidi_get_type): Abort if called with invalid character code.
+
+       * dispextern.h: Add prototype of bidi_mirror_char.
+
+       * xdisp.c (get_next_display_element): Mirror characters whose
+       resolved type is STRONG_R.
+
+2009-09-26  Eli Zaretskii  <eliz@gnu.org>
+
+       * bidi.c (bidi_paragraph_init): Don't set bidi_it->ch_len.  Abort
+       if called not at beginning of a new paragraph.
+       (bidi_get_next_char_visually): Prepare and use a sentinel iterator
+       state when first_elt flag is set.
+
+       * dispextern.h (struct bidi_it): New struct member first_elt.
+
+       * bidi.c (bidi_init_it): Initialize bidi_it->first_elt.
+       (bidi_copy_it): Don't copy the first_elt flag.
+
+       * xdisp.c (reseat_1): Initialize bidi_it.first_elt.  Move bidi
+       scan start code from here...
+       (next_element_from_buffer): ...to here.  Use bidi_it.first_elt
+       flag.
+
 2009-09-20  Eli Zaretskii  <eliz@gnu.org>
 
        * xdisp.c (reseat_1): Handle position < BEGV.
 
 2004-03-04  Kenichi Handa  <handa@m17n.org>
 
-       The following changes are to support for bi-directional text
-       display.
+       The following changes are to support bidirectional text display.
 
        * Makefile.in (obj): Include bidi.o.
        (bidi.o): New target.