TextBuffer - operations on unstructured text
#include <InterViews/textbuffer.h>
TextBuffer defines common editing, searching, and text movement
operations on a buffer of unstructured text. Text positions are specified by
an index into the buffer and logically refer to positions between
characters. For example, the position referred to by the index 0 is
before the first character in the text. Indices can be compared for equality
or ordering, but they should not be used to directly access the buffer
because TextBuffer might rearrange the text to improve the efficiency of
some operations.
- TextBuffer(char*
buffer, int length, int size)
- ~TextBuffer()
- Create or destroy an instance of TextBuffer. All operations on the text
contained in buffer should be performed through TextBuffer
functions. The text is assumed to be of length length, and the
total available buffer size is size.
- int Search(Regexp* regexp,
int index, int range, int stop)
- int ForwardSearch(Regexp*
regexp, int index)
- int
BackwardSearch(Regexp* regexp, int index)
- Search for a match with the regular expression regexp, beginning at
position index. Search searches the part of the buffer specified by
range and stop and returns the index of the beginning of the
matched text. Positive values of range specify forward searches,
and negative values specify backward searches. In either case, the matched
text will not extend beyond the position given by stop.
ForwardSearch searches for matches from index to the end of the
text and returns the index of the end of the match. BackwardSearch
searches from index to the start of the text and returns the index
of the beginning of the match. All three functions return a negative
number if there was no match.
- int Match(Regexp* regexp,
int index, int stop)
- boolean
ForwardMatch(Regexp* regexp, int index)
- boolean
BackwardMatch(Regexp* regexp, int index)
- Attempt to match the regular expression regexp at the position
index. Match returns the length of the matching string, or a
negative number if there was no match. Matching will not succeed beyond
the position given by stop. ForwardMatch looks for a match that
begins at index. BackwardMatch looks for a match that ends at
index.
- int Insert(int index,
const char* string, int count)
- int Delete(int index, int
count)
- int Copy(int index, char*
buffer, int count)
- Edit the text in the buffer. Insert inserts count characters from
string at the position index. It returns the actual number
of characters inserted, which might be less than count if there is
insufficient space in the buffer. Delete deletes count characters
from the buffer. A positive count deletes characters after
index, and a negative value deletes character before index.
Delete returns the actual number of characters deleted, which might be
less than count if index is near the beginning or the end of the
text. Copy copies count characters into buffer. A positive
count copies characters after index and a negative
count copies characters before index. Count returns the
actual number of characters copied. It is the caller's responsibility to
ensure that buffer contains sufficient space for the copied
text.
- int Height()
- int Width()
- int
Length()
- Return information about the text. Height returns the number of lines in
the text, Width returns the number of characters in the longest line, and
Length returns the total number of characters.
- const char*
Text()
- const char* Text(int
index)
- const char* Text(int
index1, int index2)
- char Char (int
index)
- Access the contents of the text. Char returns the character immediately
following index. The three Text calls return pointers to character
strings representing the text. They make various guarantees about the
format of the returned string. With no parameters, Text returns a pointer
to a string that contains the entire text of the buffer. With a single
parameter the string contains at least the text from index to the
end of the line. With two parameters, the returned string contains at
least the text between index1 and index2. In any case, the
returned string should be considered temporary and its contents subject to
change. To maximize efficiency, you should prefer the more restricted
forms of Text.
- int LineIndex(int
line)
- int LinesBetween(int
index1, int index2)
- int LineNumber(int
index)
- int LineOffset (int
index)
- Map between text indices and line and offset positions. LineIndex returns
the index of the beginning of line line. LineNumber returns the
number of the line that contains index. LineOffset returns the
offset of index from the beginning of its containing line.
LinesBetween returns the difference between the numbers of the lines
containings index1 and index2; a return value of zero
indicates that index1 and index2 are on the same line, and a
positive value indicates that the line containing index2 is after
the line containing index1. Lines are numbered starting from
zero.
- int
PreviousCharacter(int index)
- int NextCharacter(int
index)
- Return the index immediately following or preceding index. The
returned value is never before the beginning or after the end of the
text.
- boolean
IsBeginningOfText(int index)
- int
BeginningOfText()
- boolean
IsEndOfText(int index)
- int
EndOfText()
- Return the index of the beginning or end of the text, or query whether
index is at the beginning or end of the text.
- boolean
IsBeginningOfLine(int index)
- int BeginningOfLine(int
index)
- int
BeginningOfNextLine(int index)
- boolean
IsEndOfLine(int index)
- int EndOfLine(int
index)
- int
EndOfPreviousLine(int index)
- Return information about the line structure of the text around
index. BeginningOfLine returns the index of the beginning of the
line containing index. BeginningOfNextLine returns the index of the
beginning of the next line that begins after index. EndOfLine
returns the index of the end of the line containing index.
EndOfPreviousLine returns the index of the end of the last line that ends
before index. The beginning of a line is logically immediately
after a newline character, and the end of a line is logically immediately
before a newline character. The beginning and end of the text are
considered to be the beginning and end of the first and last lines,
respectively.
- boolean
IsBeginningOfWord(int index)
- int BeginningOfWord(int
index)
- int
BeginningOfNextWord(int index)
- boolean
IsEndOfWord(int index)
- int EndOfWord(int
index)
- int
EndOfPreviousWord(int index)
- Return information about the word structure of the text around
index. BeginningOfWord returns the index of the beginning of the
word containing index. BeginningOfNextWord return the index of the
beginning of the nest word that begins after index. EndOfWord
returns the index of the end of the word that contains index.
EndOfPreviousWord returns the index of the end of the last word that ends
before index. A word is defined as a sequence of alpha-numeric
characters. The beginning and end of the text are considered to be the
beginning and end of the first and last words, respectively.