int TextBuffer::LineNumber (int index) const { int l = LinesBetween(lastindex, index); ((TextBuffer*) this)->lastline += l; ((TextBuffer*) this)->lastindex = BeginningOfLine(index); return lastline; }
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; }
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; } }
int TextBuffer::LineOffset (int index) const { return (index<0) ? 0 : (index>length) ? 0 : index-BeginningOfLine(index); }