annotate src/intervals.h @ 17846:c427501449a1

(display_text_line): Move the code to fill out the line with the newline's face to the end of the newline code. Add changes (commented out) to record ellipsis positions in charstarts.
author Richard M. Stallman <rms@gnu.org>
date Fri, 16 May 1997 07:32:59 +0000
parents a609ccd7eefb
children 614b916ff5bf
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.
7307
cd81dba38a49 Update copyright.
Karl Heuer <kwzh@gnu.org>
parents: 6754
diff changeset
2 Copyright (C) 1993, 1994 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
12244
ac7375e60931 Update GPL to version 2.
Karl Heuer <kwzh@gnu.org>
parents: 11132
diff changeset
8 the Free Software Foundation; either version 2, or (at your option)
1164
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
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12244
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12244
diff changeset
19 Boston, MA 02111-1307, USA. */
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
20
1287
02bd1ea07b17 * intervals.h: Declare temp_set_point.
Joseph Arceneaux <jla@gnu.org>
parents: 1211
diff changeset
21 #ifdef USE_TEXT_PROPERTIES
1970
64a07c3362f1 Don't include dispextern.h more than once.
Richard M. Stallman <rms@gnu.org>
parents: 1314
diff changeset
22 #ifndef NORMAL_FACE
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
23 #include "dispextern.h"
1970
64a07c3362f1 Don't include dispextern.h more than once.
Richard M. Stallman <rms@gnu.org>
parents: 1314
diff changeset
24 #endif
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
25
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
26 #define NULL_INTERVAL 0
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
27 #define INTERVAL_DEFAULT NULL_INTERVAL
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
28
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
29 /* These are macros for dealing with the interval tree. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
30
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
31 /* Size of the structure used to represent an interval */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
32 #define INTERVAL_SIZE (sizeof (struct interval))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
33
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
34 /* Size of a pointer to an interval structure */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
35 #define INTERVAL_PTR_SIZE (sizeof (struct interval *))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
36
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
37 /* 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
38 Lisp_String pointer (meaning it points to the owner of this
5414
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
39 interval tree). */
9142
d67be35351e5 (NULL_INTERVAL_P): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 8847
diff changeset
40 #define NULL_INTERVAL_P(i) ((i) == NULL_INTERVAL \
d67be35351e5 (NULL_INTERVAL_P): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 8847
diff changeset
41 || BUFFERP ((Lisp_Object)(i)) \
d67be35351e5 (NULL_INTERVAL_P): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 8847
diff changeset
42 || STRINGP ((Lisp_Object)(i)))
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
43
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
44 /* True if this interval has no right child. */
5414
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
45 #define NULL_RIGHT_CHILD(i) ((i)->right == NULL_INTERVAL)
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
46
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
47 /* True if this interval has no left child. */
5414
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
48 #define NULL_LEFT_CHILD(i) ((i)->left == NULL_INTERVAL)
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
49
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
50 /* True if this interval has no parent. */
5414
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
51 #define NULL_PARENT(i) (NULL_INTERVAL_P ((i)->parent))
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
52
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
53 /* True if this interval is the left child of some other interval. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
54 #define AM_LEFT_CHILD(i) (! NULL_INTERVAL_P ((i)->parent) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
55 && (i)->parent->left == (i))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
56
5414
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
57 /* True if this interval is the right child of some other interval. */
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
58 #define AM_RIGHT_CHILD(i) (! NULL_INTERVAL_P ((i)->parent) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
59 && (i)->parent->right == (i))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
60
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
61 /* True if this interval has no children. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
62 #define LEAF_INTERVAL_P(i) ((i)->left == NULL_INTERVAL \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
63 && (i)->right == NULL_INTERVAL)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
64
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
65 /* True if this interval has no parent and is therefore the root. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
66 #define ROOT_INTERVAL_P(i) (NULL_PARENT (i))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
67
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
68 /* True if this interval is the only interval in the interval tree. */
5414
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
69 #define ONLY_INTERVAL_P(i) (ROOT_INTERVAL_P ((i)) && LEAF_INTERVAL_P ((i)))
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
70
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
71 /* True if this interval has both left and right children. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
72 #define BOTH_KIDS_P(i) ((i)->left != NULL_INTERVAL \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
73 && (i)->right != NULL_INTERVAL)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
74
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
75 /* 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
76 children in the tree. This is zero if the interval is null. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
77 #define TOTAL_LENGTH(i) ((i) == NULL_INTERVAL ? 0 : (i)->total_length)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
78
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
79 /* The size of text represented by this interval alone. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
80 #define LENGTH(i) ((i) == NULL_INTERVAL ? 0 : (TOTAL_LENGTH ((i)) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
81 - TOTAL_LENGTH ((i)->right) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
82 - TOTAL_LENGTH ((i)->left)))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
83
10112
3fc246695491 (INTERVAL_LAST_POS): Don't subtract 1 here.
Richard M. Stallman <rms@gnu.org>
parents: 9142
diff changeset
84 /* The position of the character just past the end of I. Note that
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
85 the position cache i->position must be valid for this to work. */
10112
3fc246695491 (INTERVAL_LAST_POS): Don't subtract 1 here.
Richard M. Stallman <rms@gnu.org>
parents: 9142
diff changeset
86 #define INTERVAL_LAST_POS(i) ((i)->position + LENGTH ((i)))
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
87
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
88 /* The total size of the left subtree of this interval. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
89 #define LEFT_TOTAL_LENGTH(i) ((i)->left ? (i)->left->total_length : 0)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
90
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
91 /* The total size of the right subtree of this interval. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
92 #define RIGHT_TOTAL_LENGTH(i) ((i)->right ? (i)->right->total_length : 0)
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
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
95 /* These macros are for dealing with the interval properties. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
96
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
97 /* 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
98 or having no properties. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
99 #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
100
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
101 /* Reset this interval to its vanilla, or no-property state. */
5414
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
102 #define RESET_INTERVAL(i) \
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
103 { \
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
104 (i)->total_length = (i)->position = 0; \
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
105 (i)->left = (i)->right = NULL_INTERVAL; \
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
106 (i)->parent = NULL_INTERVAL; \
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
107 (i)->write_protect = 0; \
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
108 (i)->visible = 0; \
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
109 (i)->front_sticky = (i)->rear_sticky = 0; \
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
110 (i)->plist = Qnil; \
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
111 }
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
112
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
113 /* Copy the cached property values of interval FROM to interval TO. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
114 #define COPY_INTERVAL_CACHE(from,to) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
115 { \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
116 (to)->write_protect = (from)->write_protect; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
117 (to)->visible = (from)->visible; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
118 (to)->front_sticky = (from)->front_sticky; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
119 (to)->rear_sticky = (from)->rear_sticky; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
120 }
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
121
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
122 /* Copy only the set bits of FROM's cache. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
123 #define MERGE_INTERVAL_CACHE(from,to) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
124 { \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
125 if ((from)->write_protect) (to)->write_protect = 1; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
126 if ((from)->visible) (to)->visible = 1; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
127 if ((from)->front_sticky) (to)->front_sticky = 1; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
128 if ((from)->rear_sticky) (to)->rear_sticky = 1; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
129 }
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
130
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
131 /* Macro determining whether the properties of an interval being
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
132 inserted should be merged with the properties of the text where
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
133 they are being inserted. */
4382
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
134 #define MERGE_INSERTIONS(i) 1
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
135
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
136 /* Macro determining if an invisible interval should be displayed
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
137 as a special glyph, or not at all. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
138 #define DISPLAY_INVISIBLE_GLYPH(i) 0
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
139
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
140 /* Is this interval visible? Replace later with cache access */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
141 #define INTERVAL_VISIBLE_P(i) \
3534
2323f2160053 (INTERVAL_VISIBLE_P): Use textget.
Richard M. Stallman <rms@gnu.org>
parents: 2961
diff changeset
142 (! NULL_INTERVAL_P (i) && NILP (textget ((i)->plist, Qinvisible)))
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
143
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
144 /* 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
145 #define INTERVAL_WRITABLE_P(i) \
f6eeb536beda (INTERVAL_WRITABLE_P): Fix backwards tests.
Richard M. Stallman <rms@gnu.org>
parents: 3534
diff changeset
146 (! NULL_INTERVAL_P (i) \
f6eeb536beda (INTERVAL_WRITABLE_P): Fix backwards tests.
Richard M. Stallman <rms@gnu.org>
parents: 3534
diff changeset
147 && (NILP (textget ((i)->plist, Qread_only)) \
f6eeb536beda (INTERVAL_WRITABLE_P): Fix backwards tests.
Richard M. Stallman <rms@gnu.org>
parents: 3534
diff changeset
148 || ((CONSP (Vinhibit_read_only) \
f6eeb536beda (INTERVAL_WRITABLE_P): Fix backwards tests.
Richard M. Stallman <rms@gnu.org>
parents: 3534
diff changeset
149 ? !NILP (Fmemq (textget ((i)->plist, Qread_only), \
f6eeb536beda (INTERVAL_WRITABLE_P): Fix backwards tests.
Richard M. Stallman <rms@gnu.org>
parents: 3534
diff changeset
150 Vinhibit_read_only)) \
f6eeb536beda (INTERVAL_WRITABLE_P): Fix backwards tests.
Richard M. Stallman <rms@gnu.org>
parents: 3534
diff changeset
151 : !NILP (Vinhibit_read_only))))) \
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
152
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
153 /* Macros to tell whether insertions before or after this interval
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
154 should stick to it. */
4382
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
155 /* Replace later with cache access */
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
156 /*#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
157 #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
158 #define FRONT_STICKY_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, Qfront_sticky)))
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
160 #define END_NONSTICKY_P(i) \
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
161 (! NULL_INTERVAL_P (i) && ! NILP (textget ((i)->plist, Qrear_nonsticky)))
16739
41dc4644dec9 (FRONT_NONSTICKY_P): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
162 #define FRONT_NONSTICKY_P(i) \
41dc4644dec9 (FRONT_NONSTICKY_P): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
163 (! NULL_INTERVAL_P (i) && ! EQ (Qt, textget ((i)->plist, Qfront_sticky)))
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
165
10963
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
166 /* If PROP is the `invisible' property of a character,
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
167 this is 1 if the character should be treated as invisible. */
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
168
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
169 #define TEXT_PROP_MEANS_INVISIBLE(prop) \
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
170 (EQ (current_buffer->invisibility_spec, Qt) \
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
171 ? ! NILP (prop) \
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
172 : invisible_p (prop, current_buffer->invisibility_spec))
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
173
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
174 /* If PROP is the `invisible' property of a character,
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
175 this is 1 if the character should be treated as invisible
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
176 and should have an ellipsis. */
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
177
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
178 #define TEXT_PROP_MEANS_INVISIBLE_WITH_ELLIPSIS(prop) \
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
179 (EQ (current_buffer->invisibility_spec, Qt) \
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
180 ? 0 \
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
181 : invisible_ellipsis_p (prop, current_buffer->invisibility_spec))
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
182
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
183 /* Declared in alloc.c */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
184
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
185 extern INTERVAL make_interval ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
186
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
187 /* Declared in intervals.c */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
188
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
189 extern INTERVAL create_root_interval ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
190 extern void copy_properties ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
191 extern int intervals_equal ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
192 extern void traverse_intervals ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
193 extern INTERVAL split_interval_right (), split_interval_left ();
1314
4cbe6db1041e * intervals.h: Declare `copy_intervals()'.
Joseph Arceneaux <jla@gnu.org>
parents: 1287
diff changeset
194 extern INLINE INTERVAL find_interval ();
4cbe6db1041e * intervals.h: Declare `copy_intervals()'.
Joseph Arceneaux <jla@gnu.org>
parents: 1287
diff changeset
195 extern INTERVAL next_interval (), previous_interval ();
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
196 extern INTERVAL merge_interval_left (), merge_interval_right ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
197 extern void delete_interval ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
198 extern INLINE void offset_intervals ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
199 extern void graft_intervals_into_buffer ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
200 extern void set_point ();
1314
4cbe6db1041e * intervals.h: Declare `copy_intervals()'.
Joseph Arceneaux <jla@gnu.org>
parents: 1287
diff changeset
201 extern INLINE void temp_set_point ();
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
202 extern void verify_interval_modification ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
203 extern INTERVAL balance_intervals ();
1314
4cbe6db1041e * intervals.h: Declare `copy_intervals()'.
Joseph Arceneaux <jla@gnu.org>
parents: 1287
diff changeset
204 extern INLINE void copy_intervals_to_string ();
4cbe6db1041e * intervals.h: Declare `copy_intervals()'.
Joseph Arceneaux <jla@gnu.org>
parents: 1287
diff changeset
205 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
206 extern Lisp_Object textget ();
79a2651d9de3 Declare Qcategory, Qlocal_map. Declare textget, get_local_map.
Richard M. Stallman <rms@gnu.org>
parents: 1970
diff changeset
207 extern Lisp_Object get_local_map ();
17462
a609ccd7eefb (update_interval): New function declaration.
Richard M. Stallman <rms@gnu.org>
parents: 16739
diff changeset
208 extern INTERVAL update_interval ();
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
209
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
210 /* Declared in textprop.c */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
211
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
212 /* Types of hooks. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
213 extern Lisp_Object Qmouse_left;
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
214 extern Lisp_Object Qmouse_entered;
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
215 extern Lisp_Object Qpoint_left;
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
216 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
217 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
218 extern Lisp_Object Qcategory;
79a2651d9de3 Declare Qcategory, Qlocal_map. Declare textget, get_local_map.
Richard M. Stallman <rms@gnu.org>
parents: 1970
diff changeset
219 extern Lisp_Object Qlocal_map;
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
220
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
221 /* Visual properties text (including strings) may have. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
222 extern Lisp_Object Qforeground, Qbackground, Qfont, Qunderline, Qstipple;
6754
09278b56193e (Qintangible): New symbol, replacing Qhidden.
Karl Heuer <kwzh@gnu.org>
parents: 5414
diff changeset
223 extern Lisp_Object Qinvisible, Qintangible, Qread_only;
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
224
4241
64cfb6d569e4 (Vinhibit_point_motion_hooks): Declared.
Richard M. Stallman <rms@gnu.org>
parents: 4211
diff changeset
225 extern Lisp_Object Vinhibit_point_motion_hooks;
11132
e4770cb46861 Vdefault_text_properties: name changed from Vdefault_properties.
Boris Goldowsky <boris@gnu.org>
parents: 10963
diff changeset
226 extern Lisp_Object Vdefault_text_properties;
4241
64cfb6d569e4 (Vinhibit_point_motion_hooks): Declared.
Richard M. Stallman <rms@gnu.org>
parents: 4211
diff changeset
227
4382
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
228 /* Sticky properties */
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
229 extern Lisp_Object Qfront_sticky, Qrear_nonsticky;
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
230
8847
7327513b377b Declare some functions.
Karl Heuer <kwzh@gnu.org>
parents: 8761
diff changeset
231 extern Lisp_Object Fget_char_property (), Fget_text_property ();
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
232 extern Lisp_Object Ftext_properties_at ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
233 extern Lisp_Object Fnext_property_change (), Fprevious_property_change ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
234 extern Lisp_Object Fadd_text_properties (), Fset_text_properties ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
235 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
236 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
237 extern Lisp_Object copy_text_properties ();
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
238
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
239 extern void syms_of_textprop ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
240
1287
02bd1ea07b17 * intervals.h: Declare temp_set_point.
Joseph Arceneaux <jla@gnu.org>
parents: 1211
diff changeset
241 #else /* don't support text properties */
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
242
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
243 #define NULL_INTERVAL_P(i) 1
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
244 #define INTERVAL_SIZE 0
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
245 #define INTERVAL_PTR_SIZE 0
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
246
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
247 #define copy_intervals_to_string(string,buffer,position,length)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
248 #define verify_interval_modification(buffer,start,end)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
249 #define insert_interval_copy(source,position,end,sink,at)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
250 #define graft_intervals_into_buffer(tree,position,bufferptr)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
251 #define offset_intervals(buffer,position,length)
1314
4cbe6db1041e * intervals.h: Declare `copy_intervals()'.
Joseph Arceneaux <jla@gnu.org>
parents: 1287
diff changeset
252 #define copy_intervals(tree,start,length)
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
253
1287
02bd1ea07b17 * intervals.h: Declare temp_set_point.
Joseph Arceneaux <jla@gnu.org>
parents: 1211
diff changeset
254 #define syms_of_textprop()
02bd1ea07b17 * intervals.h: Declare temp_set_point.
Joseph Arceneaux <jla@gnu.org>
parents: 1211
diff changeset
255
02bd1ea07b17 * intervals.h: Declare temp_set_point.
Joseph Arceneaux <jla@gnu.org>
parents: 1211
diff changeset
256 #endif /* don't support text properties */