subobj <- ifelse(exists("subobj"), subobj, FALSE) # create a subobj letter (1a)
newobj <- ifelse(exists("newobj"), newobj, TRUE) # force a new object number (1b-> 2a and 1 -> 2)
cnt_chapt_content<-NMFSReports::auto_counter(cnt_chapt_content)
cnt_tables <- ifelse(newobj, cnt_tables+1, cnt_tables)
font0 <- ifelse(exists("font0"), font0, "Arial Narrow")

if (subobj) {
  # if it contains letters
  if (newobj) {
    cnt_tables_sub <- cnt_tables_sub0 <- letters[1]
  } else {
    # cnt_tables_sub <- letters[which(letters == 
    #                                   gsub("[^a-zA-Z]", "", list_tables[length(list_tables)][[1]]$number))+1]
    cnt_tables_sub <- cnt_tables_sub0 <- letters[which(letters == cnt_tables_sub0)+1]
  }
} else {
  cnt_tables_sub <- ""
}

if (!(exists("table_raw"))) {
  table_raw <- NULL
} else if (!(exists("table_print"))) {
  table_print <- NULL
}

if (!exists("cnt_pre")) {
  cnt_pre <- ""
  # } else {
  #   cnt_pre <- paste0(cnt_pre, " ")
}

# Systematically save your table with this function
list_tables<-NMFSReports::save_tables(
  table_raw = table_raw, 
  table_print = table_print,
  list_tables = list_tables, 
  header = ifelse(exists("header", mode = "character"), header, ""),
  footnotes = unlist(ifelse(exists("footnotes", mode = "character"), list(footnotes), "")), 
  alttext = ifelse(exists("alttext", mode = "character"), alttext, header),
  filename0 = ifelse(exists("filename0", mode = "character"), filename0, nickname), 
  nickname = ifelse(exists("nickname", mode = "character"), nickname, filename0),
  filename_desc = ifelse(exists("filename_desc", mode = "character"), filename_desc, nickname),  
  cnt_chapt_content = ifelse(exists("cnt_chapt_content", mode = "character"), cnt_chapt_content, "001"), 
  cnt = paste0(cnt_pre, cnt_tables, cnt_tables_sub), 
  path = dir_out_tables)

r ifelse(((indesign_flowin %in% TRUE) | (class(table_print) %in% "flextable")), "", paste0("#### ", list_tables[[length(list_tables)]]$caption))

#, fig.cap=ifelse(indesign_flowin %in% FALSE & (list_tables[[length(list_tables)]]$alttext)!="", list_tables[[length(list_tables)]]$alttext, ""), fig.align='center'

