@@ -40,7 +40,7 @@ import System.FilePath ( takeExtension, takeDirectory )
4040import System.Console.GetOpt
4141import Data.Maybe ( fromMaybe )
4242import Data.Char ( toLower )
43−import Data.List ( intercalate )
43+import Data.List ( intercalate, isSuffixOf )
4444import Prelude hiding ( putStrLn, writeFile, readFile, getContents )
4545import System.IO ( stdout, stderr )
4646import System.IO.UTF8
@@ -84,11 +84,14 @@ wrapWords c = wrap' c c where
8484
8585-- | Association list of formats and readers.
8686readers :: [(String, ParserState -> String -> Pandoc)]
87−readers = [("native" , readPandoc)
88− ,("markdown" , readMarkdown)
89− ,("rst" , readRST)
90− ,("html" , readHtml)
91− ,("latex" , readLaTeX)
87+readers = [("native" , readPandoc)
88+ ,("markdown" , readMarkdown)
89+ ,("markdown+lhs" , readMarkdown)
90+ ,("rst" , readRST)
91+ ,("rst+lhs" , readRST)
92+ ,("html" , readHtml)
93+ ,("latex" , readLaTeX)
94+ ,("latex+lhs" , readLaTeX)
9295 ]
9396
9497-- | Reader for native Pandoc format.
@@ -99,16 +102,20 @@ readPandoc _ input = read input
99102writers :: [ ( String, ( WriterOptions -> Pandoc -> String, String ) ) ]
100103writers = [("native" , (writeDoc, ""))
101104 ,("html" , (writeHtmlString, ""))
105+ ,("html+lhs" , (writeHtmlString, ""))
102106 ,("s5" , (writeS5String, defaultS5Header))
103107 ,("docbook" , (writeDocbook, defaultDocbookHeader))
104108 ,("opendocument" , (writeOpenDocument, defaultOpenDocumentHeader))
105109 ,("odt" , (writeOpenDocument, defaultOpenDocumentHeader))
106110 ,("latex" , (writeLaTeX, defaultLaTeXHeader))
111+ ,("latex+lhs" , (writeLaTeX, defaultLaTeXHeader))
107112 ,("context" , (writeConTeXt, defaultConTeXtHeader))
108113 ,("texinfo" , (writeTexinfo, ""))
109114 ,("man" , (writeMan, ""))
110115 ,("markdown" , (writeMarkdown, ""))
116+ ,("markdown+lhs" , (writeMarkdown, ""))
111117 ,("rst" , (writeRST, ""))
118+ ,("rst+lhs" , (writeRST, ""))
112119 ,("mediawiki" , (writeMediaWiki, ""))
113120 ,("rtf" , (writeRTF, defaultRTFHeader))
114121 ]
@@ -146,8 +153,6 @@ data Opt = Opt
146153 , optReferenceLinks :: Bool -- ^ Use reference links in writing markdown, rst
147154 , optWrapText :: Bool -- ^ Wrap text
148155 , optSanitizeHTML :: Bool -- ^ Sanitize HTML
149− , optLHSIn :: Bool -- ^ Treat input as literate haskell
150− , optLHSOut :: Bool -- ^ Write output as literate haskell
151156#ifdef _CITEPROC
152157 , optModsFile :: String
153158 , optCslFile :: String
@@ -181,8 +186,6 @@ defaultOpts = Opt
181186 , optReferenceLinks = False
182187 , optWrapText = True
183188 , optSanitizeHTML = False
184− , optLHSIn = False
185− , optLHSOut = False
186189#ifdef _CITEPROC
187190 , optModsFile = []
188191 , optCslFile = []
@@ -292,22 +295,6 @@ options =
292295 (\opt -> return opt { optSanitizeHTML = True }))
293296 "" -- "Sanitize HTML"
294297
295− , Option "" ["lhs-in"]
296− (NoArg
297− (\opt -> return opt { optLHSIn = True }))
298− "" -- "Treat input as literate haskell"
299−
300− , Option "" ["lhs-out"]
301− (NoArg
302− (\opt -> return opt { optLHSOut = True }))
303− "" -- "Write output as literate haskell"
304−
305− , Option "" ["lhs"]
306− (NoArg
307− (\opt -> return opt { optLHSIn = True,
308− optLHSOut = True }))
309− "" -- "Equivalent to --lhs-in --lhs-out"
310−
311298 , Option "" ["toc", "table-of-contents"]
312299 (NoArg
313300 (\opt -> return opt { optTableOfContents = True }))
@@ -436,6 +423,7 @@ defaultReaderName (x:xs) =
436423 ".latex" -> "latex"
437424 ".ltx" -> "latex"
438425 ".rst" -> "rst"
426+ ".lhs" -> "markdown+lhs"
439427 ".native" -> "native"
440428 _ -> defaultReaderName xs
441429
@@ -463,6 +451,7 @@ defaultWriterName x =
463451 ".text" -> "markdown"
464452 ".md" -> "markdown"
465453 ".markdown" -> "markdown"
454+ ".lhs" -> "markdown+lhs"
466455 ".texi" -> "texinfo"
467456 ".texinfo" -> "texinfo"
468457 ".db" -> "docbook"
@@ -523,8 +512,6 @@ main = do
523512 , optReferenceLinks = referenceLinks
524513 , optWrapText = wrap
525514 , optSanitizeHTML = sanitize
526− , optLHSIn = lhsIn
527− , optLHSOut = lhsOut
528515#ifdef _CITEPROC
529516 , optModsFile = modsFile
530517 , optCslFile = cslFile
@@ -543,7 +530,7 @@ main = do
543530 -- assign reader and writer based on options and filenames
544531 let readerName' = if null readerName
545532 then defaultReaderName sources
546− else readerName
533+ else readerName
547534
548535 let writerName' = if null writerName
549536 then defaultWriterName outputFile
@@ -586,7 +573,7 @@ main = do
586573 defaultParserState { stateParseRaw = parseRaw,
587574 stateTabStop = tabStop,
588575 stateSanitizeHTML = sanitize,
589− stateLiterateHaskell = lhsIn ||
576+ stateLiterateHaskell = "+lhs" `isSuffixOf` readerName' ||
590577 lhsExtension sources,
591578 stateStandalone = standalone',
592579#ifdef _CITEPROC
@@ -622,7 +609,7 @@ main = do
622609 writerStrictMarkdown = strict,
623610 writerReferenceLinks = referenceLinks,
624611 writerWrapText = wrap,
625− writerLiterateHaskell = lhsOut ||
612+ writerLiterateHaskell = "+lhs" `isSuffixOf` writerName' ||
626613 lhsExtension [outputFile] }
627614
628615 if isNonTextOutput writerName' && outputFile == "-"