annotate src/marker.c @ 109126:aec1143e8d85

Convert (most) functions in src to standard C. * src/alloc.c: Convert function definitions to standard C. * src/atimer.c: * src/bidi.c: * src/bytecode.c: * src/callint.c: * src/callproc.c: * src/casefiddle.c: * src/casetab.c: * src/category.c: * src/ccl.c: * src/character.c: * src/charset.c: * src/chartab.c: * src/cmds.c: * src/coding.c: * src/composite.c: * src/data.c: * src/dbusbind.c: * src/dired.c: * src/dispnew.c: * src/doc.c: * src/doprnt.c: * src/ecrt0.c: * src/editfns.c: * src/fileio.c: * src/filelock.c: * src/filemode.c: * src/fns.c: * src/font.c: * src/fontset.c: * src/frame.c: * src/fringe.c: * src/ftfont.c: * src/ftxfont.c: * src/gtkutil.c: * src/indent.c: * src/insdel.c: * src/intervals.c: * src/keymap.c: * src/lread.c: * src/macros.c: * src/marker.c: * src/md5.c: * src/menu.c: * src/minibuf.c: * src/prefix-args.c: * src/print.c: * src/ralloc.c: * src/regex.c: * src/region-cache.c: * src/scroll.c: * src/search.c: * src/sound.c: * src/strftime.c: * src/syntax.c: * src/sysdep.c: * src/termcap.c: * src/terminal.c: * src/terminfo.c: * src/textprop.c: * src/tparam.c: * src/undo.c: * src/unexelf.c: * src/window.c: * src/xfaces.c: * src/xfns.c: * src/xfont.c: * src/xftfont.c: * src/xgselect.c: * src/xmenu.c: * src/xrdb.c: * src/xselect.c: * src/xsettings.c: * src/xsmfns.c: * src/xterm.c: Likewise.
author Dan Nicolaescu <dann@ics.uci.edu>
date Sun, 04 Jul 2010 00:50:25 -0700
parents 2bc9a0c04c87
children 8cfee7d2955f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
1 /* Markers: examining, setting and deleting.
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 91327
diff changeset
2 Copyright (C) 1985, 1997, 1998, 2001, 2002, 2003, 2004, 2005, 2006,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 105669
diff changeset
3 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5 This file is part of GNU Emacs.
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 91327
diff changeset
7 GNU Emacs is free software: you can redistribute it and/or modify
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8 it under the terms of the GNU General Public License as published by
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 91327
diff changeset
9 the Free Software Foundation, either version 3 of the License, or
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 91327
diff changeset
10 (at your option) any later version.
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 GNU General Public License for more details.
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 91327
diff changeset
18 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
4696
1fc792473491 Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents: 484
diff changeset
21 #include <config.h>
105669
68dd71358159 * alloc.c: Do not define struct catchtag.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100951
diff changeset
22 #include <setjmp.h>
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23 #include "lisp.h"
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24 #include "buffer.h"
88351
aac41b50c875 Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents: 41235
diff changeset
25 #include "character.h"
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
27 /* Record one cached position found recently by
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
28 buf_charpos_to_bytepos or buf_bytepos_to_charpos. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
29
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
30 static int cached_charpos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
31 static int cached_bytepos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
32 static struct buffer *cached_buffer;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
33 static int cached_modiff;
20678
4c69e3503cfc (clear_charpos_cache): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20563
diff changeset
34
109100
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
35 static void byte_char_debug_check (struct buffer *, int, int);
31830
cf1b4094811a Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
36
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
37 /* Nonzero means enable debugging checks on byte/char correspondences. */
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
38
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
39 static int byte_debug_flag;
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
40
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21497
diff changeset
41 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
42 clear_charpos_cache (struct buffer *b)
20678
4c69e3503cfc (clear_charpos_cache): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20563
diff changeset
43 {
4c69e3503cfc (clear_charpos_cache): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20563
diff changeset
44 if (cached_buffer == b)
4c69e3503cfc (clear_charpos_cache): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20563
diff changeset
45 cached_buffer = 0;
4c69e3503cfc (clear_charpos_cache): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20563
diff changeset
46 }
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
47
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
48 /* Converting between character positions and byte positions. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
49
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
50 /* There are several places in the buffer where we know
44651
392bc50108e8 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 44560
diff changeset
51 the correspondence: BEG, BEGV, PT, GPT, ZV and Z,
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
52 and everywhere there is a marker. So we find the one of these places
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
53 that is closest to the specified position, and scan from there. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
54
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
55 /* charpos_to_bytepos returns the byte position corresponding to CHARPOS. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
56
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
57 /* This macro is a subroutine of charpos_to_bytepos.
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
58 Note that it is desirable that BYTEPOS is not evaluated
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
59 except when we really want its value. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
60
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
61 #define CONSIDER(CHARPOS, BYTEPOS) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
62 { \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
63 int this_charpos = (CHARPOS); \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
64 int changed = 0; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
65 \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
66 if (this_charpos == charpos) \
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
67 { \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
68 int value = (BYTEPOS); \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
69 if (byte_debug_flag) \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
70 byte_char_debug_check (b, charpos, value); \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
71 return value; \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
72 } \
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
73 else if (this_charpos > charpos) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
74 { \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
75 if (this_charpos < best_above) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
76 { \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
77 best_above = this_charpos; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
78 best_above_byte = (BYTEPOS); \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
79 changed = 1; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
80 } \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
81 } \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
82 else if (this_charpos > best_below) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
83 { \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
84 best_below = this_charpos; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
85 best_below_byte = (BYTEPOS); \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
86 changed = 1; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
87 } \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
88 \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
89 if (changed) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
90 { \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
91 if (best_above - best_below == best_above_byte - best_below_byte) \
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
92 { \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
93 int value = best_below_byte + (charpos - best_below); \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
94 if (byte_debug_flag) \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
95 byte_char_debug_check (b, charpos, value); \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
96 return value; \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
97 } \
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
98 } \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
99 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
100
31830
cf1b4094811a Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents: 28417
diff changeset
101 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
102 byte_char_debug_check (struct buffer *b, int charpos, int bytepos)
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
103 {
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
104 int nchars = 0;
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
105
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
106 if (bytepos > BUF_GPT_BYTE (b))
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
107 {
21219
29d2cf14040a (byte_char_debug_check): Call multibyte_chars_in_text
Kenichi Handa <handa@m17n.org>
parents: 20872
diff changeset
108 nchars = multibyte_chars_in_text (BUF_BEG_ADDR (b),
29d2cf14040a (byte_char_debug_check): Call multibyte_chars_in_text
Kenichi Handa <handa@m17n.org>
parents: 20872
diff changeset
109 BUF_GPT_BYTE (b) - BUF_BEG_BYTE (b));
29d2cf14040a (byte_char_debug_check): Call multibyte_chars_in_text
Kenichi Handa <handa@m17n.org>
parents: 20872
diff changeset
110 nchars += multibyte_chars_in_text (BUF_GAP_END_ADDR (b),
29d2cf14040a (byte_char_debug_check): Call multibyte_chars_in_text
Kenichi Handa <handa@m17n.org>
parents: 20872
diff changeset
111 bytepos - BUF_GPT_BYTE (b));
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
112 }
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
113 else
21219
29d2cf14040a (byte_char_debug_check): Call multibyte_chars_in_text
Kenichi Handa <handa@m17n.org>
parents: 20872
diff changeset
114 nchars = multibyte_chars_in_text (BUF_BEG_ADDR (b),
29d2cf14040a (byte_char_debug_check): Call multibyte_chars_in_text
Kenichi Handa <handa@m17n.org>
parents: 20872
diff changeset
115 bytepos - BUF_BEG_BYTE (b));
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
116
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
117 if (charpos - 1 != nchars)
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
118 abort ();
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
119 }
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
120
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
121 int
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
122 charpos_to_bytepos (int charpos)
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
123 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
124 return buf_charpos_to_bytepos (current_buffer, charpos);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
125 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
126
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
127 int
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
128 buf_charpos_to_bytepos (struct buffer *b, int charpos)
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
129 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
130 struct Lisp_Marker *tail;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
131 int best_above, best_above_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
132 int best_below, best_below_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
133
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
134 if (charpos < BUF_BEG (b) || charpos > BUF_Z (b))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
135 abort ();
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
136
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
137 best_above = BUF_Z (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
138 best_above_byte = BUF_Z_BYTE (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
139
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
140 /* If this buffer has as many characters as bytes,
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
141 each character must be one byte.
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
142 This takes care of the case where enable-multibyte-characters is nil. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
143 if (best_above == best_above_byte)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
144 return charpos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
145
44328
ed296e71aa64 (buf_charpos_to_bytepos, buf_bytepos_to_charpos): Use BEG and BEG_BYTE.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41235
diff changeset
146 best_below = BEG;
ed296e71aa64 (buf_charpos_to_bytepos, buf_bytepos_to_charpos): Use BEG and BEG_BYTE.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41235
diff changeset
147 best_below_byte = BEG_BYTE;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
148
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
149 /* We find in best_above and best_above_byte
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
150 the closest known point above CHARPOS,
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
151 and in best_below and best_below_byte
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
152 the closest known point below CHARPOS,
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
153
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
154 If at any point we can tell that the space between those
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
155 two best approximations is all single-byte,
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
156 we interpolate the result immediately. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
157
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
158 CONSIDER (BUF_PT (b), BUF_PT_BYTE (b));
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
159 CONSIDER (BUF_GPT (b), BUF_GPT_BYTE (b));
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
160 CONSIDER (BUF_BEGV (b), BUF_BEGV_BYTE (b));
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
161 CONSIDER (BUF_ZV (b), BUF_ZV_BYTE (b));
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
162
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
163 if (b == cached_buffer && BUF_MODIFF (b) == cached_modiff)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
164 CONSIDER (cached_charpos, cached_bytepos);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
165
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
166 for (tail = BUF_MARKERS (b); tail; tail = tail->next)
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
167 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
168 CONSIDER (tail->charpos, tail->bytepos);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
169
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
170 /* If we are down to a range of 50 chars,
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
171 don't bother checking any other markers;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
172 scan the intervening chars directly now. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
173 if (best_above - best_below < 50)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
174 break;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
175 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
176
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
177 /* We get here if we did not exactly hit one of the known places.
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
178 We have one known above and one known below.
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
179 Scan, counting characters, from whichever one is closer. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
180
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
181 if (charpos - best_below < best_above - charpos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
182 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
183 int record = charpos - best_below > 5000;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
184
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
185 while (best_below != charpos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
186 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
187 best_below++;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
188 BUF_INC_POS (b, best_below_byte);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
189 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
190
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
191 /* If this position is quite far from the nearest known position,
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
192 cache the correspondence by creating a marker here.
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
193 It will last until the next GC. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
194 if (record)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
195 {
21497
837148a1541f (buf_charpos_to_bytepos, buf_bytepos_to_charpos):
Karl Heuer <kwzh@gnu.org>
parents: 21458
diff changeset
196 Lisp_Object marker, buffer;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
197 marker = Fmake_marker ();
21497
837148a1541f (buf_charpos_to_bytepos, buf_bytepos_to_charpos):
Karl Heuer <kwzh@gnu.org>
parents: 21458
diff changeset
198 XSETBUFFER (buffer, b);
837148a1541f (buf_charpos_to_bytepos, buf_bytepos_to_charpos):
Karl Heuer <kwzh@gnu.org>
parents: 21458
diff changeset
199 set_marker_both (marker, buffer, best_below, best_below_byte);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
200 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
201
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
202 if (byte_debug_flag)
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
203 byte_char_debug_check (b, charpos, best_below_byte);
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
204
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
205 cached_buffer = b;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
206 cached_modiff = BUF_MODIFF (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
207 cached_charpos = best_below;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
208 cached_bytepos = best_below_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
209
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
210 return best_below_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
211 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
212 else
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
213 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
214 int record = best_above - charpos > 5000;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
215
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
216 while (best_above != charpos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
217 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
218 best_above--;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
219 BUF_DEC_POS (b, best_above_byte);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
220 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
221
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
222 /* If this position is quite far from the nearest known position,
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
223 cache the correspondence by creating a marker here.
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
224 It will last until the next GC. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
225 if (record)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
226 {
21497
837148a1541f (buf_charpos_to_bytepos, buf_bytepos_to_charpos):
Karl Heuer <kwzh@gnu.org>
parents: 21458
diff changeset
227 Lisp_Object marker, buffer;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
228 marker = Fmake_marker ();
21497
837148a1541f (buf_charpos_to_bytepos, buf_bytepos_to_charpos):
Karl Heuer <kwzh@gnu.org>
parents: 21458
diff changeset
229 XSETBUFFER (buffer, b);
837148a1541f (buf_charpos_to_bytepos, buf_bytepos_to_charpos):
Karl Heuer <kwzh@gnu.org>
parents: 21458
diff changeset
230 set_marker_both (marker, buffer, best_above, best_above_byte);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
231 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
232
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
233 if (byte_debug_flag)
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
234 byte_char_debug_check (b, charpos, best_above_byte);
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
235
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
236 cached_buffer = b;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
237 cached_modiff = BUF_MODIFF (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
238 cached_charpos = best_above;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
239 cached_bytepos = best_above_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
240
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
241 return best_above_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
242 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
243 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
244
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
245 #undef CONSIDER
50472
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
246
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
247 /* Used for debugging: recompute the bytepos corresponding to CHARPOS
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
248 in the simplest, most reliable way. */
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
249
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
250 int
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
251 verify_bytepos (int charpos)
50472
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
252 {
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
253 int below = 1;
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
254 int below_byte = 1;
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
255
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
256 while (below != charpos)
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
257 {
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
258 below++;
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
259 BUF_INC_POS (current_buffer, below_byte);
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
260 }
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
261
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
262 return below_byte;
674bfa5d582d (verify_bytepos): New function.
Richard M. Stallman <rms@gnu.org>
parents: 49600
diff changeset
263 }
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
264
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
265 /* bytepos_to_charpos returns the char position corresponding to BYTEPOS. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
266
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
267 /* This macro is a subroutine of bytepos_to_charpos.
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
268 It is used when BYTEPOS is actually the byte position. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
269
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
270 #define CONSIDER(BYTEPOS, CHARPOS) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
271 { \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
272 int this_bytepos = (BYTEPOS); \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
273 int changed = 0; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
274 \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
275 if (this_bytepos == bytepos) \
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
276 { \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
277 int value = (CHARPOS); \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
278 if (byte_debug_flag) \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
279 byte_char_debug_check (b, value, bytepos); \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
280 return value; \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
281 } \
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
282 else if (this_bytepos > bytepos) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
283 { \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
284 if (this_bytepos < best_above_byte) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
285 { \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
286 best_above = (CHARPOS); \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
287 best_above_byte = this_bytepos; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
288 changed = 1; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
289 } \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
290 } \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
291 else if (this_bytepos > best_below_byte) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
292 { \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
293 best_below = (CHARPOS); \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
294 best_below_byte = this_bytepos; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
295 changed = 1; \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
296 } \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
297 \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
298 if (changed) \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
299 { \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
300 if (best_above - best_below == best_above_byte - best_below_byte) \
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
301 { \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
302 int value = best_below + (bytepos - best_below_byte); \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
303 if (byte_debug_flag) \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
304 byte_char_debug_check (b, value, bytepos); \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
305 return value; \
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
306 } \
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
307 } \
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
308 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
309
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
310 int
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
311 bytepos_to_charpos (int bytepos)
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
312 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
313 return buf_bytepos_to_charpos (current_buffer, bytepos);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
314 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
315
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
316 int
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
317 buf_bytepos_to_charpos (struct buffer *b, int bytepos)
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
318 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
319 struct Lisp_Marker *tail;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
320 int best_above, best_above_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
321 int best_below, best_below_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
322
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
323 if (bytepos < BUF_BEG_BYTE (b) || bytepos > BUF_Z_BYTE (b))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
324 abort ();
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
325
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
326 best_above = BUF_Z (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
327 best_above_byte = BUF_Z_BYTE (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
328
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
329 /* If this buffer has as many characters as bytes,
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
330 each character must be one byte.
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
331 This takes care of the case where enable-multibyte-characters is nil. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
332 if (best_above == best_above_byte)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
333 return bytepos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
334
44328
ed296e71aa64 (buf_charpos_to_bytepos, buf_bytepos_to_charpos): Use BEG and BEG_BYTE.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41235
diff changeset
335 best_below = BEG;
ed296e71aa64 (buf_charpos_to_bytepos, buf_bytepos_to_charpos): Use BEG and BEG_BYTE.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41235
diff changeset
336 best_below_byte = BEG_BYTE;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
337
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
338 CONSIDER (BUF_PT_BYTE (b), BUF_PT (b));
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
339 CONSIDER (BUF_GPT_BYTE (b), BUF_GPT (b));
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
340 CONSIDER (BUF_BEGV_BYTE (b), BUF_BEGV (b));
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
341 CONSIDER (BUF_ZV_BYTE (b), BUF_ZV (b));
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
342
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
343 if (b == cached_buffer && BUF_MODIFF (b) == cached_modiff)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
344 CONSIDER (cached_bytepos, cached_charpos);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
345
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
346 for (tail = BUF_MARKERS (b); tail; tail = tail->next)
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
347 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
348 CONSIDER (tail->bytepos, tail->charpos);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
349
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
350 /* If we are down to a range of 50 chars,
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
351 don't bother checking any other markers;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
352 scan the intervening chars directly now. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
353 if (best_above - best_below < 50)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
354 break;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
355 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
356
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
357 /* We get here if we did not exactly hit one of the known places.
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
358 We have one known above and one known below.
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
359 Scan, counting characters, from whichever one is closer. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
360
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
361 if (bytepos - best_below_byte < best_above_byte - bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
362 {
22022
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
363 int record = bytepos - best_below_byte > 5000;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
364
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
365 while (best_below_byte < bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
366 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
367 best_below++;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
368 BUF_INC_POS (b, best_below_byte);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
369 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
370
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
371 /* If this position is quite far from the nearest known position,
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
372 cache the correspondence by creating a marker here.
22022
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
373 It will last until the next GC.
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
374 But don't do it if BUF_MARKERS is nil;
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
375 that is a signal from Fset_buffer_multibyte. */
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
376 if (record && BUF_MARKERS (b))
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
377 {
21497
837148a1541f (buf_charpos_to_bytepos, buf_bytepos_to_charpos):
Karl Heuer <kwzh@gnu.org>
parents: 21458
diff changeset
378 Lisp_Object marker, buffer;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
379 marker = Fmake_marker ();
21497
837148a1541f (buf_charpos_to_bytepos, buf_bytepos_to_charpos):
Karl Heuer <kwzh@gnu.org>
parents: 21458
diff changeset
380 XSETBUFFER (buffer, b);
837148a1541f (buf_charpos_to_bytepos, buf_bytepos_to_charpos):
Karl Heuer <kwzh@gnu.org>
parents: 21458
diff changeset
381 set_marker_both (marker, buffer, best_below, best_below_byte);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
382 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
383
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
384 if (byte_debug_flag)
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
385 byte_char_debug_check (b, best_below, bytepos);
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
386
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
387 cached_buffer = b;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
388 cached_modiff = BUF_MODIFF (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
389 cached_charpos = best_below;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
390 cached_bytepos = best_below_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
391
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
392 return best_below;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
393 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
394 else
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
395 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
396 int record = best_above_byte - bytepos > 5000;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
397
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
398 while (best_above_byte > bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
399 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
400 best_above--;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
401 BUF_DEC_POS (b, best_above_byte);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
402 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
403
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
404 /* If this position is quite far from the nearest known position,
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
405 cache the correspondence by creating a marker here.
22022
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
406 It will last until the next GC.
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
407 But don't do it if BUF_MARKERS is nil;
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
408 that is a signal from Fset_buffer_multibyte. */
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
409 if (record && BUF_MARKERS (b))
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
410 {
21497
837148a1541f (buf_charpos_to_bytepos, buf_bytepos_to_charpos):
Karl Heuer <kwzh@gnu.org>
parents: 21458
diff changeset
411 Lisp_Object marker, buffer;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
412 marker = Fmake_marker ();
21497
837148a1541f (buf_charpos_to_bytepos, buf_bytepos_to_charpos):
Karl Heuer <kwzh@gnu.org>
parents: 21458
diff changeset
413 XSETBUFFER (buffer, b);
837148a1541f (buf_charpos_to_bytepos, buf_bytepos_to_charpos):
Karl Heuer <kwzh@gnu.org>
parents: 21458
diff changeset
414 set_marker_both (marker, buffer, best_above, best_above_byte);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
415 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
416
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
417 if (byte_debug_flag)
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
418 byte_char_debug_check (b, best_above, bytepos);
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
419
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
420 cached_buffer = b;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
421 cached_modiff = BUF_MODIFF (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
422 cached_charpos = best_above;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
423 cached_bytepos = best_above_byte;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
424
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
425 return best_above;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
426 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
427 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
428
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
429 #undef CONSIDER
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
430
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
431 /* Operations on markers. */
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
432
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
433 DEFUN ("marker-buffer", Fmarker_buffer, Smarker_buffer, 1, 1, 0,
40553
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
434 doc: /* Return the buffer that MARKER points into, or nil if none.
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
435 Returns nil if MARKER points into a dead buffer. */)
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
436 (marker)
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
437 register Lisp_Object marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
438 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
439 register Lisp_Object buf;
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
440 CHECK_MARKER (marker);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
441 if (XMARKER (marker)->buffer)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
442 {
9275
bb50d17f7441 (Fmarker_buffer): Use new accessor macros instead of calling XSET directly.
Karl Heuer <kwzh@gnu.org>
parents: 9121
diff changeset
443 XSETBUFFER (buf, XMARKER (marker)->buffer);
85014
ad5045db16f7 (Fmarker_buffer): Make test for odd case into a failure.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
444 /* If the buffer is dead, we're in trouble: the buffer pointer here
ad5045db16f7 (Fmarker_buffer): Make test for odd case into a failure.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
445 does not preserve the buffer from being GC'd (it's weak), so
ad5045db16f7 (Fmarker_buffer): Make test for odd case into a failure.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
446 markers have to be unlinked from their buffer as soon as the buffer
ad5045db16f7 (Fmarker_buffer): Make test for odd case into a failure.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
447 is killed. */
ad5045db16f7 (Fmarker_buffer): Make test for odd case into a failure.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
448 eassert (!NILP (XBUFFER (buf)->name));
ad5045db16f7 (Fmarker_buffer): Make test for odd case into a failure.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78260
diff changeset
449 return buf;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
450 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
451 return Qnil;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
452 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
453
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
454 DEFUN ("marker-position", Fmarker_position, Smarker_position, 1, 1, 0,
72625
b7e16dcc0668 (Fmarker_position): Doc fix.
Juri Linkov <juri@jurta.org>
parents: 71840
diff changeset
455 doc: /* Return the position MARKER points at, as a character number.
b7e16dcc0668 (Fmarker_position): Doc fix.
Juri Linkov <juri@jurta.org>
parents: 71840
diff changeset
456 Returns nil if MARKER points nowhere. */)
40553
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
457 (marker)
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
458 Lisp_Object marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
459 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
460 CHECK_MARKER (marker);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
461 if (XMARKER (marker)->buffer)
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
462 return make_number (XMARKER (marker)->charpos);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
463
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
464 return Qnil;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
465 }
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
466
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
467 DEFUN ("set-marker", Fset_marker, Sset_marker, 2, 3, 0,
40553
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
468 doc: /* Position MARKER before character number POSITION in BUFFER.
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
469 BUFFER defaults to the current buffer.
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
470 If POSITION is nil, makes marker point nowhere.
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
471 Then it no longer slows down editing in any buffer.
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
472 Returns MARKER. */)
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
473 (marker, position, buffer)
14082
c6a1708f37d4 (Fset_marker): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 13327
diff changeset
474 Lisp_Object marker, position, buffer;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
475 {
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
476 register int charno, bytepos;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
477 register struct buffer *b;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
478 register struct Lisp_Marker *m;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
479
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
480 CHECK_MARKER (marker);
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
481 m = XMARKER (marker);
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
482
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
483 /* If position is nil or a marker that points nowhere,
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
484 make this marker point nowhere. */
14082
c6a1708f37d4 (Fset_marker): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 13327
diff changeset
485 if (NILP (position)
c6a1708f37d4 (Fset_marker): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 13327
diff changeset
486 || (MARKERP (position) && !XMARKER (position)->buffer))
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
487 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
488 unchain_marker (m);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
489 return marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
490 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
491
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 118
diff changeset
492 if (NILP (buffer))
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
493 b = current_buffer;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
494 else
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
495 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
496 CHECK_BUFFER (buffer);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
497 b = XBUFFER (buffer);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
498 /* If buffer is dead, set marker to point nowhere. */
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
499 if (EQ (b->name, Qnil))
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
500 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
501 unchain_marker (m);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
502 return marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
503 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
504 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
505
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
506 /* Optimize the special case where we are copying the position
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
507 of an existing marker, and MARKER is already in the same buffer. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
508 if (MARKERP (position) && b == XMARKER (position)->buffer
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
509 && b == m->buffer)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
510 {
20563
d4de7ffb567d (buf_bytepos_to_charpos): Use marker bytepos, not bufpos.
Richard M. Stallman <rms@gnu.org>
parents: 20537
diff changeset
511 m->bytepos = XMARKER (position)->bytepos;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
512 m->charpos = XMARKER (position)->charpos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
513 return marker;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
514 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
515
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
516 CHECK_NUMBER_COERCE_MARKER (position);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
517
14082
c6a1708f37d4 (Fset_marker): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 13327
diff changeset
518 charno = XINT (position);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
519
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
520 if (charno < BUF_BEG (b))
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
521 charno = BUF_BEG (b);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
522 if (charno > BUF_Z (b))
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
523 charno = BUF_Z (b);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
524
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
525 bytepos = buf_charpos_to_bytepos (b, charno);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
526
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
527 /* Every character is at least one byte. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
528 if (charno > bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
529 abort ();
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
530
20563
d4de7ffb567d (buf_bytepos_to_charpos): Use marker bytepos, not bufpos.
Richard M. Stallman <rms@gnu.org>
parents: 20537
diff changeset
531 m->bytepos = bytepos;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
532 m->charpos = charno;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
533
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
534 if (m->buffer != b)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
535 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
536 unchain_marker (m);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
537 m->buffer = b;
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
538 m->next = BUF_MARKERS (b);
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
539 BUF_MARKERS (b) = m;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
540 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44651
diff changeset
541
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
542 return marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
543 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
544
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
545 /* This version of Fset_marker won't let the position
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
546 be outside the visible part. */
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
547
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44651
diff changeset
548 Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
549 set_marker_restricted (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer)
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
550 {
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
551 register int charno, bytepos;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
552 register struct buffer *b;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
553 register struct Lisp_Marker *m;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
554
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
555 CHECK_MARKER (marker);
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
556 m = XMARKER (marker);
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
557
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
558 /* If position is nil or a marker that points nowhere,
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
559 make this marker point nowhere. */
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
560 if (NILP (pos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
561 || (MARKERP (pos) && !XMARKER (pos)->buffer))
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
562 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
563 unchain_marker (m);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
564 return marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
565 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
566
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 118
diff changeset
567 if (NILP (buffer))
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
568 b = current_buffer;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
569 else
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
570 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
571 CHECK_BUFFER (buffer);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
572 b = XBUFFER (buffer);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
573 /* If buffer is dead, set marker to point nowhere. */
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
574 if (EQ (b->name, Qnil))
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
575 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
576 unchain_marker (m);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
577 return marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
578 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
579 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
580
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
581 /* Optimize the special case where we are copying the position
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
582 of an existing marker, and MARKER is already in the same buffer. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
583 if (MARKERP (pos) && b == XMARKER (pos)->buffer
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
584 && b == m->buffer)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
585 {
20563
d4de7ffb567d (buf_bytepos_to_charpos): Use marker bytepos, not bufpos.
Richard M. Stallman <rms@gnu.org>
parents: 20537
diff changeset
586 m->bytepos = XMARKER (pos)->bytepos;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
587 m->charpos = XMARKER (pos)->charpos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
588 return marker;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
589 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
590
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
591 CHECK_NUMBER_COERCE_MARKER (pos);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
592
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
593 charno = XINT (pos);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
594
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
595 if (charno < BUF_BEGV (b))
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
596 charno = BUF_BEGV (b);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
597 if (charno > BUF_ZV (b))
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
598 charno = BUF_ZV (b);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
599
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
600 bytepos = buf_charpos_to_bytepos (b, charno);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
601
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
602 /* Every character is at least one byte. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
603 if (charno > bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
604 abort ();
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
605
20563
d4de7ffb567d (buf_bytepos_to_charpos): Use marker bytepos, not bufpos.
Richard M. Stallman <rms@gnu.org>
parents: 20537
diff changeset
606 m->bytepos = bytepos;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
607 m->charpos = charno;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
608
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
609 if (m->buffer != b)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
610 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
611 unchain_marker (m);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
612 m->buffer = b;
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
613 m->next = BUF_MARKERS (b);
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
614 BUF_MARKERS (b) = m;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
615 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44651
diff changeset
616
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
617 return marker;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
618 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
619
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
620 /* Set the position of MARKER, specifying both the
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
621 character position and the corresponding byte position. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
622
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44651
diff changeset
623 Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
624 set_marker_both (Lisp_Object marker, Lisp_Object buffer, int charpos, int bytepos)
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
625 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
626 register struct buffer *b;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
627 register struct Lisp_Marker *m;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
628
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
629 CHECK_MARKER (marker);
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
630 m = XMARKER (marker);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
631
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
632 if (NILP (buffer))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
633 b = current_buffer;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
634 else
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
635 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
636 CHECK_BUFFER (buffer);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
637 b = XBUFFER (buffer);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
638 /* If buffer is dead, set marker to point nowhere. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
639 if (EQ (b->name, Qnil))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
640 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
641 unchain_marker (m);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
642 return marker;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
643 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
644 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
645
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
646 /* In a single-byte buffer, the two positions must be equal. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
647 if (BUF_Z (b) == BUF_Z_BYTE (b)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
648 && charpos != bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
649 abort ();
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
650 /* Every character is at least one byte. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
651 if (charpos > bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
652 abort ();
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
653
20563
d4de7ffb567d (buf_bytepos_to_charpos): Use marker bytepos, not bufpos.
Richard M. Stallman <rms@gnu.org>
parents: 20537
diff changeset
654 m->bytepos = bytepos;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
655 m->charpos = charpos;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
656
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
657 if (m->buffer != b)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
658 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
659 unchain_marker (m);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
660 m->buffer = b;
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
661 m->next = BUF_MARKERS (b);
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
662 BUF_MARKERS (b) = m;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
663 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44651
diff changeset
664
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
665 return marker;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
666 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
667
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
668 /* This version of set_marker_both won't let the position
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
669 be outside the visible part. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
670
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44651
diff changeset
671 Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
672 set_marker_restricted_both (Lisp_Object marker, Lisp_Object buffer, int charpos, int bytepos)
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
673 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
674 register struct buffer *b;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
675 register struct Lisp_Marker *m;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
676
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
677 CHECK_MARKER (marker);
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
678 m = XMARKER (marker);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
679
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
680 if (NILP (buffer))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
681 b = current_buffer;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
682 else
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
683 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
684 CHECK_BUFFER (buffer);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
685 b = XBUFFER (buffer);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
686 /* If buffer is dead, set marker to point nowhere. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
687 if (EQ (b->name, Qnil))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
688 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
689 unchain_marker (m);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
690 return marker;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
691 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
692 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
693
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
694 if (charpos < BUF_BEGV (b))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
695 charpos = BUF_BEGV (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
696 if (charpos > BUF_ZV (b))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
697 charpos = BUF_ZV (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
698 if (bytepos < BUF_BEGV_BYTE (b))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
699 bytepos = BUF_BEGV_BYTE (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
700 if (bytepos > BUF_ZV_BYTE (b))
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
701 bytepos = BUF_ZV_BYTE (b);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
702
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
703 /* In a single-byte buffer, the two positions must be equal. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
704 if (BUF_Z (b) == BUF_Z_BYTE (b)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
705 && charpos != bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
706 abort ();
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
707 /* Every character is at least one byte. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
708 if (charpos > bytepos)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
709 abort ();
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
710
20563
d4de7ffb567d (buf_bytepos_to_charpos): Use marker bytepos, not bufpos.
Richard M. Stallman <rms@gnu.org>
parents: 20537
diff changeset
711 m->bytepos = bytepos;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
712 m->charpos = charpos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
713
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
714 if (m->buffer != b)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
715 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
716 unchain_marker (m);
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
717 m->buffer = b;
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
718 m->next = BUF_MARKERS (b);
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
719 BUF_MARKERS (b) = m;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
720 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44651
diff changeset
721
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
722 return marker;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
723 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
724
41235
23d7de34a596 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
725 /* Remove MARKER from the chain of whatever buffer it is in.
23d7de34a596 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
726 Leave it "in no buffer".
23d7de34a596 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
727
23d7de34a596 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
728 This is called during garbage collection,
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
729 so we must be careful to ignore and preserve mark bits,
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
730 including those in chain fields of markers. */
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
731
20301
6e2ea54ad704 (unchain_marker): Define as returning nothing.
Andreas Schwab <schwab@suse.de>
parents: 16418
diff changeset
732 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
733 unchain_marker (register struct Lisp_Marker *marker)
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
734 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
735 register struct Lisp_Marker *tail, *prev, *next;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
736 register struct buffer *b;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
737
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
738 b = marker->buffer;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
739 if (b == 0)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
740 return;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
741
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
742 if (EQ (b->name, Qnil))
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
743 abort ();
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
744
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
745 marker->buffer = 0;
22022
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
746
10315
c78d0bb85d30 Use BUF_MARKERS throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9315
diff changeset
747 tail = BUF_MARKERS (b);
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
748 prev = NULL;
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
749 while (tail)
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
750 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
751 next = tail->next;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
752
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
753 if (marker == tail)
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
754 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
755 if (!prev)
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
756 {
10315
c78d0bb85d30 Use BUF_MARKERS throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9315
diff changeset
757 BUF_MARKERS (b) = next;
c78d0bb85d30 Use BUF_MARKERS throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9315
diff changeset
758 /* Deleting first marker from the buffer's chain. Crash
c78d0bb85d30 Use BUF_MARKERS throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9315
diff changeset
759 if new first marker in chain does not say it belongs
10999
84076f6a1f1b (unchain_marker): Allow differing buffers
Richard M. Stallman <rms@gnu.org>
parents: 10315
diff changeset
760 to the same buffer, or at least that they have the same
84076f6a1f1b (unchain_marker): Allow differing buffers
Richard M. Stallman <rms@gnu.org>
parents: 10315
diff changeset
761 base buffer. */
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
762 if (next && b->text != next->buffer->text)
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
763 abort ();
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
764 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
765 else
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
766 prev->next = next;
22022
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
767 /* We have removed the marker from the chain;
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
768 no need to scan the rest of the chain. */
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
769 return;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
770 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
771 else
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
772 prev = tail;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
773 tail = next;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
774 }
22022
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
775
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
776 /* Marker was not in its chain. */
64ac294567a6 (unchain_marker): Abort if the marker is not in its buffer's chain.
Richard M. Stallman <rms@gnu.org>
parents: 21528
diff changeset
777 abort ();
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
778 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
779
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
780 /* Return the char position of marker MARKER, as a C integer. */
10315
c78d0bb85d30 Use BUF_MARKERS throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9315
diff changeset
781
c78d0bb85d30 Use BUF_MARKERS throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9315
diff changeset
782 int
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
783 marker_position (Lisp_Object marker)
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
784 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
785 register struct Lisp_Marker *m = XMARKER (marker);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
786 register struct buffer *buf = m->buffer;
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
787
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
788 if (!buf)
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
789 error ("Marker does not point anywhere");
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
790
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
791 return m->charpos;
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
792 }
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
793
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
794 /* Return the byte position of marker MARKER, as a C integer. */
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
795
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
796 int
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
797 marker_byte_position (Lisp_Object marker)
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
798 {
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
799 register struct Lisp_Marker *m = XMARKER (marker);
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
800 register struct buffer *buf = m->buffer;
20563
d4de7ffb567d (buf_bytepos_to_charpos): Use marker bytepos, not bufpos.
Richard M. Stallman <rms@gnu.org>
parents: 20537
diff changeset
801 register int i = m->bytepos;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
802
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
803 if (!buf)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
804 error ("Marker does not point anywhere");
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
805
20537
cc87b03bad13 (marker_byte_position): Renamed from marker_position.
Richard M. Stallman <rms@gnu.org>
parents: 20301
diff changeset
806 if (i < BUF_BEG_BYTE (buf) || i > BUF_Z_BYTE (buf))
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
807 abort ();
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
808
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
809 return i;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
810 }
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
811
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
812 DEFUN ("copy-marker", Fcopy_marker, Scopy_marker, 1, 2, 0,
40553
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
813 doc: /* Return a new marker pointing at the same place as MARKER.
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
814 If argument is a number, makes a new marker pointing
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
815 at that position in the current buffer.
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
816 The optional argument TYPE specifies the insertion type of the new marker;
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
817 see `marker-insertion-type'. */)
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
818 (marker, type)
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
819 register Lisp_Object marker, type;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
820 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
821 register Lisp_Object new;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
822
71840
96e9b3cb9809 (Fcopy_marker): Use CHECK_TYPE.
Kim F. Storm <storm@cua.dk>
parents: 68651
diff changeset
823 CHECK_TYPE (INTEGERP (marker) || MARKERP (marker), Qinteger_or_marker_p, marker);
22744
79ca732d9740 (Fcopy_marker): Make return from wrong_type_argument
Karl Heuer <kwzh@gnu.org>
parents: 22022
diff changeset
824
79ca732d9740 (Fcopy_marker): Make return from wrong_type_argument
Karl Heuer <kwzh@gnu.org>
parents: 22022
diff changeset
825 new = Fmake_marker ();
79ca732d9740 (Fcopy_marker): Make return from wrong_type_argument
Karl Heuer <kwzh@gnu.org>
parents: 22022
diff changeset
826 Fset_marker (new, marker,
79ca732d9740 (Fcopy_marker): Make return from wrong_type_argument
Karl Heuer <kwzh@gnu.org>
parents: 22022
diff changeset
827 (MARKERP (marker) ? Fmarker_buffer (marker) : Qnil));
79ca732d9740 (Fcopy_marker): Make return from wrong_type_argument
Karl Heuer <kwzh@gnu.org>
parents: 22022
diff changeset
828 XMARKER (new)->insertion_type = !NILP (type);
79ca732d9740 (Fcopy_marker): Make return from wrong_type_argument
Karl Heuer <kwzh@gnu.org>
parents: 22022
diff changeset
829 return new;
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
830 }
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
831
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
832 DEFUN ("marker-insertion-type", Fmarker_insertion_type,
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
833 Smarker_insertion_type, 1, 1, 0,
40553
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
834 doc: /* Return insertion type of MARKER: t if it stays after inserted text.
74568
21b2a6ce1aa9 (Fmarker_insertion_type): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 72625
diff changeset
835 The value nil means the marker stays before text inserted there. */)
40553
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
836 (marker)
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
837 register Lisp_Object marker;
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
838 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
839 CHECK_MARKER (marker);
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
840 return XMARKER (marker)->insertion_type ? Qt : Qnil;
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
841 }
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
842
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
843 DEFUN ("set-marker-insertion-type", Fset_marker_insertion_type,
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
844 Sset_marker_insertion_type, 2, 2, 0,
40553
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
845 doc: /* Set the insertion-type of MARKER to TYPE.
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
846 If TYPE is t, it means the marker advances when you insert text at it.
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
847 If TYPE is nil, it means the marker stays behind when you insert text at it. */)
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
848 (marker, type)
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
849 Lisp_Object marker, type;
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
850 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40553
diff changeset
851 CHECK_MARKER (marker);
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
852
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
853 XMARKER (marker)->insertion_type = ! NILP (type);
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
854 return type;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
855 }
16418
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
856
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
857 DEFUN ("buffer-has-markers-at", Fbuffer_has_markers_at, Sbuffer_has_markers_at,
40553
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
858 1, 1, 0,
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
859 doc: /* Return t if there are markers pointing at POSITION in the current buffer. */)
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
860 (position)
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
861 Lisp_Object position;
16418
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
862 {
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
863 register struct Lisp_Marker *tail;
16418
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
864 register int charno;
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
865
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
866 charno = XINT (position);
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
867
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
868 if (charno < BEG)
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
869 charno = BEG;
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
870 if (charno > Z)
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
871 charno = Z;
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
872
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
873 for (tail = BUF_MARKERS (current_buffer); tail; tail = tail->next)
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
874 if (tail->charpos == charno)
16418
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
875 return Qt;
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
876
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
877 return Qnil;
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
878 }
44560
0fddc27db9ae (count_markers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44328
diff changeset
879
0fddc27db9ae (count_markers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44328
diff changeset
880 /* For debugging -- count the markers in buffer BUF. */
0fddc27db9ae (count_markers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44328
diff changeset
881
0fddc27db9ae (count_markers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44328
diff changeset
882 int
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
883 count_markers (struct buffer *buf)
44560
0fddc27db9ae (count_markers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44328
diff changeset
884 {
0fddc27db9ae (count_markers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44328
diff changeset
885 int total = 0;
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
886 struct Lisp_Marker *tail;
44560
0fddc27db9ae (count_markers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44328
diff changeset
887
51672
018c85ec9a1e (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50472
diff changeset
888 for (tail = BUF_MARKERS (buf); tail; tail = tail->next)
44560
0fddc27db9ae (count_markers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44328
diff changeset
889 total++;
0fddc27db9ae (count_markers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44328
diff changeset
890
0fddc27db9ae (count_markers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44328
diff changeset
891 return total;
0fddc27db9ae (count_markers): New function.
Richard M. Stallman <rms@gnu.org>
parents: 44328
diff changeset
892 }
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
893
20301
6e2ea54ad704 (unchain_marker): Define as returning nothing.
Andreas Schwab <schwab@suse.de>
parents: 16418
diff changeset
894 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
895 syms_of_marker (void)
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
896 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
897 defsubr (&Smarker_position);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
898 defsubr (&Smarker_buffer);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
899 defsubr (&Sset_marker);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
900 defsubr (&Scopy_marker);
12999
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
901 defsubr (&Smarker_insertion_type);
b889a50f71db (Fcopy_marker): New arg TYPE.
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
902 defsubr (&Sset_marker_insertion_type);
16418
cf4260218aec (Fbuffer_has_markers_at): New function.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
903 defsubr (&Sbuffer_has_markers_at);
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
904
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
905 DEFVAR_BOOL ("byte-debug-flag", &byte_debug_flag,
40553
440be654a370 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 34972
diff changeset
906 doc: /* Non-nil enables debugging checks in byte/char position conversions. */);
20872
431f875501a6 (byte_char_debug_check): New function.
Richard M. Stallman <rms@gnu.org>
parents: 20706
diff changeset
907 byte_debug_flag = 0;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
908 }
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51672
diff changeset
909
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51672
diff changeset
910 /* arch-tag: 50aa418f-cdd0-4838-b64b-94aa4b2a3b74
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51672
diff changeset
911 (do not change this comment) */