У меня есть поток символов книги. У меня есть фрагмент кода, который, когда слово не помещается в оставшееся пространство строки, помещает его на следующую строку. Все работает, но моя проблема возникает, когда я пытаюсь добавить функциональность страницы (переключение страниц). Поскольку слова, которые не помещаются в строку, go на следующую строку и pu sh другие слова, если я на странице 82, я должен обрабатывать каждую страницу до 82, чтобы получить точное содержание страницы 82. Код работает, но он начинает отставать, когда я углубляюсь в книгу. Я полагаю, это общая проблема. Я не могу обработать всю книгу заранее, потому что хочу добавить динамический шрифт c (т. Е. Пользователь может переключать шрифт в любое время), который требует обработки и отображения на go.
Вот мой код: (он в Arduino IDE, C ++)
// Void to open a page of a book
#define line_size 43
#define page_lines 21
void lib_open_book(String file_name, int page) {
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 0);
tft.setFont(&TomThumb);
File myFile = SD.open(file_name);
if (myFile) {
int lines = 0;
int space_left = line_size;
String current_word = "";
while (myFile.available()) {
char c = myFile.read();
// The code goes through all characters, processes text and counts lines
// If I'm on page 8, it will have processed and counted the lines of all the previous pages
// In that way, the system targets for example the lines 42 to 63 and displays them, that would be page 3
if(lines >= page * page_lines && lines < (page + 1) * page_lines) {
// We have reached the line count required to display the targeted page
// Now processing the page and displaying it
if(current_word.length() == space_left + current_word.length()) {
if(c == ' ') {
tft.print(current_word);
tft.println();
current_word = "";
space_left = line_size;
} else {
tft.println();
current_word += c;
current_word.remove(0, 1);
space_left = line_size - current_word.length();
}
lines++;
} else {
if(c == ' ') {
tft.print(current_word);
current_word = c;
} else {
current_word += c;
}
space_left--;
}
} else {
// Processing pages before the targeted page so we get an accurate line count
// Nothing is printed here, only processing and updating the line count
if(current_word.length() == space_left + current_word.length()) {
if(c == ' ') {
current_word = "";
space_left = line_size;
} else {
current_word += c;
current_word.remove(0, 1);
space_left = line_size - current_word.length();
}
lines++;
} else {
if(c == ' ') {
current_word = c;
} else {
current_word += c;
}
space_left--;
}
}
}
tft.setFont();
myFile.close();
} else {
tft.print("Error opening file.");
}
}
Как бы я go решил эту проблему?