]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix bidi reordering of bracket characters in isolates.
authorEli Zaretskii <eliz@gnu.org>
Sat, 18 Oct 2014 12:47:57 +0000 (15:47 +0300)
committerEli Zaretskii <eliz@gnu.org>
Sat, 18 Oct 2014 12:47:57 +0000 (15:47 +0300)
 src/bidi.c (bidi_cache_find): Rename the argument NEUTRALS_OK to
 RESOLVED_ONLY; when non-zero, return from the cache only fully
 resolved states.  All callers changed.
 (CANONICAL_EQU): New macro.
 (PUSH_BPA_STACK): Use it to push onto the BPA stack the canonical
 equivalent of the paired closing bracket character.
 (bidi_find_bracket_pairs): Set the bracket_pairing_pos member to
 the default non-negative value, to be checked later in
 bidi_resolve_brackets.  Use CANONICAL_EQU to test candidate
 characters against those pushed onto the BPA stack.
 (bidi_record_type_for_neutral): New function.
 (bidi_resolve_brackets): Record next_for_neutral and
 prev_for_neutral when embedding level gets pushed.  Force
 resolution of bracket pairs when entering a level run that was not
 yet BPA-resolved.
 (bidi_resolve_neutral): Add assertions before calling
 bidi_resolve_neutral_1.
 (bidi_level_of_next_char): Remove the code that attempted to
 resolve unresolved neutrals; that is now done by
 bidi_resolve_neutral.

1  2 
src/ChangeLog

diff --cc src/ChangeLog
index 026ae46299de54426285e186685f10e64959d37d,c1b7c6cc8c3680669001dd0687e3aa01a5308e77..66306bd5fb6c95555e0d7bb7e2847cabc53bd437
 +2014-10-18  Eli Zaretskii  <eliz@gnu.org>
 +
