Escape names properly

This commit is contained in:
Joscha 2020-12-13 21:19:24 +00:00
parent 2d5a8ece55
commit e4e5c801f3

View file

@ -8,14 +8,33 @@ module Propa.Prolog.Display
, displayResult , displayResult
) where ) where
import Data.Char
import Data.List
import qualified Data.Map as Map import qualified Data.Map as Map
import qualified Data.Text as T import qualified Data.Text as T
import Propa.Prolog.Types import Propa.Prolog.Types
displayName :: T.Text -> T.Text
displayName name
| T.all isLower name = name
| otherwise = "\"" <> escaped <> "\""
where
escaped = foldl' (\s (a, b) -> T.replace a b s) name
[ ("\\", "\\\\")
, ("\n", "\\n")
, ("\r", "\\r")
, ("\t", "\\t")
]
displayStat :: T.Text -> [Term T.Text] -> T.Text displayStat :: T.Text -> [Term T.Text] -> T.Text
displayStat name [] = name displayStat name [] = displayName name
displayStat name args = name <> "(" <> T.intercalate ", " (map displayTerm args) <> ")" displayStat name args
= displayName name
<> "("
<> T.intercalate ", " (map displayTerm args)
<> ")"
displayList :: Term T.Text -> T.Text displayList :: Term T.Text -> T.Text
displayList (Stat "[|]" [a, b]) = "," <> displayTerm a <> displayList b displayList (Stat "[|]" [a, b]) = "," <> displayTerm a <> displayList b