module PhatSort.Script
(
formatCommand
) where
import Data.Char (ord)
formatCommand
:: [String]
-> String
formatCommand :: [[Char]] -> [Char]
formatCommand = [[Char]] -> [Char]
unwords forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a -> b) -> [a] -> [b]
map [Char] -> [Char]
escape
where
escape :: String -> String
escape :: [Char] -> [Char]
escape [Char]
s
| forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all Char -> Bool
isOkChar [Char]
s = [Char]
s
| Bool
otherwise = [Char]
"'" forall a. [a] -> [a] -> [a]
++ forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap Char -> [Char]
tr [Char]
s forall a. [a] -> [a] -> [a]
++ [Char]
"'"
isOkChar :: Char -> Bool
isOkChar :: Char -> Bool
isOkChar Char
c =
let c' :: Int
c' = Char -> Int
ord Char
c
in forall (t :: * -> *). Foldable t => t Bool -> Bool
or
[ (Int
c' forall a. Num a => a -> a -> a
- Char -> Int
ord Char
'a') forall a. Ord a => a -> a -> Bool
<= Int
25
, (Int
c' forall a. Num a => a -> a -> a
- Char -> Int
ord Char
'A') forall a. Ord a => a -> a -> Bool
<= Int
25
, (Int
c' forall a. Num a => a -> a -> a
- Char -> Int
ord Char
'0') forall a. Ord a => a -> a -> Bool
<= Int
9
, Char
c forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` ([Char]
".-+_/" :: String)
]
tr :: Char -> String
tr :: Char -> [Char]
tr Char
'\'' = [Char]
"'\"'\"'"
tr Char
'\0' = [Char]
""
tr Char
c = [Char
c]