Refine command line option preprocessor and add tests for #8956.

The substantive change here is the `-strue` will now work
instead of being interpreted as `-s -true`.

This is somewhat ad hoc, but I don't think we'll ever have
an output format named `rue`, so it's probably okay.
This commit is contained in:
John MacFarlane
2023-07-19 15:21:39 -07:00
parent eb090c50ff
commit ce2b023e13
2 changed files with 26 additions and 6 deletions
@@ -238,8 +238,16 @@ pdfEngines = nubOrd $ map snd engines
preprocessArgs :: [String] -> [String]
preprocessArgs [] = []
preprocessArgs ("--":xs) = "--" : xs -- a bare '--' ends option parsing
-- note that -strue is interpreted as -strue while
-- -stmarkdown is interpreted as -s -tmarkdown
preprocessArgs (('-':c:d:cs):xs)
| isShortBooleanOpt c
, case toLower <$> (d:cs) of
"true" -> True
"false" -> True
_ -> False
= ('-':c:d:cs) : preprocessArgs xs
| isShortBooleanOpt c
, isShortOpt d = splitArg (c:d:cs) ++ preprocessArgs xs
preprocessArgs (x:xs) = x : preprocessArgs xs