git.iko.soy/typeable/pandoc
on master help sign in
RST reader: Line block improvements.

* Use nonbreaking spaces for initial indent (otherwise lost in HTML and LaTeX). * Allow multiple paragraphs in a single line block.

commit5c067bb457a96d8c7c35c9e1ca114169a02c1d2d authorJohn MacFarlane <fiddlosopher@gmail.com> dateSun 13 Jan 2013, 11:14 (14 years ago) parent5ecadd7
4 files changed+13−8
src/Text/Pandoc/Readers/RST.hs+8−3 tests/Tests/Readers/RST.hs+2−2 tests/rst-reader.native+2−2 tests/rst-reader.rst+1−1
src/Text/Pandoc/Readers/RST.hs+8−3
@@ -206,16 +206,21 @@ lineBlockLine = try $ do
206206 char '|'
207207 char ' ' <|> lookAhead (char '\n')
208208 white <- many spaceChar
209− line <- many $ (notFollowedBy newline >> inline) <|> (try $ endline >>~ char ' ')
209+ line <- many1 $ (notFollowedBy newline >> inline) <|> (try $ endline >>~ char ' ')
210210 optional endline
211211 return $ if null white
212212 then mconcat line
213− else B.str white <> mconcat line
213+ else B.str (spToNbsp white) <> mconcat line
214+
215+spToNbsp :: String -> String
216+spToNbsp (' ':xs) = '\160' : spToNbsp xs
217+spToNbsp (x:xs) = x : spToNbsp xs
218+spToNbsp [] = ""
214219
215220lineBlock :: RSTParser Blocks
216221lineBlock = try $ do
217222 lines' <- many1 lineBlockLine
218− blanklines
223+ skipMany1 $ blankline <|> try (char '|' >> blankline)
219224 return $ B.para (mconcat $ intersperse B.linebreak lines')
220225
221226--
tests/Tests/Readers/RST.hs+2−2
@@ -18,8 +18,8 @@ infix 4 =:
1818
1919tests :: [Test]
2020tests = [ "line block with blank line" =:
21− "| a\n|\n| b" =?> para (str "a" <> linebreak <>
22− linebreak <> str " " <> str "b")
21+ "| a\n|\n| b" =?> para (str "a") <>
22+ para (str "\160b")
2323 , "field list" =:
2424 [_LIT|
2525:Hostname: media08
tests/rst-reader.native+2−2
@@ -232,8 +232,8 @@ Pandoc (Meta {docTitle = [Str "Pandoc",Space,Str "Test",Space,Str "Suite",Str ":
232232,Para [Str "Another",Space,Str "paragraph"]
233233,Para [Str "A",Space,Str "third",Space,Str "paragraph"]
234234,Header 1 ("",[],[]) [Str "Line",Space,Str "blocks"]
235−,Para [Str "But",Space,Str "can",Space,Str "a",Space,Str "bee",Space,Str "be",Space,Str "said",Space,Str "to",Space,Str "be",LineBreak,Str " or",Space,Str "not",Space,Str "to",Space,Str "be",Space,Str "an",Space,Str "entire",Space,Str "bee,",LineBreak,Str " when",Space,Str "half",Space,Str "the",Space,Str "bee",Space,Str "is",Space,Str "not",Space,Str "a",Space,Str "bee,",LineBreak,Str " due",Space,Str "to",Space,Str "some",Space,Str "ancient",Space,Str "injury?"]
236−,Para [Str "Continuation",Space,Str "line",LineBreak,Str " and",Space,Str "another"]
235+,Para [Str "But",Space,Str "can",Space,Str "a",Space,Str "bee",Space,Str "be",Space,Str "said",Space,Str "to",Space,Str "be",LineBreak,Str "\160\160\160\160or",Space,Str "not",Space,Str "to",Space,Str "be",Space,Str "an",Space,Str "entire",Space,Str "bee,",LineBreak,Str "\160\160\160\160\160\160\160\160when",Space,Str "half",Space,Str "the",Space,Str "bee",Space,Str "is",Space,Str "not",Space,Str "a",Space,Str "bee,",LineBreak,Str "\160\160\160\160\160\160\160\160\160\160\160\160due",Space,Str "to",Space,Str "some",Space,Str "ancient",Space,Str "injury?"]
236+,Para [Str "Continuation",Space,Str "line",LineBreak,Str "\160\160and",Space,Str "another"]
237237,Header 1 ("",[],[]) [Str "Simple",Space,Str "Tables"]
238238,Table [] [AlignDefault,AlignDefault,AlignDefault] [0.0,0.0,0.0]
239239 [[Plain [Str "col",Space,Str "1"]]
tests/rst-reader.rst+1−1
@@ -454,7 +454,7 @@ Line blocks
454454| or not to be an entire bee,
455455| when half the bee is not a bee,
456456| due to some ancient injury?
457−
457+|
458458| Continuation
459459 line
460460| and