git.iko.soy/typeable/pandoc
on master help sign in
RST writer: do header normalization only in "standalone" mode.
24f6865John MacFarlane
src/Text/Pandoc/Writers/RST.hs+5−8
@@ -81,8 +81,9 @@ pandocToRST (Pandoc meta blocks) = do
81 (fmap (render colwidth) . blockListToRST)
81 (fmap (render colwidth) . blockListToRST)
82 (fmap (trimr . render colwidth) . inlineListToRST)
82 (fmap (trimr . render colwidth) . inlineListToRST)
83 $ deleteMeta "title" $ deleteMeta "subtitle" meta
83 $ 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
86 notes <- liftM (reverse . stNotes) get >>= notesToRST
87 notes <- liftM (reverse . stNotes) get >>= notesToRST
87 -- note that the notes may contain refs, so we do them first
88 -- note that the notes may contain refs, so we do them first
88 refs <- liftM (reverse . stLinks) get >>= refsToRST
89 refs <- liftM (reverse . stLinks) get >>= refsToRST
@@ -102,17 +103,13 @@ pandocToRST (Pandoc meta blocks) = do
102 then return $ renderTemplate' (writerTemplate opts) context
103 then return $ renderTemplate' (writerTemplate opts) context
103 else return main
104 else return main
104 where
105 where
106+ normalizeHeadings lev (Header l a i:bs) =
105− normalizeHeadings lev (Header l a i:bs) = Header lev a i:normalizeHeadings (lev+1) cont ++ normalizeHeadings lev bs'
107+ Header lev a i:normalizeHeadings (lev+1) cont ++ normalizeHeadings lev bs'
106 where (cont,bs') = break (headerLtEq l) bs
108 where (cont,bs') = break (headerLtEq l) bs
107 headerLtEq level (Header l' _ _) = l' <= level
109 headerLtEq level (Header l' _ _) = l' <= level
108 headerLtEq _ _ = False
110 headerLtEq _ _ = False
109 normalizeHeadings lev (b:bs) = b:normalizeHeadings lev bs
111 normalizeHeadings lev (b:bs) = b:normalizeHeadings lev bs
110 normalizeHeadings _ [] = []
112 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
116
113
117-- | Return RST representation of reference key table.
114-- | Return RST representation of reference key table.
118refsToRST :: Refs -> State WriterState Doc
115refsToRST :: Refs -> State WriterState Doc
tests/Tests/Writers/RST.hs+13−8
@@ -46,7 +46,10 @@ tests = [ testGroup "rubrics"
46 unlines
46 unlines
47 [ "foo"
47 [ "foo"
48 , "==="]
48 , "==="]
49+ -- note: heading normalization is only done in standalone mode
50+ , test (writeRST def{ writerStandalone = True,
51+ writerTemplate = "$body$\n" } . toPandoc)
49− , "heading levels" =:
52+ "heading levels" $
50 header 1 (text "Header 1") <>
53 header 1 (text "Header 1") <>
51 header 3 (text "Header 2") <>
54 header 3 (text "Header 2") <>
52 header 2 (text "Header 2") <>
55 header 2 (text "Header 2") <>
@@ -75,7 +78,9 @@ tests = [ testGroup "rubrics"
75 , ""
78 , ""
76 , "Header 2"
79 , "Header 2"
77 , "--------"]
80 , "--------"]
81+ , test (writeRST def{ writerStandalone = True,
82+ writerTemplate = "$body$\n" } . toPandoc)
78− , "minimal heading levels" =:
83+ "minimal heading levels" $
79 header 2 (text "Header 1") <>
84 header 2 (text "Header 1") <>
80 header 3 (text "Header 2") <>
85 header 3 (text "Header 2") <>
81 header 2 (text "Header 1") <>
86 header 2 (text "Header 1") <>
@@ -84,21 +89,21 @@ tests = [ testGroup "rubrics"
84 header 3 (text "Header 2") =?>
89 header 3 (text "Header 2") =?>
85 unlines
90 unlines
86 [ "Header 1"
91 [ "Header 1"
87− , "--------"
92+ , "========"
88 , ""
93 , ""
89 , "Header 2"
94 , "Header 2"
90− , "~~~~~~~~"
95+ , "--------"
91 , ""
96 , ""
92 , "Header 1"
97 , "Header 1"
93− , "--------"
98+ , "========"
94 , ""
99 , ""
95 , "Header 2"
100 , "Header 2"
96− , "~~~~~~~~"
101+ , "--------"
97 , ""
102 , ""
98 , "Header 3"
103 , "Header 3"
99− , "^^^^^^^^"
104+ , "~~~~~~~~"
100 , ""
105 , ""
101 , "Header 2"
106 , "Header 2"
102− , "~~~~~~~~"]
107+ , "--------"]
103 ]
108 ]
104 ]
109 ]