1. 23 Aug, 2011 1 commit
    • Eli Zaretskii's avatar
      Followup for character properties in 2011-08-23T11:48:07Z!handa@m17n.org. · bca633fb
      Eli Zaretskii authored
       src/bidi.c (bidi_get_type): Abort if we get zero as the bidi type of
       a character.
       admin/unidata/unidata-gen.el (unidata-prop-alist): Update the default
       values of bidi-class according to DerivedBidiClass.txt from the
       latest UCD.
       lisp/international/uni-bidi.el: Regenerated.
       doc/lispref/nonascii.texi (Character Properties): Document the values for
       unassigned codepoints.
      bca633fb
  2. 18 Aug, 2011 1 commit
  3. 15 Aug, 2011 3 commits
    • Paul Eggert's avatar
      3ebec551
    • Eli Zaretskii's avatar
      Use uniprop tables instead of biditype.h and bidimirror.h. · 474a8465
      Eli Zaretskii authored
       src/bidi.c (bidi_initialize): Use uniprop_table instead of including
       biditype.h and bidimirror.h.
       src/biditype.h: File removed.
       src/bidimirror.h: File removed.
       src/deps.mk (bidi.o): Remove biditype.h and
       bidimirror.h.
       src/makefile.w32-in ($(BLD)/bidi.$(O)): Remove biditype.h and
       bidimirror.h.
       src/dispextern.h: Fix a typo in the comment to bidi_type_t.
       src/chartab.c: Improve commentary for the uniprop_table API.
      
       admin/unidata/bidimirror.awk: File removed.
       admin/unidata/biditype.awk: File removed.
       admin/unidata/makefile.w32-in (all): Remove src/biditype.h and
       src/bidimirror.h.
       (../../src/biditype.h, ../../src/bidimirror.h): Deleted.
       admin/unidata/Makefile.in (all): Remove src/biditype.h and
       src/bidimirror.h.
       (../../src/biditype.h, ../../src/bidimirror.h): Deleted.
      474a8465
    • Eli Zaretskii's avatar
      Support RLE/RLO/LRE/LRO for determining paragraph direction. · 32413314
      Eli Zaretskii authored
       src/bidi.c (bidi_paragraph_init): Support zero value of
       bidi_ignore_explicit_marks_for_paragraph_level.
      32413314
  4. 06 Aug, 2011 1 commit
    • Eli Zaretskii's avatar
      Fix bug #9254 with crash and cursor positioning under longlines-mode. · d1410150
      Eli Zaretskii authored
       src/xdisp.c (set_cursor_from_row): Fix cursor positioning when a
       display property strides EOL and includes a newline, as in
       longlines-mode.
       src/bidi.c (bidi_unshelve_cache): Don't reset the cache if JUST_FREE
       is non-zero, even if the data buffer is NULL.  Fixes a crash in
       vertical-motion with longlines-mode.
      d1410150
  5. 05 Aug, 2011 2 commits
    • Eli Zaretskii's avatar
      Make bidi_cache_total_alloc static. · ec7cc85b
      Eli Zaretskii authored
       src/bidi.c <bidi_cache_total_alloc>: Now static.
       (bidi_initialize): Initialize bidi_cache_total_alloc.
      ec7cc85b
    • Eli Zaretskii's avatar
      Fix bug #9221 with resource allocation under word-wrap. · 35928349
      Eli Zaretskii authored
      Add diagnostic facility for monitoring memory allocated for cache shelving.
      
       src/xdisp.c (display_line): Release buffer allocated for shelved bidi
       cache.  (Bug#9221)
       src/bidi.c (bidi_shelve_cache, bidi_unshelve_cache): Track total
       amount allocated this far in `bidi_cache_total_alloc'.
       (bidi_unshelve_cache): Accept an additional argument JUST_FREE; if
       non-zero, only free the data buffer without restoring the cache
       contents.  All callers changed.
       src/dispextern.h (bidi_unshelve_cache): Update prototype.
       src/xdisp.c (SAVE_IT, pos_visible_p, move_it_in_display_line_to)
       (move_it_in_display_line, move_it_to)
       (move_it_vertically_backward, move_it_by_lines): Replace the call
       to xfree to an equivalent call to bidi_unshelve_cache.
       (move_it_in_display_line_to): Fix logic of returning
       MOVE_POS_MATCH_OR_ZV in the bidi case.
      35928349
  6. 03 Aug, 2011 1 commit
  7. 02 Aug, 2011 1 commit
    • Eli Zaretskii's avatar
      Fix bug #9218 with slow cursor motion and scrolling Org Mode buffers. · 55439c61
      Eli Zaretskii authored
       src/dispextern.h (struct bidi_it): New member disp_prop_p.
       src/xdisp.c: Remove one-slot cache of display string positions.
       (compute_display_string_pos): Accept an additional argument
       DISP_PROP_P; callers changed. Scan at most 5K characters forward
       for a display string or property.  If found, set DISP_PROP_P
       non-zero.
       src/bidi.c (bidi_fetch_char): Accept an additional argument
       DISP_PROP_P, and pass it to compute_display_string_pos.  Only
       handle text covered by a display string if DISP_PROP_P is returned
       non-zero.  All callers of bidi_fetch_char changed.
      55439c61
  8. 28 Jul, 2011 1 commit
  9. 25 Jul, 2011 1 commit
  10. 23 Jul, 2011 1 commit
  11. 15 Jul, 2011 1 commit
  12. 14 Jul, 2011 5 commits
    • Paul Eggert's avatar
      * bidi.c: Integer size and overflow fixes. · 39e378da
      Paul Eggert authored
      (bidi_cache_size, bidi_cache_idx, bidi_cache_last_idx)
      (bidi_cache_start, bidi_cache_fetch_state, bidi_cache_search)
      (bidi_cache_find_level_change, bidi_cache_ensure_space)
      (bidi_cache_iterator_state, bidi_cache_find, bidi_cache_start_stack)
      (bidi_find_other_level_edge):
      Use ptrdiff_t instead of EMACS_INT where either will do.
      This works better on 32-bit hosts configured --with-wide-int.
      (bidi_cache_ensure_space): Check for size-calculation overflow.
      Use % rather than repeated addition, for better worst-case speed.
      Don't set bidi_cache_size until after xrealloc returns, because it
      might not return.
      (bidi_dump_cached_states): Use ptrdiff_t, not int, to avoid overflow.
      39e378da
    • Paul Eggert's avatar
      Fix minor problems found by static checking. · ad6042bb
      Paul Eggert authored
      * bidi.c (bidi_cache_size): Now EMACS_INT, not size_t.
      (elsz): Now a signed constant, not a size_t var.  We prefer signed
      types to unsigned, to avoid integer comparison confusion.  Without
      this change, GCC 4.6.1 with -Wunsafe-loop-optimizations complains
      "cannot optimize loop, the loop counter may overflow", a symptom
      of the confusion.
      ad6042bb
    • Eli Zaretskii's avatar
      Fix format conversion in bidi.c. · df9733bf
      Eli Zaretskii authored
       src/bidi.c (bidi_dump_cached_states): Fix format of displaying
       bidi_cache_idx.
      df9733bf
    • Eli Zaretskii's avatar
      Fix declarations of variables related to bidi cache indices. · c965adc5
      Eli Zaretskii authored
       src/bidi.c (bidi_cache_fetch_state, bidi_cache_search)
       (bidi_cache_find_level_change, bidi_cache_ensure_space)
       (bidi_cache_iterator_state, bidi_cache_find)
       (bidi_find_other_level_edge, bidi_cache_start_stack): All
       variables related to cache indices are now EMACS_INT.
      c965adc5
    • Paul Eggert's avatar
  13. 12 Jul, 2011 1 commit
  14. 09 Jul, 2011 2 commits
  15. 07 Jul, 2011 1 commit
    • Paul Eggert's avatar
      * bidi.c: Integer signedness and overflow fixes. · 5b8ffbdd
      Paul Eggert authored
      (bidi_cache_idx, bidi_cache_last_idx, bidi_cache_fetch_state)
      (bidi_cache_search, bidi_cache_find_level_change)
      (bidi_cache_iterator_state, bidi_cache_find, bidi_find_other_level_edge)
      (bidi_dump_cached_states):
      Don't arbitrarily limit cache indexes to int; use ptrdiff_t instead.
      (bidi_cache_size): Use ptrdiff_t rather than size_t, as we prefer
      signed integers.
      (elsz): Make it a (signed) constant.
      (bidi_cache_iterator_state): Check for size-calculation overflow.
      5b8ffbdd
  16. 05 Jul, 2011 1 commit
    • Eli Zaretskii's avatar
      Empty the bidi cache "stack" when it->sp is zeroed. · 57b3e30b
      Eli Zaretskii authored
      Solves crashes due to overflow of bidi cache stack.
      Make sure cache is saved and restored around all temporary iterations.
      
       src/dispnew.c (buffer_posn_from_coords): Save and restore the bidi
       cache around display iteration.
       src/window.c (Fwindow_end, window_scroll_pixel_based)
       (displayed_window_lines, Frecenter): Save and restore the bidi
       cache around display iteration.
       src/bidi.c (bidi_unshelve_cache): Ensure we have enough space before
       restoring the shelved cache.
       (bidi_cache_ensure_space): Don't assume the required size is just
       one BIDI_CACHE_CHUNK away.
       src/xdisp.c (back_to_previous_visible_line_start, reseat_1)
       (init_iterator): Empty the bidi cache "stack".
      57b3e30b
  17. 03 Jul, 2011 1 commit
    • Eli Zaretskii's avatar
      Save and restore bidi cache when saving and restoring the iterator. · ed94e6d7
      Eli Zaretskii authored
      Not tested, just compiled.
      
       src/bidi.c (bidi_shelve_cache, bidi_unshelve_cache): New functions.
       src/dispextern.h (bidi_shelve_cache, bidi_unshelve_cache): Declare
       prototypes.
       src/xdisp.c (SAVE_IT, RESTORE_IT): New macros.
       (pos_visible_p, face_before_or_after_it_pos)
       (back_to_previous_visible_line_start)
       (move_it_in_display_line_to, move_it_in_display_line)
       (move_it_to, move_it_vertically_backward, move_it_by_lines)
       (try_scrolling, redisplay_window, display_line): Use them when
       saving a temporary copy of the iterator and restoring it back.
      ed94e6d7
  18. 02 Jul, 2011 1 commit
    • Eli Zaretskii's avatar
      Start fixing cursor motion around invisible text. · 6eec7596
      Eli Zaretskii authored
      Hit a MAJOR design problem in pushing and popping bidi iterator state.
      
       src/xdisp.c (reseat_1): Call bidi_init_it to resync the bidi
       iterator with IT's position.
       (handle_stop, back_to_previous_visible_line_start, reseat_1):
       Reset the from_disp_prop_p flag.
       src/bidi.c (bidi_cache_search): Don't assume bidi_cache_last_idx is
       always valid if bidi_cache_idx is valid.
       (bidi_cache_find_level_change): xassert that bidi_cache_last_idx
       is valid if it's going to be used.
      6eec7596
  19. 01 Jul, 2011 2 commits
    • Eli Zaretskii's avatar
      Support bidi reordering of unibyte strings. Fix crash displaying "All" in... · f3014ef5
      Eli Zaretskii authored
      Support bidi reordering of unibyte strings.  Fix crash displaying "All" in mode line of an empty buffer.
      
       src/dispextern.h (struct bidi_string_data): New member `unibyte'.
       src/xdisp.c (handle_single_display_spec, next_overlay_string)
       (get_overlay_strings_1, reseat_1, reseat_to_string)
       (push_display_prop): Set up the `unibyte' member of bidi_it.string
       correctly.  Don't assume unibyte strings are not bidi-reordered.
       (compute_display_string_pos)
       (compute_display_string_end): Fix handling the case of C string.
       src/bidi.c (bidi_count_bytes, bidi_char_at_pos): Accept an
       additional argument UNIBYTE, and support unibyte strings.  All
       callers changed.
       (bidi_fetch_char): Support unibyte strings.
      f3014ef5
    • Eli Zaretskii's avatar
      Fix typos in comments. Use xassert. · 7e2ad32c
      Eli Zaretskii authored
      7e2ad32c
  20. 26 Jun, 2011 1 commit
  21. 25 Jun, 2011 2 commits
    • Eli Zaretskii's avatar
      Initial version of display/overlay strings is working. · a1344e7d
      Eli Zaretskii authored
       src/xdisp.c (set_iterator_to_next, get_visually_first_element): Use
       it->bidi_it.string.schars rather than it->string_nchars when
       testing whether we're beyond string end, because string_nchars is
       zero for strings that come from overlays and display properties.
       src/bidi.c (bidi_cache_iterator_state): Fix a bug with testing
       character positions against the cached range, when we use a
       stacked cache.
       src/dispextern.h (struct iterator_stack_entry): New member
       paragraph_embedding.
       src/xdisp.c (push_it, pop_it): Save and restore it.
      a1344e7d
    • Eli Zaretskii's avatar
      Set up the bidi iterator for iterating display strings and overlay strings. · 0c22566f
      Eli Zaretskii authored
      Not tested yet, just compiled.
      
       src/xdisp.c (handle_single_display_spec, next_overlay_string)
       (get_overlay_strings_1, push_display_prop): Set up the bidi
       iterator for displaying display or overlay strings.
       (forward_to_next_line_start): Don't use the shortcut if
       bidi-iterating.
       (back_to_previous_visible_line_start): If handle_display_prop
       pushed the iterator stack, restore the internal state of the bidi
       iterator by calling bidi_pop_it same number of times.
       (reseat_at_next_visible_line_start): If ON_NEWLINE_P is non-zero,
       and we are bidi-iterating, don't decrement the iterator position;
       instead, set the first_elt flag in the bidi iterator, to produce
       the same effect.
       (reseat_1): Remove redundant setting of string_from_display_prop_p.
       (push_display_prop): xassert that we are iterating a buffer.
       (push_it, pop_it): Save and restore the state of the
       bidi iterator.  Save and restore the bidi_p flag.
       (pop_it): Iterate out of display property for string iteration as
       well.
       (iterate_out_of_display_property): Support iteration over strings.
       (handle_single_display_spec): Set up it->bidi_it for iteration
       over a display string, and call bidi_init_it.
       src/bidi.c (bidi_cache_start_stack, bidi_push_it): Use IT_STACK_SIZE.
       src/dispextern.h (struct iterator_stack_entry): New member bidi_p.
       (struct it): Member bidi_p is now a bit field 1 bit wide.
      0c22566f
  22. 23 Jun, 2011 2 commits
  23. 18 Jun, 2011 1 commit
    • Eli Zaretskii's avatar
      Add comments for forced L2R directions of menu bar and tool bar. · acb28818
      Eli Zaretskii authored
      GCPRO Lisp string inside bidi.c.
      Force L2R direction in buffer menu buffer.
      
       src/xdisp.c (tool_bar_lines_needed, redisplay_tool_bar)
       (display_menu_bar): Force left-to-right direction.  Add a FIXME
       comment for making that be controlled by a user option.
       src/bidi.c (bidi_move_to_visually_next): GCPRO the Lisp string we
       are iterating.
       lisp/buff-menu.el (Buffer-menu-mode, list-buffers-noselect): Force
       left-to-right paragraph direction.
      acb28818
  24. 16 Jun, 2011 1 commit
    • Eli Zaretskii's avatar
      Fix display of R2L strings in mode line. · 578b494e
      Eli Zaretskii authored
      Composed characters still don't work.
      
       src/xdisp.c (init_iterator): Don't initialize it->bidi_p for strings
       here.
       (reseat_to_string): Initialize it->bidi_p for strings here.
       (next_element_from_string, next_element_from_c_string)
       (next_element_from_buffer): Add xassert's for correspondence
       between IT's object being iterated and it->bidi_it.string
       structure.
       src/bidi.c (bidi_level_of_next_char): Fix the logic for looking up
       the sentinel state in the cache.
      578b494e
  25. 13 Jun, 2011 1 commit
    • Eli Zaretskii's avatar
      Fix string handling to avoid data relocation gotcha. · 9f257352
      Eli Zaretskii authored
      Bugs in mode-line display still there.
      
       src/xdisp.c (compute_display_string_pos)
       (compute_display_string_end, reseat_to_string): Don't assume
       it->bidi_it.string.s always points to string.lstring's data.
       src/bidi.c (bidi_fetch_char, bidi_paragraph_init)
       (bidi_resolve_explicit_1, bidi_resolve_explicit)
       (bidi_resolve_weak, bidi_level_of_next_char): Don't assume
       string.s always points to string.lstring's data.
      9f257352
  26. 09 Jun, 2011 2 commits
    • Eli Zaretskii's avatar
      Adapt compute_display_string_pos to iteration over strings. · 6db161be
      Eli Zaretskii authored
      Just compiled, not yet tested.
      
       src/xdisp.c (compute_display_string_pos): First arg is now struct
       `text_pos *'; all callers changed.  Support display properties on
       Lisp strings.
       (compute_display_string_end): Support display properties on Lisp
       strings.
       (init_iterator, reseat_1, reseat_to_string): Initialize the
       string.bufpos member to 0 (zero, for compatibility with IT_CHARPOS
       when iterating on a string not from display properties).
       src/bidi.c (bidi_fetch_char): Support strings with display
       properties.
       src/dispextern.h (struct bidi_string_data): New member bufpos.
       (compute_display_string_pos): Update prototype.
      6db161be
    • Eli Zaretskii's avatar
      Add code to initialize bidi iterator for displaying strings. · bb269206
      Eli Zaretskii authored
      For now, ifdef'ed away.  Some more testing.
      
       src/bidi.c (bidi_level_of_next_char): Allow the sentinel "position"
       to pass the test for valid cached positions.
       src/xdisp.c (init_iterator): Call bidi_init_it only of a valid
       buffer position was specified.  Initialize paragraph_embedding to L2R.
       (reseat_to_string): Initialize the bidi iterator (for now ifdef'ed out).
       (display_string): If we need to ignore text properties of
       LISP_STRING, set IT->stop_charpos to IT->end_charpos.  (The
       original value of -1 will not work with bidi.)
       src/dispextern.h (struct bidi_string_data): New member lstring.
      bb269206
  27. 08 Jun, 2011 1 commit
    • Eli Zaretskii's avatar
      Started work on string reordering. Just compiled, not yet tested. · 87e67904
      Eli Zaretskii authored
       src/bidi.c (bidi_paragraph_info): Delete unused struct.
       (bidi_cache_idx, bidi_cache_last_idx): Declare EMACS_INT.
       (bidi_cache_start): New variable.
       (bidi_cache_reset): Reset bidi_cache_idx to bidi_cache_start, not
       to zero.
       (bidi_cache_fetch_state, bidi_cache_search)
       (bidi_cache_find_level_change, bidi_cache_iterator_state)
       (bidi_cache_find, bidi_peek_at_next_level)
       (bidi_level_of_next_char, bidi_find_other_level_edge)
       (bidi_move_to_visually_next): Compare cache index with
       bidi_cache_start rather than with zero.
       (bidi_fetch_char): Accept new argument STRING; all callers
       changed.  Support iteration over a string.
       (bidi_paragraph_init, bidi_resolve_explicit_1)
       (bidi_resolve_explicit, bidi_resolve_weak)
       (bidi_level_of_next_char, bidi_move_to_visually_next): Support
       iteration over a string.
       (bidi_set_sor_type, bidi_resolve_explicit_1)
       (bidi_resolve_explicit, bidi_type_of_next_char): ignore_bn_limit
       can now be zero (for strings); special values 0 and -1 were
       changed to -1 and -2, respectively.
       (bidi_char_at_pos): New function.
       (bidi_paragraph_init, bidi_resolve_explicit, bidi_resolve_weak):
       Call it instead of FETCH_MULTIBYTE_CHAR.
       (bidi_move_to_visually_next): Abort if charpos or bytepos were not
       initialized to valid values.
       (bidi_init_it): Don't initialize charpos and bytepos with invalid
       values.
       src/xdisp.c (compute_display_string_pos)
       (compute_display_string_end): Accept additional argument STRING.
       (init_iterator, reseat_1): Initialize bidi_it->string.s to NULL.
       (reseat_to_string): Initialize bidi_it->string.s and
       bidi_it->string.schars.
       src/dispextern.h (struct bidi_string_data): New structure.
       (struct bidi_it): New member `string'.  Make flag members be 1-bit
       fields, and put them last in the struct.
       (compute_display_string_pos, compute_display_string_end): Update
       prototypes.
      87e67904
  28. 04 Jun, 2011 1 commit