$unitKey, 'unit_name' => $unitTitle, 'lessons' => [] ]; $lessonCounter = 0; continue; } // Detect Lesson (## Lesson or ## الدرس or ## معمل or ## ) if (preg_match('/^##\s+(Lesson|الدرس|قسم|المحطة|قواعد|تمارين|معمل)\s*([0-9\-\:A-Za-z\s]+)(.*)$/ui', $trimmed, $m) || (preg_match('/^##\s+(.+)$/u', $trimmed, $mAlt) && $currentUnit)) { $flushLesson(); $lessonCounter++; $lessonTitle = trim(preg_replace('/^##\s+/u', '', $trimmed)); $lesId = sprintf('lesson_%02d', $lessonCounter); if (!$currentUnit) { $unitCounter++; $currentUnit = [ 'unit_key' => sprintf('unit_%02d', $unitCounter), 'unit_name' => 'الوحدة الأولى: المعادلات', 'lessons' => [] ]; } $currentLesson = [ 'lesson_id' => $lesId, 'title' => $lessonTitle, 'outcomes' => [$lessonTitle] ]; $lessonBuffer = [$trimmed]; continue; } if ($currentLesson) { $lessonBuffer[] = $line; } } $flushUnit(); $extracted = [ 'grade_name' => $gradeName, 'grade_key' => $gradeKey, 'subject_name' => $subName, 'subject_key' => $subKey, 'semester_name' => $semName, 'semester_key' => $semKey, 'units' => $units ]; return CurriculumService::mergeExtractedCurriculum($extracted); }