git.iko.soy/typeable/pandoc
on master help sign in
Change notes to a smaller size.

This will allow more to fit on a single slide, and will probably look better.

commit3c10951023bc9767a0281b861b53e2014e7b350c authorJesse Rosenthal <jrosenthal@jhu.edu> dateThu 21 Dec 2017, 16:54 (9 years ago) parent5b2c38a
1 file changed+22−5
src/Text/Pandoc/Writers/Powerpoint.hs+22−5
src/Text/Pandoc/Writers/Powerpoint.hs+22−5
@@ -105,6 +105,7 @@ data WriterEnv = WriterEnv { envMetadata :: Meta
105105 , envPresentationSize :: PresentationSize
106106 , envSlideHasHeader :: Bool
107107 , envInList :: Bool
108+ , envInNoteSlide :: Bool
108109 }
109110 deriving (Show)
110111
@@ -120,6 +121,7 @@ instance Default WriterEnv where
120121 , envPresentationSize = def
121122 , envSlideHasHeader = False
122123 , envInList = False
124+ , envInNoteSlide = False
123125 }
124126
125127data MediaInfo = MediaInfo { mInfoFilePath :: FilePath
@@ -548,12 +550,18 @@ blocksToSlide' lvl ((Header n _ ils) : blks)
548550 return $ TitleSlide {titleSlideHeader = hdr}
549551 | n == lvl = do
550552 hdr <- inlinesToParElems ils
551− shapes <- blocksToShapes blks
553+ inNoteSlide <- asks envInNoteSlide
554+ shapes <- if inNoteSlide
555+ then forceFontSize noteSize $ blocksToShapes blks
556+ else blocksToShapes blks
552557 return $ ContentSlide { contentSlideHeader = hdr
553558 , contentSlideContent = shapes
554559 }
555560blocksToSlide' _ (blk : blks) = do
556− shapes <- blocksToShapes (blk : blks)
561+ inNoteSlide <- asks envInNoteSlide
562+ shapes <- if inNoteSlide
563+ then forceFontSize noteSize $ blocksToShapes (blk : blks)
564+ else blocksToShapes (blk : blks)
557565 return $ ContentSlide { contentSlideHeader = []
558566 , contentSlideContent = shapes
559567 }
@@ -574,6 +582,11 @@ makeNoteEntry n blks =
574582 (Para ils : blks') -> (Para $ enum : Space : ils) : blks'
575583 _ -> (Para [enum]) : blks
576584
585+forceFontSize :: PandocMonad m => Pixels -> P m a -> P m a
586+forceFontSize px x = do
587+ rpr <- asks envRunProps
588+ local (\r -> r {envRunProps = rpr{rPropForceSize = Just px}}) x
589+
577590-- Right now, there's no logic for making more than one slide, but I
578591-- want to leave the option open to make multiple slides if we figure
579592-- out how to guess at how much space the text of the notes will take
@@ -582,13 +595,14 @@ makeNoteEntry n blks =
582595-- `blocksToPresentation` function (since we can just add an empty
583596-- list without checking the state).
584597makeNotesSlides :: PandocMonad m => P m [Slide]
585−makeNotesSlides = do
598+makeNotesSlides = local (\env -> env{envInNoteSlide=True}) $ do
586599 noteIds <- gets stNoteIds
587600 if M.null noteIds
588601 then return []
589602 else do let hdr = Header 2 nullAttr [Str "Notes"]
590− blks = concatMap (\(n, bs) -> makeNoteEntry n bs) $
591− M.toList noteIds
603+ blks <- return $
604+ concatMap (\(n, bs) -> makeNoteEntry n bs) $
605+ M.toList noteIds
592606 sld <- blocksToSlide $ hdr : blks
593607 return [sld]
594608
@@ -1094,6 +1108,9 @@ makePicElement mInfo attr = do
10941108blockQuoteSize :: Pixels
10951109blockQuoteSize = 20
10961110
1111+noteSize :: Pixels
1112+noteSize = 18
1113+
10971114paraElemToElement :: PandocMonad m => ParaElem -> P m Element
10981115paraElemToElement Break = return $ mknode "a:br" [] ()
10991116paraElemToElement (Run rpr s) = do