# File src/library/tools/R/Sweavetools.R # Part of the R package, https://www.R-project.org # # Copyright (C) 1995-2015 The R Core Team # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # A copy of the GNU General Public License is available at # https://www.R-project.org/Licenses/ SweaveTeXFilter <- function(ifile, encoding = "unknown") { if(inherits(ifile, "srcfile")) ifile <- ifile$filename syntax <- utils:::SweaveGetSyntax(ifile) ## Read in an re-encode as needed. ## Alternatively, could use utils:::SweaveReadFile() ... lines <- readLines(ifile, warn = FALSE) if(encoding != "unknown") { if(encoding == "UTF-8") Encoding(lines) <- "UTF-8" else lines <- iconv(lines, encoding, "", sub = "byte") } TEXT <- 1L CODE <- 0L dpos <- grep(syntax$doc, lines) cpos <- grep(syntax$code, lines) recs <- rbind(data.frame(line = dpos, type = rep.int(TEXT, length(dpos))), data.frame(line = cpos, type = rep.int(CODE, length(cpos))) ) recs <- recs[order(recs$line),] last <- 0L state <- TEXT for (i in seq_len(nrow(recs))) { line <- recs$line[i] if (state == CODE) lines[(last+1L):line] <- "" else lines[line] <- "" state <- recs$type[i] last <- line } lines }