buildPage method
Builds the list of render blocks for pageNumber (1-based).
Implementation
List<QpcV4RenderBlock> buildPage({required int pageNumber}) {
final lines = store.linesByPage[pageNumber];
if (lines == null || lines.isEmpty) return const <QpcV4RenderBlock>[];
final endMaps = _buildAyahEndMaps(lines);
final endWordIdByAyahKey = endMaps.$1;
final maxWordIndexByAyahKey = endMaps.$2;
final blocks = <QpcV4RenderBlock>[];
var needsSingleSpaceAtPageStart = true;
for (var i = 0; i < lines.length; i++) {
final line = lines[i];
switch (line.lineType) {
case QpcV4LineType.surahName:
if (line.surahNumber != null) {
blocks.add(QpcV4SurahHeaderBlock(line.surahNumber!));
}
case QpcV4LineType.basmallah:
final inferred = _inferBasmalahSurahNumber(lines: lines, index: i);
if (inferred != null) {
blocks.add(QpcV4BasmallahBlock(inferred));
}
case QpcV4LineType.ayah:
final rangeStart = line.firstWordId;
final rangeEnd = line.lastWordId;
if (rangeStart == null || rangeEnd == null) break;
final result = _buildAyahSegmentsForLine(
rangeStart: rangeStart,
rangeEnd: rangeEnd,
endWordIdByAyahKey: endWordIdByAyahKey,
maxWordIndexByAyahKey: maxWordIndexByAyahKey,
addSingleSpaceBetweenFirstTwoWords: needsSingleSpaceAtPageStart,
);
final segments = result.$1;
if (segments.isNotEmpty) {
blocks.add(QpcV4AyahLineBlock(
isCentered: line.isCentered,
segments: segments,
));
}
if (result.$2) {
needsSingleSpaceAtPageStart = false;
}
}
}
return blocks;
}