1. 30 Mar, 2010 1 commit
  2. 28 Mar, 2010 1 commit
    • Eli Zaretskii's avatar
      Fix glyph_row reversed_p flag in empty lines between paragraphs. · c0546589
      Eli Zaretskii authored
       bidi.c (bidi_get_next_char_visually): Improve commentary.
       dispextern.h (PRODUCE_GLYPHS): Set the reversed_p flag in the
       iterator's glyph_row here.
       xdisp.c (handle_invisible_prop, set_iterator_to_next)
       (next_element_from_buffer): Don't set the reversed_p flag in the
       iterator's glyph_row here.
      c0546589
  3. 25 Jan, 2010 1 commit
    • Eli Zaretskii's avatar
      Finish and debug display of invisible text. · 5009f85e
      Eli Zaretskii authored
       xdisp.c (handle_invisible_prop): If we are `reseat'ed, init the
       paragraph direction and set the `reversed_p' flag in the IT's
       glyph row.  Fix exit conditions of the loop that skips invisible
       text.  Update IT->prev_stop after skipping invisible text.  Check
       for additional overlays at IT->stop_charpos, not at start_pos.
      
      Clean up the mess with setting the glyph row reversed_p flag.
       dispnew.c (prepare_desired_row): Preserve the reversed_p flag.
      
       bidi.c (bidi_cache_find): Use bidi_copy_it instead of copying
       the whole struct (which includes uninitialized parts).
       (bidi_init_it): Don't initialize bidi_it->paragraph_dir.
      
       xdisp.c (display_line): Remove misplaced setting of
       row->reversed_p flags.  Copy the reversed_p flag to the next glyph
       row.
       (next_element_from_buffer): Check bidi_it.paragraph_dir rather
       than level_stack[0].level.  Reset the reversed_p flag for non-R2L
       paragraphs.
      5009f85e
  4. 01 Jan, 2010 13 commits
    • Eli Zaretskii's avatar
      Retrospective commit from 2009-12-26. · 9443b3c7
      Eli Zaretskii authored
      Redesign handle_stop_backwards.
      Fix character mirroring for non-ASCII characters.
      
       xdisp.c (handle_stop_backwards): Call compute_stop_pos in the
       loop, instead of calling handle_stop.  Call handle_stop only once,
       after the loop.
       (next_element_from_buffer): Don't call handle_stop_backwards if at
       stop position.  If base_level_stop is zero, set it to 1.
      
       term.c (append_glyph): Fill resolved_level and bidi_type slots
       of struct glyph for unidirectional display.
      
       xdisp.c (set_cursor_from_row): Handle zero-width characters.
      
       bidi.c (bidi_mirror_char): More efficient code (suggested by
       Ehud Karni <ehud@unix.mvs.co.il>).  Don't even try to mirror
       non-ASCII characters.
      9443b3c7
    • Eli Zaretskii's avatar
      Retrospective commit from 2009-1219. · bc5a45f3
      Eli Zaretskii authored
      Fix reordering of Arabic text in etc/HELLO.
      Extend .gdbinit commands to support bidirectional display.
      
       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.
      bc5a45f3
    • Eli Zaretskii's avatar
      Retrospective commit from 2009-12-12. · e69a9370
      Eli Zaretskii authored
      Begin working on faces support.  First version of handle_stop_backwards.
      Rearrange struct bidi_it for more efficient push/pop ops.
      
       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.
      e69a9370
    • Eli Zaretskii's avatar
      Retrospective commit from 2009-11-07. · 21fce5ab
      Eli Zaretskii authored
      More fixes for iteration near ZV.
      
       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.
      21fce5ab
    • Eli Zaretskii's avatar
      Retrospective commit from 2009-10-24. · 29e3d8d1
      Eli Zaretskii authored
      Continue working on set_cursor_from_row.
      Cleanup of resolved_level and bidi_type members of struct glyph.
      
       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.
      
       bidi.c: Include setjmp.h.
      29e3d8d1
    • Eli Zaretskii's avatar
      Retrospective commit from 2009-10-17. · 5e65aec0
      Eli Zaretskii authored
      Continue working on display of R2L glyph rows.  Reverse glyphs in
      term.c:append_glyph rather than in extend_face_to_end_of_line.
      Fix bidi iteration near BEGV and ZV.
      
       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.
       (bidi_paragraph_init): Handle empty buffers.
      5e65aec0
    • Eli Zaretskii's avatar
      Retrospective commit from 2009-10-10. · e5a2fec7
      Eli Zaretskii authored
      Continue working on set_cursor_from_row.
      Disable redisplay optimizations that interfere with R2L glyph rows.
      Misc cleanups in bidi.c.
      
       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.
      
       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.
      e5a2fec7
    • Eli Zaretskii's avatar
      Retrospective commit from 2009-10-08. · c143c213
      Eli Zaretskii authored
      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.
      c143c213
    • Eli Zaretskii's avatar
      Retrospective commit from 2009-10-05. · b44d9321
      Eli Zaretskii authored
      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.
      b44d9321
    • Eli Zaretskii's avatar
      Retrospective commit from 2009-10-04. · be39f003
      Eli Zaretskii authored
      Continue working on determining paragraph's base direction.
      
       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.
      be39f003
    • Eli Zaretskii's avatar
      Retrospective commit from 2009-10-03. · 6bff6497
      Eli Zaretskii authored
      Detect paragraph start and paragraph separators (part of determining
      paragraph base direction).
      
      (The commit of window.h belongs to the original changes by Kenichi Handa,
      it was forgotten earlier.)
      
       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 flag 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.
      6bff6497
    • Eli Zaretskii's avatar
      Retrospective commit from 2009-09-27. · e342a24d
      Eli Zaretskii authored
      Support character mirroring.
      Support iteration that starts in the middle of a line.
      Misc cleanups.
      
       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.
      e342a24d
    • Eli Zaretskii's avatar
      Retrospective commit from 2009-09-26. · 9c82e145
      Eli Zaretskii authored
      Continued working on initialization.
      Started working on paragraph direction initialization.
      
       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.
      9c82e145
  5. 31 Dec, 2009 6 commits
    • Eli Zaretskii's avatar
      Retrospective commit from 2009-09-20. · e7402cb2
      Eli Zaretskii authored
      Handle positions at BEGV and ZV.  Mor initialization cleanups.
      
       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.
      e7402cb2
    • Eli Zaretskii's avatar
      Retrospective commit from 2009-09-19. · 89d3374a
      Eli Zaretskii authored
      Begin work on bidi initialization and other cleanup.
      Remove all STANDALONE code from bidi.c.
      
       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.
      89d3374a
    • Eli Zaretskii's avatar
      Retrospective commit from 2009-08-29. · a88bbf05
      Eli Zaretskii authored
      Started working on cursor motion.
      
       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.
       bidi.c <bidi_overriding_paragraph_direction>: Default to L2R, for now.
      a88bbf05
    • Eli Zaretskii's avatar
      Retrospective commit from 2009-08-22. · 2d6e4628
      Eli Zaretskii authored
      Staticpro bidi_char_table, add type checking where bidi type is assigned.
      
       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.
      2d6e4628
    • Eli Zaretskii's avatar
      Retrospective commit from 2009-08-15. · f44e260c
      Eli Zaretskii authored
      Start of work on bidi Emacs 23/24.
      
       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.
      
       bidi.c: Include stdio.h unconditionally.  Fix and elaborate
       commentary.  Add Copyright blurb.
      f44e260c
    • Eli Zaretskii's avatar
      Retrospective commit. · b7b65b15
      Eli Zaretskii authored
      These are the original changes made by Kenichi Handa on the old
      pre Emacs 22 emacs-bidi branch.
      b7b65b15