From e83d3ba27660335a4a41eccd06514484b5643ab0 Mon Sep 17 00:00:00 2001 From: Araozu Date: Mon, 19 Aug 2024 19:40:17 -0500 Subject: [PATCH] es blog: rewrite zig series pt 5 and add shiki transformers --- astro.config.mjs | 31 ++++-- public/blog.css | 66 +++++++++++- public/global.css | 24 ++--- public/img/blog/es/tutorial/007-zig1.jpg | Bin 25806 -> 0 bytes src/pages/blog/es/programacion-03.md | 2 +- src/pages/blog/es/programacion-05.md | 127 ++++++++++++----------- 6 files changed, 167 insertions(+), 83 deletions(-) delete mode 100644 public/img/blog/es/tutorial/007-zig1.jpg diff --git a/astro.config.mjs b/astro.config.mjs index 7e7ad09..b9fb9be 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -1,16 +1,31 @@ import { defineConfig } from 'astro/config'; import tailwind from "@astrojs/tailwind"; import mdx from "@astrojs/mdx"; +import { + transformerNotationDiff, + transformerNotationFocus, + transformerMetaHighlight, + transformerNotationHighlight, + transformerNotationErrorLevel, +} from '@shikijs/transformers' // https://astro.build/config export default defineConfig({ - integrations: [tailwind(), mdx()], - markdown: { - shikiConfig: { - themes: { - light: "catppuccin-latte", - dark: "github-dark" - } + integrations: [tailwind(), mdx()], + markdown: { + shikiConfig: { + themes: { + light: "catppuccin-latte", + dark: "dark-plus" + }, + transformers: [ + transformerNotationDiff(), + transformerNotationFocus(), + transformerMetaHighlight(), + transformerNotationHighlight(), + transformerNotationErrorLevel(), + ], + defaultColor: false, + } } - } }); diff --git a/public/blog.css b/public/blog.css index 612bb93..14aadca 100644 --- a/public/blog.css +++ b/public/blog.css @@ -6,7 +6,7 @@ } pre.astro-code { - padding: 1rem; + padding-top: 1rem; border-radius: 0.5rem; border: solid 1px var(--c-border-1); font-size: 0.8rem; @@ -74,11 +74,13 @@ pre.astro-code>code .line::before { } @media (prefers-color-scheme: dark) { + .astro-code { + background-color: var(--shiki-dark-bg) !important; + } .astro-code, .astro-code span { color: var(--shiki-dark) !important; - background-color: var(--shiki-dark-bg) !important; /* Optional, if you also want font styles */ font-style: var(--shiki-dark-font-style) !important; font-weight: var(--shiki-dark-font-weight) !important; @@ -94,3 +96,63 @@ pre.astro-code>code .line::before { #isso-thread input { color: black; } + +/* Shiki transformers */ +.astro-code { + --shiki-highlight-color: #cccccc; + --shiki-error-bg-color: rgba(244, 63, 63, 0.25); +} + +@media (prefers-color-scheme: dark) { + .astro-code { + --shiki-highlight-color: #343434; + --shiki-error-bg-color: rgba(244, 63, 94, 0.16); + } +} + +.line { + display: inline-block; + width: 100%; +} + +.line.highlighted:not(.error) { + background-color: var(--shiki-highlight-color) !important; +} + +.line.highlighted.error { + background-color: var(--shiki-error-bg-color) !important; +} + + + +.line_ + +.diff { + display: inline-block; + width: 100vw; + margin: 0 -12px; + padding: 0 12px; +} + +.diff.add { + background-color: #0505; +} + +.diff.remove { + background-color: #8005; +} + +.diff:before { + position: absolute; + left: 40px; +} + +.has-focused .line:not(.focused) { + filter: blur(0.08rem); + transition: filter linear 250ms; +} + +.has-focused:hover .line:not(.focuser) { + filter: none; +} + diff --git a/public/global.css b/public/global.css index ef76e14..41e38ba 100644 --- a/public/global.css +++ b/public/global.css @@ -9,21 +9,21 @@ } @font-face { - font-family: 'Iosevka Fixed Web'; - font-display: swap; - font-weight: 700; - font-stretch: normal; - font-style: normal; - src: url('/Iosevka/Bold.woff2') format('woff2'); + font-family: 'Iosevka Fixed Web'; + font-display: swap; + font-weight: 700; + font-stretch: normal; + font-style: normal; + src: url('/Iosevka/Bold.woff2') format('woff2'); } @font-face { - font-family: 'Iosevka Etoile Web'; - font-display: swap; - font-weight: 900; - font-stretch: normal; - font-style: normal; - src: url('/IosevkaEtoile/Heavy.woff2') format('woff2'); + font-family: 'Iosevka Etoile Web'; + font-display: swap; + font-weight: 900; + font-stretch: normal; + font-style: normal; + src: url('/IosevkaEtoile/Heavy.woff2') format('woff2'); } /* Iosevka from Xe Iaso: https://xeiaso.net/ https://github.com/Xe/iosevka */ diff --git a/public/img/blog/es/tutorial/007-zig1.jpg b/public/img/blog/es/tutorial/007-zig1.jpg deleted file mode 100644 index d313047b09a9ad49b5ac8054616fe681c8b3c580..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25806 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 Desafio: Borra todo el código y vuelve a escribirlo, exactamente igual. - Utiliza la imágen como guía. +Entra a `src/main.zig` y reemplaza todo el código que está ahí +por el código de arriba. +> Nota: Puede que notes que las imágenes no sean exáctamente + iguales a como cuando tu escribas el código. + No te preocupes, no es un problema. + +Una vez que hayas modificado el código, verás un punto blanco arriba: + +![VSCode](/img/blog/es/tutorial/080-zig.jpg) + +Esto significa que el archivo está modificado, pero no guardado. +Presiona `Control + S` para guardar el archivo. + +Ahora, ejecuta el código: Ve al terminal y ejecuta el comando +`zig build run`: + +> Nota: Verás que mi terminal se ve diferente. Pero lo importante + son los comandos, y el resultado. + +![VSCode](/img/blog/es/tutorial/081-zig.jpg) + +El resultado sale abajo: `Hola mundo!`. + + +¡Ejecutaste tu primer programa! ## ¿Qué significan todas estas letras? @@ -66,59 +88,44 @@ Así como el francés, árabe o coreano, el **lenguaje** de programación Zig tiene un conjunto de reglas. Aprenderemos las reglas a medida que avance el tiempo. Mientras tanto, puedes ignorar todas esas palabras. -> ¿Que pasa si eliminas alguna de esas palabras y ejecutas el programa - (con el boton "Run")? ¿Qué mensaje obtienes? ¿Qué crees que significa? - -## Magia negra y abstracción - -Según [Significados.com](https://www.significados.com/abstracto/), -abstracto significa vago, impreciso, teórico, que no tiene existencia -física (entre otras cosas). Algo abstracto suele ser algo difícil -de entender, o imaginario. - - -En programación, abstracto tiene otro significado. Puedes buscar su -definición técnica en internet, pero me parece muy confusa para -un principiante, así que lo explicare en mis términos. - -En programación, abstracto significa que sabemos **qué** hace, pero -no **cómo** lo hace. Un ejemplo claro sería un auto. Sabemos que -al pisar el acelerador, el auto avanza. Pero no sabemos **cómo** -pisar el acelerador ocasiona que el combustible se transforme en -energía cinemática. - -Por ejemplo, voy a hablar más adelante de "imprimir" en el programa. -Imprimir significa mostrar un mensaje en la pantalla. Sin embargo, -no te voy a explicar cómo funciona la impresión. El concepto de -"imprimir" es abstracto. - -### Magia negra +## Magia negra Escuché este termino del canal de Youtube Imesi.net. Magia negra -es algo que: no se qué hace, cómo funciona, ni tampoco me importa. +es algo que: no se cómo funciona, ni tampoco me importa. +Solo me importa lo que hace. Voy a utilizar el término "magia negra" para referirme a algo por lo que no necesitas preocuparte, o intentar entender. Por -ejemplo, en el código de más arriba: +ejemplo, en el codigo que escribiste y ejecutaste, +todo lo de rojo es magia negra: -![Zig online 1](/img/blog/es/tutorial/007-zig1.jpg) - -Todo el texto que dice: ```zig -const std = @import("std") +const std = @import("std"); // [!code error:3] -pub fn main() { - std.debug.print(); +pub fn main() !void { + std.debug.print("Hola mundo!\n", .{}); +} // [!code error] +``` + +Todo lo de rojo tiene un significado, pero aun no necesitamos +saber cuál es. Pero es importante que este ahí, tal como está +escrito. + +Lo que nosotros vamos a escribir es lo de "adentro": + +```zig +const std = @import("std"); + +pub fn main() !void { + std.debug.print("Hola mundo!\n", .{}); // [!code focus] // [!code highlight] } ``` -es magia negra. Funciona, hace algo, pero no importa. No te -preocupes en intentar entenderlo. +Y a medida que aprendamos conceptos nuevos, descifraremos +qué significan todas esas cosas. -Eventualmente, y a medida que aprendas conceptos nuevos, -entenderas qué significan esas cosas. ## Inglés