annotate src/intervals.h @ 4413:5a00cec8e9b0

(fill-region-as-paragraph): When we take one word after the fill column, don't stop at period with just one space. When checking whether at beginning of line, if no fill prefix, ignore intervening whitespace.
author Richard M. Stallman <rms@gnu.org>
date Mon, 02 Aug 1993 05:55:56 +0000
parents c11d710e0403
children 39f0a30bb163
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1 /* Definitions and global variables for intervals.
2961
e94a593c3952 Updated copyright years.
Jim Blandy <jimb@redhat.com>
parents: 2062
diff changeset
2 Copyright (C) 1993 Free Software Foundation, Inc.
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
3
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
4 This file is part of GNU Emacs.
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
5
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
8 the Free Software Foundation; either version 1, or (at your option)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
9 any later version.
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
10
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
14 GNU General Public License for more details.
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
15
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
17 along with GNU Emacs; see the file COPYING. If not, write to
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
19
1287
02bd1ea07b17 * intervals.h: Declare temp_set_point.
Joseph Arceneaux <jla@gnu.org>
parents: 1211
diff changeset
20 #ifdef USE_TEXT_PROPERTIES
1970
64a07c3362f1 Don't include dispextern.h more than once.
Richard M. Stallman <rms@gnu.org>
parents: 1314
diff changeset
21 #ifndef NORMAL_FACE
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
22 #include "dispextern.h"
1970
64a07c3362f1 Don't include dispextern.h more than once.
Richard M. Stallman <rms@gnu.org>
parents: 1314
diff changeset
23 #endif
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
24
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
25 #define NULL_INTERVAL 0
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
26 #define INTERVAL_DEFAULT NULL_INTERVAL
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
27
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
28 /* These are macros for dealing with the interval tree. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
29
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
30 /* Size of the structure used to represent an interval */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
31 #define INTERVAL_SIZE (sizeof (struct interval))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
32
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
33 /* Size of a pointer to an interval structure */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
34 #define INTERVAL_PTR_SIZE (sizeof (struct interval *))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
35
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
36 /* True if an interval pointer is null, or is a Lisp_Buffer or
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
37 Lisp_String pointer (meaning it points to the owner of this
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
38 interval tree.) */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
39 #define NULL_INTERVAL_P(i) ((i) == NULL_INTERVAL || \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
40 XTYPE ((Lisp_Object)(i)) == Lisp_Buffer || \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
41 XTYPE ((Lisp_Object)(i)) == Lisp_String)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
42
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
43 /* True if this interval has no right child. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
44 #define NULL_RIGHT_CHILD(i) (NULL_INTERVAL_P((i)->right))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
45
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
46 /* True if this interval has no left child. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
47 #define NULL_LEFT_CHILD(i) (NULL_INTERVAL_P((i)->left))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
48
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
49 /* True if this interval has no parent. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
50 #define NULL_PARENT(i) (NULL_INTERVAL_P((i)->parent))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
51
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
52 /* True if this interval is the left child of some other interval. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
53 #define AM_LEFT_CHILD(i) (! NULL_INTERVAL_P ((i)->parent) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
54 && (i)->parent->left == (i))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
55
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
56 /* True if this interval is the right ehild of some other interval. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
57 #define AM_RIGHT_CHILD(i) (! NULL_INTERVAL_P ((i)->parent) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
58 && (i)->parent->right == (i))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
59
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
60 /* True if this interval has no children. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
61 #define LEAF_INTERVAL_P(i) ((i)->left == NULL_INTERVAL \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
62 && (i)->right == NULL_INTERVAL)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
63
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
64 /* True if this interval has no parent and is therefore the root. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
65 #define ROOT_INTERVAL_P(i) (NULL_PARENT (i))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
66
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
67 /* True if this interval is the only interval in the interval tree. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
68 #define ONLY_INTERVAL_P(i) (ROOT_INTERVAL_P((i)) && LEAF_INTERVAL_P ((i)))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
69
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
70 /* True if this interval has both left and right children. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
71 #define BOTH_KIDS_P(i) ((i)->left != NULL_INTERVAL \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
72 && (i)->right != NULL_INTERVAL)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
73
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
74 /* The total size of all text represented by this interval and all its
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
75 children in the tree. This is zero if the interval is null. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
76 #define TOTAL_LENGTH(i) ((i) == NULL_INTERVAL ? 0 : (i)->total_length)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
77
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
78 /* The size of text represented by this interval alone. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
79 #define LENGTH(i) ((i) == NULL_INTERVAL ? 0 : (TOTAL_LENGTH ((i)) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
80 - TOTAL_LENGTH ((i)->right) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
81 - TOTAL_LENGTH ((i)->left)))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
82
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
83 /* The absolute index of the last character belonging to I. Note that
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
84 the position cache i->position must be valid for this to work. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
85 #define INTERVAL_LAST_POS(i) ((i)->position + LENGTH ((i)) - 1)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
86
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
87 /* The total size of the left subtree of this interval. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
88 #define LEFT_TOTAL_LENGTH(i) ((i)->left ? (i)->left->total_length : 0)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
89
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
90 /* The total size of the right subtree of this interval. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
91 #define RIGHT_TOTAL_LENGTH(i) ((i)->right ? (i)->right->total_length : 0)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
92
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
93
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
94 /* These macros are for dealing with the interval properties. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
95
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
96 /* True if this is a default interval, which is the same as being null
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
97 or having no properties. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
98 #define DEFAULT_INTERVAL_P(i) (NULL_INTERVAL_P (i) || EQ ((i)->plist, Qnil))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
99
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
100 /* Reset this interval to its vanilla, or no-property state. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
101 #define RESET_INTERVAL(i) { \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
102 (i)->total_length = (i)->position = 0; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
103 (i)->left = (i)->right = NULL_INTERVAL; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
104 (i)->parent = NULL_INTERVAL; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
105 (i)->write_protect = 0; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
106 (i)->visible = 0; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
107 (i)->front_sticky = (i)->rear_sticky = 0; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
108 (i)->plist = Qnil; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
109 }
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
110
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
111 /* Copy the cached property values of interval FROM to interval TO. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
112 #define COPY_INTERVAL_CACHE(from,to) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
113 { \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
114 (to)->write_protect = (from)->write_protect; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
115 (to)->visible = (from)->visible; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
116 (to)->front_sticky = (from)->front_sticky; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
117 (to)->rear_sticky = (from)->rear_sticky; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
118 }
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
119
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
120 /* Copy only the set bits of FROM's cache. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
121 #define MERGE_INTERVAL_CACHE(from,to) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
122 { \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
123 if ((from)->write_protect) (to)->write_protect = 1; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
124 if ((from)->visible) (to)->visible = 1; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
125 if ((from)->front_sticky) (to)->front_sticky = 1; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
126 if ((from)->rear_sticky) (to)->rear_sticky = 1; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
127 }
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
128
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
129 /* Macro determining whether the properties of an interval being
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
130 inserted should be merged with the properties of the text where
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
131 they are being inserted. */
4382
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
132 #define MERGE_INSERTIONS(i) 1
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
133
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
134 /* Macro determining if an invisible interval should be displayed
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
135 as a special glyph, or not at all. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
136 #define DISPLAY_INVISIBLE_GLYPH(i) 0
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
137
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
138 /* Is this interval visible? Replace later with cache access */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
139 #define INTERVAL_VISIBLE_P(i) \
3534
2323f2160053 (INTERVAL_VISIBLE_P): Use textget.
Richard M. Stallman <rms@gnu.org>
parents: 2961
diff changeset
140 (! NULL_INTERVAL_P (i) && NILP (textget ((i)->plist, Qinvisible)))
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
141
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
142 /* Is this interval writable? Replace later with cache access */
3579
f6eeb536beda (INTERVAL_WRITABLE_P): Fix backwards tests.
Richard M. Stallman <rms@gnu.org>
parents: 3534
diff changeset
143 #define INTERVAL_WRITABLE_P(i) \
f6eeb536beda (INTERVAL_WRITABLE_P): Fix backwards tests.
Richard M. Stallman <rms@gnu.org>
parents: 3534
diff changeset
144 (! NULL_INTERVAL_P (i) \
f6eeb536beda (INTERVAL_WRITABLE_P): Fix backwards tests.
Richard M. Stallman <rms@gnu.org>
parents: 3534
diff changeset
145 && (NILP (textget ((i)->plist, Qread_only)) \
f6eeb536beda (INTERVAL_WRITABLE_P): Fix backwards tests.
Richard M. Stallman <rms@gnu.org>
parents: 3534
diff changeset
146 || ((CONSP (Vinhibit_read_only) \
f6eeb536beda (INTERVAL_WRITABLE_P): Fix backwards tests.
Richard M. Stallman <rms@gnu.org>
parents: 3534
diff changeset
147 ? !NILP (Fmemq (textget ((i)->plist, Qread_only), \
f6eeb536beda (INTERVAL_WRITABLE_P): Fix backwards tests.
Richard M. Stallman <rms@gnu.org>
parents: 3534
diff changeset
148 Vinhibit_read_only)) \
f6eeb536beda (INTERVAL_WRITABLE_P): Fix backwards tests.
Richard M. Stallman <rms@gnu.org>
parents: 3534
diff changeset
149 : !NILP (Vinhibit_read_only))))) \
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
150
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
151 /* Macros to tell whether insertions before or after this interval
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
152 should stick to it. */
4382
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
153 /* Replace later with cache access */
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
154 /*#define FRONT_STICKY_P(i) ((i)->front_sticky != 0)
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
155 #define END_STICKY_P(i) ((i)->rear_sticky != 0)*/
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
156 #define FRONT_STICKY_P(i) \
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
157 (! NULL_INTERVAL_P (i) && ! NILP (textget ((i)->plist, Qfront_sticky)))
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
158 #define END_NONSTICKY_P(i) \
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
159 (! NULL_INTERVAL_P (i) && ! NILP (textget ((i)->plist, Qrear_nonsticky)))
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
160
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
161
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
162 /* Declared in alloc.c */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
163
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
164 extern INTERVAL make_interval ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
165
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
166 /* Declared in intervals.c */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
167
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
168 extern Lisp_Object interval_balance_threshold;
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
169
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
170 extern INTERVAL create_root_interval ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
171 extern void copy_properties ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
172 extern int intervals_equal ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
173 extern void traverse_intervals ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
174 extern INTERVAL split_interval_right (), split_interval_left ();
1314
4cbe6db1041e * intervals.h: Declare `copy_intervals()'.
Joseph Arceneaux <jla@gnu.org>
parents: 1287
diff changeset
175 extern INLINE INTERVAL find_interval ();
4cbe6db1041e * intervals.h: Declare `copy_intervals()'.
Joseph Arceneaux <jla@gnu.org>
parents: 1287
diff changeset
176 extern INTERVAL next_interval (), previous_interval ();
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
177 extern INTERVAL merge_interval_left (), merge_interval_right ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
178 extern void delete_interval ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
179 extern INLINE void offset_intervals ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
180 extern void graft_intervals_into_buffer ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
181 extern void set_point ();
1314
4cbe6db1041e * intervals.h: Declare `copy_intervals()'.
Joseph Arceneaux <jla@gnu.org>
parents: 1287
diff changeset
182 extern INLINE void temp_set_point ();
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
183 extern void verify_interval_modification ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
184 extern INTERVAL balance_intervals ();
1314
4cbe6db1041e * intervals.h: Declare `copy_intervals()'.
Joseph Arceneaux <jla@gnu.org>
parents: 1287
diff changeset
185 extern INLINE void copy_intervals_to_string ();
4cbe6db1041e * intervals.h: Declare `copy_intervals()'.
Joseph Arceneaux <jla@gnu.org>
parents: 1287
diff changeset
186 extern INTERVAL copy_intervals ();
2062
79a2651d9de3 Declare Qcategory, Qlocal_map. Declare textget, get_local_map.
Richard M. Stallman <rms@gnu.org>
parents: 1970
diff changeset
187 extern Lisp_Object textget ();
4382
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
188 extern Lisp_Object textget_direct ();
2062
79a2651d9de3 Declare Qcategory, Qlocal_map. Declare textget, get_local_map.
Richard M. Stallman <rms@gnu.org>
parents: 1970
diff changeset
189 extern Lisp_Object get_local_map ();
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
190
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
191 /* Declared in textprop.c */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
192
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
193 /* Types of hooks. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
194 extern Lisp_Object Qmouse_left;
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
195 extern Lisp_Object Qmouse_entered;
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
196 extern Lisp_Object Qpoint_left;
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
197 extern Lisp_Object Qpoint_entered;
2062
79a2651d9de3 Declare Qcategory, Qlocal_map. Declare textget, get_local_map.
Richard M. Stallman <rms@gnu.org>
parents: 1970
diff changeset
198 extern Lisp_Object Qmodification_hooks;
79a2651d9de3 Declare Qcategory, Qlocal_map. Declare textget, get_local_map.
Richard M. Stallman <rms@gnu.org>
parents: 1970
diff changeset
199 extern Lisp_Object Qcategory;
79a2651d9de3 Declare Qcategory, Qlocal_map. Declare textget, get_local_map.
Richard M. Stallman <rms@gnu.org>
parents: 1970
diff changeset
200 extern Lisp_Object Qlocal_map;
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
201
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
202 /* Visual properties text (including strings) may have. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
203 extern Lisp_Object Qforeground, Qbackground, Qfont, Qunderline, Qstipple;
4382
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
204 extern Lisp_Object Qinvisible, Qhidden, Qread_only;
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
205
4241
64cfb6d569e4 (Vinhibit_point_motion_hooks): Declared.
Richard M. Stallman <rms@gnu.org>
parents: 4211
diff changeset
206 extern Lisp_Object Vinhibit_point_motion_hooks;
64cfb6d569e4 (Vinhibit_point_motion_hooks): Declared.
Richard M. Stallman <rms@gnu.org>
parents: 4211
diff changeset
207
4382
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
208 /* Sticky properties */
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
209 extern Lisp_Object Qfront_sticky, Qrear_nonsticky;
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
210
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
211 extern Lisp_Object Ftext_properties_at ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
212 extern Lisp_Object Fnext_property_change (), Fprevious_property_change ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
213 extern Lisp_Object Fadd_text_properties (), Fset_text_properties ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
214 extern Lisp_Object Fremove_text_properties (), Ferase_text_properties ();
4211
b2e422a86641 (Ftext_property_not_all): Fix typo in decl.
Richard M. Stallman <rms@gnu.org>
parents: 4136
diff changeset
215 extern Lisp_Object Ftext_property_any (), Ftext_property_not_all ();
4006
98eb9ca25031 * textprop.c (copy_text_properties): New function, from David
Jim Blandy <jimb@redhat.com>
parents: 3579
diff changeset
216 extern Lisp_Object copy_text_properties ();
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
217
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
218 extern void syms_of_textprop ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
219
1287
02bd1ea07b17 * intervals.h: Declare temp_set_point.
Joseph Arceneaux <jla@gnu.org>
parents: 1211
diff changeset
220 #else /* don't support text properties */
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
221
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
222 #define NULL_INTERVAL_P(i) 1
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
223 #define INTERVAL_SIZE 0
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
224 #define INTERVAL_PTR_SIZE 0
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
225
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
226 #define copy_intervals_to_string(string,buffer,position,length)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
227 #define verify_interval_modification(buffer,start,end)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
228 #define insert_interval_copy(source,position,end,sink,at)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
229 #define graft_intervals_into_buffer(tree,position,bufferptr)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
230 #define offset_intervals(buffer,position,length)
1314
4cbe6db1041e * intervals.h: Declare `copy_intervals()'.
Joseph Arceneaux <jla@gnu.org>
parents: 1287
diff changeset
231 #define copy_intervals(tree,start,length)
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
232
1287
02bd1ea07b17 * intervals.h: Declare temp_set_point.
Joseph Arceneaux <jla@gnu.org>
parents: 1211
diff changeset
233 #define syms_of_textprop()
02bd1ea07b17 * intervals.h: Declare temp_set_point.
Joseph Arceneaux <jla@gnu.org>
parents: 1211
diff changeset
234
02bd1ea07b17 * intervals.h: Declare temp_set_point.
Joseph Arceneaux <jla@gnu.org>
parents: 1211
diff changeset
235 #endif /* don't support text properties */