From 008b976e06e0b93e021e2ca641eda42521e58f98 Mon Sep 17 00:00:00 2001 From: welpo Date: Sun, 22 Sep 2024 15:06:38 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(remote=5Ftext=20shortcode):=20?= =?UTF-8?q?support=20line=20ranges=20(#399)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/blog/shortcodes/index.ca.md | 14 ++++++++++++++ content/blog/shortcodes/index.es.md | 14 ++++++++++++++ content/blog/shortcodes/index.md | 14 ++++++++++++++ templates/shortcodes/remote_text.html | 18 +++++++++++++++++- 4 files changed, 59 insertions(+), 1 deletion(-) diff --git a/content/blog/shortcodes/index.ca.md b/content/blog/shortcodes/index.ca.md index 7b4342937..5219be939 100644 --- a/content/blog/shortcodes/index.ca.md +++ b/content/blog/shortcodes/index.ca.md @@ -207,6 +207,14 @@ dist/ Afegeix text des d'una URL remota o un arxiu local. +El shortcode accepta tres paràmetres: + +- `src`: L'URL d'origen o ruta del fitxer (obligatori) +- `start`: Primera línia a mostrar (opcional, comença a 1) +- `end`: Número de l'última línia (opcional, per defecte és 0, l'última línia) + +{{ admonition(type="info", text="`start` i `end` són inclusius. `start=3, end=3` mostrarà només la tercera línia.") }} + **Important**: - **Arxius remots VS arxius locals**: Si `src` comença amb "http", es tractarà com un arxiu remot. D'altra banda, s'assumeix que és una ruta d'arxiu local. @@ -229,6 +237,12 @@ Mostra el text d'un arxiu local: {{/* remote_text(src="ruta/a/arxiu.txt") */}} ``` +Mostreu només les línies 3 a 5 d'un arxiu local: + +``` +{{/* remote_text(src="ruta/a/arxiu.txt", start=3, end=5) */}} +``` + ### Advertències Destaca informació amb aquests shortcodes. Hi ha cinc tipus (`type`): `note`, `tip`, `info`, `warning`, i `danger`. diff --git a/content/blog/shortcodes/index.es.md b/content/blog/shortcodes/index.es.md index f32e3fedf..8dc2d90e8 100644 --- a/content/blog/shortcodes/index.es.md +++ b/content/blog/shortcodes/index.es.md @@ -208,6 +208,14 @@ dist/ Añade texto desde una URL remota o un archivo local. +El shortcode acepta tres parámetros: + +- `src`: La URL de origen o ruta del archivo (obligatorio) +- `start`: Primera línea a mostrar (opcional, empieza en 1) +- `end`: Número de la última línea (opcional, por defecto es 0, la última línea) + +{{ admonition(type="info", text="`start` y `end` son inclusivos. `start=3, end=3` mostrará solo la tercera línea.") }} + **Importante**: - **Archivos remotos VS archivos locales**: Si `src` empieza con "http", se tratará como un archivo remoto. De lo contrario, se asume que es una ruta de archivo local. @@ -230,6 +238,12 @@ Visualización de texto de un archivo local: {{/* remote_text(src="ruta/a/archivo.txt") */}} ``` +Mostar sólo las líneas 3 a 5 de un archivo remoto: + +``` +{{/* remote_text(src="https://example.com/script.py", start=3, end=5) */}} +``` + ### Advertencias Destaca información con estos shortcodes. Hay cinco tipos (`type`): `note`, `tip`, `info`, `warning`, y `danger`. diff --git a/content/blog/shortcodes/index.md b/content/blog/shortcodes/index.md index 71fb8de42..b993d14f8 100644 --- a/content/blog/shortcodes/index.md +++ b/content/blog/shortcodes/index.md @@ -207,6 +207,14 @@ dist/ Embed text from a remote URL or a local file. To display the path or URL on the code block, see the [show source or path shortcode](#show-source-or-path). +The shortcode accepts three parameters: + +- `src`: The source URL or file path (required) +- `start`: First line to display (optional, starts at 1) +- `end`: The ending line number (optional, defaults to 0, meaning the last line) + +{{ admonition(type="info", text="`start` and `end` are inclusive. `start=3, end=3` will display only the third line.") }} + **Important**: - **Remote VS local files**: If `src` starts with "http", it will be treated as a remote file. Otherwise, it assumes a local file path. @@ -229,6 +237,12 @@ Displaying text from a local file: {{/* remote_text(src="path/to/file.txt") */}} ``` +Display lines 3 to 7 (both inclusive) of a local file: + +``` +{{/* remote_text(src="path/to/file.txt", start=3, end=7) */}} +``` + ### Admonitions Bring attention to information with these admonition shortcodes. They come in five `type`s: `note`, `tip`, `info`, `warning`, and `danger`. diff --git a/templates/shortcodes/remote_text.html b/templates/shortcodes/remote_text.html index 463507edd..70fd33a24 100644 --- a/templates/shortcodes/remote_text.html +++ b/templates/shortcodes/remote_text.html @@ -1,3 +1,6 @@ +{%- set start = start | default(value=1) -%} +{%- set end = end | default(value=0) -%} + {#- load_data uses different arguments based on whether it's a remote or local file -#} {%- if src is starting_with("http") -%} {%- set response = load_data(url=src, format="plain") -%} @@ -11,4 +14,17 @@ {%- set response = load_data(path=src, format="plain") -%} {%- endif -%} {%- endif -%} -{{- response | trim_end | safe -}} + +{%- set lines = response | trim_end | split(pat="\n") -%} + +{%- if start > 0 -%} + {%- set start = start - 1 -%} +{%- endif -%} + +{%- if end == 0 or end > lines | length -%} + {%- set end = lines | length -%} +{%- endif -%} + +{%- set lines = lines | slice(start=start, end=end) -%} + +{{- lines | join(sep="\n") | safe -}}