diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Text/Pandoc/Shared.hs | 2 | ||||
-rw-r--r-- | src/Text/Pandoc/Writers/HTML.hs | 12 | ||||
-rw-r--r-- | src/Text/Pandoc/Writers/LaTeX.hs | 6 | ||||
-rw-r--r-- | src/pandoc.hs | 15 |
4 files changed, 31 insertions, 4 deletions
diff --git a/src/Text/Pandoc/Shared.hs b/src/Text/Pandoc/Shared.hs index ba007f5e4..8a4850ed3 100644 --- a/src/Text/Pandoc/Shared.hs +++ b/src/Text/Pandoc/Shared.hs @@ -478,6 +478,7 @@ data WriterOptions = WriterOptions , writerBiblioFiles :: [FilePath] -- ^ Biblio files to use for citations , writerHtml5 :: Bool -- ^ Produce HTML5 , writerBeamer :: Bool -- ^ Produce beamer LaTeX slide show + , writerSlideLevel :: Maybe Int -- ^ Force header level of slides , writerChapters :: Bool -- ^ Use "chapter" for top-level sects , writerListings :: Bool -- ^ Use listings package for code , writerHighlight :: Bool -- ^ Highlight source code @@ -514,6 +515,7 @@ defaultWriterOptions = , writerBiblioFiles = [] , writerHtml5 = False , writerBeamer = False + , writerSlideLevel = Nothing , writerChapters = False , writerListings = False , writerHighlight = False diff --git a/src/Text/Pandoc/Writers/HTML.hs b/src/Text/Pandoc/Writers/HTML.hs index adf59ae4d..5530247a2 100644 --- a/src/Text/Pandoc/Writers/HTML.hs +++ b/src/Text/Pandoc/Writers/HTML.hs @@ -115,7 +115,7 @@ pandocToHtml opts (Pandoc (Meta title' authors' date') blocks) = do date <- if standalone then inlineListToHtml opts date' else return mempty - let slideLevel = getSlideLevel blocks + let slideLevel = maybe (getSlideLevel blocks) id $ writerSlideLevel opts let sects = hierarchicalize $ if writerSlideVariant opts == NoSlides then blocks @@ -252,15 +252,21 @@ elementToHtml slideLevel opts (Sec level num id' title' elements) = do modify $ \st -> st{stSecNum = num} -- update section number -- always use level 1 for slide titles let level' = if slide then 1 else level + let titleSlide = slide && level < slideLevel header' <- blockToHtml opts (Header level' title') - innerContents <- mapM (elementToHtml slideLevel opts) elements + let isSec (Sec _ _ _ _ _) = True + isSec (Blk _) = False + innerContents <- mapM (elementToHtml slideLevel opts) + $ if titleSlide + -- title slides have no content of their own + then filter isSec elements + else elements let header'' = if (writerStrictMarkdown opts || writerSectionDivs opts || writerSlideVariant opts == S5Slides) then header' else header' ! prefixedId opts id' let inNl x = mconcat $ nl opts : intersperse (nl opts) x ++ [nl opts] - let titleSlide = slide && level < slideLevel let classes = ["titleslide" | titleSlide] ++ ["slide" | slide] ++ ["level" ++ show level] let secttag = if writerHtml5 opts diff --git a/src/Text/Pandoc/Writers/LaTeX.hs b/src/Text/Pandoc/Writers/LaTeX.hs index bf1ad91d9..140ef171d 100644 --- a/src/Text/Pandoc/Writers/LaTeX.hs +++ b/src/Text/Pandoc/Writers/LaTeX.hs @@ -201,7 +201,8 @@ inCmd cmd contents = char '\\' <> text cmd <> braces contents toSlides :: [Block] -> State WriterState [Block] toSlides bs = do - let slideLevel = getSlideLevel bs + opts <- gets stOptions + let slideLevel = maybe (getSlideLevel bs) id $ writerSlideLevel opts let bs' = prepSlides slideLevel bs concat `fmap` (mapM (elementToBeamer slideLevel) $ hierarchicalize bs') @@ -214,7 +215,10 @@ elementToBeamer slideLevel (Sec lvl _num _ident tit elts) : tit ++ [RawInline "latex" "}"] ) : bs ++ [RawBlock "latex" "\\end{block}"] | lvl < slideLevel = do + let isSec (Sec _ _ _ _ _) = True + isSec (Blk _) = False bs <- concat `fmap` mapM (elementToBeamer slideLevel) elts + -- (filter isSec elts) return $ (Header lvl tit) : bs | otherwise = do -- lvl == slideLevel -- note: [fragile] is required or verbatim breaks diff --git a/src/pandoc.hs b/src/pandoc.hs index fac615a8d..08b5dec57 100644 --- a/src/pandoc.hs +++ b/src/pandoc.hs @@ -131,6 +131,7 @@ data Opt = Opt , optListings :: Bool -- ^ Use listings package for code blocks , optLaTeXEngine :: String -- ^ Program to use for latex -> pdf , optBeamer :: Bool -- ^ Produce latex output for beamer class + , optSlideLevel :: Maybe Int -- ^ Header level that creates slides } -- | Defaults for command-line options. @@ -180,6 +181,7 @@ defaultOpts = Opt , optListings = False , optLaTeXEngine = "pdflatex" , optBeamer = False + , optSlideLevel = Nothing } -- | A list of functions, each transforming the options data structure @@ -381,6 +383,17 @@ options = (\opt -> return opt { optBeamer = True })) "" -- "Produce latex output for beamer class" + , Option "" ["slide-level"] + (ReqArg + (\arg opt -> do + case reads arg of + [(t,"")] | t >= 1 && t <= 6 -> + return opt { optSlideLevel = Just t } + _ -> err 39 $ + "slide level must be a number between 1 and 6") + "NUMBER") + "" -- "Force header level for slides" + , Option "" ["section-divs"] (NoArg (\opt -> return opt { optSectionDivs = True })) @@ -795,6 +808,7 @@ main = do , optListings = listings , optLaTeXEngine = latexEngine , optBeamer = beamer + , optSlideLevel = slideLevel } = opts when dumpArgs $ @@ -943,6 +957,7 @@ main = do writerChapters = chapters, writerListings = listings, writerBeamer = beamer, + writerSlideLevel = slideLevel, writerHighlight = highlight, writerHighlightStyle = highlightStyle } |