diff --git a/src/Text/Pandoc/Writers/HTML.hs b/src/Text/Pandoc/Writers/HTML.hs index 25904e93f..6bc911fbd 100644 --- a/src/Text/Pandoc/Writers/HTML.hs +++ b/src/Text/Pandoc/Writers/HTML.hs @@ -106,18 +106,17 @@ pandocToHtml opts (Pandoc (Meta title' authors' date') blocks) = do date <- if standalone then inlineListToHtml opts date' else return noHtml + let splitHrule (HorizontalRule : Header 1 xs : ys) + = Header 1 xs : splitHrule ys + splitHrule (HorizontalRule : xs) = Header 1 [] : splitHrule xs + splitHrule (x : xs) = x : splitHrule xs + splitHrule [] = [] + let ensureStartWithH1 bs@(Header 1 _:_) = bs + ensureStartWithH1 bs = Header 1 [] : bs let sects = hierarchicalize $ if writerSlideVariant opts == NoSlides then blocks - else case blocks of - (Header 1 _ : _) -> blocks - _ -> - let isL1 (Header 1 _) = True - isL1 _ = False - (preBlocks, rest) = break isL1 blocks - in (RawBlock "html" "
" : - preBlocks) ++ (RawBlock "html" "
" : - rest) + else ensureStartWithH1 $ splitHrule blocks toc <- if writerTableOfContents opts then tableOfContents opts sects else return Nothing @@ -226,13 +225,6 @@ elementToListItem opts (Sec _ num id' headerText subsecs) = do -- | Convert an Element to Html. elementToHtml :: WriterOptions -> Element -> State WriterState Html -elementToHtml opts (Blk HorizontalRule) - | writerSlideVariant opts == S5Slides || - writerSlideVariant opts == SlidySlides = - return $ primHtml "" +++ nl opts +++ primHtml "
" -elementToHtml opts (Blk HorizontalRule) - | writerSlideVariant opts == DZSlides = - return $ primHtml "" +++ nl opts +++ primHtml "
" elementToHtml opts (Blk block) = blockToHtml opts block elementToHtml opts (Sec level num id' title' elements) = do modify $ \st -> st{stSecNum = num} -- update section number @@ -244,17 +236,17 @@ elementToHtml opts (Sec level num id' title' elements) = do writerSlideVariant opts == S5Slides)] let stuff = header'' : innerContents let slide = writerSlideVariant opts /= NoSlides && level == 1 - let stuff' = if (writerSlideVariant opts == S5Slides || - writerSlideVariant opts == SlidySlides) && level == 1 - then [thediv ! [theclass "slide"] << - (nl opts : intersperse (nl opts) stuff ++ [nl opts])] - else intersperse (nl opts) stuff - let inNl x = nl opts : x ++ [nl opts] - return $ if writerSectionDivs opts || writerSlideVariant opts == DZSlides + let titleSlide = slide && null elements + let classes = [theclass "titleslide" | titleSlide] ++ + [theclass "slide" | slide] + let inNl x = nl opts : intersperse (nl opts) x ++ [nl opts] + return $ if writerSectionDivs opts || slide then if writerHtml5 opts - then tag "section" ! [prefixedId opts id'] << inNl stuff' - else thediv ! [prefixedId opts id'] << inNl stuff' - else toHtmlFromList stuff' + then tag "section" ! (prefixedId opts id' : classes) + << inNl stuff + else thediv ! (prefixedId opts id' : classes) + << inNl stuff + else toHtmlFromList $ intersperse (nl opts) stuff -- | Convert list of Note blocks to a footnote
. -- Assumes notes are sorted. diff --git a/tests/s5.basic.html b/tests/s5.basic.html index 0658dcf4b..88ac22631 100644 --- a/tests/s5.basic.html +++ b/tests/s5.basic.html @@ -34,14 +34,14 @@

Sam Smith
Jen Jones

July 15, 2006

-
+

First slide

  • first bullet
  • second bullet
-
+

Math

  • $\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}$
  • diff --git a/tests/s5.fancy.html b/tests/s5.fancy.html index 39188bb1e..0e10ae0b0 100644 --- a/tests/s5.fancy.html +++ b/tests/s5.fancy.html @@ -235,14 +235,14 @@

    Sam Smith
    Jen Jones

    July 15, 2006

-
+

First slide

  • first bullet
  • second bullet
-
+

Math

  • $\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}$