#include #include #include "ebook.h" using namespace std; Ebook::Ebook(string const& text, int char_per_line, int line_per_page) : text{text}, next_page_start{}, char_per_line{char_per_line}, line_per_page{line_per_page} { } void Ebook::set_page_size(int char_per_l, int line_per_p) { char_per_line = char_per_l; line_per_page = line_per_p; } std::string Ebook::next_page() { ostringstream out_page_stream; int i{}; while ( ! at_end() && i < line_per_page ) { string line = text.substr(next_page_start, char_per_line); auto section_end = line.rfind('\n'); auto line_end = line.rfind(' '); if ( section_end != string::npos ) { line = line.substr(0, section_end + 1); next_page_start += section_end + 1; ++i; } else if ( line_end != string::npos ) { line = line.substr(0, line_end); next_page_start += line_end + 1; } else // no space or newline { next_page_start += char_per_line; } out_page_stream << line << endl; ++i; } return out_page_stream.str(); } bool Ebook::at_end() const { return text.size() <= next_page_start; }