+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.