Marked some more issues with Fl_Text_...
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@7462 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
parent
b24875d8cd
commit
29317e7b2d
@ -196,17 +196,15 @@ public:
|
||||
/**
|
||||
Create an empty text buffer of a pre-determined size.
|
||||
\param requestedSize use this to avoid unnecessary re-allocation
|
||||
if you know exactly how much the buffer will need to hold
|
||||
if you know exactly how much the buffer will need to hold
|
||||
\param preferredGapSize Initial size for the buffer gap (empty space
|
||||
in the buffer where text might be inserted
|
||||
if the user is typing sequential chars)
|
||||
\todo unicode check
|
||||
in the buffer where text might be inserted
|
||||
if the user is typing sequential chars)
|
||||
*/
|
||||
Fl_Text_Buffer(int requestedSize = 0, int preferredGapSize = 1024);
|
||||
|
||||
/**
|
||||
Frees a text buffer
|
||||
\todo unicode check
|
||||
*/
|
||||
~Fl_Text_Buffer();
|
||||
|
||||
@ -239,15 +237,16 @@ public:
|
||||
\param start byte offset to first character
|
||||
\param end byte offset after last character in range
|
||||
\return newly allocated text buffer - must be free'd
|
||||
*/
|
||||
*/
|
||||
char* text_range(int start, int end) const;
|
||||
|
||||
/**
|
||||
Returns the character at the specified position pos in the buffer.
|
||||
Positions start at 0
|
||||
\todo unicode check
|
||||
\param pos byte offset into buffer
|
||||
\return Unicode UCS-4 encoded character
|
||||
*/
|
||||
char character(int pos) const;
|
||||
unsigned int character(int pos) const;
|
||||
|
||||
/**
|
||||
Returns the text from the given rectangle. When you are done
|
||||
@ -258,7 +257,8 @@ public:
|
||||
|
||||
/**
|
||||
Inserts null-terminated string \p text at position \p pos.
|
||||
\todo unicode check
|
||||
\param pos insertion position as byte offset (must be utf-8 character aligned)
|
||||
\param text utf-8 encoded and nul terminated text
|
||||
*/
|
||||
void insert(int pos, const char* text);
|
||||
|
||||
@ -270,13 +270,16 @@ public:
|
||||
|
||||
/**
|
||||
Deletes a range of characters in the buffer.
|
||||
\todo unicode check
|
||||
\param start byte offset to first character to be removed
|
||||
\param end byte offset to charcatre after last character to be removed
|
||||
*/
|
||||
void remove(int start, int end);
|
||||
|
||||
/**
|
||||
Deletes the characters between \p start and \p end, and inserts the null-terminated string \p text in their place in the buffer.
|
||||
\todo unicode check
|
||||
\param start byte offset to first character to be removed and new insert position
|
||||
\param end byte offset to charcatre after last character to be removed
|
||||
\param text utf-8 encoded and nul terminated text
|
||||
*/
|
||||
void replace(int start, int end, const char *text);
|
||||
|
||||
@ -296,7 +299,6 @@ public:
|
||||
|
||||
/**
|
||||
Lets the undo system know if we can undo changes
|
||||
\todo unicode check
|
||||
*/
|
||||
void canUndo(char flag=1);
|
||||
|
||||
|
@ -161,6 +161,8 @@ static void undobuffersize(int n)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// unicode ok
|
||||
Fl_Text_Buffer::Fl_Text_Buffer(int requestedSize, int preferredGapSize)
|
||||
{
|
||||
mLength = 0;
|
||||
@ -196,6 +198,8 @@ Fl_Text_Buffer::Fl_Text_Buffer(int requestedSize, int preferredGapSize)
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
// unicode ok
|
||||
Fl_Text_Buffer::~Fl_Text_Buffer()
|
||||
{
|
||||
free(mBuf);
|
||||
@ -221,6 +225,8 @@ char *Fl_Text_Buffer::text() const {
|
||||
return t;
|
||||
}
|
||||
|
||||
|
||||
// unicode ok, functions called have not been verified yet
|
||||
void Fl_Text_Buffer::text(const char *t)
|
||||
{
|
||||
call_predelete_callbacks(0, length());
|
||||
@ -230,14 +236,13 @@ void Fl_Text_Buffer::text(const char *t)
|
||||
int deletedLength = mLength;
|
||||
free((void *) mBuf);
|
||||
|
||||
/* Start a new buffer with a gap of mPreferredGapSize in the center */
|
||||
/* Start a new buffer with a gap of mPreferredGapSize at the end */
|
||||
int insertedLength = strlen(t);
|
||||
mBuf = (char *) malloc(insertedLength + mPreferredGapSize);
|
||||
mLength = insertedLength;
|
||||
mGapStart = insertedLength / 2;
|
||||
mGapStart = insertedLength;
|
||||
mGapEnd = mGapStart + mPreferredGapSize;
|
||||
memcpy(mBuf, t, mGapStart);
|
||||
memcpy(&mBuf[mGapEnd], &t[mGapStart], insertedLength - mGapStart);
|
||||
memcpy(mBuf, t, insertedLength);
|
||||
#ifdef PURIFY
|
||||
{
|
||||
int i;
|
||||
@ -293,17 +298,17 @@ char *Fl_Text_Buffer::text_range(int start, int end) const {
|
||||
}
|
||||
|
||||
|
||||
// FIXME: a character must be UCS-4 encoded
|
||||
char Fl_Text_Buffer::character(int pos) const {
|
||||
// TODO: we will need the same signature function to get bytes (style buffer)
|
||||
// unicode ok
|
||||
unsigned int Fl_Text_Buffer::character(int pos) const {
|
||||
if (pos < 0 || pos >= mLength)
|
||||
return '\0';
|
||||
if (pos < mGapStart)
|
||||
return mBuf[pos];
|
||||
else
|
||||
return mBuf[pos + mGapEnd - mGapStart];
|
||||
const char *src = address(pos);
|
||||
return fl_utf8decode(src, 0, 0);
|
||||
}
|
||||
|
||||
|
||||
// unicode ok, dependents not tested
|
||||
void Fl_Text_Buffer::insert(int pos, const char *text)
|
||||
{
|
||||
/* if pos is not contiguous to existing text, make it */
|
||||
@ -321,6 +326,8 @@ void Fl_Text_Buffer::insert(int pos, const char *text)
|
||||
call_modify_callbacks(pos, 0, nInserted, 0, NULL);
|
||||
}
|
||||
|
||||
|
||||
// unicode ok, dependents not tested
|
||||
void Fl_Text_Buffer::replace(int start, int end, const char *text)
|
||||
{
|
||||
// Range check...
|
||||
@ -334,13 +341,14 @@ void Fl_Text_Buffer::replace(int start, int end, const char *text)
|
||||
call_predelete_callbacks(start, end - start);
|
||||
const char *deletedText = text_range(start, end);
|
||||
remove_(start, end);
|
||||
//undoyankcut = undocut;
|
||||
int nInserted = insert_(start, text);
|
||||
mCursorPosHint = start + nInserted;
|
||||
call_modify_callbacks(start, end - start, nInserted, 0, deletedText);
|
||||
free((void *) deletedText);
|
||||
}
|
||||
|
||||
|
||||
// unicode ok, dependents not tested
|
||||
void Fl_Text_Buffer::remove(int start, int end)
|
||||
{
|
||||
/* Make sure the arguments make sense */
|
||||
@ -441,6 +449,8 @@ int Fl_Text_Buffer::undo(int *cursorPos)
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
// unicode ok
|
||||
void Fl_Text_Buffer::canUndo(char flag)
|
||||
{
|
||||
mCanUndo = flag;
|
||||
@ -918,26 +928,34 @@ remove_predelete_callback(Fl_Text_Predelete_Cb bufPreDeleteCB, void *cbArg)
|
||||
|
||||
char *Fl_Text_Buffer::line_text(int pos) const {
|
||||
return text_range(line_start(pos), line_end(pos));
|
||||
} int Fl_Text_Buffer::line_start(int pos) const {
|
||||
}
|
||||
|
||||
int Fl_Text_Buffer::line_start(int pos) const {
|
||||
if (!findchar_backward(pos, '\n', &pos))
|
||||
return 0;
|
||||
return pos + 1;
|
||||
} int Fl_Text_Buffer::line_end(int pos) const {
|
||||
}
|
||||
|
||||
int Fl_Text_Buffer::line_end(int pos) const {
|
||||
if (!findchar_forward(pos, '\n', &pos))
|
||||
pos = mLength;
|
||||
return pos;
|
||||
} int Fl_Text_Buffer::word_start(int pos) const {
|
||||
while (pos && (isalnum(character(pos)) || character(pos) == '_'))
|
||||
{
|
||||
}
|
||||
|
||||
int Fl_Text_Buffer::word_start(int pos) const {
|
||||
// FIXME: character is ucs-4
|
||||
while (pos && (isalnum(character(pos)) || character(pos) == '_')) {
|
||||
pos--;
|
||||
} if (!(isalnum(character(pos)) || character(pos) == '_'))
|
||||
}
|
||||
// FIXME: character is ucs-4
|
||||
if (!(isalnum(character(pos)) || character(pos) == '_'))
|
||||
pos++;
|
||||
return pos;
|
||||
}
|
||||
|
||||
int Fl_Text_Buffer::word_end(int pos) const {
|
||||
while (pos < length()
|
||||
&& (isalnum(character(pos)) || character(pos) == '_'))
|
||||
// FIXME: character is ucs-4
|
||||
while (pos < length() && (isalnum(character(pos)) || character(pos) == '_'))
|
||||
{
|
||||
pos++;
|
||||
} return pos;
|
||||
@ -1121,13 +1139,13 @@ int Fl_Text_Buffer::rewind_lines(int startPos, int nLines)
|
||||
|
||||
int Fl_Text_Buffer::search_forward(int startPos, const char *searchString,
|
||||
int *foundPos,
|
||||
int matchCase) const {
|
||||
int matchCase) const
|
||||
{
|
||||
if (!searchString)
|
||||
return 0;
|
||||
int bp;
|
||||
const char *sp;
|
||||
while (startPos < length())
|
||||
{
|
||||
while (startPos < length()) {
|
||||
bp = startPos;
|
||||
sp = searchString;
|
||||
do {
|
||||
@ -1135,6 +1153,7 @@ int Fl_Text_Buffer::search_forward(int startPos, const char *searchString,
|
||||
*foundPos = startPos;
|
||||
return 1;
|
||||
}
|
||||
// FIXME: character is ucs-4
|
||||
} while ((matchCase ? character(bp++) == *sp++ :
|
||||
toupper(character(bp++)) == toupper(*sp++))
|
||||
&& bp < length());
|
||||
@ -1159,6 +1178,7 @@ int Fl_Text_Buffer::search_backward(int startPos, const char *searchString,
|
||||
*foundPos = bp + 1;
|
||||
return 1;
|
||||
}
|
||||
// FIXME: character is ucs-4
|
||||
} while ((matchCase ? character(bp--) == *sp-- :
|
||||
toupper(character(bp--)) == toupper(*sp--))
|
||||
&& bp >= 0);
|
||||
@ -1331,7 +1351,7 @@ void Fl_Text_Buffer::insert_column_(int column, int startPos,
|
||||
is counted with the length of insText) */
|
||||
int start = line_start(startPos);
|
||||
int nLines = countLines(insText) + 1;
|
||||
int insWidth = textWidth(insText, mTabDist);
|
||||
int insWidth = textWidth(insText, mTabDist); // this function probably returns a useless value
|
||||
int end = line_end(skip_lines(start, nLines - 1));
|
||||
int expReplLen, expInsLen, len, endOffset;
|
||||
const char *replText = text_range(start, end);
|
||||
@ -2137,14 +2157,15 @@ static int textWidth(const char *text, int tabDist)
|
||||
{
|
||||
int width = 0, maxWidth = 0;
|
||||
|
||||
for (const char *c = text; *c != '\0'; c++) { // FIXME: increment is wrong!
|
||||
// HUH? Why is "c" incremented? Shouldn't "text" be incrmented?
|
||||
// FIXME: increment is wrong!
|
||||
for (const char *c = text; *c != '\0'; c++) {
|
||||
if (*c == '\n') {
|
||||
if (width > maxWidth)
|
||||
maxWidth = width;
|
||||
width = 0;
|
||||
} else
|
||||
width +=
|
||||
Fl_Text_Buffer::character_width(c, width, tabDist);
|
||||
width += Fl_Text_Buffer::character_width(c, width, tabDist);
|
||||
}
|
||||
if (width > maxWidth)
|
||||
return width;
|
||||
@ -2163,11 +2184,12 @@ void Fl_Text_Buffer::rectangular_selection_boundaries(int lineStartPos,
|
||||
/* find the start of the selection */
|
||||
for (pos = lineStartPos; pos < mLength; pos++)
|
||||
{
|
||||
// FIXME: character is ucs-4
|
||||
c = character(pos);
|
||||
if (c == '\n')
|
||||
break;
|
||||
width =
|
||||
Fl_Text_Buffer::character_width(&c, indent, mTabDist); // FIXME: c si not unicode
|
||||
Fl_Text_Buffer::character_width(&c, indent, mTabDist); // FIXME: c is not unicode
|
||||
if (indent + width > rectStart) {
|
||||
if (indent != rectStart && c != '\t') {
|
||||
pos++;
|
||||
@ -2181,6 +2203,7 @@ void Fl_Text_Buffer::rectangular_selection_boundaries(int lineStartPos,
|
||||
|
||||
/* find the end */
|
||||
for (; pos < mLength; pos++) {
|
||||
// FIXME: character is ucs-4
|
||||
c = character(pos);
|
||||
if (c == '\n')
|
||||
break;
|
||||
@ -2338,7 +2361,7 @@ int Fl_Text_Buffer::outputfile(const char *file, int start, int end,
|
||||
int buflen)
|
||||
{
|
||||
FILE *fp;
|
||||
if (!(fp = fl_fopen(file, "w")))
|
||||
if (!(fp = fl_fopen(file, "wb")))
|
||||
return 1;
|
||||
for (int n; (n = min(end - start, buflen)); start += n) {
|
||||
const char *p = text_range(start, start + n);
|
||||
|
@ -426,6 +426,7 @@ void Fl_Text_Display::draw_text( int left, int top, int width, int height ) {
|
||||
void Fl_Text_Display::redisplay_range(int startpos, int endpos) {
|
||||
int ok = 0;
|
||||
while (!ok && startpos > 0) {
|
||||
// FIXME: character is ucs-4
|
||||
char c = buffer()->character( startpos );
|
||||
if (!((c & 0x80) && !(c & 0x40))) {
|
||||
ok = 1;
|
||||
@ -434,6 +435,7 @@ void Fl_Text_Display::redisplay_range(int startpos, int endpos) {
|
||||
}
|
||||
}
|
||||
while (!ok && endpos < buffer()->length()) {
|
||||
// FIXME: character is ucs-4
|
||||
char c = buffer()->character( endpos );
|
||||
if (!((c & 0x80) && !(c & 0x40))) {
|
||||
ok = 1;
|
||||
@ -638,6 +640,7 @@ void Fl_Text_Display::overstrike(const char* text) {
|
||||
for ( p = startPos; ; p++ ) {
|
||||
if ( p == buf->length() )
|
||||
break;
|
||||
// FIXME: character is ucs-4
|
||||
ch = buf->character( p );
|
||||
if ( ch == '\n' )
|
||||
break;
|
||||
@ -779,6 +782,7 @@ int Fl_Text_Display::in_selection( int X, int Y ) const {
|
||||
Fl_Text_Buffer *buf = mBuffer;
|
||||
int ok = 0;
|
||||
while (!ok) {
|
||||
// FIXME: character is ucs-4
|
||||
char c = buffer()->character( pos );
|
||||
if (!((c & 0x80) && !(c & 0x40))) {
|
||||
ok = 1;
|
||||
@ -894,6 +898,7 @@ int Fl_Text_Display::move_right() {
|
||||
return 0;
|
||||
insert_position( mCursorPos + 1 );
|
||||
int pos = insert_position();
|
||||
// FIXME: character is ucs-4
|
||||
char c = buffer()->character( pos );
|
||||
if (!((c & 0x80) && !(c & 0x40))) ok = 1;
|
||||
}
|
||||
@ -907,6 +912,7 @@ int Fl_Text_Display::move_left() {
|
||||
return 0;
|
||||
insert_position( mCursorPos - 1 );
|
||||
int pos = insert_position();
|
||||
// FIXME: character is ucs-4
|
||||
char c = buffer()->character( pos );
|
||||
if (!((c & 0x80) && !(c & 0x40))) ok = 1;
|
||||
}
|
||||
@ -947,6 +953,7 @@ int Fl_Text_Display::move_up() {
|
||||
int ok = 0;
|
||||
while (!ok) {
|
||||
int pos = insert_position();
|
||||
// FIXME: character is ucs-4
|
||||
char c = buffer()->character( pos );
|
||||
if (!((c & 0x80) && !(c & 0x40))) {
|
||||
ok = 1;
|
||||
@ -983,6 +990,7 @@ int Fl_Text_Display::move_down() {
|
||||
int ok = 0;
|
||||
while (!ok) {
|
||||
int pos = insert_position();
|
||||
// FIXME: character is ucs-4
|
||||
char c = buffer()->character( pos );
|
||||
if (!((c & 0x80) && !(c & 0x40))) {
|
||||
ok = 1;
|
||||
@ -1132,9 +1140,11 @@ static inline int fl_isseparator(int c) {
|
||||
/** Moves the current insert position right one word.*/
|
||||
void Fl_Text_Display::next_word() {
|
||||
int pos = insert_position();
|
||||
// FIXME: character is ucs-4
|
||||
while (pos < buffer()->length() && !fl_isseparator(buffer()->character(pos))) {
|
||||
pos++;
|
||||
}
|
||||
// FIXME: character is ucs-4
|
||||
while (pos < buffer()->length() && fl_isseparator(buffer()->character(pos))) {
|
||||
pos++;
|
||||
}
|
||||
@ -1147,12 +1157,15 @@ void Fl_Text_Display::previous_word() {
|
||||
int pos = insert_position();
|
||||
if (pos==0) return;
|
||||
pos--;
|
||||
// FIXME: character is ucs-4
|
||||
while (pos && fl_isseparator(buffer()->character(pos))) {
|
||||
pos--;
|
||||
}
|
||||
// FIXME: character is ucs-4
|
||||
while (pos && !fl_isseparator(buffer()->character(pos))) {
|
||||
pos--;
|
||||
}
|
||||
// FIXME: character is ucs-4
|
||||
if (fl_isseparator(buffer()->character(pos))) pos++;
|
||||
|
||||
insert_position( pos );
|
||||
@ -1820,10 +1833,12 @@ int Fl_Text_Display::position_style( int lineStartPos,
|
||||
if ( lineIndex >= lineLen )
|
||||
style = FILL_MASK;
|
||||
else if ( styleBuf != NULL ) {
|
||||
// FIXME: character is ucs-4
|
||||
style = ( unsigned char ) styleBuf->character( pos );
|
||||
if (style == mUnfinishedStyle && mUnfinishedHighlightCB) {
|
||||
/* encountered "unfinished" style, trigger parsing */
|
||||
(mUnfinishedHighlightCB)( pos, mHighlightCBArg);
|
||||
// FIXME: character is ucs-4
|
||||
style = (unsigned char) styleBuf->character( pos);
|
||||
}
|
||||
}
|
||||
@ -2344,6 +2359,7 @@ int Fl_Text_Display::measure_vline( int visLineNum ) const {
|
||||
for ( i = 0; i < lineLen; i++ ) {
|
||||
len = mBuffer->expand_character( lineStartPos + i,
|
||||
charCount, expandedChar );
|
||||
// FIXME: character is ucs-4
|
||||
style = ( unsigned char ) mStyleBuffer->character(
|
||||
lineStartPos + i ) - 'A';
|
||||
|
||||
@ -2452,6 +2468,7 @@ void Fl_Text_Display::find_wrap_range(const char *deletedText, int pos,
|
||||
lineStart = retPos;
|
||||
nLines++;
|
||||
if (lineStart > pos + nInserted &&
|
||||
// FIXME: character is ucs-4
|
||||
buf->character(lineStart-1) == '\n') {
|
||||
countTo = lineStart;
|
||||
*modRangeEnd = lineStart;
|
||||
@ -2597,6 +2614,7 @@ void Fl_Text_Display::measure_deleted_lines(int pos, int nDeleted) {
|
||||
lineStart = retPos;
|
||||
nLines++;
|
||||
if (lineStart > pos + nDeleted &&
|
||||
// FIXME: character is ucs-4
|
||||
buf->character(lineStart-1) == '\n') {
|
||||
break;
|
||||
}
|
||||
@ -2674,6 +2692,7 @@ void Fl_Text_Display::wrapped_line_counter(Fl_Text_Buffer *buf, int startPos,
|
||||
colNum = 0;
|
||||
width = 0;
|
||||
for (p=lineStart; p<buf->length(); p++) {
|
||||
// FIXME: character is ucs-4
|
||||
c = (unsigned char)buf->character(p);
|
||||
|
||||
/* If the character was a newline, count the line and start over,
|
||||
@ -2708,6 +2727,7 @@ void Fl_Text_Display::wrapped_line_counter(Fl_Text_Buffer *buf, int startPos,
|
||||
if (colNum > wrapMargin || width > maxWidth) {
|
||||
foundBreak = false;
|
||||
for (b=p; b>=lineStart; b--) {
|
||||
// FIXME: character is ucs-4
|
||||
c = (unsigned char)buf->character(b);
|
||||
if (c == '\t' || c == ' ') {
|
||||
newLineStart = b + 1;
|
||||
@ -2716,6 +2736,7 @@ void Fl_Text_Display::wrapped_line_counter(Fl_Text_Buffer *buf, int startPos,
|
||||
width = 0;
|
||||
for (i=b+1; i<p+1; i++) {
|
||||
width += measure_proportional_character(
|
||||
// FIXME: character is ucs-4
|
||||
buf->character(i), colNum,
|
||||
i+styleBufOffset);
|
||||
colNum++;
|
||||
@ -2784,10 +2805,12 @@ int Fl_Text_Display::measure_proportional_character(char c, int colNum, int pos)
|
||||
if (styleBuf == 0) {
|
||||
style = 0;
|
||||
} else {
|
||||
// FIXME: character is ucs-4
|
||||
style = (unsigned char)styleBuf->character(pos);
|
||||
if (style == mUnfinishedStyle && mUnfinishedHighlightCB) {
|
||||
/* encountered "unfinished" style, trigger parsing */
|
||||
(mUnfinishedHighlightCB)(pos, mHighlightCBArg);
|
||||
// FIXME: character is ucs-4
|
||||
style = (unsigned char)styleBuf->character(pos);
|
||||
}
|
||||
}
|
||||
@ -2844,6 +2867,7 @@ int Fl_Text_Display::wrap_uses_character(int lineEndPos) const {
|
||||
if (!mContinuousWrap || lineEndPos == buffer()->length())
|
||||
return 1;
|
||||
|
||||
// FIXME: character is ucs-4
|
||||
c = buffer()->character(lineEndPos);
|
||||
return c == '\n' || ((c == '\t' || c == ' ') &&
|
||||
lineEndPos + 1 != buffer()->length());
|
||||
@ -3123,6 +3147,7 @@ int Fl_Text_Display::handle(int event) {
|
||||
int pos = xy_to_position(Fl::event_x(), Fl::event_y(), CURSOR_POS);
|
||||
int ok = 0;
|
||||
while (!ok) {
|
||||
// FIXME: character is ucs-4
|
||||
char c = buffer()->character( pos );
|
||||
if (!((c & 0x80) && !(c & 0x40))) {
|
||||
ok = 1;
|
||||
@ -3188,6 +3213,7 @@ int Fl_Text_Display::handle(int event) {
|
||||
pos = xy_to_position(X, Y, CURSOR_POS);
|
||||
int ok = 0;
|
||||
while (!ok) {
|
||||
// FIXME: character is ucs-4
|
||||
char c = buffer()->character( pos );
|
||||
if (!((c & 0x80) && !(c & 0x40))) {
|
||||
ok = 1;
|
||||
|
@ -254,6 +254,7 @@ int Fl_Text_Editor::kf_ignore(int, Fl_Text_Editor*) {
|
||||
int Fl_Text_Editor::kf_backspace(int, Fl_Text_Editor* e) {
|
||||
if (!e->buffer()->selected() && e->move_left()) {
|
||||
int l = 1;
|
||||
// FIXME: character is ucs-4
|
||||
char c = e->buffer()->character(e->insert_position());
|
||||
if (c & 0x80 && c & 0x40) {
|
||||
l = fl_utf8len(c);
|
||||
@ -449,6 +450,7 @@ int Fl_Text_Editor::kf_insert(int, Fl_Text_Editor* e) {
|
||||
int Fl_Text_Editor::kf_delete(int, Fl_Text_Editor* e) {
|
||||
if (!e->buffer()->selected()) {
|
||||
int l = 1;
|
||||
// FIXME: character is ucs-4
|
||||
char c = e->buffer()->character(e->insert_position());
|
||||
if (c & 0x80 && c & 0x40) {
|
||||
l = fl_utf8len(c);
|
||||
|
Loading…
Reference in New Issue
Block a user