git.iko.soy/typeable/pandoc
on master help sign in
Powerpoint writer: Read notes into powerpoint Presentatation type.
d9e179dJesse Rosenthal
src/Text/Pandoc/Writers/Powerpoint/Presentation.hs+20−3
@@ -108,7 +108,7 @@ data WriterState = WriterState { stNoteIds :: M.Map Int [Block]
108 , stAnchorMap :: M.Map String SlideId
108 , stAnchorMap :: M.Map String SlideId
109 , stSlideIdSet :: S.Set SlideId
109 , stSlideIdSet :: S.Set SlideId
110 , stLog :: [LogMessage]
110 , stLog :: [LogMessage]
111−
111+ , stSpeakerNotesMap :: M.Map SlideId [[Paragraph]]
112 } deriving (Show, Eq)
112 } deriving (Show, Eq)
113
113
114instance Default WriterState where
114instance Default WriterState where
@@ -117,6 +117,7 @@ instance Default WriterState where
117 -- we reserve this s
117 -- we reserve this s
118 , stSlideIdSet = reservedSlideIds
118 , stSlideIdSet = reservedSlideIds
119 , stLog = []
119 , stLog = []
120+ , stSpeakerNotesMap = mempty
120 }
121 }
121
122
122metadataSlideId :: SlideId
123metadataSlideId :: SlideId
@@ -463,7 +464,15 @@ blockToParagraphs (DefinitionList entries) = do
463 definition <- concatMapM (blockToParagraphs . BlockQuote) blksLst
464 definition <- concatMapM (blockToParagraphs . BlockQuote) blksLst
464 return $ term ++ definition
465 return $ term ++ definition
465 concatMapM go entries
466 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 []
467blockToParagraphs (Div _ blks) = concatMapM blockToParagraphs blks
476blockToParagraphs (Div _ blks) = concatMapM blockToParagraphs blks
468blockToParagraphs blk = do
477blockToParagraphs blk = do
469 addLogMessage $ BlockNotRendered blk
478 addLogMessage $ BlockNotRendered blk
@@ -593,6 +602,12 @@ splitBlocks' cur acc (blk : blks) = splitBlocks' (cur ++ [blk]) acc blks
593splitBlocks :: [Block] -> Pres [[Block]]
602splitBlocks :: [Block] -> Pres [[Block]]
594splitBlocks = splitBlocks' [] []
603splitBlocks = splitBlocks' [] []
595
604
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+
596blocksToSlide' :: Int -> [Block] -> Pres Slide
611blocksToSlide' :: Int -> [Block] -> Pres Slide
597blocksToSlide' lvl (Header n (ident, _, _) ils : blks)
612blocksToSlide' lvl (Header n (ident, _, _) ils : blks)
598 | n < lvl = do
613 | n < lvl = do
@@ -664,7 +679,9 @@ blocksToSlide' _ [] = do
664blocksToSlide :: [Block] -> Pres Slide
679blocksToSlide :: [Block] -> Pres Slide
665blocksToSlide blks = do
680blocksToSlide blks = do
666 slideLevel <- asks envSlideLevel
681 slideLevel <- asks envSlideLevel
667− blocksToSlide' slideLevel blks
682+ sld <- blocksToSlide' slideLevel blks
683+ spkNotes <- getSpeakerNotes
684+ return $ sld{slideSpeakerNotes = spkNotes}
668
685
669makeNoteEntry :: Int -> [Block] -> [Block]
686makeNoteEntry :: Int -> [Block] -> [Block]
670makeNoteEntry n blks =
687makeNoteEntry n blks =