@@ -113,8 +113,20 @@ instance Default WriterState where
113113 , stLog = []
114114 }
115115
116+metadataSlideId :: SlideId
117+metadataSlideId = SlideId "Metadata"
118+
119+tocSlideId :: SlideId
120+tocSlideId = SlideId "TOC"
121+
122+endNotesSlideId :: SlideId
123+endNotesSlideId = SlideId "EndNotes"
124+
116125reservedSlideIds :: S.Set SlideId
117−reservedSlideIds = S.fromList [SlideId "EndNotes"]
126+reservedSlideIds = S.fromList [ metadataSlideId
127+ , tocSlideId
128+ , endNotesSlideId
129+ ]
118130
119131uniqueSlideId' :: Integer -> S.Set SlideId -> String -> SlideId
120132uniqueSlideId' n idSet s =
@@ -329,7 +341,8 @@ inlineToParElems (Note blks) = do
329341 lst -> maximum lst
330342 curNoteId = maxNoteId + 1
331343 modify $ \st -> st { stNoteIds = M.insert curNoteId blks notes }
332− inlineToParElems $ Superscript [Str $ show curNoteId]
344+ local (\env -> env{envRunProps = (envRunProps env){rLink = Just $ InternalTarget endNotesSlideId}}) $
345+ inlineToParElems $ Superscript [Str $ show curNoteId]
333346inlineToParElems (Span _ ils) = concatMapM inlineToParElems ils
334347inlineToParElems (RawInline _ _) = return []
335348inlineToParElems _ = return []
@@ -672,13 +685,12 @@ getMetaSlide = do
672685 _ -> []
673686 authors <- mapM inlinesToParElems $ docAuthors meta
674687 date <- inlinesToParElems $ docDate meta
675− sldId <- asks envCurSlideId
676688 if null title && null subtitle && null authors && null date
677689 then return Nothing
678690 else return $
679691 Just $
680692 Slide
681− sldId
693+ metadataSlideId
682694 MetadataSlide { metadataSlideTitle = title
683695 , metadataSlideSubtitle = subtitle
684696 , metadataSlideAuthors = authors
@@ -701,7 +713,7 @@ elementToListItem (Shared.Sec lev _nums (ident,_,_) headerText subsecs) = do
701713elementToListItem (Shared.Blk _) = return []
702714
703715makeTOCSlide :: [Block] -> Pres Slide
704−makeTOCSlide blks = do
716+makeTOCSlide blks = local (\env -> env{envCurSlideId = tocSlideId}) $ do
705717 contents <- BulletList <$> mapM elementToListItem (Shared.hierarchicalize blks)
706718 meta <- asks envMetadata
707719 slideLevel <- asks envSlideLevel
@@ -787,9 +799,7 @@ replaceAnchor pe = return pe
787799blocksToPresentation :: [Block] -> Pres Presentation
788800blocksToPresentation blks = do
789801 opts <- asks envOpts
790− let metadataStartNum = 1
791802 metadataslides <- maybeToList <$> getMetaSlide
792− let tocStartNum = metadataStartNum + length metadataslides
793803 -- As far as I can tell, if we want to have a variable-length toc in
794804 -- the future, we'll have to make it twice. Once to get the length,
795805 -- and a second time to include the notes slide. We can't make the
@@ -800,18 +810,14 @@ blocksToPresentation blks = do
800810 -- For now, though, since the TOC slide is only length 1, if it
801811 -- exists, we'll just get the length, and then come back to make the
802812 -- slide later
803− let tocSlidesLength = if writerTableOfContents opts then 1 else 0
804− let bodyStartNum = tocStartNum + tocSlidesLength
805813 blksLst <- splitBlocks blks
806−
807814 bodySlideIds <- mapM
808815 (\n -> runUniqueSlideId $ "BodySlide" ++ show n)
809− ([1..] :: [Integer])
816+ (take (length blksLst) [1..] :: [Integer])
810817 bodyslides <- mapM
811818 (\(bs, ident) ->
812819 local (\st -> st{envCurSlideId = ident}) (blocksToSlide bs))
813820 (zip blksLst bodySlideIds)
814− let endNoteStartNum = bodyStartNum + length bodyslides
815821 endNotesSlideBlocks <- makeEndNotesSlideBlocks
816822 -- now we come back and make the real toc...
817823 tocSlides <- if writerTableOfContents opts
@@ -821,13 +827,13 @@ blocksToPresentation blks = do
821827 -- ... and the notes slide. We test to see if the blocks are empty,
822828 -- because we don't want to make an empty slide.
823829 endNotesSlides <- if null endNotesSlideBlocks
824− then return []
825− else do endNotesSlide <- local
826− (\env -> env { envCurSlideId = SlideId $ show endNoteStartNum
827− , envInNoteSlide = True
828− })
829− (blocksToSlide $ endNotesSlideBlocks)
830− return [endNotesSlide]
830+ then return []
831+ else do endNotesSlide <- local
832+ (\env -> env { envCurSlideId = endNotesSlideId
833+ , envInNoteSlide = True
834+ })
835+ (blocksToSlide $ endNotesSlideBlocks)
836+ return [endNotesSlide]
831837
832838 let slides = metadataslides ++ tocSlides ++ bodyslides ++ endNotesSlides
833839 slides' <- mapM (applyToSlide replaceAnchor) slides