This function is a simple helper to calculate the total number of pages of an article.
Arguments
- first_page
The first page of an article (numeric).
- last_page
The last page of an article (numeric).
- page_range
The page range of an article (character).
- quietly
Sometimes page ranges contain roman numerals like
xiv
. These are not recognized, returnNA
and raise a warning. If set toTRUE
, this warning not raised.
Details
This function deals with four cases:
if all three arguments are missing, NA is returned.
if page_range is supplied, the number of pages is calculated from it.
if only the first page is supplied, NA is returned.
if first and last page are supplied, the number of pages is calculated as
last_page - first_page + 1
.
The algorithm to parse page ranges works as follows: A typical page range is
1-10, 200
where the article starts at page 1, ends at page 10, and has an
erratum at page 200. For this case, the range is calculated as
range + single_page
, as in(10 - 1 + 1) + 1 = 11
. Sometimes multiple
ranges are given: 1-10, 11-20
. For those cases all ranges are summed:
(10 - 1 + 1) + (20 - 11 + 1) = 20
. Another specification for multiple
ranges is 1-10+11-20
, which is treated similarly.
Examples
# calculate pages from first and last page
first_pages <- sample(30:50, 10)
last_pages <- first_pages + sample(5:20, 10)
page_ranges <- rep(NA_character_, 10)
jst_get_total_pages(first_pages, last_pages, page_ranges)
#> [1] 10 21 13 18 7 12 20 15 9 14
# get pages from page range
jst_get_total_pages(NA_real_, NA_real_, "51 - 70")
#> [1] 20
jst_get_total_pages(NA_real_, NA_real_, "51 - 70, 350")
#> [1] 21
jst_get_total_pages(NA_real_, NA_real_, "350, 51 - 70")
#> [1] 21
jst_get_total_pages(NA_real_, NA_real_, "51 - 70, 80-100")
#> [1] 41
jst_get_total_pages(NA_real_, NA_real_, "51-70+350")
#> [1] 21