summaryrefslogtreecommitdiff
path: root/src/Text/Pandoc/Writers/Powerpoint/Presentation.hs
diff options
context:
space:
mode:
authorJesse Rosenthal <jrosenthal@jhu.edu>2018-02-17 08:51:43 -0500
committerJesse Rosenthal <jrosenthal@jhu.edu>2018-02-18 16:31:32 -0500
commitd9e179d6fd68b3da16cd0ccf22860ffe54184a2f (patch)
treecb41dd815d12e857f0bfb8fe3ef7492d7b4ed343 /src/Text/Pandoc/Writers/Powerpoint/Presentation.hs
parent6fa6b6a5f26bc4b23501ff0f0cd6597524d48dd3 (diff)
Powerpoint writer: Read notes into powerpoint Presentatation type.
We record notes in a map in state while processing.
Diffstat (limited to 'src/Text/Pandoc/Writers/Powerpoint/Presentation.hs')
-rw-r--r--src/Text/Pandoc/Writers/Powerpoint/Presentation.hs23
1 files changed, 20 insertions, 3 deletions
diff --git a/src/Text/Pandoc/Writers/Powerpoint/Presentation.hs b/src/Text/Pandoc/Writers/Powerpoint/Presentation.hs
index e42a38dbe..2ba74f4ec 100644
--- a/src/Text/Pandoc/Writers/Powerpoint/Presentation.hs
+++ b/src/Text/Pandoc/Writers/Powerpoint/Presentation.hs
@@ -108,7 +108,7 @@ data WriterState = WriterState { stNoteIds :: M.Map Int [Block]
, stAnchorMap :: M.Map String SlideId
, stSlideIdSet :: S.Set SlideId
, stLog :: [LogMessage]
-
+ , stSpeakerNotesMap :: M.Map SlideId [[Paragraph]]
} deriving (Show, Eq)
instance Default WriterState where
@@ -117,6 +117,7 @@ instance Default WriterState where
-- we reserve this s
, stSlideIdSet = reservedSlideIds
, stLog = []
+ , stSpeakerNotesMap = mempty
}
metadataSlideId :: SlideId
@@ -463,7 +464,15 @@ blockToParagraphs (DefinitionList entries) = do
definition <- concatMapM (blockToParagraphs . BlockQuote) blksLst
return $ term ++ definition
concatMapM go entries
-blockToParagraphs (Div (_, "notes" : [], _) _) = return []
+blockToParagraphs (Div (_, "notes" : [], _) blks) = do
+ sldId <- asks envCurSlideId
+ spkNotesMap <- gets stSpeakerNotesMap
+ paras <- concatMapM blockToParagraphs blks
+ let spkNotesMap' = case M.lookup sldId spkNotesMap of
+ Just lst -> M.insert sldId (paras : lst) spkNotesMap
+ Nothing -> M.insert sldId [paras] spkNotesMap
+ modify $ \st -> st{stSpeakerNotesMap = spkNotesMap'}
+ return []
blockToParagraphs (Div _ blks) = concatMapM blockToParagraphs blks
blockToParagraphs blk = do
addLogMessage $ BlockNotRendered blk
@@ -593,6 +602,12 @@ splitBlocks' cur acc (blk : blks) = splitBlocks' (cur ++ [blk]) acc blks
splitBlocks :: [Block] -> Pres [[Block]]
splitBlocks = splitBlocks' [] []
+getSpeakerNotes :: Pres (Maybe SpeakerNotes)
+getSpeakerNotes = do
+ sldId <- asks envCurSlideId
+ spkNtsMap <- gets stSpeakerNotesMap
+ return $ (SpeakerNotes . concat . reverse) <$> (M.lookup sldId spkNtsMap)
+
blocksToSlide' :: Int -> [Block] -> Pres Slide
blocksToSlide' lvl (Header n (ident, _, _) ils : blks)
| n < lvl = do
@@ -664,7 +679,9 @@ blocksToSlide' _ [] = do
blocksToSlide :: [Block] -> Pres Slide
blocksToSlide blks = do
slideLevel <- asks envSlideLevel
- blocksToSlide' slideLevel blks
+ sld <- blocksToSlide' slideLevel blks
+ spkNotes <- getSpeakerNotes
+ return $ sld{slideSpeakerNotes = spkNotes}
makeNoteEntry :: Int -> [Block] -> [Block]
makeNoteEntry n blks =