From e4e5c801f305bd89d6b94ee1d8acefb6813b18a8 Mon Sep 17 00:00:00 2001 From: Joscha Date: Sun, 13 Dec 2020 21:19:24 +0000 Subject: [PATCH] Escape names properly --- src/Propa/Prolog/Display.hs | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/Propa/Prolog/Display.hs b/src/Propa/Prolog/Display.hs index 436784a..acd15b7 100644 --- a/src/Propa/Prolog/Display.hs +++ b/src/Propa/Prolog/Display.hs @@ -8,14 +8,33 @@ module Propa.Prolog.Display , displayResult ) where +import Data.Char +import Data.List + import qualified Data.Map as Map import qualified Data.Text as T 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 name [] = name -displayStat name args = name <> "(" <> T.intercalate ", " (map displayTerm args) <> ")" +displayStat name [] = displayName name +displayStat name args + = displayName name + <> "(" + <> T.intercalate ", " (map displayTerm args) + <> ")" displayList :: Term T.Text -> T.Text displayList (Stat "[|]" [a, b]) = "," <> displayTerm a <> displayList b