Mercurial > hg > xemacs-beta
comparison src/extents.c @ 819:6504113e7c2d
[xemacs-hg @ 2002-04-25 18:03:23 by andyp]
sync up windows branch from 21.4
author | andyp |
---|---|
date | Thu, 25 Apr 2002 18:04:24 +0000 |
parents | 2b676dc88c66 |
children | 6728e641994e |
comparison
equal
deleted
inserted
replaced
818:accc481aef34 | 819:6504113e7c2d |
---|---|
2752 return 0; | 2752 return 0; |
2753 } | 2753 } |
2754 | 2754 |
2755 face_index | 2755 face_index |
2756 extent_fragment_update (struct window *w, struct extent_fragment *ef, | 2756 extent_fragment_update (struct window *w, struct extent_fragment *ef, |
2757 Bytebpos pos) | 2757 Bytebpos pos, Lisp_Object last_glyph) |
2758 { | 2758 { |
2759 int i; | 2759 int i; |
2760 int seen_glyph = NILP (last_glyph) ? 1 : 0; | |
2760 Extent_List *sel = | 2761 Extent_List *sel = |
2761 buffer_or_string_stack_of_extents_force (ef->object)->extents; | 2762 buffer_or_string_stack_of_extents_force (ef->object)->extents; |
2762 EXTENT lhe = 0; | 2763 EXTENT lhe = 0; |
2763 struct extent dummy_lhe_extent; | 2764 struct extent dummy_lhe_extent; |
2764 Membpos mempos = buffer_or_string_bytebpos_to_membpos (ef->object, pos); | 2765 Membpos mempos = buffer_or_string_bytebpos_to_membpos (ef->object, pos); |
2795 { | 2796 { |
2796 EXTENT e = extent_list_at (sel, i, 0); | 2797 EXTENT e = extent_list_at (sel, i, 0); |
2797 if (extent_start (e) == mempos && !NILP (extent_begin_glyph (e))) | 2798 if (extent_start (e) == mempos && !NILP (extent_begin_glyph (e))) |
2798 { | 2799 { |
2799 Lisp_Object glyph = extent_begin_glyph (e); | 2800 Lisp_Object glyph = extent_begin_glyph (e); |
2800 struct glyph_block gb; | 2801 if (seen_glyph) { |
2801 | 2802 struct glyph_block gb; |
2802 gb.glyph = glyph; | 2803 |
2803 gb.extent = wrap_extent (e); | 2804 gb.glyph = glyph; |
2804 Dynarr_add (ef->begin_glyphs, gb); | 2805 gb.extent = wrap_extent (e); |
2806 Dynarr_add (ef->begin_glyphs, gb); | |
2807 } | |
2808 else if (EQ (glyph, last_glyph)) | |
2809 seen_glyph = 1; | |
2805 } | 2810 } |
2806 } | 2811 } |
2807 | 2812 |
2808 /* Determine the end glyphs at POS. */ | 2813 /* Determine the end glyphs at POS. */ |
2809 for (i = 0; i < extent_list_num_els (sel); i++) | 2814 for (i = 0; i < extent_list_num_els (sel); i++) |
2810 { | 2815 { |
2811 EXTENT e = extent_list_at (sel, i, 1); | 2816 EXTENT e = extent_list_at (sel, i, 1); |
2812 if (extent_end (e) == mempos && !NILP (extent_end_glyph (e))) | 2817 if (extent_end (e) == mempos && !NILP (extent_end_glyph (e))) |
2813 { | 2818 { |
2814 Lisp_Object glyph = extent_end_glyph (e); | 2819 Lisp_Object glyph = extent_end_glyph (e); |
2815 struct glyph_block gb; | 2820 if (seen_glyph) { |
2816 | 2821 struct glyph_block gb; |
2817 gb.glyph = glyph; | 2822 |
2818 gb.extent = wrap_extent (e); | 2823 gb.glyph = glyph; |
2819 Dynarr_add (ef->end_glyphs, gb); | 2824 gb.extent = wrap_extent (e); |
2825 Dynarr_add (ef->end_glyphs, gb); | |
2826 } | |
2827 else if (EQ (glyph, last_glyph)) | |
2828 seen_glyph = 1; | |
2820 } | 2829 } |
2821 } | 2830 } |
2822 | 2831 |
2823 /* We tried determining all the charsets used in the run here, | 2832 /* We tried determining all the charsets used in the run here, |
2824 but that fails even if we only do the current line -- display | 2833 but that fails even if we only do the current line -- display |
2949 if (!NILP (extent_begin_glyph (anc))) *bp++ = '*'; | 2958 if (!NILP (extent_begin_glyph (anc))) *bp++ = '*'; |
2950 *bp++ = (extent_start_open_p (anc) ? '(': '['); | 2959 *bp++ = (extent_start_open_p (anc) ? '(': '['); |
2951 if (extent_detached_p (ext)) | 2960 if (extent_detached_p (ext)) |
2952 strcpy (bp, "detached"); | 2961 strcpy (bp, "detached"); |
2953 else | 2962 else |
2954 sprintf (bp, "%ld, %ld", | 2963 sprintf (bp, "%d, %d", |
2955 (long) XINT (Fextent_start_position (obj)), | 2964 XINT (Fextent_start_position (obj)), |
2956 (long) XINT (Fextent_end_position (obj))); | 2965 XINT (Fextent_end_position (obj))); |
2957 bp += strlen (bp); | 2966 bp += strlen (bp); |
2958 *bp++ = (extent_end_open_p (anc) ? ')': ']'); | 2967 *bp++ = (extent_end_open_p (anc) ? ')': ']'); |
2959 if (!NILP (extent_end_glyph (anc))) *bp++ = '*'; | 2968 if (!NILP (extent_end_glyph (anc))) *bp++ = '*'; |
2960 *bp++ = ' '; | 2969 *bp++ = ' '; |
2961 | 2970 |