git.iko.soy/typeable/pandoc
on master help sign in
RST writer: do header normalization only in "standalone" mode.

If we're producing a fragment, just skip normalization. After all, the fragment might be somewhere in the middle of the document. It's more important for fragments to have consistency in rendering (so they can be pieced together) than to normalize. This closes #2394. It's simpler and more robust than my earlier fix.

commit24f68654e919a8ff138d0a1fcfbf8e045b8ae38b authorJohn MacFarlane <jgm@berkeley.edu> dateMon 12 Oct 2015, 23:00 (11 years ago) parentfb51077
2 files changed+18−16
src/Text/Pandoc/Writers/RST.hs+5−8 tests/Tests/Writers/RST.hs+13−8
src/Text/Pandoc/Writers/RST.hs+5−8
@@ -81,8 +81,9 @@ pandocToRST (Pandoc meta blocks) = do
8181 (fmap (render colwidth) . blockListToRST)
8282 (fmap (trimr . render colwidth) . inlineListToRST)
8383 $ deleteMeta "title" $ deleteMeta "subtitle" meta
84− let minLev = findMinHeadingLevel Nothing blocks
85− body <- blockListToRST' True $ normalizeHeadings minLev blocks
84+ body <- blockListToRST' True $ if writerStandalone opts
85+ then normalizeHeadings 1 blocks
86+ else blocks
8687 notes <- liftM (reverse . stNotes) get >>= notesToRST
8788 -- note that the notes may contain refs, so we do them first
8889 refs <- liftM (reverse . stLinks) get >>= refsToRST
@@ -102,17 +103,13 @@ pandocToRST (Pandoc meta blocks) = do
102103 then return $ renderTemplate' (writerTemplate opts) context
103104 else return main
104105 where
105− normalizeHeadings lev (Header l a i:bs) = Header lev a i:normalizeHeadings (lev+1) cont ++ normalizeHeadings lev bs'
106+ normalizeHeadings lev (Header l a i:bs) =
107+ Header lev a i:normalizeHeadings (lev+1) cont ++ normalizeHeadings lev bs'
106108 where (cont,bs') = break (headerLtEq l) bs
107109 headerLtEq level (Header l' _ _) = l' <= level
108110 headerLtEq _ _ = False
109111 normalizeHeadings lev (b:bs) = b:normalizeHeadings lev bs
110112 normalizeHeadings _ [] = []
111− findMinHeadingLevel Nothing (Header l _a _i:bs) = findMinHeadingLevel (Just l) bs
112− findMinHeadingLevel (Just ol) (Header l _a _i:bs) =
113− findMinHeadingLevel (Just $ if ol>l then l else ol) bs
114− findMinHeadingLevel l (_:bs) = findMinHeadingLevel l bs
115− findMinHeadingLevel l [] = fromMaybe 1 l
116113
117114-- | Return RST representation of reference key table.
118115refsToRST :: Refs -> State WriterState Doc
tests/Tests/Writers/RST.hs+13−8
@@ -46,7 +46,10 @@ tests = [ testGroup "rubrics"
4646 unlines
4747 [ "foo"
4848 , "==="]
49− , "heading levels" =:
49+ -- note: heading normalization is only done in standalone mode
50+ , test (writeRST def{ writerStandalone = True,
51+ writerTemplate = "$body$\n" } . toPandoc)
52+ "heading levels" $
5053 header 1 (text "Header 1") <>
5154 header 3 (text "Header 2") <>
5255 header 2 (text "Header 2") <>
@@ -75,7 +78,9 @@ tests = [ testGroup "rubrics"
7578 , ""
7679 , "Header 2"
7780 , "--------"]
78− , "minimal heading levels" =:
81+ , test (writeRST def{ writerStandalone = True,
82+ writerTemplate = "$body$\n" } . toPandoc)
83+ "minimal heading levels" $
7984 header 2 (text "Header 1") <>
8085 header 3 (text "Header 2") <>
8186 header 2 (text "Header 1") <>
@@ -84,21 +89,21 @@ tests = [ testGroup "rubrics"
8489 header 3 (text "Header 2") =?>
8590 unlines
8691 [ "Header 1"
87− , "--------"
92+ , "========"
8893 , ""
8994 , "Header 2"
90− , "~~~~~~~~"
95+ , "--------"
9196 , ""
9297 , "Header 1"
93− , "--------"
98+ , "========"
9499 , ""
95100 , "Header 2"
96− , "~~~~~~~~"
101+ , "--------"
97102 , ""
98103 , "Header 3"
99− , "^^^^^^^^"
104+ , "~~~~~~~~"
100105 , ""
101106 , "Header 2"
102− , "~~~~~~~~"]
107+ , "--------"]
103108 ]
104109 ]