@@ -31,7 +31,7 @@ writers.
3131module Main where
3232import Text.Pandoc
3333import Text.Pandoc.UTF8
34−import Text.Pandoc.Shared ( joinWithSep, tabsToSpaces )
34+import Text.Pandoc.Shared ( joinWithSep )
3535import Text.Regex ( mkRegex, matchRegex )
3636import System.Environment ( getArgs, getProgName, getEnvironment )
3737import System.Exit ( exitWith, ExitCode (..) )
@@ -445,8 +445,18 @@ main = do
445445 Just cols -> read cols
446446 Nothing -> stateColumns defaultParserState
447447
448− let tabFilter = if preserveTabs then id else (tabsToSpaces tabStop)
449− let removeCRs str = filter (/= '\r') str -- remove DOS-style line endings
448+ let tabsToSpacesInLine _ [] = ""
449+ tabsToSpacesInLine _ ('\r':[]) = "" -- remove DOS line-endings
450+ tabsToSpacesInLine spsToNextStop (x:xs) =
451+ if x == '\t'
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)
457+
458+ let tabFilter = unlines . map (tabsToSpacesInLine tabStop) . lines
459+
450460 let startParserState =
451461 defaultParserState { stateParseRaw = parseRaw,
452462 stateTabStop = tabStop,
@@ -484,7 +494,7 @@ main = do
484494 (readSources sources) >>= (hPutStrLn output . toUTF8 .
485495 (writer writerOptions) .
486496 (reader startParserState) . tabFilter .
487− removeCRs . fromUTF8 . (joinWithSep "\n")) >>
497+ fromUTF8 . (joinWithSep "\n")) >>
488498 hClose output
489499
490500 where