@@ -262,11 +262,22 @@ private function fileExcerpt(string $file, int $line, int $srcContext = 3): stri
262
262
// highlight_file could throw warnings
263
263
// see https://bugs.php.net/25725
264
264
$ code = @highlight_file ($ file , true );
265
- // remove main code/span tags
266
- $ code = preg_replace ('#^<code.*?>\s*<span.*?>(.*)</span>\s*</code>#s ' , '\\1 ' , $ code );
267
- // split multiline spans
268
- $ code = preg_replace_callback ('#<span ([^>]++)>((?:[^<]*+<br \/>)++[^<]*+)</span># ' , fn ($ m ) => "<span $ m [1 ]> " .str_replace ('<br /> ' , "</span><br /><span $ m [1 ]> " , $ m [2 ]).'</span> ' , $ code );
269
- $ content = explode ('<br /> ' , $ code );
265
+
266
+ if (\PHP_VERSION_ID >= 80300 ) {
267
+ // remove main pre/code tags
<
8000
td data-grid-cell-id="diff-e453a2e7e63e66a7cf9a56f35bea19acdd7e1fa4e362f7ddb2ee0b10b45d86a7-269-268-1" data-selected="false" role="gridcell" style="background-color:var(--diffBlob-additionNum-bgColor, var(--diffBlob-addition-bgColor-num));text-align:center" tabindex="-1" valign="top" class="focusable-grid-cell diff-line-number position-relative left-side">268
+ $ code = preg_replace ('#^<pre.*?>\s*<code.*?>(.*)</code>\s*</pre>#s ' , '\\1 ' , $ code );
269
+ // split multiline code tags
270
+ $ code = preg_replace_callback ('#<code ([^>]++)>((?:[^<]*+ \\n)++[^<]*+)</code># ' , fn ($ m ) => "<code $ m [1 ]> " .str_replace ("\n" , "</code> \n<code $ m [1 ]> " , $ m [2 ]).'</code> ' , $ code );
271
+ // Convert spaces to html entities to preserve indentation when rendered
272
+ $ code = str_replace (' ' ,' ' , $ code );
273
+ $ content = explode ("\n" , $ code );
274
+ } else {
275
+ // remove main code/span tags
276
+ $ code = preg_replace ('#^<code.*?>\s*<span.*?>(.*)</span>\s*</code>#s ' , '\\1 ' , $ code );
277
+ // split multiline spans
278
+ $ code = preg_replace_callback ('#<span ([^>]++)>((?:[^<]*+<br \/>)++[^<]*+)</span># ' , fn ($ m ) => "<span $ m [1 ]> " .str_replace ('<br /> ' , "</span><br /><span $ m [1 ]> " , $ m [2 ]).'</span> ' , $ code );
279
+ $ content = explode ('<br /> ' , $ code );
280
+ }
270
281
271
282
$ lines = [];
272
283
if (0 > $ srcContext ) {
0 commit comments