X-Git-Url: https://git.arvados.org/rnaseq-cwl-training.git/blobdiff_plain/993bac708dfb9d677bf5245d48b09742fa46d5a3..HEAD:/bin/generate_md_episodes.R diff --git a/bin/generate_md_episodes.R b/bin/generate_md_episodes.R index 43bf65e..7fb4c5a 100644 --- a/bin/generate_md_episodes.R +++ b/bin/generate_md_episodes.R @@ -1,23 +1,44 @@ generate_md_episodes <- function() { - if (require("knitr")) { - if (packageVersion("knitr") < '1.9.19') { - stop("knitr must be version 1.9.20 or higher") - } - } else stop("knitr 1.9.20 or above is needed to build the lessons.") + # avoid ansi color characters from being printed in the output + op <- options() + on.exit(options(op), add = TRUE) + options(crayon.enabled = FALSE) + ## get the Rmd file to process from the command line, and generate the path + ## for their respective outputs + args <- commandArgs(trailingOnly = TRUE) + if (!identical(length(args), 2L)) { + stop("input and output file must be passed to the script") + } - if (!require("stringr")) - stop("The package stringr is required for generating the lessons.") + src_rmd <- args[1] + dest_md <- args[2] - ## find all the Rmd files, and generates the paths for their respective outputs - src_rmd <- list.files(pattern = "??-*.Rmd$", path = "_episodes_rmd", full.names = TRUE) - dest_md <- file.path("_episodes", gsub("Rmd$", "md", basename(src_rmd))) + ## knit the Rmd into markdown + knitr::knit(src_rmd, output = dest_md) - ## knit the Rmd into markdown - mapply(function(x, y) { - knitr::knit(x, output = y) - }, src_rmd, dest_md) + # Read the generated md files and add comments advising not to edit them + add_no_edit_comment <- function(y) { + con <- file(y) + mdfile <- readLines(con) + if (mdfile[1] != "---") + stop("Input file does not have a valid header") + mdfile <- append( + mdfile, + "# Please do not edit this file directly; it is auto generated.", + after = 1 + ) + mdfile <- append( + mdfile, + paste("# Instead, please edit", basename(y), "in _episodes_rmd/"), + after = 2 + ) + writeLines(mdfile, con) + close(con) + return(paste("Warning added to YAML header of", y)) + } + vapply(dest_md, add_no_edit_comment, character(1)) } generate_md_episodes()