git.iko.soy/typeable/pandoc
on master help sign in
Powerpoint writer: Read notes into powerpoint Presentatation type.

We record notes in a map in state while processing.

commitd9e179d6fd68b3da16cd0ccf22860ffe54184a2f authorJesse Rosenthal <jrosenthal@jhu.edu> dateSat 17 Feb 2018, 08:51 (9 years ago) parent6fa6b6a
1 file changed+20−3
src/Text/Pandoc/Writers/Powerpoint/Presentation.hs+20−3
src/Text/Pandoc/Writers/Powerpoint/Presentation.hs+20−3
@@ -108,7 +108,7 @@ data WriterState = WriterState { stNoteIds :: M.Map Int [Block]
108108 , stAnchorMap :: M.Map String SlideId
109109 , stSlideIdSet :: S.Set SlideId
110110 , stLog :: [LogMessage]
111−
111+ , stSpeakerNotesMap :: M.Map SlideId [[Paragraph]]
112112 } deriving (Show, Eq)
113113
114114instance Default WriterState where
@@ -117,6 +117,7 @@ instance Default WriterState where
117117 -- we reserve this s
118118 , stSlideIdSet = reservedSlideIds
119119 , stLog = []
120+ , stSpeakerNotesMap = mempty
120121 }
121122
122123metadataSlideId :: SlideId
@@ -463,7 +464,15 @@ blockToParagraphs (DefinitionList entries) = do
463464 definition <- concatMapM (blockToParagraphs . BlockQuote) blksLst
464465 return $ term ++ definition
465466 concatMapM go entries
466−blockToParagraphs (Div (_, "notes" : [], _) _) = return []
467+blockToParagraphs (Div (_, "notes" : [], _) blks) = do
468+ sldId <- asks envCurSlideId
469+ spkNotesMap <- gets stSpeakerNotesMap
470+ paras <- concatMapM blockToParagraphs blks
471+ let spkNotesMap' = case M.lookup sldId spkNotesMap of
472+ Just lst -> M.insert sldId (paras : lst) spkNotesMap
473+ Nothing -> M.insert sldId [paras] spkNotesMap
474+ modify $ \st -> st{stSpeakerNotesMap = spkNotesMap'}
475+ return []
467476blockToParagraphs (Div _ blks) = concatMapM blockToParagraphs blks
468477blockToParagraphs blk = do
469478 addLogMessage $ BlockNotRendered blk
@@ -593,6 +602,12 @@ splitBlocks' cur acc (blk : blks) = splitBlocks' (cur ++ [blk]) acc blks
593602splitBlocks :: [Block] -> Pres [[Block]]
594603splitBlocks = splitBlocks' [] []
595604
605+getSpeakerNotes :: Pres (Maybe SpeakerNotes)
606+getSpeakerNotes = do
607+ sldId <- asks envCurSlideId
608+ spkNtsMap <- gets stSpeakerNotesMap
609+ return $ (SpeakerNotes . concat . reverse) <$> (M.lookup sldId spkNtsMap)
610+
596611blocksToSlide' :: Int -> [Block] -> Pres Slide
597612blocksToSlide' lvl (Header n (ident, _, _) ils : blks)
598613 | n < lvl = do
@@ -664,7 +679,9 @@ blocksToSlide' _ [] = do
664679blocksToSlide :: [Block] -> Pres Slide
665680blocksToSlide blks = do
666681 slideLevel <- asks envSlideLevel
667− blocksToSlide' slideLevel blks
682+ sld <- blocksToSlide' slideLevel blks
683+ spkNotes <- getSpeakerNotes
684+ return $ sld{slideSpeakerNotes = spkNotes}
668685
669686makeNoteEntry :: Int -> [Block] -> [Block]
670687makeNoteEntry n blks =