aboutsummaryrefslogtreecommitdiff
path: root/filter.hs
diff options
context:
space:
mode:
Diffstat (limited to 'filter.hs')
-rw-r--r--filter.hs41
1 files changed, 41 insertions, 0 deletions
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