From 147a19e84a743f1379f05bf2f444143b4afd7bd6 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Fri, 18 Jun 2021 12:58:44 +1000 Subject: Updated. --- filter.hs | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 filter.hs (limited to 'filter.hs') diff --git a/filter.hs b/filter.hs new file mode 100644 index 0000000..8db4980 --- /dev/null +++ b/filter.hs @@ -0,0 +1,41 @@ +#!/usr/bin/env runhaskell +-- filter.hs +{-- +A filter to help convert a vimwiki file to an org file. +It does the following: +1. Remove metadata +2. Add filename or empty as a level three heading +3. Remove all other headings +--} +import Text.Pandoc.JSON +import Data.Text +import Data.Map.Strict + +main :: IO () +main = toJSONFilter filter'' + +filter'' :: Pandoc -> Pandoc +filter'' (Pandoc meta blocks) = + Pandoc (Meta {unMeta = Data.Map.Strict.empty}) ((Header 3 (makeCustomId $ getFilename meta) ((docDate meta) ++ [Str $ pack ": "] ++ (getFilenameInlines meta))) : (filter' <$> blocks)) + +getFilename :: Meta -> Text +getFilename meta = + case lookupMeta (pack "filename") meta of + Just (MetaString s) -> s + _ -> pack "" + +makeInlines :: Text -> [Inline] +makeInlines s = [Str s] + +getFilenameInlines :: Meta -> [Inline] +getFilenameInlines = makeInlines . getFilename + +makeCustomId :: Text -> Attr +makeCustomId s = (pack "", [], [(pack "CUSTOM_ID", s)]) + +emptyAttr :: Attr +emptyAttr = (pack "", [], []) + +filter' :: Block -> Block +filter' (Header _ _ _) = Null +filter' x = x -- cgit v1.2.3