소스 검색

merge: fix answer quick lookup semicolon parsing

yemeishu 1 개월 전
부모
커밋
4a2aa31cab
1개의 변경된 파일10개의 추가작업 그리고 9개의 파일을 삭제
  1. 10 9
      resources/views/pdf/partials/answer-detail-page.blade.php

+ 10 - 9
resources/views/pdf/partials/answer-detail-page.blade.php

@@ -11,20 +11,25 @@
         ->sortBy(fn ($item) => (int) (($item['q']->question_number ?? 0)))
         ->values();
 
-    $normalizeQuickAnswer = function (?string $answer): string {
+    $normalizeAnswerText = function (?string $answer, bool $compact = false): string {
         $answer = trim((string) $answer);
         if ($answer === '') {
             return '—';
         }
         $answer = preg_replace('/\s+/u', ' ', $answer) ?? $answer;
-        $answer = str_replace([';', ';'], ' / ', $answer);
+        // 与下方解析排版保持一致:保留分号语义,仅增加软换行机会,避免把答案错误改写成“/”
+        $answer = str_replace([';', ';'], [';<wbr>', ';<wbr>'], $answer);
+        if ($compact) {
+            // 速查统一为流式:移除显式换行
+            $answer = preg_replace('/<br\s*\/?>/iu', ' ', $answer) ?? $answer;
+        }
 
         return trim($answer);
     };
 
-    $quickAnswers = $allQuestions->map(function ($item) use ($normalizeQuickAnswer) {
+    $quickAnswers = $allQuestions->map(function ($item) use ($normalizeAnswerText) {
         $q = $item['q'];
-        $answerText = $normalizeQuickAnswer($q->answer ?? '');
+        $answerText = $normalizeAnswerText($q->answer ?? '', true);
         $isLong = mb_strlen(strip_tags($answerText)) > 20
             || str_contains($answerText, "\n")
             || str_contains($answerText, "\r")
@@ -32,8 +37,6 @@
             || str_contains($answerText, '\\frac')
             || str_contains($answerText, '见解析');
         $processedAnswer = \App\Services\MathFormulaProcessor::processFormulas($answerText);
-        // 速查统一为流式:移除显式换行
-        $processedAnswer = preg_replace('/<br\s*\/?>/iu', ' ', $processedAnswer) ?? $processedAnswer;
 
         return [
             'no' => (int) ($q->question_number ?? 0),
@@ -195,9 +198,7 @@
                 $hasImageLikeSolution = (bool) preg_match('/<\s*img\b|<\s*image\b|(^|[\s>])img\s+src\s*=/iu', $rawSolution);
                 $showAnswer = !$isSeeSolutionAnswer;
 
-                $renderAnswer = $rawAnswer !== ''
-                    ? \App\Services\MathFormulaProcessor::processFormulas($rawAnswer)
-                    : '—';
+                $renderAnswer = \App\Services\MathFormulaProcessor::processFormulas($normalizeAnswerText($rawAnswer, false));
                 if ($rawSolution === '') {
                     $renderSolution = '(无详解)';
                 } elseif ($hasImageLikeSolution) {