git.iko.soy/typeable/pandoc
on master help sign in
Fix #1267.

We now check the writerName for a lua script in pandoc.hs, so that lowercasing and format parsing aren't done. Note this behavior change: getWriter in Text.Pandoc no longer returns a custom writer on input "foo.lua".

commitc8f97d3d418f929a1f499a9ef37c17d71f282d45 authorJohn MacFarlane <jgm@berkeley.edu> dateSun 27 Apr 2014, 20:56 (12 years ago) parentf80678d
2 files changed+29−29
pandoc.hs+13−10 src/Text/Pandoc.hs+16−19
pandoc.hs+13−10
@@ -47,7 +47,7 @@ import System.Exit ( exitWith, ExitCode (..) )
4747import System.FilePath
4848import System.Console.GetOpt
4949import Data.Char ( toLower )
50−import Data.List ( intercalate, isPrefixOf, sort )
50+import Data.List ( intercalate, isPrefixOf, isSuffixOf, sort )
5151import System.Directory ( getAppUserDataDirectory, findExecutable,
5252 doesFileExist )
5353import System.IO ( stdout, stderr )
@@ -1021,15 +1021,18 @@ main = do
10211021 let laTeXOutput = "latex" `isPrefixOf` writerName' ||
10221022 "beamer" `isPrefixOf` writerName'
10231023
1024− writer <- case getWriter writerName' of
1025− Left e -> err 9 $
1026− if writerName' == "pdf"
1027− then e ++ "\nTo create a pdf with pandoc, use the " ++
1028− "latex or beamer writer and specify\n" ++
1029− "an output file with .pdf extension " ++
1030− "(pandoc -t latex -o filename.pdf)."
1031− else e
1032− Right w -> return w
1024+ writer <- if ".lua" `isSuffixOf` writerName'
1025+ -- note: use non-lowercased version writerName
1026+ then return $ IOStringWriter $ writeCustom writerName
1027+ else case getWriter writerName' of
1028+ Left e -> err 9 $
1029+ if writerName' == "pdf"
1030+ then e ++ "\nTo create a pdf with pandoc, use " ++
1031+ "the latex or beamer writer and specify\n" ++
1032+ "an output file with .pdf extension " ++
1033+ "(pandoc -t latex -o filename.pdf)."
1034+ else e
1035+ Right w -> return w
10331036
10341037 reader <- case getReader readerName' of
10351038 Right r -> return r
src/Text/Pandoc.hs+16−19
@@ -152,7 +152,7 @@ import Text.Pandoc.Options
152152import Text.Pandoc.Shared (safeRead, warn)
153153import Data.Aeson
154154import qualified Data.ByteString.Lazy as BL
155−import Data.List (intercalate, isSuffixOf)
155+import Data.List (intercalate)
156156import Data.Version (showVersion)
157157import Data.Set (Set)
158158import qualified Data.Set as Set
@@ -292,24 +292,21 @@ getReader s =
292292
293293-- | Retrieve writer based on formatSpec (format+extensions).
294294getWriter :: String -> Either String Writer
295−getWriter s =
296− case parseFormatSpec s of
297− Left e -> Left $ intercalate "\n" $ [m | Message m <- errorMessages e]
298− Right (writerName, setExts) ->
299− case lookup writerName writers of
300− Nothing
301− | ".lua" `isSuffixOf` s ->
302− Right $ IOStringWriter $ writeCustom s
303− | otherwise -> Left $ "Unknown writer: " ++ writerName
304− Just (PureStringWriter r) -> Right $ PureStringWriter $
305− \o -> r o{ writerExtensions = setExts $
306− getDefaultExtensions writerName }
307− Just (IOStringWriter r) -> Right $ IOStringWriter $
308− \o -> r o{ writerExtensions = setExts $
309− getDefaultExtensions writerName }
310− Just (IOByteStringWriter r) -> Right $ IOByteStringWriter $
311− \o -> r o{ writerExtensions = setExts $
312− getDefaultExtensions writerName }
295+getWriter s
296+ = case parseFormatSpec s of
297+ Left e -> Left $ intercalate "\n" $ [m | Message m <- errorMessages e]
298+ Right (writerName, setExts) ->
299+ case lookup writerName writers of
300+ Nothing -> Left $ "Unknown writer: " ++ writerName
301+ Just (PureStringWriter r) -> Right $ PureStringWriter $
302+ \o -> r o{ writerExtensions = setExts $
303+ getDefaultExtensions writerName }
304+ Just (IOStringWriter r) -> Right $ IOStringWriter $
305+ \o -> r o{ writerExtensions = setExts $
306+ getDefaultExtensions writerName }
307+ Just (IOByteStringWriter r) -> Right $ IOByteStringWriter $
308+ \o -> r o{ writerExtensions = setExts $
309+ getDefaultExtensions writerName }
313310
314311{-# DEPRECATED toJsonFilter "Use 'toJSONFilter' from 'Text.Pandoc.JSON' instead" #-}
315312-- | Deprecated. Use @toJSONFilter@ from @Text.Pandoc.JSON@ instead.