From f64b8a3f3227b16929511115fcf528b29419864f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABlle=20Salmon?= Date: Thu, 4 Apr 2024 13:38:31 +0200 Subject: [PATCH] refactor: make Hugo shortcodes detection more robust --- R/translate.R | 8 ++++---- tests/testthat/_snaps/translate-hugo.md | 2 +- ...nslate-87191b-POST.json => translate-0ef875-POST.json} | 2 +- tests/testthat/helper.R | 6 +++--- tests/testthat/test-translate-hugo.R | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) rename tests/testthat/fixtures/hugo-intro/api/{translate-87191b-POST.json => translate-0ef875-POST.json} (97%) diff --git a/R/translate.R b/R/translate.R index 6ebb326..c5fcb92 100644 --- a/R/translate.R +++ b/R/translate.R @@ -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( @@ -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 { diff --git a/tests/testthat/_snaps/translate-hugo.md b/tests/testthat/_snaps/translate-hugo.md index 1f8899d..dbd32ec 100644 --- a/tests/testthat/_snaps/translate-hugo.md +++ b/tests/testthat/_snaps/translate-hugo.md @@ -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\" >}}" diff --git a/tests/testthat/fixtures/hugo-intro/api/translate-87191b-POST.json b/tests/testthat/fixtures/hugo-intro/api/translate-0ef875-POST.json similarity index 97% rename from tests/testthat/fixtures/hugo-intro/api/translate-87191b-POST.json rename to tests/testthat/fixtures/hugo-intro/api/translate-0ef875-POST.json index 0de0b06..154a57c 100644 --- a/tests/testthat/fixtures/hugo-intro/api/translate-87191b-POST.json +++ b/tests/testthat/fixtures/hugo-intro/api/translate-0ef875-POST.json @@ -2,7 +2,7 @@ "translations": [ { "detected_source_language": "EN", - "text": "\n\n\n \n Ceci est un article écrit en Markdown (<\/text>\n *.md<\/code>\n ) au lieu de R Markdown (<\/text>\n *.Rmd<\/code>\n ). Les principales différences sont :<\/text>\n <\/paragraph>\n \n 76a0db88f92445cadd7fb9c2a5d2fb11<\/code>\n <\/paragraph>\n \n \n \n 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 ```{r}<\/code>\n ) ;<\/text>\n <\/paragraph>\n <\/item>\n \n \n Un message Markdown simple est rendu par <\/text>\n \n Vendredi noir<\/text>\n <\/link>\n et un document R Markdown est compilé par <\/text>\n \n \n rmarkdown<\/text>\n <\/strong>\n <\/link>\n et <\/text>\n \n Pandoc<\/text>\n <\/link>\n .<\/text>\n <\/paragraph>\n <\/item>\n <\/list>\n \n 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 \n \n \n Écrire un paquetage R.<\/text>\n <\/paragraph>\n <\/tasklist>\n \n \n Écris un livre.<\/text>\n <\/paragraph>\n <\/tasklist>\n \n \n ...<\/text>\n <\/paragraph>\n <\/tasklist>\n \n \n Profite !<\/text>\n <\/paragraph>\n <\/tasklist>\n <\/list>\n \n 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 \n hugo-lithium<\/text>\n <\/link>\n ) 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>\n ; style d'affichage : <\/text>\n `$$ $$`<\/code>\n ), par exemple, <\/text>\n $S_n = \\sum_{i=1}^n X_i$<\/code>\n .^[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 \\$50 and $100<\/code>\n 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 \n 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 ext<\/code>\n de la fonction <\/text>\n blogdown::new_post()<\/code>\n , par exemple<\/text>\n <\/paragraph>\n blogdown::new_post(\"Post Title\", ext = '.Rmd')\n<\/code_block>\n<\/document>\n" + "text": "\n\n\n \n Ceci est un article écrit en Markdown (<\/text>\n *.md<\/code>\n ) au lieu de R Markdown (<\/text>\n *.Rmd<\/code>\n ). Les principales différences sont :<\/text>\n <\/paragraph>\n \n c250e4eefcc5da78956b65555c355dc5<\/code>\n <\/paragraph>\n \n \n \n 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 ```{r}<\/code>\n ) ;<\/text>\n <\/paragraph>\n <\/item>\n \n \n Un message Markdown simple est rendu par <\/text>\n \n Vendredi noir<\/text>\n <\/link>\n et un document R Markdown est compilé par <\/text>\n \n \n rmarkdown<\/text>\n <\/strong>\n <\/link>\n et <\/text>\n \n Pandoc<\/text>\n <\/link>\n .<\/text>\n <\/paragraph>\n <\/item>\n <\/list>\n \n 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 \n \n \n Écrire un paquetage R.<\/text>\n <\/paragraph>\n <\/tasklist>\n \n \n Écris un livre.<\/text>\n <\/paragraph>\n <\/tasklist>\n \n \n ...<\/text>\n <\/paragraph>\n <\/tasklist>\n \n \n Profite !<\/text>\n <\/paragraph>\n <\/tasklist>\n <\/list>\n \n 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 \n hugo-lithium<\/text>\n <\/link>\n ) 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>\n ; style d'affichage : <\/text>\n `$$ $$`<\/code>\n ), par exemple, <\/text>\n $S_n = \\sum_{i=1}^n X_i$<\/code>\n .^[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 \\$50 and $100<\/code>\n 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 \n 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 ext<\/code>\n de la fonction <\/text>\n blogdown::new_post()<\/code>\n , par exemple<\/text>\n <\/paragraph>\n blogdown::new_post(\"Post Title\", ext = '.Rmd')\n<\/code_block>\n<\/document>\n" } ] } diff --git a/tests/testthat/helper.R b/tests/testthat/helper.R index e5990a7..80f58d0 100644 --- a/tests/testthat/helper.R +++ b/tests/testthat/helper.R @@ -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") +# } diff --git a/tests/testthat/test-translate-hugo.R b/tests/testthat/test-translate-hugo.R index dfd9a28..58157c7 100644 --- a/tests/testthat/test-translate-hugo.R +++ b/tests/testthat/test-translate-hugo.R @@ -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)