Gitbook-стиль глоссария в блоге вниз - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь добавить функцию глоссария старой gitbook в blogdown с Ху go. В gitbook эта функция автоматически генерирует тег <a> для терминов, перечисленных в отдельном файле glossary.md. Файл глоссария имеет следующую структуру:

## Term 1
Definition 1

## Term 2
Definition 2

Рабочий пример (в устаревшем gitbook) можно увидеть здесь .

Я не могу найти способ сделать это в Ху go, но думаю, что я должен быть в состоянии с blogdown. Могу ли я использовать сценарий build.R для вызова отдельной функции для поиска и замены файлов .rmd, заменяя каждый экземпляр строки Term X на <span title="Definition X">Term X</span>?

Предполагаемый рабочий процесс будет быть что-то вроде:

  1. Копировать каталог содержимого, чтобы исходный каталог содержимого оставался неизменным
  2. Поиск и замена терминов (от терминов в глоссарии до текста в каталоге содержимого)
  3. Вызовите blogdown для создания HTML
  4. Blogdown призывает Ху go сделать сайт

Это разумный подход / есть ли лучший способ?

1 Ответ

0 голосов
/ 13 апреля 2020

У меня все получилось. Мое чтение говорит о том, что использование lapply или других в семействе apply является более вычислительно эффективным в R, но я взломал гайку с помощью for циклов ранее.

В сценарии build.R:

#Ensure working directory is the site root

library(R.utils)
library(xfun)

#Move everything to a safe space
copyDirectory(from="content", to="working", recursive=TRUE)

#Draws the glossary from a separate .md file, and separates it out into terms and definitions
glossary <- lapply(strsplit(readLines(con = "content/glossary.md", warn = FALSE), "## |##"), function(x){x[!x ==""]})
glossary <- glossary[lapply(glossary, length)>0] #Tidy up
terms <- glossary[seq_along(glossary) %% 2 > 0] #Separates the terms
defs <- glossary[seq_along(glossary) %% 2 == 0] #And the defs. terms[1] corresponds to defs[1].

#Get files for site
files <- list.files(path="working", pattern = "*.md|*.rmd|*.rmarkdown", recursive = TRUE)

#Replacing bit
setwd("working")
for (file in seq_along(files)) {
  for (term in seq_along(terms)) {
    gsub_file(files[file], sprintf("%s", terms[term]), sprintf("<span title=\"%s\" class=\"glossary\">%s</span>", defs[term], terms[term]), fixed = TRUE)
  }
}
setwd("..")

#Build the site from the new glossaried markdown
blogdown::build_dir('working')
...