git.iko.soy/typeable/pandoc
on master help sign in
[RST Writer] Don't normalize heading levels below input minimum
commit5788f62ef55f59d00f5fae7f309cd5d1b349d8f8 authorNikolay Yakimov <root@livid.pp.ru> dateSat 19 Sep 2015, 17:45 (11 years ago) parent4d49f76
2 files changed+32−1
src/Text/Pandoc/Writers/RST.hs+7−1 tests/Tests/Writers/RST.hs+25
src/Text/Pandoc/Writers/RST.hs+7−1
@@ -81,7 +81,8 @@ pandocToRST (Pandoc meta blocks) = do
8181 (fmap (render colwidth) . blockListToRST)
8282 (fmap (trimr . render colwidth) . inlineListToRST)
8383 $ deleteMeta "title" $ deleteMeta "subtitle" meta
84− body <- blockListToRST' True $ normalizeHeadings 1 blocks
84+ let minLev = findMinHeadingLevel Nothing blocks
85+ body <- blockListToRST' True $ normalizeHeadings minLev blocks
8586 notes <- liftM (reverse . stNotes) get >>= notesToRST
8687 -- note that the notes may contain refs, so we do them first
8788 refs <- liftM (reverse . stLinks) get >>= refsToRST
@@ -107,6 +108,11 @@ pandocToRST (Pandoc meta blocks) = do
107108 headerLtEq _ _ = False
108109 normalizeHeadings lev (b:bs) = b:normalizeHeadings lev bs
109110 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
110116
111117-- | Return RST representation of reference key table.
112118refsToRST :: Refs -> State WriterState Doc
tests/Tests/Writers/RST.hs+25
@@ -75,5 +75,30 @@ tests = [ testGroup "rubrics"
7575 , ""
7676 , "Header 2"
7777 , "--------"]
78+ , "minimal heading levels" =:
79+ header 2 (text "Header 1") <>
80+ header 3 (text "Header 2") <>
81+ header 2 (text "Header 1") <>
82+ header 4 (text "Header 2") <>
83+ header 5 (text "Header 3") <>
84+ header 3 (text "Header 2") =?>
85+ unlines
86+ [ "Header 1"
87+ , "--------"
88+ , ""
89+ , "Header 2"
90+ , "~~~~~~~~"
91+ , ""
92+ , "Header 1"
93+ , "--------"
94+ , ""
95+ , "Header 2"
96+ , "~~~~~~~~"
97+ , ""
98+ , "Header 3"
99+ , "^^^^^^^^"
100+ , ""
101+ , "Header 2"
102+ , "~~~~~~~~"]
78103 ]
79104 ]