@@ -12,7 +12,7 @@ import Text.Pandoc.Class (PandocMonad)
12import Text.Pandoc.Options
12import Text.Pandoc.Options
13import Text.Pandoc.Readers.HTML (readHtml)
13import Text.Pandoc.Readers.HTML (readHtml)
14import Text.Pandoc.Readers.Markdown (readMarkdown)
14import Text.Pandoc.Readers.Markdown (readMarkdown)
15−import Text.Pandoc.Shared (crFilter)
15+import Text.Pandoc.Shared (crFilter, blocksToInlines)
16import Text.XML.Light
16import Text.XML.Light
18type OPML m = StateT OPMLState m
18type OPML m = StateT OPMLState m
@@ -22,6 +22,7 @@ data OPMLState = OPMLState{
22 , opmlDocTitle :: Inlines
22 , opmlDocTitle :: Inlines
23 , opmlDocAuthors :: [Inlines]
23 , opmlDocAuthors :: [Inlines]
24 , opmlDocDate :: Inlines
24 , opmlDocDate :: Inlines
25+ , opmlOptions :: ReaderOptions
25 } deriving Show
26 } deriving Show
27instance Default OPMLState where
28instance Default OPMLState where
@@ -29,13 +30,14 @@ instance Default OPMLState where
29 , opmlDocTitle = mempty
30 , opmlDocTitle = mempty
30 , opmlDocAuthors = []
31 , opmlDocAuthors = []
31 , opmlDocDate = mempty
32 , opmlDocDate = mempty
34readOPML :: PandocMonad m => ReaderOptions -> Text -> m Pandoc
36readOPML :: PandocMonad m => ReaderOptions -> Text -> m Pandoc
35−readOPML _ inp = do
37+readOPML opts inp = do
36 (bs, st') <- runStateT
38 (bs, st') <- runStateT
37 (mapM parseBlock $ normalizeTree $
39 (mapM parseBlock $ normalizeTree $
38− parseXML (unpack (crFilter inp))) def
40+ parseXML (unpack (crFilter inp))) def{ opmlOptions = opts }
40 setTitle (opmlDocTitle st') $
42 setTitle (opmlDocTitle st') $
41 setAuthors (opmlDocAuthors st') $
43 setAuthors (opmlDocAuthors st') $
@@ -69,13 +71,16 @@ attrValue attr elt =
69-- exceptT = either throwError return
71-- exceptT = either throwError return
71asHtml :: PandocMonad m => String -> OPML m Inlines
73asHtml :: PandocMonad m => String -> OPML m Inlines
72−asHtml s =
74+asHtml s = do
73− (\(Pandoc _ bs) -> case bs of
75+ opts <- gets opmlOptions
74− [Plain ils] -> fromList ils
76+ Pandoc _ bs <- readHtml def{ readerExtensions = readerExtensions opts } (pack s)
75− _ -> mempty) <$> lift (readHtml def (pack s))
77+ return $ fromList $ blocksToInlines bs
77asMarkdown :: PandocMonad m => String -> OPML m Blocks
79asMarkdown :: PandocMonad m => String -> OPML m Blocks
81+ opts <- gets opmlOptions
78−asMarkdown s = (\(Pandoc _ bs) -> fromList bs) <$> lift (readMarkdown def (pack s))
82+ Pandoc _ bs <- readMarkdown def{ readerExtensions = readerExtensions opts } (pack s)
80getBlocks :: PandocMonad m => Element -> OPML m Blocks
85getBlocks :: PandocMonad m => Element -> OPML m Blocks
81getBlocks e = mconcat <$> mapM parseBlock (elContent e)
86getBlocks e = mconcat <$> mapM parseBlock (elContent e)