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