@@ -300,7 +300,7 @@ detect_non_eval_chunks <- function(lines, vignetteType) {
300300 qmd = " ^[\t >]*```+\\ {\\ {r\\ s*\\ w*\\ }\\ }$" ,
301301 rmd = " ^[\t >]*```+\\ s*$" ,
302302 rnw = " \\\\ begin\\ {verbatim\\ }" ,
303- rhtml = " ^<!-- \\ s*begin \\ .rcode.*eval \\ s*= \\ s*F(ALSE)? "
303+ rhtml = " $.^ "
304304 )
305305 non_eval_chunk_lines <- grep(non_eval_pattern , lines )
306306 chunk_patterns_end <- switch (
@@ -312,11 +312,13 @@ detect_non_eval_chunks <- function(lines, vignetteType) {
312312 )
313313 chunk_ends <- grep(chunk_patterns_end , lines )
314314
315- for (i in seq_along(non_eval_chunk_lines )) {
316- next_end_index <-
317- which(chunk_ends > non_eval_chunk_lines [i ])[1L ]
318- if (! is.na(next_end_index ))
319- chunk_ends <- chunk_ends [- next_end_index ]
315+ if (! identical(vignetteType , " rmd" )) {
316+ for (i in seq_along(non_eval_chunk_lines )) {
317+ next_end_index <-
318+ which(chunk_ends > non_eval_chunk_lines [i ])[1L ]
319+ if (! is.na(next_end_index ))
320+ chunk_ends <- chunk_ends [- next_end_index ]
321+ }
320322 }
321323
322324 chunk_patterns_start <- switch (
@@ -326,24 +328,35 @@ detect_non_eval_chunks <- function(lines, vignetteType) {
326328 rnw = knitr :: all_patterns [[" rnw" ]]$ chunk.begin ,
327329 rhtml = knitr :: all_patterns [[" html" ]]$ chunk.begin
328330 )
329- chunk_starts <- grep(chunk_patterns_start , lines )
331+ chunk_starts <- setdiff(
332+ grep(chunk_patterns_start , lines ), non_eval_chunk_lines
333+ )
330334
331335 for (i in seq_along(chunk_starts )) {
332336 next_end_index <- which(chunk_ends > chunk_starts [i ])[1L ]
333- if (! is.na(next_end_index ))
337+ if (! is.na(next_end_index )) {
338+ if (identical(vignetteType , " rmd" ))
339+ non_eval_chunk_lines <- non_eval_chunk_lines [
340+ non_eval_chunk_lines != chunk_ends [next_end_index ]
341+ ]
334342 chunk_ends <- chunk_ends [- next_end_index ]
343+ }
335344 }
345+ if (length(chunk_ends ) && identical(vignetteType , " rmd" ))
346+ non_eval_chunk_lines <- chunk_ends [c(TRUE , FALSE )]
336347
337- if (identical(vignetteType , " qmd" )) {
348+ eval_false_lines <- 0L
349+ if (identical(vignetteType , " qmd" ))
338350 eval_false_lines <- grep(" #\\ |\\ s*eval\\ s*:\\ s*F(ALSE)?" , lines , TRUE )
339- } else {
340- eval_false_lines <- non_eval_chunk_lines
341- }
351+ else
352+ eval_false_lines <- grep(
353+ " eval\\ s*=\\ s*F(ALSE)?" , lines [chunk_starts ], TRUE
354+ )
342355
343356 list (
344- total = c(length(chunk_starts ), non_eval_chunk_lines ),
345- eval_false = c( length(eval_false_lines ), non_eval_chunk_lines ),
346- non_eval = non_eval_chunk_lines
357+ total = c(length(chunk_starts ), length( non_eval_chunk_lines ) ),
358+ eval_false = length(eval_false_lines ),
359+ non_eval = length( non_eval_chunk_lines )
347360 ) | >
348361 lapply(
349362 function (values )
0 commit comments