From: Eli Zaretskii Date: Sat, 18 Oct 2014 12:47:57 +0000 (+0300) Subject: Fix bidi reordering of bracket characters in isolates. X-Git-Tag: emacs-25.0.90~2635^2~679^2~23 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=6b247d287327777dfd29e20eac177c2005e99b45;p=emacs.git Fix bidi reordering of bracket characters in isolates. 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. --- 6b247d287327777dfd29e20eac177c2005e99b45 diff --cc src/ChangeLog index 026ae46299d,c1b7c6cc8c3..66306bd5fb6 --- a/src/ChangeLog +++ b/src/ChangeLog @@@ -1,105 -1,3 +1,127 @@@ +2014-10-18 Eli Zaretskii + ++ 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 + + * xterm.c (x_draw_hollow_cursor): Fix display of hollow cursor on + 1-pixel R2L characters. + Reported by Dmitry Antipov , see + http://lists.gnu.org/archive/html/emacs-devel/2014-10/msg00518.html. + +2014-10-16 Eli Zaretskii + + * bidi.c (bidi_find_bracket_pairs): Avoid a loop that does nothing + useful. + +2014-10-15 Paul Eggert + + * 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 + + * lisp.mk (lisp): Add emacs-lisp/eldoc.elc. + +2014-10-15 Eli Zaretskii + + 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) : 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 + + 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 Cleanup terminal handling code.