diff --git a/R/html.R b/R/html.R
index 040e80716..73505dce9 100644
--- a/R/html.R
+++ b/R/html.R
@@ -291,25 +291,25 @@ split_chapters = function(
# sections.
if (split_level > 1) {
- levelCur <- split_level-1
- levelNext <- split_level
+ levelCur <- split_level-1
+ levelNext <- split_level
body = x[(i5 + 1):(i6 - 1)]
idxSecBody = grep(paste0('^
0 && idxSec[1] != i5 + 1) stop(
'The document must start with a first (#) or second level (##) heading'
)
- idxSec = sort(idxSec)
+ idxSec = sort(idxSec)
if (length(idxSec) > 1) {
- nNext <- paste0("h", levelNext)
- nCur <- paste0("h", levelCur)
- nSec = names(idxSec)
+ nNext <- paste0("h", levelNext)
+ nCur <- paste0("h", levelCur)
+ nSec = names(idxSec)
# h[X+1] that immediately follows hX
i = idxSec[nSec == nNext & c(nNext, head(nSec, -1)) == nCur] - 1
@@ -317,14 +317,14 @@ split_chapters = function(
if (length(i)) x[i] = paste(x[i], '\n
')
# hX that immediately follows h[X+1] but not the first h1
- iSec <- as.numeric(sub("h", "", nSec))
- diffSec <- diff(iSec)
- # in case next section is X > 1, remove multiple
- i <- c()
+ iSec <- as.numeric(sub("h", "", nSec))
+ diffSec <- diff(iSec)
+ # in case next section is X > 1, remove multiple
+ i <- c()
for(d in unique(diffSec[diffSec < 0])){
- i <- c(i, c(sapply(which(diffSec == d), `+`, seq(1, 2+d))))
- }
- i <- setdiff(i, which(nSec == "h1")[1])
+ i <- c(i, c(sapply(which(diffSec == d), `+`, seq(1, 2+d))))
+ }
+ i <- setdiff(i, which(nSec == "h1")[1])
if (length(i) && nSec[1] == nNext) i <- setdiff(i, which(nSec == nCur)[1])
i = idxSec[i] - 1
# need to comment out the corresponding to the last in the body
@@ -335,13 +335,13 @@ split_chapters = function(
}
i = c(i, j)
}
- for (j in i) {
- # the i-th lines should be the closing for h2
- if (x[j] != '') stop(
- 'Something wrong with the HTML output. The line ', x[j],
- ' is supposed to be '
- )
- }
+# for (j in i) {
+# # the i-th lines should be the closing for h2
+# if (!grepl('', x[j])) stop(
+# 'Something wrong with the HTML output. The line ', x[j],
+# ' is supposed to be '
+# )
+# }
x[i] = paste('') # remove the extra of h1
}
}
diff --git a/tests/testthat/test-gitbook.R b/tests/testthat/test-gitbook.R
index abf1345dd..5e62f92bb 100644
--- a/tests/testthat/test-gitbook.R
+++ b/tests/testthat/test-gitbook.R
@@ -54,3 +54,56 @@ test_that("gitbook() correctly handles extra_dependency after its own", {
extra_css <- xml2::xml_find_all(gitbook_css, "./following-sibling::link[contains(@href, 'font-awesome')]")
expect_gt(length(extra_css), 0L)
})
+
+test_that("gitbook() correctly splits with a specified numeric", {
+
+ skip_on_cran()
+ skip_if_not_pandoc()
+ skip_if_not_installed("xml2")
+
+ rmd <- local_rmd_file(
+ c("---", "title: test split_by as numeric", "---", "",
+ "# CHAPTER 1", "## SECTION 1", "### SUBSECTION 1",
+ "#### SUBSUBSECTION 1",
+ "", "# CHAPTER 2", "## SECTION 2")
+ )
+ res <- local_render_book(rmd, output_format = gitbook(split_by = "4", toc_depth = 4))
+ content <- xml2::read_html(res)
+
+ TOC <- xml2::xml_find_all(content, "//div[@class='book-summary']/nav/ul//li")
+
+ expect_equal(
+ xml2::xml_attr(TOC, "data-level"),
+ c("1", "1.1", "1.1.1", "1.1.1.1", "2", "2.1")
+ )
+ expect_equal(
+ xml2::xml_attr(TOC, "data-path"),
+ c("chapter-1.html", "section-1.html", "subsection-1.html",
+ "subsubsection-1.html", "chapter-2.html", "section-2.html")
+ )
+
+})
+
+test_that("gitbook() split by section is equivalent of split by 2", {
+
+ skip_on_cran()
+ skip_if_not_pandoc()
+ skip_if_not_installed("xml2")
+
+ rmd <- local_rmd_file(
+ c("---", "title: test split_by section", "---", "",
+ "# CHAPTER 1", "## SECTION 1", "### SUBSECTION 1",
+ "# CHAPTER 2", "## SECTION 2")
+ )
+
+ resSection <- local_render_book(rmd,
+ output_format = gitbook(split_by = "section"))
+ contentSection <- xml2::read_html(resSection)
+
+ res2 <- local_render_book(rmd,
+ output_format = gitbook(split_by = "2"))
+ content2 <- xml2::read_html(res2)
+
+ expect_equal(object = content2, expected = contentSection)
+
+})