Escape names properly
This commit is contained in:
parent
2d5a8ece55
commit
e4e5c801f3
1 changed files with 21 additions and 2 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue