Add extra customization options to add_header_above
diff --git a/R/xtable2kable.R b/R/xtable2kable.R
new file mode 100644
index 0000000..862d7a1
--- /dev/null
+++ b/R/xtable2kable.R
@@ -0,0 +1,56 @@
+#' Convert xtable to a kable object
+#'
+#' @description This function allow users to turn an xtable object into a kable
+#' so they can use most of kableExtra's functions with their xtable code without
+#' making too many changes. Note that although I tested many cases and it seems
+#' to work, this function may not be functional in some other cases. I'm not
+#' a regular xtable user and can only provide very limited support for this
+#' function.
+#'
+#' You should use this table in the same way as `print.xtable`. All the options
+#' you provided to this function will be sent to `print.xtable`. Instead of
+#' printing out the result, this function will return the LaTeX or HTML as
+#' text and a kable object.
+#'
+#' @param x an xtable object
+#' @param ... options for print.xtable
+#'
+#' @examples
+#' \dontrun{
+#' library(xtable)
+#' xtable(mtcars) %>%
+#' xtable2kable(booktabs = TRUE) %>%
+#' kable_styling(latex_options = "striped")
+#' }
+#'
+#' @export
+xtable2kable <- function(x, ...) {
+ if (!class(x)[1] == "xtable") {
+ warning("x is not an xtable object.")
+ return(x)
+ }
+
+ out <- capture.output(print(x, ...))[-(1:2)]
+ out <- paste(out, collapse = "\n")
+
+ xtable_print_options <- list(...)
+ if ("type" %in% names(xtable_print_options) &&
+ xtable_print_options$type == "html") {
+ out <- structure(out, format = "html", class = "knitr_kable")
+ return(out)
+ }
+
+ out <- structure(out, format = "latex", class = "knitr_kable")
+
+ # Assign modefied meta to output
+ out_meta <- magic_mirror(out)
+
+ if ("table.placement" %in% names(xtable_print_options)) {
+ out_meta$valign <- paste0("[", xtable_print_options$table.placement, "]")
+ }
+ if ("tabular.environment" %in% names(xtable_print_options)) {
+ out_meta$tabular <- xtable_print_options$tabular.environment
+ }
+ attr(out, "kable_meta") <- out_meta
+ return(out)
+}