parseParagraphs function
Implementation
ParseParagraphsResult parseParagraphs(
List<EpubChapter> chapters,
EpubContent? content,
) {
String? filename = '';
final List<int> chapterIndexes = [];
final paragraphs = chapters.fold<List<Paragraph>>(
[],
(acc, next) {
List<dom.Element> elmList = [];
if (filename != next.ContentFileName) {
filename = next.ContentFileName;
final document = EpubCfiReader().chapterDocument(next);
if (document != null) {
final result = convertDocumentToElements(document);
elmList = _removeAllDiv(result);
}
}
if (next.Anchor == null) {
// last element from document index as chapter index
chapterIndexes.add(acc.length);
acc.addAll(elmList
.map((element) => Paragraph(element, chapterIndexes.length - 1)));
return acc;
} else {
final index = elmList.indexWhere(
(elm) => elm.outerHtml.contains(
'id="${next.Anchor}"',
),
);
if (index == -1) {
chapterIndexes.add(acc.length);
acc.addAll(elmList
.map((element) => Paragraph(element, chapterIndexes.length - 1)));
return acc;
}
chapterIndexes.add(index);
acc.addAll(elmList
.map((element) => Paragraph(element, chapterIndexes.length - 1)));
return acc;
}
},
);
return ParseParagraphsResult(paragraphs, chapterIndexes);
}