getQpcFlowBlocksForPage method

List<QpcV4RenderBlock> getQpcFlowBlocksForPage(
  1. int pageNumber
)

يعيد كتل العرض المتدفق (flowing) لصفحة — تجمّع segments حسب الآية. تُستخدم في وضع التكبير حيث لا نحتاج لتحديد موقع كل كلمة.

Implementation

List<QpcV4RenderBlock> getQpcFlowBlocksForPage(int pageNumber) {
  final lineBlocks = getQpcLayoutBlocksForPageSync(pageNumber);
  if (lineBlocks.isEmpty) return const [];

  final result = <QpcV4RenderBlock>[];
  final ayahSegmentsMap = <int, List<QpcV4WordSegment>>{};
  final ayahOrder = <int>[];

  for (final block in lineBlocks) {
    if (block is QpcV4SurahHeaderBlock || block is QpcV4BasmallahBlock) {
      // تفريغ الآيات المجمّعة قبل إضافة الهيدر/البسملة
      for (final uq in ayahOrder) {
        final segs = ayahSegmentsMap[uq]!;
        final first = segs.first;
        result.add(QpcV4AyahFlowBlock(
          ayahUq: uq,
          surahNumber: first.surahNumber,
          ayahNumber: first.ayahNumber,
          segments: segs,
        ));
      }
      ayahSegmentsMap.clear();
      ayahOrder.clear();
      result.add(block);
      continue;
    }

    if (block is QpcV4AyahLineBlock) {
      for (final seg in block.segments) {
        if (!ayahSegmentsMap.containsKey(seg.ayahUq)) {
          ayahSegmentsMap[seg.ayahUq] = [];
          ayahOrder.add(seg.ayahUq);
        }
        ayahSegmentsMap[seg.ayahUq]!.add(seg);
      }
    }
  }

  // تفريغ الآيات المتبقية
  for (final uq in ayahOrder) {
    final segs = ayahSegmentsMap[uq]!;
    final first = segs.first;
    result.add(QpcV4AyahFlowBlock(
      ayahUq: uq,
      surahNumber: first.surahNumber,
      ayahNumber: first.ayahNumber,
      segments: segs,
    ));
  }

  return result;
}