💾 Archived View for yretek.com › articulos › 2023-02-18_geminator.gmi captured on 2023-09-28 at 15:50:08. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2023-04-19)
-=-=-=-=-=-=-
¡Extra, extra! Acabo de crear mi nuevo script para generar los artículos en esta mi cápsula. Y como soy un ansioso aquí os comparto el resultado. Hace, aburridamente, casi lo mismo que mi anterior script en BASH, pero éste es en lua. El lua me permite usar también llamdas al sistema operativo. Aquí uso Linux por lo que no funcionará en windows. (Habría que adaptar las líneas que contengan «os.execute("lo que sea")».
La idea es que toma un archivo de borrador, le pone su cabecera y su pie de página y modifica los índices (index.gmi) para que se incluya el enlace "suscribible" tipo «=> gemini://ejemplo.org/ 2022-02-02 Ejemplo»
No he querido, al menos de momento, que mueva los archivos de índice al directorio hasta asegurarme que todo va bien y eso.
-- Lua Geminator --[[(es) Partiendo de un archivo en formato Gemini sin extensión (.gmi) que contiene solo el artículo, Geminator le añade la cabecera, el pie de página lo incluye en el directorio "artículos" y crea las entradas en el índice general y de artículos ]] -- -- Funciones function read_text_file(i_str) -- Lee un archivo de texto de nombre i_str -- Devuelve una string con el texto local f_ile = io.open(i_str, 'r') local t_str = f_ile:read('*all') f_ile:close() return t_str end function write_text_file(o_str, t_str) -- Escribe t_str en el archivo de nombre o_str local f_ile = io.open(o_str, 'w') io.output(f_ile) io.write(t_str) io.close(f_ile) end function ask_user(prompt_str) -- pregunta al usuario en prompt_str io.stdout:write(prompt_str .. " > ") local answer_str = io.stdin:read() return answer_str end function is_file_here(i_file_str) local was_found = false i_file = io.open(i_file_str, i) if i_file~=nil then io.close(i_file) was_found = true end return was_found end function make_link(article_url, pub_date, title_str) -- Crea enlace subscribible en gemini folder_url = "gemini://yretek.com/articulos/" full_url = folder_url .. output_file_str return "=> " .. full_url .. " " .. pub_date .. " " .. title_str end function insert_in_str(target_str, mark_str, insert_str) -- Inserta "insert_str" en "target_str" -- "mark_str" marca dónde se hace la inserción. -- "mark_str" se mantiene return string.gsub(target_str, mark_str, mark_str..link_str, 1) end -- Principal —----------------------------------------------- -- Obtener la fecha actual en "formato gemini" :) -- No quiero liarme con fechas futuras por ahora today_str = os.date('%Y-%m-%d') -- Obtener nombre del borrador y título prompt_str = "¿Cuál es el archivo de borrador?" repeat draft_file_str = ask_user(prompt_str) prompt_str = "Fichero no encontrado.\nUse otro nombre." until is_file_here(draft_file_str) prompt_str = "¿Título?" title_str = ask_user(prompt_str) -- Si el título está vacío se usa la fecha como título if title_str == "" then title_str = today_str end draft_text_str = read_text_file(draft_file_str) -- cuenta las palabras del borrador y almacena en words.txt os.execute("wc -w " .. draft_file_str .. " > words.txt") raw_str = read_text_file("words.txt") word_count_str = "* Palabras: "..string.sub(raw_str, string.find(raw_str, "%d+%s")).."\n" header_str = "# Yretek 🍃 " .. title_str .. "\n\n" footer_title_str = "\n### Pie de página" .. "\n" date_field_str = "* Fecha: " .. today_str .. "\n" author_str = [[ ~ Miguel de Luis Espinosa => mailto:yretek@proton.me yretek@proton.me ]] footer_str = footer_title_str .. date_field_str .. word_count_str .. author_str to_write_str = header_str .. draft_text_str .. footer_str -- Por ahora suponemos archivo con extensión .gmi output_file_str = today_str .. "_" .. draft_file_str write_text_file(output_file_str, to_write_str) os.execute("vim "..output_file_str) os.execute("mv "..output_file_str.." ../articulos/") os.execute("cp ../index.gmi index_principal.bak") os.execute("cp ../articulos/index.gmi index_articulos.bak") link_str = make_link(output_file_str, today_str, title_str).."\n" -- index principal old_main_index = read_text_file("../index.gmi") new_main_index = insert_in_str(old_main_index, "## Artículos\n", link_str ) write_text_file("index_principal.gmi", new_main_index) -- index articulos old_artcl_index = read_text_file("../articulos/index.gmi") new_artcl_index = insert_in_str(old_artcl_index, "·\n", link_str ) write_text_file("index_artcl.gmi", new_artcl_index) -- Ta da!
~ Miguel de Luis Espinosa