From 5eaff399d5d6dc30b0d453eff42c4101674d75ab Mon Sep 17 00:00:00 2001 From: John MacFarlane <jgm@berkeley.edu> Date: Thu, 24 Jan 2019 09:35:42 -0800 Subject: Prepend `jupyter_` to jupyter metadata keys. This avoids conflics with things like 'toc'. --- src/Text/Pandoc/Readers/Ipynb.hs | 6 ++++++ src/Text/Pandoc/Writers/Ipynb.hs | 6 ++++++ 2 files changed, 12 insertions(+) (limited to 'src') diff --git a/src/Text/Pandoc/Readers/Ipynb.hs b/src/Text/Pandoc/Readers/Ipynb.hs index 2497e6a0a..0bcde1990 100644 --- a/src/Text/Pandoc/Readers/Ipynb.hs +++ b/src/Text/Pandoc/Readers/Ipynb.hs @@ -72,8 +72,14 @@ notebookToPandoc :: (PandocMonad m, FromJSON (Notebook a)) notebookToPandoc opts notebook = do let cells = notebookCells notebook let (fmt,fmtminor) = notebookFormat notebook + let jupyterMetaFields :: [String] + jupyterMetaFields = ["kernelspec", "language_info", "toc"] let m = M.insert "nbformat" (MetaString $ show fmt) $ M.insert "nbformat_minor" (MetaString $ show fmtminor) $ + -- mark jupyter fields specially so it doesn't trigger toc + M.mapKeys (\k -> if k `elem` jupyterMetaFields + then "jupyter_" <> k + else k) $ jsonMetaToMeta (notebookMetadata notebook) let lang = case M.lookup "kernelspec" m of Just (MetaMap ks) -> diff --git a/src/Text/Pandoc/Writers/Ipynb.hs b/src/Text/Pandoc/Writers/Ipynb.hs index c9d71e180..257edc613 100644 --- a/src/Text/Pandoc/Writers/Ipynb.hs +++ b/src/Text/Pandoc/Writers/Ipynb.hs @@ -38,6 +38,7 @@ import Prelude import Control.Monad.State import qualified Data.Map as M import Data.Maybe (catMaybes, fromMaybe) +import Data.List (isPrefixOf) import Text.Pandoc.Options import Text.Pandoc.Definition import Data.Ipynb as Ipynb @@ -78,6 +79,11 @@ pandocToNotebook opts (Pandoc meta blocks) = do let inlineWriter ils = T.stripEnd <$> writeMarkdown opts{ writerTemplate = Nothing } (Pandoc nullMeta [Plain ils]) metadata' <- metaToJSON' blockWriter inlineWriter $ + (Meta . + M.mapKeys (\k -> if "jupyter_" `isPrefixOf` k + then drop 8 k + else k) . + unMeta) $ B.deleteMeta "nbformat" $ B.deleteMeta "nbformat_minor" $ meta let metadata = case fromJSON metadata' of -- cgit v1.2.3