annotate src/intervals.h @ 85414:f79d3fec6de7

(encoded-kbd-setup-display): Be careful not to remove keymaps that just happen to inherit from one of ours. When setting up our keymap, make sure it won't be accidentally modified by someone else.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Thu, 18 Oct 2007 18:53:28 +0000
parents 922696f363b0
children fc2bcd2a8aad 65663fcd2caa f55f9811f5d7
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.
75227
e90d04cd455a Update copyright for years from Emacs 21 to present (mainly adding
Glenn Morris <rgm@gnu.org>
parents: 68651
diff changeset
2 Copyright (C) 1993, 1994, 2000, 2001, 2002, 2003, 2004,
e90d04cd455a Update copyright for years from Emacs 21 to present (mainly adding
Glenn Morris <rgm@gnu.org>
parents: 68651
diff changeset
3 2005, 2006, 2007 Free Software Foundation, Inc.
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
4
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
5 This file is part of GNU Emacs.
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
6
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
7 GNU Emacs is free software; you can redistribute it and/or modify
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
8 it under the terms of the GNU General Public License as published by
78260
922696f363b0 Switch license to GPLv3 or later.
Glenn Morris <rgm@gnu.org>
parents: 75227
diff changeset
9 the Free Software Foundation; either version 3, or (at your option)
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
10 any later version.
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
11
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
15 GNU General Public License for more details.
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
16
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
18 along with GNU Emacs; see the file COPYING. If not, write to
64084
a8fa7c632ee4 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 58090
diff changeset
19 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
a8fa7c632ee4 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 58090
diff changeset
20 Boston, MA 02110-1301, USA. */
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
21
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
22 #include "dispextern.h"
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
23
28269
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
24 #define NULL_INTERVAL ((INTERVAL)0)
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
25 #define INTERVAL_DEFAULT NULL_INTERVAL
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
26
51856
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
27 /* Basic data type for use of intervals. */
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
28
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
29 struct interval
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
30 {
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
31 /* The first group of entries deal with the tree structure. */
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
32
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
33 unsigned EMACS_INT total_length; /* Length of myself and both children. */
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
34 unsigned EMACS_INT position; /* Cache of interval's character position. */
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
35 /* This field is usually updated
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
36 simultaneously with an interval
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
37 traversal, there is no guarantee
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
38 that it is valid for a random
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
39 interval. */
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
40 struct interval *left; /* Intervals which precede me. */
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
41 struct interval *right; /* Intervals which succeed me. */
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
42
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
43 /* Parent in the tree, or the Lisp_Object containing this interval tree. */
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
44 union
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
45 {
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
46 struct interval *interval;
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
47 Lisp_Object obj;
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
48 } up;
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
49 unsigned int up_obj : 1;
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
50
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
51 unsigned gcmarkbit : 1;
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
52
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
53 /* The remaining components are `properties' of the interval.
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
54 The first four are duplicates for things which can be on the list,
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
55 for purposes of speed. */
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
56
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
57 unsigned int write_protect : 1; /* Non-zero means can't modify. */
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
58 unsigned int visible : 1; /* Zero means don't display. */
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
59 unsigned int front_sticky : 1; /* Non-zero means text inserted just
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
60 before this interval goes into it. */
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
61 unsigned int rear_sticky : 1; /* Likewise for just after it. */
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
62
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
63 /* Properties of this interval.
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
64 The mark bit on this field says whether this particular interval
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
65 tree node has been visited. Since intervals should never be
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
66 shared, GC aborts if it seems to have visited an interval twice. */
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
67 Lisp_Object plist;
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
68 };
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
69
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
70 /* These are macros for dealing with the interval tree. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
71
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
72 /* Size of the structure used to represent an interval */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
73 #define INTERVAL_SIZE (sizeof (struct 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 /* Size of a pointer to an interval structure */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
76 #define INTERVAL_PTR_SIZE (sizeof (struct interval *))
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 /* 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
79 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
80 interval tree). */
18613
614b916ff5bf Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 17462
diff changeset
81 #ifdef NO_UNION_TYPE
28269
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
82 #define INT_LISPLIKE(i) (BUFFERP ((Lisp_Object)(i)) \
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
83 || STRINGP ((Lisp_Object)(i)))
18613
614b916ff5bf Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 17462
diff changeset
84 #else
28269
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
85 #define INT_LISPLIKE(i) (BUFFERP ((Lisp_Object){(EMACS_INT)(i)}) \
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
86 || STRINGP ((Lisp_Object){(EMACS_INT)(i)}))
18613
614b916ff5bf Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 17462
diff changeset
87 #endif
58090
6f9ee118f2bb (NULL_INTERVAL_P): Add separate version when
Kim F. Storm <storm@cua.dk>
parents: 53202
diff changeset
88
6f9ee118f2bb (NULL_INTERVAL_P): Add separate version when
Kim F. Storm <storm@cua.dk>
parents: 53202
diff changeset
89 #ifdef ENABLE_CHECKING
51856
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
90 #define NULL_INTERVAL_P(i) \
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
91 (CHECK (!INT_LISPLIKE (i), "non-interval"), (i) == NULL_INTERVAL)
28406
451721e784a8 Stop assuming interval pointers and lisp objects can be distinguished by
Ken Raeburn <raeburn@raeburn.org>
parents: 28269
diff changeset
92 /* old #define NULL_INTERVAL_P(i) ((i) == NULL_INTERVAL || INT_LISPLIKE (i)) */
58090
6f9ee118f2bb (NULL_INTERVAL_P): Add separate version when
Kim F. Storm <storm@cua.dk>
parents: 53202
diff changeset
93 #else
6f9ee118f2bb (NULL_INTERVAL_P): Add separate version when
Kim F. Storm <storm@cua.dk>
parents: 53202
diff changeset
94 #define NULL_INTERVAL_P(i) ((i) == NULL_INTERVAL)
6f9ee118f2bb (NULL_INTERVAL_P): Add separate version when
Kim F. Storm <storm@cua.dk>
parents: 53202
diff changeset
95 #endif
1164
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 interval has no right child. */
5414
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
98 #define NULL_RIGHT_CHILD(i) ((i)->right == NULL_INTERVAL)
1164
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 /* 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
101 #define NULL_LEFT_CHILD(i) ((i)->left == NULL_INTERVAL)
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
102
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
103 /* True if this interval has no parent. */
28406
451721e784a8 Stop assuming interval pointers and lisp objects can be distinguished by
Ken Raeburn <raeburn@raeburn.org>
parents: 28269
diff changeset
104 #define NULL_PARENT(i) ((i)->up_obj || (i)->up.interval == 0)
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
105
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
106 /* True if this interval is the left child of some other interval. */
28269
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
107 #define AM_LEFT_CHILD(i) (! NULL_PARENT (i) \
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
108 && INTERVAL_PARENT (i)->left == (i))
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
109
5414
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
110 /* True if this interval is the right child of some other interval. */
28269
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
111 #define AM_RIGHT_CHILD(i) (! NULL_PARENT (i) \
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
112 && INTERVAL_PARENT (i)->right == (i))
1164
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 /* True if this interval has no children. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
115 #define LEAF_INTERVAL_P(i) ((i)->left == NULL_INTERVAL \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
116 && (i)->right == NULL_INTERVAL)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
117
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
118 /* True if this interval has no parent and is therefore the root. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
119 #define ROOT_INTERVAL_P(i) (NULL_PARENT (i))
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 /* 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
122 #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
123
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
124 /* True if this interval has both left and right children. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
125 #define BOTH_KIDS_P(i) ((i)->left != NULL_INTERVAL \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
126 && (i)->right != NULL_INTERVAL)
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 /* 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
129 children in the tree. This is zero if the interval is null. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
130 #define TOTAL_LENGTH(i) ((i) == NULL_INTERVAL ? 0 : (i)->total_length)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
131
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
132 /* The size of text represented by this interval alone. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
133 #define LENGTH(i) ((i) == NULL_INTERVAL ? 0 : (TOTAL_LENGTH ((i)) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
134 - TOTAL_LENGTH ((i)->right) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
135 - TOTAL_LENGTH ((i)->left)))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
136
10112
3fc246695491 (INTERVAL_LAST_POS): Don't subtract 1 here.
Richard M. Stallman <rms@gnu.org>
parents: 9142
diff changeset
137 /* 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
138 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
139 #define INTERVAL_LAST_POS(i) ((i)->position + LENGTH ((i)))
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
140
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
141 /* The total size of the left subtree of this interval. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
142 #define LEFT_TOTAL_LENGTH(i) ((i)->left ? (i)->left->total_length : 0)
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 /* The total size of the right subtree of this interval. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
145 #define RIGHT_TOTAL_LENGTH(i) ((i)->right ? (i)->right->total_length : 0)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
146
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
147
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
148 /* These macros are for dealing with the interval properties. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
149
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
150 /* 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
151 or having no properties. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
152 #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
153
28269
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
154 /* Test what type of parent we have. Three possibilities: another
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
155 interval, a buffer or string object, or NULL_INTERVAL. */
28406
451721e784a8 Stop assuming interval pointers and lisp objects can be distinguished by
Ken Raeburn <raeburn@raeburn.org>
parents: 28269
diff changeset
156 #define INTERVAL_HAS_PARENT(i) ((i)->up_obj == 0 && (i)->up.interval != 0)
451721e784a8 Stop assuming interval pointers and lisp objects can be distinguished by
Ken Raeburn <raeburn@raeburn.org>
parents: 28269
diff changeset
157 #define INTERVAL_HAS_OBJECT(i) ((i)->up_obj)
28269
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
158
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
159 /* Set/get parent of an interval.
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
160
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
161 The choice of macros is dependent on the type needed. Don't add
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
162 casts to get around this, it will break some development work in
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
163 progress. */
51856
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
164 #define SET_INTERVAL_PARENT(i,p) \
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
165 (eassert (!INT_LISPLIKE (p)), (i)->up_obj = 0, (i)->up.interval = (p))
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
166 #define SET_INTERVAL_OBJECT(i,o) \
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
167 (eassert (BUFFERP (o) || STRINGP (o)), (i)->up_obj = 1, (i)->up.obj = (o))
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
168 #define INTERVAL_PARENT(i) \
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
169 (eassert ((i) != 0 && (i)->up_obj == 0),(i)->up.interval)
28509
022a7fd54bfe * intervals.h (SET_INTERVAL_PARENT): Use INT_LISPLIKE to test for a pointer
Ken Raeburn <raeburn@raeburn.org>
parents: 28406
diff changeset
170 #define GET_INTERVAL_OBJECT(d,s) (eassert((s)->up_obj == 1), (d) = (s)->up.obj)
28269
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
171
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
172 /* Make the parent of D be whatever the parent of S is, regardless of
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
173 type. This is used when balancing an interval tree. */
51856
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
174 #define COPY_INTERVAL_PARENT(d,s) \
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
175 ((d)->up = (s)->up, (d)->up_obj = (s)->up_obj)
28269
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
176
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
177 /* Get the parent interval, if any, otherwise a null pointer. Useful
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
178 for walking up to the root in a "for" loop; use this to get the
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
179 "next" value, and test the result to see if it's NULL_INTERVAL. */
51856
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
180 #define INTERVAL_PARENT_OR_NULL(i) \
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
181 (INTERVAL_HAS_PARENT (i) ? INTERVAL_PARENT (i) : 0)
28269
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
182
50470
c7a0b787faef (CHECK_TOTAL_LENGTH): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 46507
diff changeset
183 /* Abort if interval I's size is negative. */
c7a0b787faef (CHECK_TOTAL_LENGTH): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 46507
diff changeset
184 #define CHECK_TOTAL_LENGTH(i) \
c7a0b787faef (CHECK_TOTAL_LENGTH): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 46507
diff changeset
185 if ((int) (i)->total_length < 0) abort (); else
c7a0b787faef (CHECK_TOTAL_LENGTH): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 46507
diff changeset
186
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
187 /* 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
188 #define RESET_INTERVAL(i) \
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
189 { \
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
190 (i)->total_length = (i)->position = 0; \
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
191 (i)->left = (i)->right = NULL_INTERVAL; \
51041
4370ce3fabb3 (text_property_stickiness): New arg `buffer'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50470
diff changeset
192 SET_INTERVAL_PARENT (i, NULL_INTERVAL); \
5414
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
193 (i)->write_protect = 0; \
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
194 (i)->visible = 0; \
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
195 (i)->front_sticky = (i)->rear_sticky = 0; \
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
196 (i)->plist = Qnil; \
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
197 }
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
198
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
199 /* Copy the cached property values of interval FROM to interval TO. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
200 #define COPY_INTERVAL_CACHE(from,to) \
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 (to)->write_protect = (from)->write_protect; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
203 (to)->visible = (from)->visible; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
204 (to)->front_sticky = (from)->front_sticky; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
205 (to)->rear_sticky = (from)->rear_sticky; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
206 }
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
207
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
208 /* Copy only the set bits of FROM's cache. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
209 #define MERGE_INTERVAL_CACHE(from,to) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
210 { \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
211 if ((from)->write_protect) (to)->write_protect = 1; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
212 if ((from)->visible) (to)->visible = 1; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
213 if ((from)->front_sticky) (to)->front_sticky = 1; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
214 if ((from)->rear_sticky) (to)->rear_sticky = 1; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
215 }
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
216
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
217 /* Macro determining whether the properties of an interval being
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
218 inserted should be merged with the properties of the text where
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
219 they are being inserted. */
4382
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
220 #define MERGE_INSERTIONS(i) 1
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 /* Macro determining if an invisible interval should be displayed
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
223 as a special glyph, or not at all. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
224 #define DISPLAY_INVISIBLE_GLYPH(i) 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 /* Is this interval visible? Replace later with cache access */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
227 #define INTERVAL_VISIBLE_P(i) \
3534
2323f2160053 (INTERVAL_VISIBLE_P): Use textget.
Richard M. Stallman <rms@gnu.org>
parents: 2961
diff changeset
228 (! NULL_INTERVAL_P (i) && NILP (textget ((i)->plist, Qinvisible)))
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
229
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
230 /* 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
231 #define INTERVAL_WRITABLE_P(i) \
f6eeb536beda (INTERVAL_WRITABLE_P): Fix backwards tests.
Richard M. Stallman <rms@gnu.org>
parents: 3534
diff changeset
232 (! NULL_INTERVAL_P (i) \
f6eeb536beda (INTERVAL_WRITABLE_P): Fix backwards tests.
Richard M. Stallman <rms@gnu.org>
parents: 3534
diff changeset
233 && (NILP (textget ((i)->plist, Qread_only)) \
f6eeb536beda (INTERVAL_WRITABLE_P): Fix backwards tests.
Richard M. Stallman <rms@gnu.org>
parents: 3534
diff changeset
234 || ((CONSP (Vinhibit_read_only) \
f6eeb536beda (INTERVAL_WRITABLE_P): Fix backwards tests.
Richard M. Stallman <rms@gnu.org>
parents: 3534
diff changeset
235 ? !NILP (Fmemq (textget ((i)->plist, Qread_only), \
f6eeb536beda (INTERVAL_WRITABLE_P): Fix backwards tests.
Richard M. Stallman <rms@gnu.org>
parents: 3534
diff changeset
236 Vinhibit_read_only)) \
f6eeb536beda (INTERVAL_WRITABLE_P): Fix backwards tests.
Richard M. Stallman <rms@gnu.org>
parents: 3534
diff changeset
237 : !NILP (Vinhibit_read_only))))) \
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 /* Macros to tell whether insertions before or after this interval
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
240 should stick to it. */
4382
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
241 /* Replace later with cache access */
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
242 /*#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
243 #define END_STICKY_P(i) ((i)->rear_sticky != 0)*/
26861
7d3ca36657cb Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26404
diff changeset
244 /* As we now have Vtext_property_default_nonsticky, these macros are
7d3ca36657cb Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26404
diff changeset
245 unreliable now. Currently, they are never used. */
4382
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
246 #define FRONT_STICKY_P(i) \
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
247 (! 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
248 #define END_NONSTICKY_P(i) \
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
249 (! 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
250 #define FRONT_NONSTICKY_P(i) \
41dc4644dec9 (FRONT_NONSTICKY_P): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
251 (! NULL_INTERVAL_P (i) && ! EQ (Qt, textget ((i)->plist, Qfront_sticky)))
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
252
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
253
10963
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
254 /* If PROP is the `invisible' property of a character,
39939
758ba590ccfe (TEXT_PROP_MEANS_INVISIBLE_WITH_ELLIPSIS)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39926
diff changeset
255 this is 1 if the character should be treated as invisible,
758ba590ccfe (TEXT_PROP_MEANS_INVISIBLE_WITH_ELLIPSIS)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39926
diff changeset
256 and 2 if it is invisible but with an ellipsis. */
10963
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
257
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
258 #define TEXT_PROP_MEANS_INVISIBLE(prop) \
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
259 (EQ (current_buffer->invisibility_spec, Qt) \
39855
cfc5c411cd06 (TEXT_PROP_MEANS_INVISIBLE_NOELLIPSIS): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35257
diff changeset
260 ? !NILP (prop) \
10963
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
261 : invisible_p (prop, current_buffer->invisibility_spec))
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
262
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
263 /* Declared in alloc.c */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
264
20318
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
265 extern INTERVAL make_interval P_ ((void));
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
266
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
267 /* Declared in intervals.c */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
268
20318
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
269 extern INTERVAL create_root_interval P_ ((Lisp_Object));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
270 extern void copy_properties P_ ((INTERVAL, INTERVAL));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
271 extern int intervals_equal P_ ((INTERVAL, INTERVAL));
39855
cfc5c411cd06 (TEXT_PROP_MEANS_INVISIBLE_NOELLIPSIS): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35257
diff changeset
272 extern void traverse_intervals P_ ((INTERVAL, int,
cfc5c411cd06 (TEXT_PROP_MEANS_INVISIBLE_NOELLIPSIS): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35257
diff changeset
273 void (*) (INTERVAL, Lisp_Object),
cfc5c411cd06 (TEXT_PROP_MEANS_INVISIBLE_NOELLIPSIS): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35257
diff changeset
274 Lisp_Object));
cfc5c411cd06 (TEXT_PROP_MEANS_INVISIBLE_NOELLIPSIS): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35257
diff changeset
275 extern void traverse_intervals_noorder P_ ((INTERVAL,
20318
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
276 void (*) (INTERVAL, Lisp_Object),
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
277 Lisp_Object));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
278 extern INTERVAL split_interval_right P_ ((INTERVAL, int));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
279 extern INTERVAL split_interval_left P_ ((INTERVAL, int));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
280 extern INTERVAL find_interval P_ ((INTERVAL, int));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
281 extern INTERVAL next_interval P_ ((INTERVAL));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
282 extern INTERVAL previous_interval P_ ((INTERVAL));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
283 extern INTERVAL merge_interval_left P_ ((INTERVAL));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
284 extern INTERVAL merge_interval_right P_ ((INTERVAL));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
285 extern void delete_interval P_ ((INTERVAL));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
286 extern INLINE void offset_intervals P_ ((struct buffer *, int, int));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
287 extern void graft_intervals_into_buffer P_ ((INTERVAL, int, int,
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
288 struct buffer *, int));
20550
75e0cdf05001 (set_point, temp_set_point): Swap args in decl.
Richard M. Stallman <rms@gnu.org>
parents: 20318
diff changeset
289 extern void set_point P_ ((struct buffer *, int));
75e0cdf05001 (set_point, temp_set_point): Swap args in decl.
Richard M. Stallman <rms@gnu.org>
parents: 20318
diff changeset
290 extern INLINE void temp_set_point P_ ((struct buffer *, int));
75e0cdf05001 (set_point, temp_set_point): Swap args in decl.
Richard M. Stallman <rms@gnu.org>
parents: 20318
diff changeset
291 extern void set_point_both P_ ((struct buffer *, int, int));
75e0cdf05001 (set_point, temp_set_point): Swap args in decl.
Richard M. Stallman <rms@gnu.org>
parents: 20318
diff changeset
292 extern INLINE void temp_set_point_both P_ ((struct buffer *, int, int));
20318
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
293 extern void verify_interval_modification P_ ((struct buffer *, int, int));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
294 extern INTERVAL balance_intervals P_ ((INTERVAL));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
295 extern INLINE void copy_intervals_to_string P_ ((Lisp_Object, struct buffer *,
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
296 int, int));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
297 extern INTERVAL copy_intervals P_ ((INTERVAL, int, int));
58090
6f9ee118f2bb (NULL_INTERVAL_P): Add separate version when
Kim F. Storm <storm@cua.dk>
parents: 53202
diff changeset
298 extern int compare_string_intervals P_ ((Lisp_Object, Lisp_Object));
20318
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
299 extern Lisp_Object textget P_ ((Lisp_Object, Lisp_Object));
45681
322be4c4e11d (lookup_char_property): Declare.
Colin Walters <walters@gnu.org>
parents: 43895
diff changeset
300 extern Lisp_Object lookup_char_property P_ ((Lisp_Object, Lisp_Object, int));
20318
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
301 extern void move_if_not_intangible P_ ((int));
26861
7d3ca36657cb Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26404
diff changeset
302 extern int get_property_and_range P_ ((int, Lisp_Object, Lisp_Object *,
7d3ca36657cb Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26404
diff changeset
303 int *, int *, Lisp_Object));
35257
187c0b3da663 (enum map_property): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 32848
diff changeset
304 extern Lisp_Object get_local_map P_ ((int, struct buffer *, Lisp_Object));
20318
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
305 extern INTERVAL update_interval P_ ((INTERVAL, int));
21515
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
306 extern void set_intervals_multibyte P_ ((int));
25023
6e3de2f65704 Add function prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 21515
diff changeset
307 extern INTERVAL validate_interval_range P_ ((Lisp_Object, Lisp_Object *,
6e3de2f65704 Add function prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 21515
diff changeset
308 Lisp_Object *, int));
20318
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
309
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
310 /* Defined in xdisp.c */
39855
cfc5c411cd06 (TEXT_PROP_MEANS_INVISIBLE_NOELLIPSIS): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35257
diff changeset
311 extern int invisible_p P_ ((Lisp_Object, Lisp_Object));
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
312
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
313 /* Declared in textprop.c */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
314
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
315 /* Types of hooks. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
316 extern Lisp_Object Qmouse_left;
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
317 extern Lisp_Object Qmouse_entered;
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
318 extern Lisp_Object Qpoint_left;
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
319 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
320 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
321 extern Lisp_Object Qcategory;
79a2651d9de3 Declare Qcategory, Qlocal_map. Declare textget, get_local_map.
Richard M. Stallman <rms@gnu.org>
parents: 1970
diff changeset
322 extern Lisp_Object Qlocal_map;
29279
618b9ba6a8c2 (map_property): New enum.
Dave Love <fx@gnu.org>
parents: 28509
diff changeset
323 extern Lisp_Object Qkeymap;
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
324
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
325 /* Visual properties text (including strings) may have. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
326 extern Lisp_Object Qforeground, Qbackground, Qfont, Qunderline, Qstipple;
6754
09278b56193e (Qintangible): New symbol, replacing Qhidden.
Karl Heuer <kwzh@gnu.org>
parents: 5414
diff changeset
327 extern Lisp_Object Qinvisible, Qintangible, Qread_only;
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
328
4241
64cfb6d569e4 (Vinhibit_point_motion_hooks): Declared.
Richard M. Stallman <rms@gnu.org>
parents: 4211
diff changeset
329 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
330 extern Lisp_Object Vdefault_text_properties;
45681
322be4c4e11d (lookup_char_property): Declare.
Colin Walters <walters@gnu.org>
parents: 43895
diff changeset
331 extern Lisp_Object Vchar_property_alias_alist;
26861
7d3ca36657cb Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26404
diff changeset
332 extern Lisp_Object Vtext_property_default_nonsticky;
4241
64cfb6d569e4 (Vinhibit_point_motion_hooks): Declared.
Richard M. Stallman <rms@gnu.org>
parents: 4211
diff changeset
333
4382
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
334 /* Sticky properties */
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
335 extern Lisp_Object Qfront_sticky, Qrear_nonsticky;
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
336
21515
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
337 EXFUN (Fget_char_property, 3);
53202
8d8fae1e281a Add EXFUN for Fget_char_property_and_overlay.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
338 EXFUN (Fget_char_property_and_overlay, 3);
21515
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
339 EXFUN (Fget_text_property, 3);
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
340 EXFUN (Ftext_properties_at, 2);
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
341 EXFUN (Fnext_property_change, 3);
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
342 EXFUN (Fprevious_property_change, 3);
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
343 EXFUN (Fadd_text_properties, 4);
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
344 EXFUN (Fset_text_properties, 4);
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
345 EXFUN (Fremove_text_properties, 4);
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
346 EXFUN (Ftext_property_any, 5);
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
347 EXFUN (Ftext_property_not_all, 5);
30679
4b6b1069c0ff (Fprevious_single_char_property_change): Declare.
Ken Raeburn <raeburn@raeburn.org>
parents: 29279
diff changeset
348 EXFUN (Fprevious_single_char_property_change, 4);
21515
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
349 extern Lisp_Object copy_text_properties P_ ((Lisp_Object, Lisp_Object,
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
350 Lisp_Object, Lisp_Object,
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
351 Lisp_Object, Lisp_Object));
40924
42cb41c42e7b Declare set_text_properties and set_text_properties_1.
Richard M. Stallman <rms@gnu.org>
parents: 39939
diff changeset
352 extern Lisp_Object set_text_properties P_ ((Lisp_Object, Lisp_Object,
42cb41c42e7b Declare set_text_properties and set_text_properties_1.
Richard M. Stallman <rms@gnu.org>
parents: 39939
diff changeset
353 Lisp_Object, Lisp_Object,
42cb41c42e7b Declare set_text_properties and set_text_properties_1.
Richard M. Stallman <rms@gnu.org>
parents: 39939
diff changeset
354 Lisp_Object));
42cb41c42e7b Declare set_text_properties and set_text_properties_1.
Richard M. Stallman <rms@gnu.org>
parents: 39939
diff changeset
355 extern void set_text_properties_1 P_ ((Lisp_Object, Lisp_Object,
42cb41c42e7b Declare set_text_properties and set_text_properties_1.
Richard M. Stallman <rms@gnu.org>
parents: 39939
diff changeset
356 Lisp_Object, Lisp_Object, INTERVAL));
42cb41c42e7b Declare set_text_properties and set_text_properties_1.
Richard M. Stallman <rms@gnu.org>
parents: 39939
diff changeset
357
25023
6e3de2f65704 Add function prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 21515
diff changeset
358 Lisp_Object text_property_list P_ ((Lisp_Object, Lisp_Object, Lisp_Object,
6e3de2f65704 Add function prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 21515
diff changeset
359 Lisp_Object));
6e3de2f65704 Add function prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 21515
diff changeset
360 int add_text_properties_from_list P_ ((Lisp_Object, Lisp_Object, Lisp_Object));
6e3de2f65704 Add function prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 21515
diff changeset
361 void extend_property_ranges P_ ((Lisp_Object, Lisp_Object, Lisp_Object));
32848
6957ecbc11fe (get_char_property_and_overlay): Add declaration.
Miles Bader <miles@gnu.org>
parents: 30679
diff changeset
362 Lisp_Object get_char_property_and_overlay P_ ((Lisp_Object, Lisp_Object,
6957ecbc11fe (get_char_property_and_overlay): Add declaration.
Miles Bader <miles@gnu.org>
parents: 30679
diff changeset
363 Lisp_Object, Lisp_Object*));
51856
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
364 extern int text_property_stickiness P_ ((Lisp_Object prop, Lisp_Object pos,
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
365 Lisp_Object buffer));
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
366 extern Lisp_Object get_pos_property P_ ((Lisp_Object pos, Lisp_Object prop,
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
367 Lisp_Object object));
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
368
51856
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
369 extern void syms_of_textprop P_ ((void));
26861
7d3ca36657cb Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26404
diff changeset
370
7d3ca36657cb Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26404
diff changeset
371 #include "composite.h"
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51856
diff changeset
372
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51856
diff changeset
373 /* arch-tag: f0bc16c0-b084-498d-9de4-21cc8f077795
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51856
diff changeset
374 (do not change this comment) */