# Print or Don't Print Plot in Text
# You don't want to print this in the document if this text will be flowed into InDesign. 
# However, sometimes its nice to see everything all together, so this variable is 
# something you might like to toggle on and off. 
# Hense, FALSE = print here, TRUE = don't print here, just make the .pdf (coded above)
if (indesign_flowin %in% FALSE) { 
  # print table in text
  if (exists("table_print")) {
    if ((class(table_print) %in% c("data.frame", "matrix"))) {
      list_tables[[length(list_tables)]]$print %>% 
        knitr::kable(row.names = FALSE, booktabs = TRUE)

    } else if (class(table_print) %in% c("flextable")) {


      href <- gsub(pattern = "\\}", replacement = "", 
                  gsub(pattern = "\\{", replacement = "", 
                       x = unlist(regmatches(list_tables[[length(list_tables)]]$header, 
                                             gregexpr("(\\{.*?\\})", 
                                                      list_tables[[length(list_tables)]]$header)))))

      # list_tables[[length(list_tables)]]$print <- 
      #   list_tables[[length(list_tables)]]$print %>%
      # # I didn't like how the set_caption looked/operated, so I integrated the caption directly into the table with my table numbering system
      # flextable::set_caption(
      #   x = .,
      #   caption = as_paragraph("Table ",
      #                         flextable::hyperlink_text(
      #                           x = list_tables[[length(list_tables)]]$number,
      #                           url = href,
      #                           props = officer::fp_text(color = "blue", font.family = font0) ),
      #                        ". -- ",
      #                        list_tables[[length(list_tables)]]$alttext
      #                         ))

      header0 <-# paste0('c("', 
        list_tables[[length(list_tables)]]$alttext
      #, '")'  )
      # header0 <- strsplit(x = header0, split = "**", fixed = TRUE)
      # header0 <- strsplit(x = header0, split = "*", fixed = TRUE)
      header00 <- header0
      header00 <- unlist(strsplit(x = header00, split = "**", fixed = TRUE))
      header00 <- unlist(strsplit(x = header00, split = "*", fixed = TRUE))
      header00 <- header00[header00 != ""]
      for (zz in 1:length(header00)) {
        if (grepl(pattern = paste0("**", header00[zz], "**"), x = header0, fixed = TRUE)) {
          header00[zz] <-
            #eval(parse(text = paste0(
            paste0("flextable::as_b('", header00[zz], "')")#) ) )
        } else if (grepl(pattern = paste0("*", header00[zz], "*"), x = header0, fixed = TRUE)) {
          header00[zz] <- #eval(parse(text = paste0(
            paste0("flextable::as_i('", header00[zz], "')")#) ) )
        } else {
          header00[zz] <- paste0("'", header00[zz], "'")
        }
      }


      header00 <- paste0('list("Table ", flextable::hyperlink_text(x = list_tables[[length(list_tables)]]$number, url = href, props = officer::fp_text(color = "blue", font.family = font0) ),  ". -- ",', paste0(header00, collapse = ", "), ")")

      # eval(parse(text = header00))

      # # bold
      # header00 <- gsub(pattern = '** ', replacement = ')", "', fixed = TRUE,
      #                 x = gsub(pattern = " **", replacement = '", as_b(',
      #                          x = header00, fixed = TRUE))
      #
      #         # italics
      # header00 <- gsub(pattern = "*)", replacement = '")", "', fixed = TRUE,
      #                 x = gsub(pattern = "(*", replacement = '", as_i("',
      #                          x = header00, fixed = TRUE))
      # exp0 <- header00
      # exp00 <- list()
      # for (zz in 1:length(header0)) {
      #   if (grepl(pattern = "as_i(", x = exp0[zz], fixed = TRUE) | grepl(pattern = "as_b(", x = exp0[zz], fixed = TRUE)) {
      #     exp0[zz] <- eval(parse(text = exp0[zz]))
      #   }
      # }
      # 
      # header00 <- unlist(list("Table ",
      #                  flextable::hyperlink_text(
      #                    x = list_tables[[length(list_tables)]]$number,
      #                    url = href,
      #                    props = officer::fp_text(color = "blue", font.family = font0) ),
      #                  ". -- ",
      #                  header0
      #                  # unlist(exp0)
      # ))
      # # eval(parse(text = header0))


      # list("Table ",
      #                  flextable::hyperlink_text(
      #                    x = list_tables[[length(list_tables)]]$number,
      #                    url = href,
      #                    props = officer::fp_text(color = "blue", font.family = font0) ),
      #                  ". -- ",
      #                  header0))

      list_tables[[length(list_tables)]]$print <- 
        list_tables[[length(list_tables)]]$print %>%
        flextable::add_header_lines(
          x = .,
          top = TRUE,
          values = "") %>%
        flextable::compose(
          x = .,
          # j = "dummy",
          part = "header",
          i = 1,
          # top = TRUE,
          value = flextable::as_paragraph(
            list_values = eval(parse(text = header00))) ) %>%
        flextable::hline_top(x = ., part = "header",
                             border = officer::fp_border(color="white", width = 3)) %>%
        flextable::align(x = ., i = 1, part = "header", align = "left") %>%
        flextable::bold(x = ., i = 1, part = "header", bold = FALSE) %>%
        flextable::font(x = ., i = 1, part = "header", fontname = font0) #%>% 
      # flextable::style(x = ., i = 1, part = "header", )

      list_tables[[length(list_tables)]]$print

    } else {
      # list_tables[[length(list_tables)]]$print
      aaa <- list_tables[[length(list_tables)]]$print
      if (names(list_tables[[length(list_tables)]]$print)[1]=="header") {
        list_tables[[length(list_tables)]]$print
      } else {
        for (iii in 1:length(aaa)) { 
          print(list_tables[[length(list_tables)]]$print[[iii]])
        }
      }
    }
  } else {
    if ((class(table_print) %in% c("data.frame", "matrix"))) {
      list_tables[[length(list_tables)]]$raw %>% 
        knitr::kable(row.names = FALSE, booktabs = TRUE)
    } else {
      list_tables[[length(list_tables)]]$raw
    }
  }
} else if (indesign_flowin %in% TRUE) { # for reports that need to be flowed into InDesign 

  Title0 <- ifelse(indesign_flowin %in% TRUE, "", list_tables[[length(list_tables)]]$caption)

  rmarkdown::render(system.file("rmd/_TableFigureHeader.Rmd", package = "NMFSReports"), 
                    quiet = TRUE,
                    output_dir = dir_chapters, 
                    output_file = paste0(filename00, cnt_chapt_content,"_Title.docx"))
}

# make sure you dont mistakenly name other files with these names
remove_who <- c()
remove_who0 <- c("header", "footnotes", "subobj", "newobj", #"nickname", 
                 "filename_desc", "alttext", 
                 "table_raw", "table_print", "cnt_pre")
for (i in 1:length(remove_who0)){
  if(exists(remove_who0[i]) & !exists(remove_who0[i], mode = "function")){
    remove_who <- c(remove_who, remove_who0[i])
  }
}
remove(list = remove_who)




EmilyMarkowitz-NOAA/NMFSReports documentation built on March 26, 2023, 1:08 a.m.