diff options
| -rw-r--r-- | src/Text/Pandoc/Readers/Ipynb.hs | 17 | ||||
| -rw-r--r-- | src/Text/Pandoc/Writers/Ipynb.hs | 13 | ||||
| -rw-r--r-- | test/ipynb/simple.in.native | 2 | ||||
| -rw-r--r-- | test/ipynb/simple.ipynb | 7 | ||||
| -rw-r--r-- | test/ipynb/simple.out.native | 2 | 
5 files changed, 24 insertions, 17 deletions
| diff --git a/src/Text/Pandoc/Readers/Ipynb.hs b/src/Text/Pandoc/Readers/Ipynb.hs index 13550d9a1..156e6bb8d 100644 --- a/src/Text/Pandoc/Readers/Ipynb.hs +++ b/src/Text/Pandoc/Readers/Ipynb.hs @@ -18,6 +18,7 @@ Ipynb (Jupyter notebook JSON format) reader for pandoc.  module Text.Pandoc.Readers.Ipynb ( readIpynb )  where  import Prelude +import Data.Char (isDigit)  import Data.List (isPrefixOf)  import Data.Maybe (fromMaybe)  import Data.Digest.Pure.SHA (sha1, showDigest) @@ -39,6 +40,7 @@ import qualified Data.ByteString.Lazy as BL  import Data.Aeson as Aeson  import Control.Monad.Except (throwError)  import Text.Pandoc.Readers.Markdown (readMarkdown) +import qualified Text.Pandoc.UTF8 as UTF8  readIpynb :: PandocMonad m => ReaderOptions -> Text -> m Pandoc  readIpynb opts t = do @@ -217,10 +219,11 @@ jsonMetaToMeta = M.mapKeys T.unpack . M.map valueToMetaValue      valueToMetaValue Aeson.Null = MetaString ""  jsonMetaToPairs :: JSONMeta -> [(String, String)] -jsonMetaToPairs = M.toList . M.mapMaybe -     (\case -        MetaString s -> Just s -        MetaBool True -> Just "true" -        MetaBool False -> Just "false" -        -- for now we skip complex cell metadata: -        _ -> Nothing) . jsonMetaToMeta +jsonMetaToPairs = M.toList . M.mapKeys T.unpack . M.map +  (\case +      String t +        | not (T.all isDigit t) +        , t /= "true" +        , t /= "false" +                 -> T.unpack t +      x          -> UTF8.toStringLazy $ Aeson.encode x) diff --git a/src/Text/Pandoc/Writers/Ipynb.hs b/src/Text/Pandoc/Writers/Ipynb.hs index 661f585f4..0babf7112 100644 --- a/src/Text/Pandoc/Writers/Ipynb.hs +++ b/src/Text/Pandoc/Writers/Ipynb.hs @@ -213,10 +213,9 @@ extractData bs = do  pairsToJSONMeta :: [(String, String)] -> JSONMeta  pairsToJSONMeta kvs = -  M.fromList [(T.pack k, case v of -                           "true"  -> Bool True -                           "false" -> Bool False -                           _       -> case safeRead v of -                                        Just n -> Number n -                                        _      -> String (T.pack v)) -             | (k,v) <- kvs , k /= "execution_count" ] +  M.fromList [(T.pack k, case Aeson.decode (UTF8.fromStringLazy v) of +                           Just val -> val +                           Nothing  -> String (T.pack v)) +             | (k,v) <- kvs +             , k /= "execution_count" +             ] diff --git a/test/ipynb/simple.in.native b/test/ipynb/simple.in.native index 67d0b52f2..b41400195 100644 --- a/test/ipynb/simple.in.native +++ b/test/ipynb/simple.in.native @@ -8,6 +8,6 @@ Pandoc (Meta {unMeta = fromList [("jupyter",MetaMap (fromList [("nbformat",MetaI   [Header 2 ("pyout",[],[]) [Str "Pyout"]]  ,Div ("",["cell","code"],[])   [CodeBlock ("",["python"],[]) "from IPython.display import HTML\nHTML(\"\"\"\n<script>\nconsole.log(\"hello\");\n</script>\n<b>HTML</b>\n\"\"\")"] -,Div ("",["cell","markdown"],[]) +,Div ("",["cell","markdown"],[("tags","[\"foo\",\"bar\"]")])   [Header 2 ("image",[],[]) [Str "Image"]   ,Para [Str "This",Space,Str "image",Space,Image ("",[],[]) [Str "the",Space,Str "moon"] ("lalune.jpg",""),Space,Str "will",Space,Str "be",Space,Str "included",Space,Str "as",Space,Str "a",Space,Str "cell",SoftBreak,Str "attachment."]]] diff --git a/test/ipynb/simple.ipynb b/test/ipynb/simple.ipynb index fdbc709e2..d9f805fb1 100644 --- a/test/ipynb/simple.ipynb +++ b/test/ipynb/simple.ipynb @@ -45,7 +45,12 @@    },    {     "cell_type": "markdown", -   "metadata": {}, +   "metadata": { +    "tags": [ +     "foo", +     "bar" +    ] +   },     "source": [      "Image\n",      "-----\n", diff --git a/test/ipynb/simple.out.native b/test/ipynb/simple.out.native index 50b543f9e..ea96b5917 100644 --- a/test/ipynb/simple.out.native +++ b/test/ipynb/simple.out.native @@ -8,6 +8,6 @@ Pandoc (Meta {unMeta = fromList [("jupyter",MetaMap (fromList [("nbformat",MetaS   [Header 2 ("pyout",[],[]) [Str "Pyout"]]  ,Div ("",["cell","code"],[])   [CodeBlock ("",["python"],[]) "from IPython.display import HTML\nHTML(\"\"\"\n<script>\nconsole.log(\"hello\");\n</script>\n<b>HTML</b>\n\"\"\")"] -,Div ("",["cell","markdown"],[]) +,Div ("",["cell","markdown"],[("tags","[\"foo\",\"bar\"]")])   [Header 2 ("image",[],[]) [Str "Image"]   ,Para [Str "This",Space,Str "image",Space,Image ("",[],[]) [Str "the",Space,Str "moon"] ("lalune.jpg",""),Space,Str "will",Space,Str "be",Space,Str "included",Space,Str "as",Space,Str "a",Space,Str "cell",SoftBreak,Str "attachment."]]] | 
