buildPage method
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.endWordIdByAyahKey;
final maxWordIndexByAyahKey = endMaps.maxWordIndexByAyahKey;
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!));
}
break;
case QpcV4LineType.basmallah:
final inferred = _inferBasmalahSurahNumber(lines: lines, index: i);
if (inferred != null) {
blocks.add(QpcV4BasmallahBlock(inferred));
}
break;
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.segments;
if (segments.isNotEmpty) {
blocks.add(QpcV4AyahLineBlock(
isCentered: line.isCentered, segments: segments));
}
if (result.didInsertSingleSpaceBetweenFirstTwoWords) {
needsSingleSpaceAtPageStart = false;
}
break;
}
}
return blocks;
}