LexerSourceLineFinder::LexerSourceLineFinder(
std::unique_ptr<LexerSource> source)
: source_(std::move(source)),
next_line_start_(0),
last_cr_(false),
eof_(false) {
source_->Seek(0); // Line 0 should not be used; but it makes indexing simpler.
line_ranges_.emplace_back(0, 0);
}
for (auto iter = buffer.begin(), end = iter + read_size; iter < end;
++iter) { if (*iter == '\n') { // Don't include \n or \r in the line range.
Offset line_offset =
buffer_file_offset + (iter - buffer.begin()) - last_cr_;
line_ranges_.emplace_back(next_line_start_, line_offset);
next_line_start_ = line_offset + last_cr_ + 1;
}
last_cr_ = *iter == '\r';
}
if (eof_) { // Add the final line as an empty range.
Offset end = buffer_file_offset + read_size;
line_ranges_.emplace_back(next_line_start_, end);
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.