bool HtmlBookReader::characterDataHandler(const char *text, std::size_t len, bool convert) { if (!myStyleSheetParser.isNull()) { myStyleSheetParser->parse(text, len); return true; } if (myIgnoreDataCounter != 0) { return true; } if (myIsPreformatted) { preformattedCharacterDataHandler(text, len, convert); return true; } const char *ptr = text; const char *end = text + len; if (!myIsStarted) { for (; ptr != end; ++ptr) { if (!isspace((unsigned char)*ptr)) { myIsStarted = true; break; } } } if (myIsStarted) { addConvertedDataToBuffer(ptr, end - ptr, convert); } return true; }
bool HtmlBookReader::characterDataHandler(const char *text, int len, bool convert) { if (myIgnoreDataCounter == 0) { const char *start = text; const char *end = text + len; if (myIsPreformatted) { int breakType = myFormat.breakType(); if (breakType & PlainTextFormat::BREAK_PARAGRAPH_AT_NEW_LINE) { for (const char *ptr = text; ptr != end; ++ptr) { if (*ptr == '\n') { if (start < ptr) { addConvertedDataToBuffer(start, ptr - start, convert); } else { static const std::string SPACE = " "; myBookReader.addData(SPACE); } myBookReader.endParagraph(); myBookReader.beginParagraph(); start = ptr + 1; } } addConvertedDataToBuffer(start, end - start, convert); } else if (breakType & PlainTextFormat::BREAK_PARAGRAPH_AT_LINE_WITH_INDENT) { for (const char *ptr = text; ptr != end; ++ptr) { if (isspace(*ptr)) { if (*ptr == '\n') { mySpaceCounter = 0; } else if (mySpaceCounter >= 0) { ++mySpaceCounter; } } else { if (mySpaceCounter > myFormat.ignoredIndent()) { if (ptr - start > mySpaceCounter) { addConvertedDataToBuffer(start, ptr - start - mySpaceCounter, convert); myBookReader.endParagraph(); myBookReader.beginParagraph(); } start = ptr; } mySpaceCounter = -1; } } mySpaceCounter = std::max(mySpaceCounter, 0); if (end - start > mySpaceCounter) { addConvertedDataToBuffer(start, end - start - mySpaceCounter, convert); } } else if (breakType & PlainTextFormat::BREAK_PARAGRAPH_AT_EMPTY_LINE) { for (const char *ptr = start; ptr != end; ++ptr) { if (isspace(*ptr)) { if (*ptr == '\n') { ++myBreakCounter; } } else { if (myBreakCounter > 1) { addConvertedDataToBuffer(start, ptr - start, convert); myBookReader.endParagraph(); myBookReader.beginParagraph(); start = ptr; } myBreakCounter = 0; } } addConvertedDataToBuffer(start, end - start, convert); } } else { if (!myIsStarted) { for (; start != end; ++start) { if (!isspace(*start)) { myIsStarted = true; break; } } } addConvertedDataToBuffer(start, end - start, convert); } } return true; }