Skip to content

Instantly share code, notes, and snippets.

@wush978
Last active December 13, 2015 16:48
Show Gist options
  • Save wush978/4942568 to your computer and use it in GitHub Desktop.
Save wush978/4942568 to your computer and use it in GitHub Desktop.
# outline <- c("a", "b")
# print_outline(outline):
# - a
# - b
# print_outline(outline, 1):
# - **a**
# - b
# ---
# outline <- list("a" = c("b", "c", "d"), "e" = NULL, "f" = NULL)
# print_outline(outline):
# - a
# - b
# - c
# - d
# - e
# - f
# print_outline(outline, 1)
# print_outline(outline, 2)
get_prefix <- function(level, incremental) {
sprintf("%s%s- ", ifelse(incremental, "", "> "), ifelse(level == 0, "", rep(" ", level)))
}
get_current <- function(current, retval) {
if (current == 0) return(retval)
retval[current] <- sprintf("**%s**", retval[current])
return(retval)
}
print_outline <- function(outline, current = 0, level = 0, incremental = TRUE) {
if(is.null(outline)) {
return(NULL)
}
if(class(outline) == "character") {
prefix <- get_prefix(level, incremental)
outline <- get_current(current, outline)
retval <- paste(prefix, outline, sep="")
return(retval)
}
stopifnot(class(outline) == "list")
prefix <- get_prefix(level, incremental)
retval <- c()
for(i in 1:length(outline)) {
if (i == current) {
add_line <- paste(prefix, "**", names(outline)[i], "**", sep="")
} else {
add_line <- paste(prefix, names(outline)[i], sep="")
}
retval <- c(retval, add_line)
force(level)
if (i == current) {
add_line <- print_outline(outline[[i]], level=level+1, incremental=incremental, current=0)
retval <- c(retval, add_line)
}
}
return(retval)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment