@@ -31,7 +31,7 @@ writers.
31module Main where
31module Main where
32import Text.Pandoc
32import Text.Pandoc
33import Text.Pandoc.UTF8
33import Text.Pandoc.UTF8
34−import Text.Pandoc.Shared ( joinWithSep, tabsToSpaces )
34+import Text.Pandoc.Shared ( joinWithSep )
35import Text.Regex ( mkRegex, matchRegex )
35import Text.Regex ( mkRegex, matchRegex )
36import System.Environment ( getArgs, getProgName, getEnvironment )
36import System.Environment ( getArgs, getProgName, getEnvironment )
37import System.Exit ( exitWith, ExitCode (..) )
37import System.Exit ( exitWith, ExitCode (..) )
@@ -445,8 +445,18 @@ main = do
445 Just cols -> read cols
445 Just cols -> read cols
446 Nothing -> stateColumns defaultParserState
446 Nothing -> stateColumns defaultParserState
448− let tabFilter = if preserveTabs then id else (tabsToSpaces tabStop)
448+ let tabsToSpacesInLine _ [] = ""
449− let removeCRs str = filter (/= '\r') str -- remove DOS-style line endings
449+ tabsToSpacesInLine _ ('\r':[]) = "" -- remove DOS line-endings
450+ tabsToSpacesInLine spsToNextStop (x:xs) =
452+ then if preserveTabs
453+ then x:(tabsToSpacesInLine tabStop xs)
454+ else replicate spsToNextStop ' ' ++
455+ tabsToSpacesInLine tabStop xs
456+ else x:(tabsToSpacesInLine (spsToNextStop - 1) xs)
458+ let tabFilter = unlines . map (tabsToSpacesInLine tabStop) . lines
450 let startParserState =
460 let startParserState =
451 defaultParserState { stateParseRaw = parseRaw,
461 defaultParserState { stateParseRaw = parseRaw,
452 stateTabStop = tabStop,
462 stateTabStop = tabStop,
@@ -484,7 +494,7 @@ main = do
484 (readSources sources) >>= (hPutStrLn output . toUTF8 .
494 (readSources sources) >>= (hPutStrLn output . toUTF8 .
485 (writer writerOptions) .
495 (writer writerOptions) .
486 (reader startParserState) . tabFilter .
496 (reader startParserState) . tabFilter .
487− removeCRs . fromUTF8 . (joinWithSep "\n")) >>
497+ fromUTF8 . (joinWithSep "\n")) >>
488 hClose output
498 hClose output