Consolidate and optimize

This commit is contained in:
Vincent Politzer 2026-01-23 19:37:19 -08:00
parent ba65ee158d
commit 19d2bd0665
2 changed files with 14 additions and 19 deletions

View File

@ -40,18 +40,18 @@ bool matches(const char* tag_name, const char* possible_tags[], const int possib
return false; return false;
} }
EpdFontFamily::Style getFontStyle(const int boldUntilDepth, const int italicUntilDepth, const int depth) { void ChapterHtmlSlimParser::flushPartWordBuffer() {
if (boldUntilDepth < depth && italicUntilDepth < depth) { EpdFontFamily::Style fontStyle = EpdFontFamily::REGULAR;
return EpdFontFamily::BOLD_ITALIC; if (boldUntilDepth < depth) {
} else if (boldUntilDepth < depth) { if (italicUntilDepth < depth) {
return EpdFontFamily::BOLD; fontStyle = EpdFontFamily::BOLD_ITALIC;
} else if (italicUntilDepth < depth) { } else {
return EpdFontFamily::ITALIC; fontStyle = EpdFontFamily::BOLD;
} }
return EpdFontFamily::REGULAR; } else if (italicUntilDepth < depth) {
fontStyle = EpdFontFamily::ITALIC;
} }
void ChapterHtmlSlimParser::flushPartWordBuffer(const EpdFontFamily::Style fontStyle) {
partWordBuffer[partWordBufferIndex] = '\0'; partWordBuffer[partWordBufferIndex] = '\0';
currentTextBlock->addWord(partWordBuffer, fontStyle); currentTextBlock->addWord(partWordBuffer, fontStyle);
partWordBufferIndex = 0; partWordBufferIndex = 0;
@ -143,8 +143,7 @@ void XMLCALL ChapterHtmlSlimParser::startElement(void* userData, const XML_Char*
} else if (matches(name, BLOCK_TAGS, NUM_BLOCK_TAGS)) { } else if (matches(name, BLOCK_TAGS, NUM_BLOCK_TAGS)) {
if (strcmp(name, "br") == 0) { if (strcmp(name, "br") == 0) {
// flush word preceding <br/> to currentTextBlock before calling startNewTextBlock // flush word preceding <br/> to currentTextBlock before calling startNewTextBlock
EpdFontFamily::Style fontStyle = getFontStyle(self->boldUntilDepth, self->italicUntilDepth, self->depth); self->flushPartWordBuffer();
self->flushPartWordBuffer(fontStyle);
self->startNewTextBlock(self->currentTextBlock->getStyle()); self->startNewTextBlock(self->currentTextBlock->getStyle());
} else { } else {
self->startNewTextBlock((TextBlock::Style)self->paragraphAlignment); self->startNewTextBlock((TextBlock::Style)self->paragraphAlignment);
@ -169,13 +168,11 @@ void XMLCALL ChapterHtmlSlimParser::characterData(void* userData, const XML_Char
return; return;
} }
EpdFontFamily::Style fontStyle = getFontStyle(self->boldUntilDepth, self->italicUntilDepth, self->depth);
for (int i = 0; i < len; i++) { for (int i = 0; i < len; i++) {
if (isWhitespace(s[i])) { if (isWhitespace(s[i])) {
// Currently looking at whitespace, if there's anything in the partWordBuffer, flush it // Currently looking at whitespace, if there's anything in the partWordBuffer, flush it
if (self->partWordBufferIndex > 0) { if (self->partWordBufferIndex > 0) {
self->flushPartWordBuffer(fontStyle); self->flushPartWordBuffer();
} }
// Skip the whitespace char // Skip the whitespace char
continue; continue;
@ -197,7 +194,7 @@ void XMLCALL ChapterHtmlSlimParser::characterData(void* userData, const XML_Char
// If we're about to run out of space, then cut the word off and start a new one // If we're about to run out of space, then cut the word off and start a new one
if (self->partWordBufferIndex >= MAX_WORD_SIZE) { if (self->partWordBufferIndex >= MAX_WORD_SIZE) {
self->flushPartWordBuffer(fontStyle); self->flushPartWordBuffer();
} }
self->partWordBuffer[self->partWordBufferIndex++] = s[i]; self->partWordBuffer[self->partWordBufferIndex++] = s[i];
@ -228,9 +225,7 @@ void XMLCALL ChapterHtmlSlimParser::endElement(void* userData, const XML_Char* n
matches(name, BOLD_TAGS, NUM_BOLD_TAGS) || matches(name, ITALIC_TAGS, NUM_ITALIC_TAGS) || self->depth == 1; matches(name, BOLD_TAGS, NUM_BOLD_TAGS) || matches(name, ITALIC_TAGS, NUM_ITALIC_TAGS) || self->depth == 1;
if (shouldBreakText) { if (shouldBreakText) {
EpdFontFamily::Style fontStyle = getFontStyle(self->boldUntilDepth, self->italicUntilDepth, self->depth); self->flushPartWordBuffer();
self->flushPartWordBuffer(fontStyle);
} }
} }

View File

@ -39,7 +39,7 @@ class ChapterHtmlSlimParser {
bool hyphenationEnabled; bool hyphenationEnabled;
void startNewTextBlock(TextBlock::Style style); void startNewTextBlock(TextBlock::Style style);
void flushPartWordBuffer(EpdFontFamily::Style fontStyle); void flushPartWordBuffer();
void makePages(); void makePages();
// XML callbacks // XML callbacks
static void XMLCALL startElement(void* userData, const XML_Char* name, const XML_Char** atts); static void XMLCALL startElement(void* userData, const XML_Char* name, const XML_Char** atts);