view src/ChangeLog.bidi @ 107596:866e76f8ad75

Retrospective commit from 2009-10-08. Finish up working on paragraph's base direction. Start working on display of right-to-left glyph rows. Rewrite set_cursor_from_row to support bidi. 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. bidi.c (bidi_paragraph_init): Fix initialization of POS. dispextern.h (struct glyph_row): New member reversed_p. buffer.c (syms_of_buffer): Remove DEFVAR_LISP_NOPRO for default-direction-reversed, default-bidi-display-reordering, and default-paragraph-direction.
author Eli Zaretskii <eliz@gnu.org>
date Fri, 01 Jan 2010 06:27:51 -0500
parents 69c12db7031d
children 7361a2f37d8e
line wrap: on
line source

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.

	* bidi.c (bidi_paragraph_init): Set bidi_it->ch_len.  Handle ZV.
	(bidi_init_it): Don't initialize bidi_it->ch_len.
	(bidi_resolve_explicit_1): Abort if bidi_it->ch_len was not
	initialized.
	(bidi_at_paragraph_end, bidi_resolve_explicit_1)
	(bidi_resolve_weak, bidi_level_of_next_char): Handle bytepos at
	ZV_BYTE.
	(bidi_resolve_explicit_1): Handle position < BEGV.

2009-09-19  Eli Zaretskii  <eliz@gnu.org>

	* xdisp.c (init_iterator): Call bidi_init_it.  Set
	bidi_it->bytepos if buffer position specified.
	(reseat_1): Don't call bidi_init_it.  Call bidi_paragraph_init
	instead.  Move back to preceding character before the call to
	bidi_get_next_char_visually.

	* bidi.c: Remove all STANDALONE parts.
	(bidi_init_it): Init bidi_it->charpos and bidi_it->bytepos to -1.
	Don't call bidi_paragraph_init.  Change arguments.
	(bidi_paragraph_init): Remove code for negative pos.

	* dispextern.h <bidi_it>: Rename orig_type to type_after_w1 and
	pristine_type to orig_type.

2009-09-12  Eli Zaretskii  <eliz@gnu.org>

	* dispnew.c (direct_output_for_insert): Give up if we are
	reordering bidirectional text.

	* dispextern.h (IT_STACK_SIZE): Enlarge to 5.

	* xdisp.c (display_line): Set row->end and it->start for the next
	row to the next character in logical order.  If we are reordering
	bidi text, push and pop the iterator before and after momentarily
	iterating in logical order.

2009-09-11  Eli Zaretskii  <eliz@gnu.org>

	Note: The following changes were undone on 2009-09-12.

	* xdisp.c (set_iterator_to_next, reseat, reseat_1)
	(reseat_at_next_visible_line_start): Accept additional argument
	force_logical_p; all callers changed.  If force_logical_p is
	non-zero, force iteration in buffer's logical order even in bidi
	buffers.

	* dispnew.c (direct_output_for_insert): Call set_iterator_to_next
	with additional argument zero.

	* dispextern.h (set_iterator_to_next): Now accepts an additional
	argument.

2009-08-29  Eli Zaretskii  <eliz@gnu.org>

	* xdisp.c (set_cursor_from_row): Don't assume glyph->charpos
	increments linearly.
	(try_window_reusing_current_matrix): Don't assume glyph->charpos
	increments linearly.

2009-08-28  Eli Zaretskii  <eliz@gnu.org>

	* bidi.c <bidi_overriding_paragraph_direction>: Default to L2R,
	for now.

2009-08-22  Eli Zaretskii  <eliz@gnu.org>

	* bidi.c (bidi_initialize): staticpro bidi_char_table.
	(bidi_check_type): New function.
	(bidi_cache_iterator_state, bidi_remember_char)
	(bidi_resolve_explicit_1, bidi_resolve_explicit)
	(bidi_resolve_weak, bidi_resolve_neutral)
	(bidi_level_of_next_char): Use it to validate the bidi type
	assigned to the iterator.

2009-08-15  Eli Zaretskii  <eliz@gnu.org>

	* bidi.c (bidi_initialize): Fix initialization of bidi_type_table.

	* xdisp.c (set_iterator_to_next): Fix position setting after call
	to bidi_get_next_char_visually.

2005-12-03  Eli Zaretskii  <eliz@gnu.org>

	* bidi.c: Include stdio.h unconditionally.  Fix and elaborate
	commentary.  Add Copyright blurb.

2004-03-08  Kenichi Handa  <handa@m17n.org>

	* xdisp.c (reseat_1): Call bidi_init_it with a previous position.

	* bidi.c (bidi_init_it): Set bidi_it->ch_len even if POS > 0.

2004-03-04  Kenichi Handa  <handa@m17n.org>

	The following changes are to support bidirectional text display.

	* Makefile.in (obj): Include bidi.o.
	(bidi.o): New target.

	* bidi.c: New file.

	* buffer.h (struct buffer): New member bidi_display_reordering.

	* buffer.c (init_buffer_once): Initialize bidi_display_reordering.
	(syms_of_buffer): Declarations of Lisp variables
	default-bidi-display-reordering and bidi-display-reordering.

	* dispextern.h (BIDI_MAXLEVEL): New macro.
	(bidi_type_t, bidi_dir_t): New types.
	(bidi_saved_info, bidi_stack, bidi_it): New structs.
	(struct it): New members bidi_p and bidi_it.
	(bidi_init_it): Extern it.
	(bidi_get_next_char_visually): Extern it.

	* dispnew.c (direct_output_forward_char): Give up if we need bidi
	processing or buffer's direction is right-to-left.

	* xdisp.c (init_iterator): Initialize it->bidi_p.
	(reseat_1): Cal bidi_init_it and bidi_get_next_char_visually if
	necessary.
	(set_iterator_to_next): Cal bidi_get_next_char_visually if
	necessary.


;; Local Variables:
;; coding: utf-8
;; add-log-time-zone-rule: t
;; End:

    Copyright (C) 2007, 2008, 2009  Free Software Foundation, Inc.

  This file is part of GNU Emacs.

  GNU Emacs is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  GNU Emacs is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.