Nothing
highlight_supported_languages <- function() {
files <- list.files(
system.file("highlight", "langDefs", package = "highlight"),
pattern = "lang$"
)
gsub("[.]lang$", "", files)
}
#' List of themes supported by external_highlight
#'
#' List of themes supported by \code{\link{external_highlight}}
#'
#' @return A character vector with the names of the themes
#' @export
highlight_themes <- function() {
files <- list.files(
system.file("highlight", "themes", package = "highlight"),
pattern = "style$"
)
gsub("[.]style$", "", files)
}
#' List of available output types supported by external_highlight
#'
#' List of available output types supported by \code{\link{external_highlight}}
#'
#' @return A character vector with the list of supported types
#' @export
highlight_output_types <- function() {
c(
"HTML",
"XHTML",
"TEX",
"LATEX",
"RTF",
"XML",
"ANSI",
"XTERM256",
"HTML32",
"SVG",
"BBCODE"
)
}
highlight_theme <- function(theme = "emacs") {
if (missing(theme)) {
theme <- highlight_themes()[1L]
} else {
theme <- match.arg(theme, highlight_themes())
}
system.file(
"highlight",
"themes",
sprintf("%s.style", theme),
package = "highlight"
)
}
highlight_lang <- function(lang = highlight_supported_languages()) {
if (missing(lang)) {
stop("no language")
} else {
lang <- match.arg(lang, highlight_supported_languages())
}
system.file(
"highlight",
"langDefs",
sprintf("%s.lang", lang),
package = "highlight"
)
}
highlight_type <- function(type = highlight_output_types()) {
if (missing(type)) {
type <- "HTML"
}
type <- match.arg(type, highlight_output_types())
match(type, highlight_output_types()) - 1L
}
#' Multi-language source code highlighter
#'
#' Multi-language source code highlighter
#'
#' @param file Source file to highlight
#' @param outfile Destination of the highlighted code.
#' When \code{NULL}, the code is simply returned as a character vector
#' @param theme One of the themes. See \code{\link{highlight_themes}} for the list
#' of available themes.
#' @param lang The language in which the code is to be interpreted. If this argument
#' is not given, it will be deduced from the file extension.
#' @param type Output format. See \code{\link{highlight_output_types}} for the list
#' of supported output types.
#' @param line_numbers if \code{TRUE}, the result will include line numbers
#' @param doc if \code{TRUE}, the result is a stand alone document, otherwise, just a
#' portion to include in a document
#' @param code If given, then the source code is not read from the file
#'
#' @return Nothing if \code{outfile} is given, with the side effect of writing into the file.
#' The result as a character vector if outfile is NULL
#' @seealso \code{\link{highlight}} to highlight R code using the information from the parser
#' @export
external_highlight <- function(
file,
outfile = stdout(),
theme = "kwrite",
lang = NULL,
type = "HTML",
line_numbers = FALSE,
doc = TRUE,
code
) {
if (!missing(code)) {
file <- sprintf("%s.%s", tempfile(), lang)
writeLines(code, file)
}
type <- highlight_type(type)
theme <- highlight_theme(theme)
lang <- highlight_guess_language(file, lang = lang)
lang <- highlight_lang(lang)
using_tempfile <- is.null(outfile) || !is.character(outfile)
output_file <- if (using_tempfile) tempfile() else outfile
.Call(
"HighlightMain",
file,
output_file,
type,
theme,
lang,
isTRUE(line_numbers),
isTRUE(doc),
PACKAGE = "highlight"
)
code <- readLines(output_file)
w <- which(code == "\\mbox{}")
code <- code[-tail(w, 1)]
w <- tail(grep("\\\\\\\\$", code), 1)
code[w] <- gsub("\\\\\\\\$", "", code[w])
if (!is.null(outfile)) {
writeLines(code, outfile)
}
invisible(code)
}
highlight_extensions <- function() {
txt <- readLines(system.file(
"highlight",
"filetypes.conf",
package = "highlight"
))
df <- do.call(
rbind,
lapply(grep("^[$]ext", txt, value = TRUE), function(x) {
extensions <- strsplit(sub("^.*=", "", x), " ")[[1]]
language <- sub("^.*[(](.*)[)].*$", "\\1", x)
data.frame(
lang = rep(language, length(extensions) + 1L),
ext = c(language, extensions),
stringsAsFactors = FALSE
)
})
)
files <- list.files(
system.file("highlight", "langDefs", package = "highlight"),
pattern = "[.]lang$"
)
languages <- sub("[.]lang$", "", files)
missings <- setdiff(languages, unique(df$lang))
df <- rbind(
df,
data.frame(lang = missings, ext = missings, stringsAsFactors = FALSE)
)
df <- df[order(df$lang), ]
}
highlight_guess_language <- function(file, lang = NULL) {
if (is.null(lang)) {
lang <- sub("^.*[.]([^.]*)$", "\\1", file)
}
if (lang == "") {
stop("no extension")
}
df <- highlight_extensions()
id <- match(lang, df$ext)
if (is.na(id)) {
stop("unknown extension")
}
df[id, "lang"]
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.