git.iko.soy/typeable/pandoc
on master help sign in
Use +lhs suffixes in formats instead of options to trigger lhs.
cc17688fiddlosopher
Main.hs+18−31
@@ -40,7 +40,7 @@ import System.FilePath ( takeExtension, takeDirectory )
40import System.Console.GetOpt
40import System.Console.GetOpt
41import Data.Maybe ( fromMaybe )
41import Data.Maybe ( fromMaybe )
42import Data.Char ( toLower )
42import Data.Char ( toLower )
43−import Data.List ( intercalate )
43+import Data.List ( intercalate, isSuffixOf )
44import Prelude hiding ( putStrLn, writeFile, readFile, getContents )
44import Prelude hiding ( putStrLn, writeFile, readFile, getContents )
45import System.IO ( stdout, stderr )
45import System.IO ( stdout, stderr )
46import System.IO.UTF8
46import System.IO.UTF8
@@ -84,11 +84,14 @@ wrapWords c = wrap' c c where
84
84
85-- | Association list of formats and readers.
85-- | Association list of formats and readers.
86readers :: [(String, ParserState -> String -> Pandoc)]
86readers :: [(String, ParserState -> String -> Pandoc)]
87−readers = [("native" , readPandoc)
87+readers = [("native" , readPandoc)
88+ ,("markdown" , readMarkdown)
88− ,("markdown" , readMarkdown)
89+ ,("markdown+lhs" , readMarkdown)
90+ ,("rst" , readRST)
89− ,("rst" , readRST)
91+ ,("rst+lhs" , readRST)
90− ,("html" , readHtml)
92+ ,("html" , readHtml)
93+ ,("latex" , readLaTeX)
91− ,("latex" , readLaTeX)
94+ ,("latex+lhs" , readLaTeX)
92 ]
95 ]
93
96
94-- | Reader for native Pandoc format.
97-- | Reader for native Pandoc format.
@@ -99,16 +102,20 @@ readPandoc _ input = read input
99writers :: [ ( String, ( WriterOptions -> Pandoc -> String, String ) ) ]
102writers :: [ ( String, ( WriterOptions -> Pandoc -> String, String ) ) ]
100writers = [("native" , (writeDoc, ""))
103writers = [("native" , (writeDoc, ""))
101 ,("html" , (writeHtmlString, ""))
104 ,("html" , (writeHtmlString, ""))
105+ ,("html+lhs" , (writeHtmlString, ""))
102 ,("s5" , (writeS5String, defaultS5Header))
106 ,("s5" , (writeS5String, defaultS5Header))
103 ,("docbook" , (writeDocbook, defaultDocbookHeader))
107 ,("docbook" , (writeDocbook, defaultDocbookHeader))
104 ,("opendocument" , (writeOpenDocument, defaultOpenDocumentHeader))
108 ,("opendocument" , (writeOpenDocument, defaultOpenDocumentHeader))
105 ,("odt" , (writeOpenDocument, defaultOpenDocumentHeader))
109 ,("odt" , (writeOpenDocument, defaultOpenDocumentHeader))
106 ,("latex" , (writeLaTeX, defaultLaTeXHeader))
110 ,("latex" , (writeLaTeX, defaultLaTeXHeader))
111+ ,("latex+lhs" , (writeLaTeX, defaultLaTeXHeader))
107 ,("context" , (writeConTeXt, defaultConTeXtHeader))
112 ,("context" , (writeConTeXt, defaultConTeXtHeader))
108 ,("texinfo" , (writeTexinfo, ""))
113 ,("texinfo" , (writeTexinfo, ""))
109 ,("man" , (writeMan, ""))
114 ,("man" , (writeMan, ""))
110 ,("markdown" , (writeMarkdown, ""))
115 ,("markdown" , (writeMarkdown, ""))
116+ ,("markdown+lhs" , (writeMarkdown, ""))
111 ,("rst" , (writeRST, ""))
117 ,("rst" , (writeRST, ""))
118+ ,("rst+lhs" , (writeRST, ""))
112 ,("mediawiki" , (writeMediaWiki, ""))
119 ,("mediawiki" , (writeMediaWiki, ""))
113 ,("rtf" , (writeRTF, defaultRTFHeader))
120 ,("rtf" , (writeRTF, defaultRTFHeader))
114 ]
121 ]
@@ -146,8 +153,6 @@ data Opt = Opt
146 , optReferenceLinks :: Bool -- ^ Use reference links in writing markdown, rst
153 , optReferenceLinks :: Bool -- ^ Use reference links in writing markdown, rst
147 , optWrapText :: Bool -- ^ Wrap text
154 , optWrapText :: Bool -- ^ Wrap text
148 , optSanitizeHTML :: Bool -- ^ Sanitize HTML
155 , optSanitizeHTML :: Bool -- ^ Sanitize HTML
149− , optLHSIn :: Bool -- ^ Treat input as literate haskell
150− , optLHSOut :: Bool -- ^ Write output as literate haskell
151#ifdef _CITEPROC
156#ifdef _CITEPROC
152 , optModsFile :: String
157 , optModsFile :: String
153 , optCslFile :: String
158 , optCslFile :: String
@@ -181,8 +186,6 @@ defaultOpts = Opt
181 , optReferenceLinks = False
186 , optReferenceLinks = False
182 , optWrapText = True
187 , optWrapText = True
183 , optSanitizeHTML = False
188 , optSanitizeHTML = False
184− , optLHSIn = False
185− , optLHSOut = False
186#ifdef _CITEPROC
189#ifdef _CITEPROC
187 , optModsFile = []
190 , optModsFile = []
188 , optCslFile = []
191 , optCslFile = []
@@ -292,22 +295,6 @@ options =
292 (\opt -> return opt { optSanitizeHTML = True }))
295 (\opt -> return opt { optSanitizeHTML = True }))
293 "" -- "Sanitize HTML"
296 "" -- "Sanitize HTML"
294
297
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−
311 , Option "" ["toc", "table-of-contents"]
298 , Option "" ["toc", "table-of-contents"]
312 (NoArg
299 (NoArg
313 (\opt -> return opt { optTableOfContents = True }))
300 (\opt -> return opt { optTableOfContents = True }))
@@ -436,6 +423,7 @@ defaultReaderName (x:xs) =
436 ".latex" -> "latex"
423 ".latex" -> "latex"
437 ".ltx" -> "latex"
424 ".ltx" -> "latex"
438 ".rst" -> "rst"
425 ".rst" -> "rst"
426+ ".lhs" -> "markdown+lhs"
439 ".native" -> "native"
427 ".native" -> "native"
440 _ -> defaultReaderName xs
428 _ -> defaultReaderName xs
441
429
@@ -463,6 +451,7 @@ defaultWriterName x =
463 ".text" -> "markdown"
451 ".text" -> "markdown"
464 ".md" -> "markdown"
452 ".md" -> "markdown"
465 ".markdown" -> "markdown"
453 ".markdown" -> "markdown"
454+ ".lhs" -> "markdown+lhs"
466 ".texi" -> "texinfo"
455 ".texi" -> "texinfo"
467 ".texinfo" -> "texinfo"
456 ".texinfo" -> "texinfo"
468 ".db" -> "docbook"
457 ".db" -> "docbook"
@@ -523,8 +512,6 @@ main = do
523 , optReferenceLinks = referenceLinks
512 , optReferenceLinks = referenceLinks
524 , optWrapText = wrap
513 , optWrapText = wrap
525 , optSanitizeHTML = sanitize
514 , optSanitizeHTML = sanitize
526− , optLHSIn = lhsIn
527− , optLHSOut = lhsOut
528#ifdef _CITEPROC
515#ifdef _CITEPROC
529 , optModsFile = modsFile
516 , optModsFile = modsFile
530 , optCslFile = cslFile
517 , optCslFile = cslFile
@@ -543,7 +530,7 @@ main = do
543 -- assign reader and writer based on options and filenames
530 -- assign reader and writer based on options and filenames
544 let readerName' = if null readerName
531 let readerName' = if null readerName
545 then defaultReaderName sources
532 then defaultReaderName sources
546− else readerName
533+ else readerName
547
534
548 let writerName' = if null writerName
535 let writerName' = if null writerName
549 then defaultWriterName outputFile
536 then defaultWriterName outputFile
@@ -586,7 +573,7 @@ main = do
586 defaultParserState { stateParseRaw = parseRaw,
573 defaultParserState { stateParseRaw = parseRaw,
587 stateTabStop = tabStop,
574 stateTabStop = tabStop,
588 stateSanitizeHTML = sanitize,
575 stateSanitizeHTML = sanitize,
589− stateLiterateHaskell = lhsIn ||
576+ stateLiterateHaskell = "+lhs" `isSuffixOf` readerName' ||
590 lhsExtension sources,
577 lhsExtension sources,
591 stateStandalone = standalone',
578 stateStandalone = standalone',
592#ifdef _CITEPROC
579#ifdef _CITEPROC
@@ -622,7 +609,7 @@ main = do
622 writerStrictMarkdown = strict,
609 writerStrictMarkdown = strict,
623 writerReferenceLinks = referenceLinks,
610 writerReferenceLinks = referenceLinks,
624 writerWrapText = wrap,
611 writerWrapText = wrap,
625− writerLiterateHaskell = lhsOut ||
612+ writerLiterateHaskell = "+lhs" `isSuffixOf` writerName' ||
626 lhsExtension [outputFile] }
613 lhsExtension [outputFile] }
627
614
628 if isNonTextOutput writerName' && outputFile == "-"
615 if isNonTextOutput writerName' && outputFile == "-"