1# todo add R specific things, data.frame and vector rendering 2# for data.frames it should render per row (using paste) 3# for vectors it should render per item (for ".") 4section <- function(texts, keys, renders){ 5 force(texts) 6 force(keys) 7 force(renders) 8 9 renderFUN <- function(value, context){ 10 processSection(value, context, texts, keys, renders) 11 } 12 renderFUN 13} 14 15processSection <- function(value, context, texts, keys, renders){ 16 if (isFalsey(value)){ 17 return() 18 } 19 20 if (is.list(value) || is.vector(value)){ 21 if (is.null(names(value))){ 22 str <- sapply( value 23 , function(item){ 24 context <- c(list(as.list(item)), context) 25 values <- lapply(keys, resolve, context=context) 26 renderTemplate(values, context, texts, renders) 27 } 28 ) 29 return(paste(str, collapse="")) 30 } else { 31 context <- c(list(value), context) 32 } 33 } 34 35 values <- lapply(keys, resolve, context=context) 36 return(renderTemplate(values, context, texts, renders)) 37} 38