forked from apreshill/campout
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathparse-slides.R
111 lines (86 loc) · 2.58 KB
/
parse-slides.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# Generic slide parsers ---------------------------------------------------
sld_extract_key <- function(.file_path) {
readr::read_lines(.file_path) %>%
utils::head(4) %>%
str_subset("^key: .*$") %>%
str_remove("key: ")
}
sld_remove_extraneous_lines <- function(.lines) {
removed <- .lines %>%
str_remove("^(key|type|disable_transition|center_content):.*$") %>%
str_remove("^`+yaml.*$") %>%
str_remove("^`\\@.*`.*$") %>%
str_remove("^name: .*$")
c(utils::head(removed, 3),
utils::tail(removed, -3) %>%
str_remove("^title: .*$"))
}
# Backticks that are surrounded by empty lines
sld_remove_extra_backticks <- function(.lines) {
if_else(
grepl("^$", lag(.lines)) & grepl("^$", lead(.lines)) &
grepl("^```$", .lines, perl = TRUE),
"",
.lines
)
}
# DataCamp slide item reveals
sld_remove_dc_reveals <- function(.lines) {
.lines %>%
str_remove("\\{\\{\\w\\}\\}")
}
sld_modify_image_path <- function(.lines) {
.lines %>%
str_replace("http.*(datasets)/.*/(.*\\..*\\))$", "\\1/\\2") %>%
str_replace("datasets", "images")
}
sld_modify_r_chunks <- function(.lines) {
.lines %>%
str_replace("^```\\{r\\}.*$", "``` r")
}
sld_insert_yaml_end <- function(.lines) {
append(.lines, "---", after = 3)
}
# Parsers for conversion to text document ---------------------------------
sld_headers_to_three <- function(.lines) {
.lines %>%
str_replace("^## ", "### ")
}
# Separators that are surrounded by empty lines
sld_remove_extra_separators <- function(.lines) {
if_else(
grepl("^$", lag(.lines)) &
grepl("^---$", .lines),
"",
.lines
)
}
# Parsers for conversion to xaringan slides -------------------------------
# TODO: Conversion to xaringan two columns
sld_xaringan_two_columns <- function(.lines) {
}
# TODO: Conversion to xaringan two by two slide
sld_xaringan_two_by_two <- function(.lines) {
}
# TODO: Conversion to xaringan two rows
sld_xaringan_two_rows <- function(.lines) {
}
# Converting slides to various formats ------------------------------------
# TODO: Insert video link.
dc_slides_video_link <- function(.lines) {
}
# TODO: Convert to xaringan slides
dc_slides_to_xaringan <- function(.lines) {
}
dc_slides_to_text_doc <- function(.slide_md) {
readr::read_lines(.slide_md) %>%
sld_modify_r_chunks() %>%
sld_modify_image_path() %>%
sld_headers_to_three() %>%
sld_remove_extra_separators() %>%
sld_remove_extraneous_lines() %>%
sld_remove_extra_backticks() %>%
sld_insert_yaml_end() %>%
sld_remove_dc_reveals() %>%
util_remove_repeated_empty_lines()
}