[go: up one dir, main page]

Menu

[bde3dc]: / source / textBuf.h  Maximize  Restore  History

Download this file

173 lines (164 with data), 9.5 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
/*******************************************************************************
* *
* textBuf.h -- Nirvana Editor Text Buffer Header File *
* *
* Copyright 2003 The NEdit Developers *
* *
* This is free software; you can redistribute it and/or modify it under the *
* terms of the GNU General Public License as published by the Free Software *
* Foundation; either version 2 of the License, or (at your option) any later *
* version. In addition, you may distribute versions of this program linked to *
* Motif or Open Motif. See README for details. *
* *
* This software is distributed in the hope that it will be useful, but WITHOUT *
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or *
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *
* more details. *
* *
* You should have received a copy of the GNU General Public License along with *
* software; if not, write to the Free Software Foundation, Inc., 59 Temple *
* Place, Suite 330, Boston, MA 02111-1307 USA *
* *
* Nirvana Text Editor *
* July 31, 2001 *
* *
*******************************************************************************/
#ifndef NEDIT_TEXTBUF_H_INCLUDED
#define NEDIT_TEXTBUF_H_INCLUDED
/* Maximum length in characters of a tab or control character expansion
of a single buffer character */
#define MAX_EXP_CHAR_LEN 20
typedef struct _RangesetTable RangesetTable;
typedef struct {
char selected; /* True if the selection is active */
char rectangular; /* True if the selection is rectangular */
char zeroWidth; /* Width 0 selections aren't "real" selections, but
they can be useful when creating rectangular
selections from the keyboard. */
int start; /* Pos. of start of selection, or if rectangular
start of line containing it. */
int end; /* Pos. of end of selection, or if rectangular
end of line containing it. */
int rectStart; /* Indent of left edge of rect. selection */
int rectEnd; /* Indent of right edge of rect. selection */
} selection;
typedef void (*bufModifyCallbackProc)(int pos, int nInserted, int nDeleted,
int nRestyled, const char *deletedText, void *cbArg);
typedef void (*bufPreDeleteCallbackProc)(int pos, int nDeleted, void *cbArg);
typedef struct _textBuffer {
int length; /* length of the text in the buffer (the length
of the buffer itself must be calculated:
gapEnd - gapStart + length) */
char *buf; /* allocated memory where the text is stored */
int gapStart; /* points to the first character of the gap */
int gapEnd; /* points to the first char after the gap */
selection primary; /* highlighted areas */
selection secondary;
selection highlight;
int tabDist; /* equiv. number of characters in a tab */
int useTabs; /* True if buffer routines are allowed to use
tabs for padding in rectangular operations */
int nModifyProcs; /* number of modify-redisplay procs attached */
bufModifyCallbackProc /* procedures to call when buffer is */
*modifyProcs; /* modified to redisplay contents */
void **cbArgs; /* caller arguments for modifyProcs above */
int nPreDeleteProcs; /* number of pre-delete procs attached */
bufPreDeleteCallbackProc /* procedure to call before text is deleted */
*preDeleteProcs; /* from the buffer; at most one is supported. */
void **preDeleteCbArgs; /* caller argument for pre-delete proc above */
int cursorPosHint; /* hint for reasonable cursor position after
a buffer modification operation */
char nullSubsChar; /* NEdit is based on C null-terminated strings,
so ascii-nul characters must be substituted
with something else. This is the else, but
of course, things get quite messy when you
use it */
RangesetTable *rangesetTable;
/* current range sets */
} textBuffer;
textBuffer *BufCreate(void);
textBuffer *BufCreatePreallocated(int requestedSize);
void BufFree(textBuffer *buf);
char *BufGetAll(textBuffer *buf);
const char *BufAsString(textBuffer *buf);
void BufSetAll(textBuffer *buf, const char *text);
char* BufGetRange(const textBuffer* buf, int start, int end);
char BufGetCharacter(const textBuffer* buf, int pos);
char *BufGetTextInRect(textBuffer *buf, int start, int end,
int rectStart, int rectEnd);
void BufInsert(textBuffer *buf, int pos, const char *text);
void BufRemove(textBuffer *buf, int start, int end);
void BufReplace(textBuffer *buf, int start, int end, const char *text);
void BufCopyFromBuf(textBuffer *fromBuf, textBuffer *toBuf, int fromStart,
int fromEnd, int toPos);
void BufInsertCol(textBuffer *buf, int column, int startPos, const char *text,
int *charsInserted, int *charsDeleted);
void BufReplaceRect(textBuffer *buf, int start, int end, int rectStart,
int rectEnd, const char *text);
void BufRemoveRect(textBuffer *buf, int start, int end, int rectStart,
int rectEnd);
void BufOverlayRect(textBuffer *buf, int startPos, int rectStart,
int rectEnd, const char *text, int *charsInserted, int *charsDeleted);
void BufClearRect(textBuffer *buf, int start, int end, int rectStart,
int rectEnd);
int BufGetTabDistance(textBuffer *buf);
void BufSetTabDistance(textBuffer *buf, int tabDist);
void BufCheckDisplay(textBuffer *buf, int start, int end);
void BufSelect(textBuffer *buf, int start, int end);
void BufUnselect(textBuffer *buf);
void BufRectSelect(textBuffer *buf, int start, int end, int rectStart,
int rectEnd);
int BufGetSelectionPos(textBuffer *buf, int *start, int *end,
int *isRect, int *rectStart, int *rectEnd);
int BufGetEmptySelectionPos(textBuffer *buf, int *start, int *end,
int *isRect, int *rectStart, int *rectEnd);
char *BufGetSelectionText(textBuffer *buf);
void BufRemoveSelected(textBuffer *buf);
void BufReplaceSelected(textBuffer *buf, const char *text);
void BufSecondarySelect(textBuffer *buf, int start, int end);
void BufSecondaryUnselect(textBuffer *buf);
void BufSecRectSelect(textBuffer *buf, int start, int end,
int rectStart, int rectEnd);
int BufGetSecSelectPos(textBuffer *buf, int *start, int *end,
int *isRect, int *rectStart, int *rectEnd);
char *BufGetSecSelectText(textBuffer *buf);
void BufRemoveSecSelect(textBuffer *buf);
void BufReplaceSecSelect(textBuffer *buf, const char *text);
void BufHighlight(textBuffer *buf, int start, int end);
void BufUnhighlight(textBuffer *buf);
void BufRectHighlight(textBuffer *buf, int start, int end,
int rectStart, int rectEnd);
int BufGetHighlightPos(textBuffer *buf, int *start, int *end,
int *isRect, int *rectStart, int *rectEnd);
void BufAddModifyCB(textBuffer *buf, bufModifyCallbackProc bufModifiedCB,
void *cbArg);
void BufAddHighPriorityModifyCB(textBuffer *buf, bufModifyCallbackProc bufModifiedCB,
void *cbArg);
void BufRemoveModifyCB(textBuffer *buf, bufModifyCallbackProc bufModifiedCB,
void *cbArg);
void BufAddPreDeleteCB(textBuffer *buf, bufPreDeleteCallbackProc bufPreDeleteCB,
void *cbArg);
void BufRemovePreDeleteCB(textBuffer *buf, bufPreDeleteCallbackProc
bufPreDeleteCB, void *cbArg);
int BufStartOfLine(textBuffer *buf, int pos);
int BufEndOfLine(textBuffer *buf, int pos);
int BufGetExpandedChar(const textBuffer* buf, int pos, int indent,
char* outStr);
int BufExpandCharacter(char c, int indent, char *outStr, int tabDist,
char nullSubsChar);
int BufCharWidth(char c, int indent, int tabDist, char nullSubsChar);
int BufCountDispChars(const textBuffer* buf, int lineStartPos,
int targetPos);
int BufCountForwardDispChars(textBuffer *buf, int lineStartPos, int nChars);
int BufCountLines(textBuffer *buf, int startPos, int endPos);
int BufCountForwardNLines(const textBuffer* buf, int startPos,
unsigned nLines);
int BufCountBackwardNLines(textBuffer *buf, int startPos, int nLines);
int BufSearchForward(textBuffer *buf, int startPos, const char *searchChars,
int *foundPos);
int BufSearchBackward(textBuffer *buf, int startPos, const char *searchChars,
int *foundPos);
int BufSubstituteNullChars(char *string, int length, textBuffer *buf);
void BufUnsubstituteNullChars(char *string, textBuffer *buf);
int BufCmp(textBuffer * buf, int pos, int len, const char *cmpText);
#endif /* NEDIT_TEXTBUF_H_INCLUDED */