From 22e51c35647e7595333d11758198507a254db643 Mon Sep 17 00:00:00 2001 From: "Yann Esposito (Yogsototh)" Date: Sun, 8 Nov 2020 21:38:58 +0100 Subject: [PATCH] quick and dirty org2gemini script --- Shakefile.hs | 24 ++++++++---------------- engine/org2gemini.sh | 9 +++++++++ engine/org2gemini_step1.sh | 29 +++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 16 deletions(-) create mode 100755 engine/org2gemini.sh create mode 100755 engine/org2gemini_step1.sh diff --git a/Shakefile.hs b/Shakefile.hs index 2054762..feaa740 100644 --- a/Shakefile.hs +++ b/Shakefile.hs @@ -355,26 +355,18 @@ genPdfAction _getPost out = do , "-o", out ] -genGemini :: (MonadIO m, MonadFail m) => BlogPost -> m Text -genGemini bp = do - eitherMd <- liftIO $ Pandoc.runIO $ Writers.writeMarkdown def (postBody bp) - case eitherMd of - Left _ -> fail "BAD" - Right innerMd -> return innerMd +-- genGemini :: (MonadIO m, MonadFail m) => BlogPost -> m Text +-- genGemini bp = do +-- eitherMd <- liftIO $ Pandoc.runIO $ Writers.writeMarkdown def (postBody bp) +-- case eitherMd of +-- Left _ -> fail "BAD" +-- Right innerMd -> return innerMd -genGeminiAction - :: (FilePath -> Action BlogPost) - -> [Char] -> Action () +genGeminiAction :: (FilePath -> Action BlogPost) -> [Char] -> Action () genGeminiAction getPost out = do let srcFile = srcDir (dropDirectory1 (dropDirectory1 (out -<.> "org"))) need [srcFile] - bp <- getPost srcFile - innerGemini <- genGemini bp - let preamble = "# " <> postTitle bp <> "\n" - <> postAuthor bp <> "\n" - <> postDate bp <> "\n" - <> toS origin <> toS (postUrl bp) <> "\n\n" - writeFile' out (toS (preamble <> toS innerGemini)) + command_ [] "./engine/org2gemini.sh" [ srcFile, out ] allHtmlAction :: Action () allHtmlAction = do diff --git a/engine/org2gemini.sh b/engine/org2gemini.sh new file mode 100755 index 0000000..6b51e40 --- /dev/null +++ b/engine/org2gemini.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +cd "$(git rev-parse --show-toplevel)" || exit 1 + + +src="$1" +dst="$2" + +./engine/org2gemini_step1.sh "$src" | perl -pe 's#\[\[([^]]*)\]\[([^]]*)\]\]#\n=> $1 $2#g;s#\* ##;s#=> file:#=> #g' > "$dst" diff --git a/engine/org2gemini_step1.sh b/engine/org2gemini_step1.sh new file mode 100755 index 0000000..79658bf --- /dev/null +++ b/engine/org2gemini_step1.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env awk -f + +BEGIN { IGNORECASE=1; } + +{ skip=0; } + +/^#+(BEGIN|END)_SRC / { gsub(/(BEGIN|END)_SRC /,"```"); } +/^#\+TITLE: / { gsub(/^#[^:]*: /,"# "); } +/^\* / { gsub(/^\* /,"# "); } +/^\*\* / { gsub(/^\*\* /,"## "); } +/^\*\*\* / { gsub(/^\*\*\* /,"### "); } + +/^#\+(macro|lang|language|options|startup):/ { skip=1; } +/{{{br}}}/ { gsub(/{{{br}}}/,""); } +/{{{pemail}}}/ { gsub(/{{{pemail}}}/,"yann@esposito.host"); } +/@@html:/ { htmlskip = 1; } + +!skip && /^#\+([^:]*):/ { + x=$1; + gsub(/^#\+/,"",x); + x=tolower(x); + gsub(/^#\+([^:]*):/,"",$0); + $0=x" "$0; +} +/^- / { gsub(/^- /,"* "); } +!skip && !htmlskip{ + print; +} +/@@/ && !/@@html:/ { htmlskip = 0; }