annotate src/intervals.h @ 106768:21fd634f447a

Make line<->pixel_y conversion macros aware of native menu/tool bars. They are placed above the internal border. This supersedes special treatment of native tool bars in the display code. This fixes wrong display position of native menu bars and bogus mouse highlighting of native tool bars, both of which can be found when internal border width is large. Also it fixes wrong flashed part on visible bell with native menu bars. * frame.h (FRAME_TOP_MARGIN_HEIGHT): New macro. (FRAME_LINE_TO_PIXEL_Y, FRAME_PIXEL_Y_TO_LINE): Take account of pseudo windows above internal border. * window.h (WINDOW_MENU_BAR_P, WINDOW_TOOL_BAR_P): New macros. (WINDOW_TOP_EDGE_Y, WINDOW_BOTTOM_EDGE_Y): Take account of pseudo windows above internal border. * xdisp.c (get_glyph_string_clip_rects, init_glyph_string): Don't treat tool bar windows specially. * xfns.c (x_set_tool_bar_lines): Take account of menu bar height. * xterm.c (x_after_update_window_line): Don't treat tool bar windows specially. (XTflash): Take account of menu bar height. * w32term.c (x_after_update_window_line): Don't treat tool bar windows specially.
author YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
date Sat, 09 Jan 2010 13:16:32 +0900
parents e038c1a8307c
children 85fd976607be
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,
100951
e038c1a8307c Add 2009 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 94994
diff changeset
3 2005, 2006, 2007, 2008, 2009 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
94994
29adfc9354e7 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93111
diff changeset
7 GNU Emacs is free software: you can redistribute it and/or modify
1164
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
94994
29adfc9354e7 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93111
diff changeset
9 the Free Software Foundation, either version 3 of the License, or
29adfc9354e7 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93111
diff changeset
10 (at your option) any later version.
1164
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
94994
29adfc9354e7 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93111
diff changeset
18 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
19
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
20 #include "dispextern.h"
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
21
28269
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
22 #define NULL_INTERVAL ((INTERVAL)0)
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
23 #define INTERVAL_DEFAULT NULL_INTERVAL
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
24
51856
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
25 /* Basic data type for use of intervals. */
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
26
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
27 struct interval
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 /* 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
30
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
31 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
32 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
33 /* This field is usually updated
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
34 simultaneously with an interval
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
35 traversal, there is no guarantee
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
36 that it is valid for a random
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
37 interval. */
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
38 struct interval *left; /* Intervals which precede me. */
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
39 struct interval *right; /* Intervals which succeed me. */
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
40
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
41 /* 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
42 union
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
43 {
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
44 struct interval *interval;
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
45 Lisp_Object obj;
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
46 } up;
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
47 unsigned int up_obj : 1;
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
48
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
49 unsigned gcmarkbit : 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 /* 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
52 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
53 for purposes of speed. */
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
54
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
55 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
56 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
57 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
58 before this interval goes into it. */
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
59 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
60
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
61 /* Properties of this interval.
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
62 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
63 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
64 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
65 Lisp_Object plist;
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
66 };
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
67
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
68 /* These are macros for dealing with the interval tree. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
69
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
70 /* Size of the structure used to represent an interval */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
71 #define INTERVAL_SIZE (sizeof (struct interval))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
72
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
73 /* Size of a pointer to an interval structure */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
74 #define INTERVAL_PTR_SIZE (sizeof (struct interval *))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
75
58090
6f9ee118f2bb (NULL_INTERVAL_P): Add separate version when
Kim F. Storm <storm@cua.dk>
parents: 53202
diff changeset
76 #define NULL_INTERVAL_P(i) ((i) == NULL_INTERVAL)
1164
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 this interval has no right child. */
5414
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
79 #define NULL_RIGHT_CHILD(i) ((i)->right == NULL_INTERVAL)
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
80
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
81 /* 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
82 #define NULL_LEFT_CHILD(i) ((i)->left == NULL_INTERVAL)
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
83
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
84 /* 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
85 #define NULL_PARENT(i) ((i)->up_obj || (i)->up.interval == 0)
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
86
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
87 /* 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
88 #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
89 && INTERVAL_PARENT (i)->left == (i))
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
90
5414
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
91 /* 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
92 #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
93 && INTERVAL_PARENT (i)->right == (i))
1164
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 /* True if this interval has no children. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
96 #define LEAF_INTERVAL_P(i) ((i)->left == NULL_INTERVAL \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
97 && (i)->right == NULL_INTERVAL)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
98
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
99 /* True if this interval has no parent and is therefore the root. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
100 #define ROOT_INTERVAL_P(i) (NULL_PARENT (i))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
101
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
102 /* 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
103 #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
104
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
105 /* True if this interval has both left and right children. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
106 #define BOTH_KIDS_P(i) ((i)->left != NULL_INTERVAL \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
107 && (i)->right != NULL_INTERVAL)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
108
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
109 /* 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
110 children in the tree. This is zero if the interval is null. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
111 #define TOTAL_LENGTH(i) ((i) == NULL_INTERVAL ? 0 : (i)->total_length)
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 /* The size of text represented by this interval alone. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
114 #define LENGTH(i) ((i) == NULL_INTERVAL ? 0 : (TOTAL_LENGTH ((i)) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
115 - TOTAL_LENGTH ((i)->right) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
116 - TOTAL_LENGTH ((i)->left)))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
117
10112
3fc246695491 (INTERVAL_LAST_POS): Don't subtract 1 here.
Richard M. Stallman <rms@gnu.org>
parents: 9142
diff changeset
118 /* 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
119 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
120 #define INTERVAL_LAST_POS(i) ((i)->position + LENGTH ((i)))
1164
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 /* The total size of the left subtree of this interval. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
123 #define LEFT_TOTAL_LENGTH(i) ((i)->left ? (i)->left->total_length : 0)
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 /* The total size of the right subtree of this interval. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
126 #define RIGHT_TOTAL_LENGTH(i) ((i)->right ? (i)->right->total_length : 0)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
127
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
128
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
129 /* These macros are for dealing with the interval properties. */
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 /* 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
132 or having no properties. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
133 #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
134
28269
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
135 /* 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
136 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
137 #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
138 #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
139
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
140 /* Set/get parent of an interval.
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
141
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
142 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
143 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
144 progress. */
51856
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
145 #define SET_INTERVAL_PARENT(i,p) \
80153
48f9158be833 (INT_LISPLIKE): Remove. It may misfire.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79759
diff changeset
146 ((i)->up_obj = 0, (i)->up.interval = (p))
51856
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
147 #define SET_INTERVAL_OBJECT(i,o) \
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
148 (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
149 #define INTERVAL_PARENT(i) \
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
150 (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
151 #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
152
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
153 /* 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
154 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
155 #define COPY_INTERVAL_PARENT(d,s) \
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
156 ((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
157
fd13be8ae190 Changes towards better type safety regarding intervals, primarily
Ken Raeburn <raeburn@raeburn.org>
parents: 26861
diff changeset
158 /* 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
159 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
160 "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
161 #define INTERVAL_PARENT_OR_NULL(i) \
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
162 (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
163
50470
c7a0b787faef (CHECK_TOTAL_LENGTH): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 46507
diff changeset
164 /* Abort if interval I's size is negative. */
c7a0b787faef (CHECK_TOTAL_LENGTH): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 46507
diff changeset
165 #define CHECK_TOTAL_LENGTH(i) \
c7a0b787faef (CHECK_TOTAL_LENGTH): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 46507
diff changeset
166 if ((int) (i)->total_length < 0) abort (); else
c7a0b787faef (CHECK_TOTAL_LENGTH): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 46507
diff changeset
167
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
168 /* 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
169 #define RESET_INTERVAL(i) \
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
170 { \
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
171 (i)->total_length = (i)->position = 0; \
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
172 (i)->left = (i)->right = NULL_INTERVAL; \
51041
4370ce3fabb3 (text_property_stickiness): New arg `buffer'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50470
diff changeset
173 SET_INTERVAL_PARENT (i, NULL_INTERVAL); \
5414
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
174 (i)->write_protect = 0; \
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
175 (i)->visible = 0; \
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
176 (i)->front_sticky = (i)->rear_sticky = 0; \
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
177 (i)->plist = Qnil; \
39f0a30bb163 (NULL_RIGHT_CHILD, NULL_LEFT_CHILD):
Richard M. Stallman <rms@gnu.org>
parents: 4382
diff changeset
178 }
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
179
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
180 /* Copy the cached property values of interval FROM to interval TO. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
181 #define COPY_INTERVAL_CACHE(from,to) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
182 { \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
183 (to)->write_protect = (from)->write_protect; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
184 (to)->visible = (from)->visible; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
185 (to)->front_sticky = (from)->front_sticky; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
186 (to)->rear_sticky = (from)->rear_sticky; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
187 }
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 /* Copy only the set bits of FROM's cache. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
190 #define MERGE_INTERVAL_CACHE(from,to) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
191 { \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
192 if ((from)->write_protect) (to)->write_protect = 1; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
193 if ((from)->visible) (to)->visible = 1; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
194 if ((from)->front_sticky) (to)->front_sticky = 1; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
195 if ((from)->rear_sticky) (to)->rear_sticky = 1; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
196 }
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
197
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
198 /* Macro determining whether the properties of an interval being
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
199 inserted should be merged with the properties of the text where
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
200 they are being inserted. */
4382
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
201 #define MERGE_INSERTIONS(i) 1
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
202
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
203 /* Macro determining if an invisible interval should be displayed
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
204 as a special glyph, or not at all. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
205 #define DISPLAY_INVISIBLE_GLYPH(i) 0
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 /* Is this interval visible? Replace later with cache access */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
208 #define INTERVAL_VISIBLE_P(i) \
3534
2323f2160053 (INTERVAL_VISIBLE_P): Use textget.
Richard M. Stallman <rms@gnu.org>
parents: 2961
diff changeset
209 (! NULL_INTERVAL_P (i) && NILP (textget ((i)->plist, Qinvisible)))
1164
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 /* 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
212 #define INTERVAL_WRITABLE_P(i) \
f6eeb536beda (INTERVAL_WRITABLE_P): Fix backwards tests.
Richard M. Stallman <rms@gnu.org>
parents: 3534
diff changeset
213 (! NULL_INTERVAL_P (i) \
f6eeb536beda (INTERVAL_WRITABLE_P): Fix backwards tests.
Richard M. Stallman <rms@gnu.org>
parents: 3534
diff changeset
214 && (NILP (textget ((i)->plist, Qread_only)) \
f6eeb536beda (INTERVAL_WRITABLE_P): Fix backwards tests.
Richard M. Stallman <rms@gnu.org>
parents: 3534
diff changeset
215 || ((CONSP (Vinhibit_read_only) \
f6eeb536beda (INTERVAL_WRITABLE_P): Fix backwards tests.
Richard M. Stallman <rms@gnu.org>
parents: 3534
diff changeset
216 ? !NILP (Fmemq (textget ((i)->plist, Qread_only), \
f6eeb536beda (INTERVAL_WRITABLE_P): Fix backwards tests.
Richard M. Stallman <rms@gnu.org>
parents: 3534
diff changeset
217 Vinhibit_read_only)) \
f6eeb536beda (INTERVAL_WRITABLE_P): Fix backwards tests.
Richard M. Stallman <rms@gnu.org>
parents: 3534
diff changeset
218 : !NILP (Vinhibit_read_only))))) \
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
219
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
220 /* Macros to tell whether insertions before or after this interval
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
221 should stick to it. */
4382
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
222 /* Replace later with cache access */
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
223 /*#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
224 #define END_STICKY_P(i) ((i)->rear_sticky != 0)*/
26861
7d3ca36657cb Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26404
diff changeset
225 /* As we now have Vtext_property_default_nonsticky, these macros are
7d3ca36657cb Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26404
diff changeset
226 unreliable now. Currently, they are never used. */
4382
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
227 #define FRONT_STICKY_P(i) \
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
228 (! 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
229 #define END_NONSTICKY_P(i) \
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
230 (! 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
231 #define FRONT_NONSTICKY_P(i) \
41dc4644dec9 (FRONT_NONSTICKY_P): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
232 (! NULL_INTERVAL_P (i) && ! EQ (Qt, textget ((i)->plist, Qfront_sticky)))
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
233
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
234
10963
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
235 /* 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
236 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
237 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
238
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
239 #define TEXT_PROP_MEANS_INVISIBLE(prop) \
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
240 (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
241 ? !NILP (prop) \
10963
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
242 : invisible_p (prop, current_buffer->invisibility_spec))
7fd3688d36a3 (TEXT_PROP_MEANS_INVISIBLE): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 10926
diff changeset
243
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
244 /* Declared in alloc.c */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
245
20318
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
246 extern INTERVAL make_interval P_ ((void));
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
247
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
248 /* Declared in intervals.c */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
249
20318
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
250 extern INTERVAL create_root_interval P_ ((Lisp_Object));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
251 extern void copy_properties P_ ((INTERVAL, INTERVAL));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
252 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
253 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
254 void (*) (INTERVAL, Lisp_Object),
cfc5c411cd06 (TEXT_PROP_MEANS_INVISIBLE_NOELLIPSIS): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35257
diff changeset
255 Lisp_Object));
cfc5c411cd06 (TEXT_PROP_MEANS_INVISIBLE_NOELLIPSIS): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35257
diff changeset
256 extern void traverse_intervals_noorder P_ ((INTERVAL,
20318
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
257 void (*) (INTERVAL, Lisp_Object),
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
258 Lisp_Object));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
259 extern INTERVAL split_interval_right P_ ((INTERVAL, int));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
260 extern INTERVAL split_interval_left P_ ((INTERVAL, int));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
261 extern INTERVAL find_interval P_ ((INTERVAL, int));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
262 extern INTERVAL next_interval P_ ((INTERVAL));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
263 extern INTERVAL previous_interval P_ ((INTERVAL));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
264 extern INTERVAL merge_interval_left P_ ((INTERVAL));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
265 extern INTERVAL merge_interval_right P_ ((INTERVAL));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
266 extern void delete_interval P_ ((INTERVAL));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
267 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
268 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
269 struct buffer *, int));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
270 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
271 extern INTERVAL balance_intervals P_ ((INTERVAL));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
272 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
273 int, int));
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
274 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
275 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
276 extern Lisp_Object textget P_ ((Lisp_Object, Lisp_Object));
45681
322be4c4e11d (lookup_char_property): Declare.
Colin Walters <walters@gnu.org>
parents: 43895
diff changeset
277 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
278 extern void move_if_not_intangible P_ ((int));
26861
7d3ca36657cb Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26404
diff changeset
279 extern int get_property_and_range P_ ((int, Lisp_Object, Lisp_Object *,
89515
3e38f93b8c80 (get_property_and_range): Make start and end EMACS_INT.
Dave Love <fx@gnu.org>
parents: 88123
diff changeset
280 EMACS_INT *, EMACS_INT *, Lisp_Object));
35257
187c0b3da663 (enum map_property): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 32848
diff changeset
281 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
282 extern INTERVAL update_interval P_ ((INTERVAL, int));
21515
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
283 extern void set_intervals_multibyte P_ ((int));
25023
6e3de2f65704 Add function prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 21515
diff changeset
284 extern INTERVAL validate_interval_range P_ ((Lisp_Object, Lisp_Object *,
6e3de2f65704 Add function prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 21515
diff changeset
285 Lisp_Object *, int));
20318
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
286
1507c5324f4c Add prototypes and more function declarations.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
287 /* Defined in xdisp.c */
39855
cfc5c411cd06 (TEXT_PROP_MEANS_INVISIBLE_NOELLIPSIS): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35257
diff changeset
288 extern int invisible_p P_ ((Lisp_Object, Lisp_Object));
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
289
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
290 /* Declared in textprop.c */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
291
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
292 /* Types of hooks. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
293 extern Lisp_Object Qmouse_left;
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
294 extern Lisp_Object Qmouse_entered;
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
295 extern Lisp_Object Qpoint_left;
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
296 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
297 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
298 extern Lisp_Object Qcategory;
79a2651d9de3 Declare Qcategory, Qlocal_map. Declare textget, get_local_map.
Richard M. Stallman <rms@gnu.org>
parents: 1970
diff changeset
299 extern Lisp_Object Qlocal_map;
29279
618b9ba6a8c2 (map_property): New enum.
Dave Love <fx@gnu.org>
parents: 28509
diff changeset
300 extern Lisp_Object Qkeymap;
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
301
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
302 /* Visual properties text (including strings) may have. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
303 extern Lisp_Object Qforeground, Qbackground, Qfont, Qunderline, Qstipple;
6754
09278b56193e (Qintangible): New symbol, replacing Qhidden.
Karl Heuer <kwzh@gnu.org>
parents: 5414
diff changeset
304 extern Lisp_Object Qinvisible, Qintangible, Qread_only;
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
305
4241
64cfb6d569e4 (Vinhibit_point_motion_hooks): Declared.
Richard M. Stallman <rms@gnu.org>
parents: 4211
diff changeset
306 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
307 extern Lisp_Object Vdefault_text_properties;
45681
322be4c4e11d (lookup_char_property): Declare.
Colin Walters <walters@gnu.org>
parents: 43895
diff changeset
308 extern Lisp_Object Vchar_property_alias_alist;
26861
7d3ca36657cb Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26404
diff changeset
309 extern Lisp_Object Vtext_property_default_nonsticky;
4241
64cfb6d569e4 (Vinhibit_point_motion_hooks): Declared.
Richard M. Stallman <rms@gnu.org>
parents: 4211
diff changeset
310
4382
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
311 /* Sticky properties */
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
312 extern Lisp_Object Qfront_sticky, Qrear_nonsticky;
c11d710e0403 (MERGE_INSERTIONS): Define as 1.
Richard M. Stallman <rms@gnu.org>
parents: 4241
diff changeset
313
21515
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
314 EXFUN (Fget_char_property, 3);
53202
8d8fae1e281a Add EXFUN for Fget_char_property_and_overlay.
Luc Teirlinck <teirllm@auburn.edu>
parents: 52401
diff changeset
315 EXFUN (Fget_char_property_and_overlay, 3);
21515
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
316 EXFUN (Fget_text_property, 3);
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
317 EXFUN (Ftext_properties_at, 2);
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
318 EXFUN (Fnext_property_change, 3);
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
319 EXFUN (Fprevious_property_change, 3);
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
320 EXFUN (Fadd_text_properties, 4);
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
321 EXFUN (Fset_text_properties, 4);
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
322 EXFUN (Fremove_text_properties, 4);
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
323 EXFUN (Ftext_property_any, 5);
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
324 EXFUN (Ftext_property_not_all, 5);
30679
4b6b1069c0ff (Fprevious_single_char_property_change): Declare.
Ken Raeburn <raeburn@raeburn.org>
parents: 29279
diff changeset
325 EXFUN (Fprevious_single_char_property_change, 4);
21515
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
326 extern Lisp_Object copy_text_properties P_ ((Lisp_Object, Lisp_Object,
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
327 Lisp_Object, Lisp_Object,
fb4c986db0e2 Add more prototypes.
Andreas Schwab <schwab@suse.de>
parents: 20550
diff changeset
328 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
329 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
330 Lisp_Object, Lisp_Object,
42cb41c42e7b Declare set_text_properties and set_text_properties_1.
Richard M. Stallman <rms@gnu.org>
parents: 39939
diff changeset
331 Lisp_Object));
42cb41c42e7b Declare set_text_properties and set_text_properties_1.
Richard M. Stallman <rms@gnu.org>
parents: 39939
diff changeset
332 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
333 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
334
25023
6e3de2f65704 Add function prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 21515
diff changeset
335 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
336 Lisp_Object));
6e3de2f65704 Add function prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 21515
diff changeset
337 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
338 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
339 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
340 Lisp_Object, Lisp_Object*));
51856
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
341 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
342 Lisp_Object buffer));
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
343 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
344 Lisp_Object object));
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
345
51856
f1a175ae8909 (struct interval): Move from lisp.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51044
diff changeset
346 extern void syms_of_textprop P_ ((void));
26861
7d3ca36657cb Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26404
diff changeset
347
7d3ca36657cb Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26404
diff changeset
348 #include "composite.h"
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51856
diff changeset
349
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51856
diff changeset
350 /* arch-tag: f0bc16c0-b084-498d-9de4-21cc8f077795
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51856
diff changeset
351 (do not change this comment) */