++      Fix reordering of bracket characters in isolates.
++      * bidi.c (bidi_cache_find): Rename the argument NEUTRALS_OK to
++      RESOLVED_ONLY; when non-zero, return from the cache only fully
++      resolved states.  All callers changed.
++      (CANONICAL_EQU): New macro.
++      (PUSH_BPA_STACK): Use it to push onto the BPA stack the canonical
++      equivalent of the paired closing bracket character.
++      (bidi_find_bracket_pairs): Set the bracket_pairing_pos member to
++      the default non-negative value, to be checked later in
++      bidi_resolve_brackets.  Use CANONICAL_EQU to test candidate
++      characters against those pushed onto the BPA stack.
++      (bidi_record_type_for_neutral): New function.
++      (bidi_resolve_brackets): Record next_for_neutral and
++      prev_for_neutral when embedding level gets pushed.  Force
++      resolution of bracket pairs when entering a level run that was not
++      yet BPA-resolved.
++      (bidi_resolve_neutral): Add assertions before calling
++      bidi_resolve_neutral_1.
++      (bidi_level_of_next_char): Remove the code that attempted to
++      resolve unresolved neutrals; that is now done by
++      bidi_resolve_neutral.
++
 +      * w32select.c (owner_callback): Mark with ALIGN_STACK attribute.
 +
 +2014-10-17  Eli Zaretskii  <eliz@gnu.org>
 +
 +      * xterm.c (x_draw_hollow_cursor): Fix display of hollow cursor on
 +      1-pixel R2L characters.
 +      Reported by Dmitry Antipov <dmantipov@yandex.ru>, see
 +      http://lists.gnu.org/archive/html/emacs-devel/2014-10/msg00518.html.
 +
 +2014-10-16  Eli Zaretskii  <eliz@gnu.org>
 +
 +      * bidi.c (bidi_find_bracket_pairs): Avoid a loop that does nothing
 +      useful.
 +
 +2014-10-15  Paul Eggert  <eggert@cs.ucla.edu>
 +
 +      * bidi.c (bidi_find_bracket_pairs): Initialize local var.
 +      This pacifies GCC 4.9.1 with --enable-gcc-warnings.
 +      It's not clear to me whether the initialization is needed,
 +      but it can't hurt so I played it safe.
 +
 +2014-10-15  Stefan Monnier  <monnier@iro.umontreal.ca>
 +
 +      * lisp.mk (lisp): Add emacs-lisp/eldoc.elc.
 +
 +2014-10-15  Eli Zaretskii  <eliz@gnu.org>
 +
 +      Update the bidirectional reordering engine for Unicode 6.3 and 7.0.
 +      * bidi.c (bidi_ignore_explicit_marks_for_paragraph_level):
 +      Remove variable.
 +      (bidi_get_type): Return the isolate initiators and terminator types.
 +      (bidi_isolate_fmt_char, bidi_paired_bracket_type)
 +      (bidi_fetch_char_skip_isolates, find_first_strong_char)
 +      (bidi_find_bracket_pairs, bidi_resolve_brackets): New functions.
 +      (bidi_set_sos_type): Rename from bidi_set_sor_type and updated
 +      for the new features.
 +      (bidi_push_embedding_level, bidi_pop_embedding_level): Update to
 +      push and pop correctly for isolates.
 +      (bidi_remember_char): Modify to accept an additional argument
 +      and record the bidi type according to its value.
 +      (bidi_cache_iterator_state): Accept an additional argument to only
 +      update an existing state.  Handle the new members of struct bidi_it.
 +      (bidi_cache_find): Arguments changed: no longer accepts a level,
 +      instead accepts a flag telling it whether it is okay to return
 +      unresolved neutrals.
 +      (bidi_initialize): Initiate and staticpro the bracket-type uniprop
 +      table.  Initialize new isolate-related members.
 +      (bidi_paragraph_init): Some code factored out into
 +      find_first_strong_char.
 +      (bidi_resolve_explicit_1): Function deleted, its code incorporated
 +      into bidi_resolve_explicit.
 +      (bidi_resolve_explicit): Support the isolate initiators and
 +      terminator.  Fix handling of embeddings and overrides according to
 +      new UBA requirements.  Record information about previously seen
 +      characters here (moved from bidi_level_of_next_char).
 +      (bidi_resolve_weak): Adapt to changes in struct members.
 +      (FLAG_EMBEDDING_INSIDE, FLAG_OPPOSITE_INSIDE, MAX_BPA_STACK)
 +      (STORE_BRACKET_CHARPOS, PUSH_BPA_STACK): New macros.
 +      (bidi_resolve_neutral): Call bidi_resolve_brackets to handle the
 +      paired bracket resolution.  Handle isolate initiators and
 +      terminator.
 +      (bidi_type_of_next_char): Remove unneeded code for BN limit.
 +      (bidi_level_of_next_char): Move the code that records information
 +      about previous characters to bidi_resolve_explicit.  Fix logic of
 +      resolving neutrals and make sure their cache entries are updated.
 +      Remove now unneeded special handling of PDF level.
 +
 +      * dispextern.h (struct glyph): Enlarge the width of resolved_level.
 +      (BIDI_MAXDEPTH): New macro, renamed from BIDI_MAXLEVEL and
 +      enlarged per Unicode 6.3.
 +      (enum bidi_bracket_type_t): New data type.
 +      (struct bidi_saved_info): Leave only 2 type members out of 4.
 +      Remove bytepos.
 +      (struct bidi_stack): Add members necessary to support isolating
 +      sequences.
 +      (struct bidi_it): Add new members necessary to support isolating
 +      sequences and bracket pair resolution.
 +
 +      * xdisp.c (Fbidi_resolved_levels): New function.
 +      (syms_of_xdisp): Defsubr it.
 +      (append_glyph, append_composite_glyph, produce_image_glyph)
 +      (append_stretch_glyph, append_glyphless_glyph): Convert aborts to
 +      assertions.
 +      (syms_of_xdisp) <inhibit-bidi-mirroring>: New variable.
 +
 +      * term.c (append_glyph, append_composite_glyph)
 +      (append_glyphless_glyph): Convert aborts to assertions.
 +
 +      * .gdbinit (pgx): Display the character codepoint, resolved level,
 +      and bidi type also for glyphless glyphs.
 +
 +2014-10-15  Dmitry Antipov  <dmantipov@yandex.ru>
 +
 +      Avoid unwanted point motion in Fline_beginning_position.
 +      * lisp.h (scan_newline_from_point): Add prototype.
 +      * search.c (scan_newline_from_point): New function, refactored from...
 +      * cmds.c (Fforward_line): ...adjusted user.
 +      * editfns.c (Fline_beginning_position): Use scan_newline_from_point
 +      and simplify the former since the latter doesn't move point.
 +
  2014-10-14  Dmitry Antipov  <dmantipov@yandex.ru>
  
        Cleanup terminal handling code.