示例#1
0
int TextBuffer::LineNumber (int index) const
{
    int l = LinesBetween(lastindex, index);
    ((TextBuffer*) this)->lastline += l;
    ((TextBuffer*) this)->lastindex = BeginningOfLine(index);
    return lastline;
}
示例#2
0
boolean TextManip::HandleKey (Event& e) {
    World* world = GetViewer()->GetWorld();
    char c = e.keystring[0];
    boolean manipulating = true;

    switch (c) {
        case '\007':  world->RingBell(1); break;
        case '\001':  BeginningOfLine(); break;
        case '\005':  EndOfLine(); break;
        case '\006':  ForwardCharacter(1); break;
        case '\002':  BackwardCharacter(1); break;
        case '\016':  ForwardLine(1); break;
        case '\020':  BackwardLine(1); break;
        case '\013':  DeleteLine(); break;
        case '\004':  DeleteCharacter(1); break;
        case '\010':  DeleteCharacter(-1); break;
        case '\177':  DeleteCharacter(-1); break;
        case '\011':  InsertCharacter('\t'); break;
        case '\015':  if (_multiline) InsertCharacter('\n'); break;
        case '\033':  manipulating = false; break;
        default:
            if (!iscntrl(c & 0x7f)) {
                InsertCharacter(c);
            }
            break;
    }
    return manipulating;
}
示例#3
0
int TextBuffer::LineIndex(int line) const
{
    int l = (line<0) ? 0 : (line>=linecount) ? linecount-1 : line;
    while (lastline > l) 
	{
        ((TextBuffer*) this)->lastline --;
        ((TextBuffer*) this)->lastindex = 
			BeginningOfLine(EndOfPreviousLine(lastindex));
    }
    while (lastline < l) 
	{
        ((TextBuffer*) this)->lastline ++;
        ((TextBuffer*) this)->lastindex = BeginningOfNextLine(lastindex);
    }
    if (line >= linecount) 
	{
        return EndOfText();
    } else 
	{
        return lastindex;
    }
}
示例#4
0
int TextBuffer::LineOffset (int index) const
{
    return (index<0) ? 0 : (index>length) ? 0 : index-BeginningOfLine(index);
}