Skip to content

Commit

Permalink
refactor: make Hugo shortcodes detection more robust
Browse files Browse the repository at this point in the history
  • Loading branch information
maelle committed Apr 4, 2024
1 parent fd0d80f commit f64b8a3
Show file tree
Hide file tree
Showing 5 changed files with 10 additions and 10 deletions.
8 changes: 4 additions & 4 deletions R/translate.R
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,10 @@ deepl_translate <- function(path,
# protect Hugo shortcodes ----
temp_markdown_file <- withr::local_tempfile()
markdown_lines <- brio::read_lines(path)
shortcodes_no <- which(grepl("\\{\\{<", markdown_lines))
shortcodes_present <- length(shortcodes_no > 0)
shortcodes_indices <- grep("^\\{\\{<.*>\\}\\}", markdown_lines)
shortcodes_present <- length(shortcodes_indices) > 0
if (shortcodes_present) {
shortcodes <- markdown_lines[shortcodes_no]
shortcodes <- markdown_lines[shortcodes_indices]

## translate shortcodes
shortcodes <- purrr::map_chr(
Expand All @@ -79,7 +79,7 @@ deepl_translate <- function(path,
formality = formality
)

markdown_lines[shortcodes_no] <- sprintf("`%s`", purrr::map_chr(shortcodes, digest::digest))
markdown_lines[shortcodes_indices] <- sprintf("`%s`", purrr::map_chr(shortcodes, digest::digest))
brio::write_lines(markdown_lines, temp_markdown_file)
wool <- tinkr::yarn$new(path = temp_markdown_file)
} else {
Expand Down
2 changes: 1 addition & 1 deletion tests/testthat/_snaps/translate-hugo.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
Code
readLines(target_path)[9]
Output
[1] "{{< figure src=\"blop.png\" alt=\"very nice\" }}"
[1] "{{< figure src=\"blop.png\" alt=\"very nice\" >}}"

Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"translations": [
{
"detected_source_language": "EN",
"text": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE document SYSTEM \"CommonMark.dtd\">\n<document xmlns=\"http://commonmark.org/xml/1.0\">\n <paragraph>\n <text xml:space=\"preserve\">Ceci est un article écrit en Markdown (<\/text>\n <code xml:space=\"preserve\">*.md<\/code>\n <text xml:space=\"preserve\">) au lieu de R Markdown (<\/text>\n <code xml:space=\"preserve\">*.Rmd<\/code>\n <text xml:space=\"preserve\">). Les principales différences sont :<\/text>\n <\/paragraph>\n <paragraph>\n <code xml:space=\"preserve\">76a0db88f92445cadd7fb9c2a5d2fb11<\/code>\n <\/paragraph>\n <list type=\"ordered\" start=\"1\" delim=\"period\" tight=\"true\">\n <item>\n <paragraph>\n <text xml:space=\"preserve\">Tu ne peux pas exécuter de code R dans un document Markdown ordinaire, alors que dans un document R Markdown, tu peux intégrer des morceaux de code R (<\/text>\n <code xml:space=\"preserve\">```{r}<\/code>\n <text xml:space=\"preserve\">) ;<\/text>\n <\/paragraph>\n <\/item>\n <item>\n <paragraph>\n <text xml:space=\"preserve\">Un message Markdown simple est rendu par <\/text>\n <link destination=\"https://gohugo.io/overview/configuration/\" title=\"\">\n <text xml:space=\"preserve\">Vendredi noir<\/text>\n <\/link>\n <text xml:space=\"preserve\"> et un document R Markdown est compilé par <\/text>\n <link destination=\"http://rmarkdown.rstudio.com\" title=\"\">\n <strong>\n <text xml:space=\"preserve\">rmarkdown<\/text>\n <\/strong>\n <\/link>\n <text xml:space=\"preserve\"> et <\/text>\n <link destination=\"http://pandoc.org\" title=\"\">\n <text xml:space=\"preserve\">Pandoc<\/text>\n <\/link>\n <text xml:space=\"preserve\">.<\/text>\n <\/paragraph>\n <\/item>\n <\/list>\n <paragraph>\n <text xml:space=\"preserve\">Il existe de nombreuses différences de syntaxe entre le Markdown de Blackfriday et le Markdown de Pandoc. Par exemple, tu peux écrire une liste de tâches avec Blackfriday mais pas avec Pandoc :<\/text>\n <\/paragraph>\n <list type=\"bullet\" tight=\"true\">\n <tasklist completed=\"true\">\n <paragraph>\n <text xml:space=\"preserve\">Écrire un paquetage R.<\/text>\n <\/paragraph>\n <\/tasklist>\n <tasklist completed=\"false\">\n <paragraph>\n <text xml:space=\"preserve\">Écris un livre.<\/text>\n <\/paragraph>\n <\/tasklist>\n <tasklist completed=\"false\">\n <paragraph>\n <text xml:space=\"preserve\">...<\/text>\n <\/paragraph>\n <\/tasklist>\n <tasklist completed=\"false\">\n <paragraph>\n <text xml:space=\"preserve\">Profite !<\/text>\n <\/paragraph>\n <\/tasklist>\n <\/list>\n <paragraph>\n <text xml:space=\"preserve\">De même, Blackfriday ne prend pas en charge les mathématiques LaTeX, alors que Pandoc le fait. J'ai ajouté la prise en charge de MathJax à ce thème (<\/text>\n <link destination=\"https://github.com/yihui/hugo-lithium\" title=\"\">\n <text xml:space=\"preserve\">hugo-lithium<\/text>\n <\/link>\n <text xml:space=\"preserve\">) mais il y a une mise en garde pour les messages en Markdown : tu dois inclure les expressions mathématiques dans une paire de crochets (inline : <\/text>\n <code xml:space=\"preserve\">`$ $`<\/code>\n <text xml:space=\"preserve\">; style d'affichage : <\/text>\n <code xml:space=\"preserve\">`$$ $$`<\/code>\n <text xml:space=\"preserve\">), par exemple, <\/text>\n <code xml:space=\"preserve\">$S_n = \\sum_{i=1}^n X_i$<\/code>\n <text xml:space=\"preserve\">.^[C'est parce que nous devons protéger les expressions mathématiques pour qu'elles ne soient pas interprétées comme du Markdown. Tu n'auras peut-être pas besoin des crochets si ton expression mathématique ne contient pas de syntaxe Markdown spéciale telle que des traits de soulignement ou des astérisques, mais il est toujours plus sûr d'utiliser des crochets. Lorsque tu as une paire de signes de dollar littéraux à l'intérieur du même élément, tu peux échapper un signe de dollar, par ex, <\/text>\n <code xml:space=\"preserve\">\\$50 and $100<\/code>\n <text xml:space=\"preserve\"> rend \"50 $ et 100 $\"]. Pour les messages R Markdown, tu n'as pas besoin de crochets, car Pandoc peut identifier et traiter les expressions mathématiques.<\/text>\n <\/paragraph>\n <paragraph>\n <text xml:space=\"preserve\">Lors de la création d'un nouveau message, tu dois décider si le format du message est Markdown ou R Markdown. <\/text>\n <code xml:space=\"preserve\">ext<\/code>\n <text xml:space=\"preserve\"> de la fonction <\/text>\n <code xml:space=\"preserve\">blogdown::new_post()<\/code>\n <text xml:space=\"preserve\">, par exemple<\/text>\n <\/paragraph>\n <code_block info=\"r\" xml:space=\"preserve\" name=\"\">blogdown::new_post(\"Post Title\", ext = '.Rmd')\n<\/code_block>\n<\/document>\n"
"text": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE document SYSTEM \"CommonMark.dtd\">\n<document xmlns=\"http://commonmark.org/xml/1.0\">\n <paragraph>\n <text xml:space=\"preserve\">Ceci est un article écrit en Markdown (<\/text>\n <code xml:space=\"preserve\">*.md<\/code>\n <text xml:space=\"preserve\">) au lieu de R Markdown (<\/text>\n <code xml:space=\"preserve\">*.Rmd<\/code>\n <text xml:space=\"preserve\">). Les principales différences sont :<\/text>\n <\/paragraph>\n <paragraph>\n <code xml:space=\"preserve\">c250e4eefcc5da78956b65555c355dc5<\/code>\n <\/paragraph>\n <list type=\"ordered\" start=\"1\" delim=\"period\" tight=\"true\">\n <item>\n <paragraph>\n <text xml:space=\"preserve\">Tu ne peux pas exécuter de code R dans un document Markdown ordinaire, alors que dans un document R Markdown, tu peux intégrer des morceaux de code R (<\/text>\n <code xml:space=\"preserve\">```{r}<\/code>\n <text xml:space=\"preserve\">) ;<\/text>\n <\/paragraph>\n <\/item>\n <item>\n <paragraph>\n <text xml:space=\"preserve\">Un message Markdown simple est rendu par <\/text>\n <link destination=\"https://gohugo.io/overview/configuration/\" title=\"\">\n <text xml:space=\"preserve\">Vendredi noir<\/text>\n <\/link>\n <text xml:space=\"preserve\"> et un document R Markdown est compilé par <\/text>\n <link destination=\"http://rmarkdown.rstudio.com\" title=\"\">\n <strong>\n <text xml:space=\"preserve\">rmarkdown<\/text>\n <\/strong>\n <\/link>\n <text xml:space=\"preserve\"> et <\/text>\n <link destination=\"http://pandoc.org\" title=\"\">\n <text xml:space=\"preserve\">Pandoc<\/text>\n <\/link>\n <text xml:space=\"preserve\">.<\/text>\n <\/paragraph>\n <\/item>\n <\/list>\n <paragraph>\n <text xml:space=\"preserve\">Il existe de nombreuses différences de syntaxe entre le Markdown de Blackfriday et le Markdown de Pandoc. Par exemple, tu peux écrire une liste de tâches avec Blackfriday mais pas avec Pandoc :<\/text>\n <\/paragraph>\n <list type=\"bullet\" tight=\"true\">\n <tasklist completed=\"true\">\n <paragraph>\n <text xml:space=\"preserve\">Écrire un paquetage R.<\/text>\n <\/paragraph>\n <\/tasklist>\n <tasklist completed=\"false\">\n <paragraph>\n <text xml:space=\"preserve\">Écris un livre.<\/text>\n <\/paragraph>\n <\/tasklist>\n <tasklist completed=\"false\">\n <paragraph>\n <text xml:space=\"preserve\">...<\/text>\n <\/paragraph>\n <\/tasklist>\n <tasklist completed=\"false\">\n <paragraph>\n <text xml:space=\"preserve\">Profite !<\/text>\n <\/paragraph>\n <\/tasklist>\n <\/list>\n <paragraph>\n <text xml:space=\"preserve\">De même, Blackfriday ne prend pas en charge les mathématiques LaTeX, alors que Pandoc le fait. J'ai ajouté la prise en charge de MathJax à ce thème (<\/text>\n <link destination=\"https://github.com/yihui/hugo-lithium\" title=\"\">\n <text xml:space=\"preserve\">hugo-lithium<\/text>\n <\/link>\n <text xml:space=\"preserve\">) mais il y a une mise en garde pour les messages en Markdown : tu dois inclure les expressions mathématiques dans une paire de crochets (inline : <\/text>\n <code xml:space=\"preserve\">`$ $`<\/code>\n <text xml:space=\"preserve\">; style d'affichage : <\/text>\n <code xml:space=\"preserve\">`$$ $$`<\/code>\n <text xml:space=\"preserve\">), par exemple, <\/text>\n <code xml:space=\"preserve\">$S_n = \\sum_{i=1}^n X_i$<\/code>\n <text xml:space=\"preserve\">.^[C'est parce que nous devons protéger les expressions mathématiques pour qu'elles ne soient pas interprétées comme du Markdown. Tu n'auras peut-être pas besoin des crochets si ton expression mathématique ne contient pas de syntaxe Markdown spéciale telle que des traits de soulignement ou des astérisques, mais il est toujours plus sûr d'utiliser des crochets. Lorsque tu as une paire de signes de dollar littéraux à l'intérieur du même élément, tu peux échapper un signe de dollar, par ex, <\/text>\n <code xml:space=\"preserve\">\\$50 and $100<\/code>\n <text xml:space=\"preserve\"> rend \"50 $ et 100 $\"]. Pour les messages R Markdown, tu n'as pas besoin de crochets, car Pandoc peut identifier et traiter les expressions mathématiques.<\/text>\n <\/paragraph>\n <paragraph>\n <text xml:space=\"preserve\">Lors de la création d'un nouveau message, tu dois décider si le format du message est Markdown ou R Markdown. <\/text>\n <code xml:space=\"preserve\">ext<\/code>\n <text xml:space=\"preserve\"> de la fonction <\/text>\n <code xml:space=\"preserve\">blogdown::new_post()<\/code>\n <text xml:space=\"preserve\">, par exemple<\/text>\n <\/paragraph>\n <code_block info=\"r\" xml:space=\"preserve\" name=\"\">blogdown::new_post(\"Post Title\", ext = '.Rmd')\n<\/code_block>\n<\/document>\n"
}
]
}
6 changes: 3 additions & 3 deletions tests/testthat/helper.R
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@ if (!nzchar(Sys.getenv("DEEPL_API_KEY"))) {
Sys.setenv("DEEPL_API_KEY" = "lalala")
}

if (!nzchar(Sys.getenv("DEEPL_API_URL"))) {
Sys.setenv("DEEPL_API_URL" = "https://api.deepl.com")
}
# if (!nzchar(Sys.getenv("DEEPL_API_URL"))) {
# Sys.setenv("DEEPL_API_URL" = "https://api.deepl.com")
# }
2 changes: 1 addition & 1 deletion tests/testthat/test-translate-hugo.R
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ test_that("deepl_translate_quarto() works", {
blogdown::new_site(dir = temp_dir)
post_path <- file.path(temp_dir, "content", "post", "2016-12-30-hello-markdown", "index.md")

new_lines <- c("", '{{< figure src="blop.png" alt="very nice"}}', "")
new_lines <- c("", '{{< figure src="blop.png" alt="very nice">}}', "")
lines <- brio::read_lines(post_path)
lines <- append(lines, new_lines, after = 7)
brio::write_lines(lines, post_path)
Expand Down

0 comments on commit f64b8a3

Please sign in to comment.