@@ -562,18 +562,6 @@ isNotesDiv :: Block -> Bool
562562isNotesDiv (Div (_, ["notes"], _) _) = True
563563isNotesDiv _ = False
564564
565−handleNotes :: Block -> Pres ()
566−handleNotes (Div (_, ["notes"], _) blks) =
567− local (\env -> env{envInSpeakerNotes=True}) $ do
568− spNotes <- SpeakerNotes <$> concatMapM blockToParagraphs blks
569− modify $ \st -> st{stSpeakerNotes = (stSpeakerNotes st) <> spNotes}
570−handleNotes _ = return ()
571−
572−handleAndFilterNotes :: [Block] -> Pres [Block]
573−handleAndFilterNotes blks = do
574− mapM_ handleNotes blks
575− return $ filter (not . isNotesDiv) blks
576−
577565blocksToShapes :: [Block] -> Pres [Shape]
578566blocksToShapes blks = combineShapes <$> mapM blockToShape blks
579567
@@ -627,25 +615,25 @@ splitBlocks' cur acc (blk : blks) = splitBlocks' (cur ++ [blk]) acc blks
627615splitBlocks :: [Block] -> Pres [[Block]]
628616splitBlocks = splitBlocks' [] []
629617
630−blocksToSlide' :: Int -> [Block] -> Pres Slide
631−blocksToSlide' lvl (Header n (ident, _, _) ils : blks)
618+blocksToSlide' :: Int -> [Block] -> SpeakerNotes -> Pres Slide
619+blocksToSlide' lvl (Header n (ident, _, _) ils : blks) spkNotes
632620 | n < lvl = do
633621 registerAnchorId ident
634622 sldId <- asks envCurSlideId
635623 hdr <- inlinesToParElems ils
636− return $ Slide sldId TitleSlide {titleSlideHeader = hdr} mempty
624+ return $ Slide sldId TitleSlide {titleSlideHeader = hdr} spkNotes
637625 | n == lvl = do
638626 registerAnchorId ident
639627 hdr <- inlinesToParElems ils
640628 -- Now get the slide without the header, and then add the header
641629 -- in.
642− slide <- blocksToSlide' lvl blks
630+ slide <- blocksToSlide' lvl blks spkNotes
643631 let layout = case slideLayout slide of
644632 ContentSlide _ cont -> ContentSlide hdr cont
645633 TwoColumnSlide _ contL contR -> TwoColumnSlide hdr contL contR
646634 layout' -> layout'
647635 return $ slide{slideLayout = layout}
648−blocksToSlide' _ (blk : blks)
636+blocksToSlide' _ (blk : blks) spkNotes
649637 | Div (_, classes, _) divBlks <- blk
650638 , "columns" `elem` classes
651639 , Div (_, clsL, _) blksL : Div (_, clsR, _) blksR : remaining <- divBlks
@@ -671,8 +659,8 @@ blocksToSlide' _ (blk : blks)
671659 , twoColumnSlideLeft = shapesL
672660 , twoColumnSlideRight = shapesR
673661 }
674− mempty
675−blocksToSlide' _ (blk : blks) = do
662+ spkNotes
663+blocksToSlide' _ (blk : blks) spkNotes = do
676664 inNoteSlide <- asks envInNoteSlide
677665 shapes <- if inNoteSlide
678666 then forceFontSize noteSize $ blocksToShapes (blk : blks)
@@ -684,8 +672,8 @@ blocksToSlide' _ (blk : blks) = do
684672 ContentSlide { contentSlideHeader = []
685673 , contentSlideContent = shapes
686674 }
687− mempty
688−blocksToSlide' _ [] = do
675+ spkNotes
676+blocksToSlide' _ [] spkNotes = do
689677 sldId <- asks envCurSlideId
690678 return $
691679 Slide
@@ -693,16 +681,32 @@ blocksToSlide' _ [] = do
693681 ContentSlide { contentSlideHeader = []
694682 , contentSlideContent = []
695683 }
696− mempty
684+ spkNotes
685+
686+handleNotes :: Block -> Pres ()
687+handleNotes (Div (_, ["notes"], _) blks) =
688+ local (\env -> env{envInSpeakerNotes=True}) $ do
689+ spNotes <- SpeakerNotes <$> concatMapM blockToParagraphs blks
690+ modify $ \st -> st{stSpeakerNotes = (stSpeakerNotes st) <> spNotes}
691+handleNotes _ = return ()
692+
693+handleAndFilterNotes' :: [Block] -> Pres [Block]
694+handleAndFilterNotes' blks = do
695+ mapM_ handleNotes blks
696+ return $ filter (not . isNotesDiv) blks
697+
698+handleAndFilterNotes :: [Block] -> Pres ([Block], SpeakerNotes)
699+handleAndFilterNotes blks = do
700+ modify $ \st -> st{stSpeakerNotes = mempty}
701+ blks' <- walkM handleAndFilterNotes' blks
702+ spkNotes <- gets stSpeakerNotes
703+ return (blks', spkNotes)
697704
698705blocksToSlide :: [Block] -> Pres Slide
699706blocksToSlide blks = do
707+ (blks', spkNotes) <- handleAndFilterNotes blks
700708 slideLevel <- asks envSlideLevel
701− modify $ \st -> st{stSpeakerNotes = mempty}
702− blks' <- walkM handleAndFilterNotes blks
703− sld <- blocksToSlide' slideLevel blks'
704− spkNotes <- gets stSpeakerNotes
705− return $ sld{slideSpeakerNotes = spkNotes}
709+ blocksToSlide' slideLevel blks' spkNotes
706710
707711makeNoteEntry :: Int -> [Block] -> [Block]
708712makeNoteEntry n blks =