{-# LANGUAGE CPP, OverloadedStrings #-}
{-# OPTIONS_HADDOCK hide #-}
module Data.GraphViz.Attributes.Internal
( PortName(..)
, PortPos(..)
, CompassPoint(..)
, compassLookup
, parseEdgeBasedPP
) where
import Data.GraphViz.Parsing
import Data.GraphViz.Printing
import Data.Map (Map)
import qualified Data.Map as Map
import Data.Maybe (isNothing)
import Data.Text.Lazy (Text)
#if !MIN_VERSION_base (4,13,0)
import Data.Monoid ((<>))
#endif
newtype PortName = PN { PortName -> Text
portName :: Text }
deriving (PortName -> PortName -> Bool
(PortName -> PortName -> Bool)
-> (PortName -> PortName -> Bool) -> Eq PortName
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PortName -> PortName -> Bool
$c/= :: PortName -> PortName -> Bool
== :: PortName -> PortName -> Bool
$c== :: PortName -> PortName -> Bool
Eq, Eq PortName
Eq PortName =>
(PortName -> PortName -> Ordering)
-> (PortName -> PortName -> Bool)
-> (PortName -> PortName -> Bool)
-> (PortName -> PortName -> Bool)
-> (PortName -> PortName -> Bool)
-> (PortName -> PortName -> PortName)
-> (PortName -> PortName -> PortName)
-> Ord PortName
PortName -> PortName -> Bool
PortName -> PortName -> Ordering
PortName -> PortName -> PortName
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: PortName -> PortName -> PortName
$cmin :: PortName -> PortName -> PortName
max :: PortName -> PortName -> PortName
$cmax :: PortName -> PortName -> PortName
>= :: PortName -> PortName -> Bool
$c>= :: PortName -> PortName -> Bool
> :: PortName -> PortName -> Bool
$c> :: PortName -> PortName -> Bool
<= :: PortName -> PortName -> Bool
$c<= :: PortName -> PortName -> Bool
< :: PortName -> PortName -> Bool
$c< :: PortName -> PortName -> Bool
compare :: PortName -> PortName -> Ordering
$ccompare :: PortName -> PortName -> Ordering
$cp1Ord :: Eq PortName
Ord, Int -> PortName -> ShowS
[PortName] -> ShowS
PortName -> String
(Int -> PortName -> ShowS)
-> (PortName -> String) -> ([PortName] -> ShowS) -> Show PortName
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PortName] -> ShowS
$cshowList :: [PortName] -> ShowS
show :: PortName -> String
$cshow :: PortName -> String
showsPrec :: Int -> PortName -> ShowS
$cshowsPrec :: Int -> PortName -> ShowS
Show, ReadPrec [PortName]
ReadPrec PortName
Int -> ReadS PortName
ReadS [PortName]
(Int -> ReadS PortName)
-> ReadS [PortName]
-> ReadPrec PortName
-> ReadPrec [PortName]
-> Read PortName
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [PortName]
$creadListPrec :: ReadPrec [PortName]
readPrec :: ReadPrec PortName
$creadPrec :: ReadPrec PortName
readList :: ReadS [PortName]
$creadList :: ReadS [PortName]
readsPrec :: Int -> ReadS PortName
$creadsPrec :: Int -> ReadS PortName
Read)
instance PrintDot PortName where
unqtDot :: PortName -> DotCode
unqtDot = Text -> DotCode
forall a. PrintDot a => a -> DotCode
unqtDot (Text -> DotCode) -> (PortName -> Text) -> PortName -> DotCode
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PortName -> Text
portName
toDot :: PortName -> DotCode
toDot = Text -> DotCode
forall a. PrintDot a => a -> DotCode
toDot (Text -> DotCode) -> (PortName -> Text) -> PortName -> DotCode
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PortName -> Text
portName
instance ParseDot PortName where
parseUnqt :: Parse PortName
parseUnqt = Text -> PortName
PN (Text -> PortName) -> Parser GraphvizState Text -> Parse PortName
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Bool -> String -> String -> Parser GraphvizState Text
parseEscaped Bool
False [] ['"', ':']
parse :: Parse PortName
parse = Parse PortName -> Parse PortName
forall a. Parse a -> Parse a
quotedParse Parse PortName
forall a. ParseDot a => Parse a
parseUnqt
Parse PortName -> Parse PortName -> Parse PortName
forall s a. Parser s a -> Parser s a -> Parser s a
`onFail`
Parse PortName
unqtPortName
unqtPortName :: Parse PortName
unqtPortName :: Parse PortName
unqtPortName = Text -> PortName
PN (Text -> PortName) -> Parser GraphvizState Text -> Parse PortName
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser GraphvizState Text
quotelessString
data PortPos = LabelledPort PortName (Maybe CompassPoint)
| CompassPoint CompassPoint
deriving (PortPos -> PortPos -> Bool
(PortPos -> PortPos -> Bool)
-> (PortPos -> PortPos -> Bool) -> Eq PortPos
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PortPos -> PortPos -> Bool
$c/= :: PortPos -> PortPos -> Bool
== :: PortPos -> PortPos -> Bool
$c== :: PortPos -> PortPos -> Bool
Eq, Eq PortPos
Eq PortPos =>
(PortPos -> PortPos -> Ordering)
-> (PortPos -> PortPos -> Bool)
-> (PortPos -> PortPos -> Bool)
-> (PortPos -> PortPos -> Bool)
-> (PortPos -> PortPos -> Bool)
-> (PortPos -> PortPos -> PortPos)
-> (PortPos -> PortPos -> PortPos)
-> Ord PortPos
PortPos -> PortPos -> Bool
PortPos -> PortPos -> Ordering
PortPos -> PortPos -> PortPos
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: PortPos -> PortPos -> PortPos
$cmin :: PortPos -> PortPos -> PortPos
max :: PortPos -> PortPos -> PortPos
$cmax :: PortPos -> PortPos -> PortPos
>= :: PortPos -> PortPos -> Bool
$c>= :: PortPos -> PortPos -> Bool
> :: PortPos -> PortPos -> Bool
$c> :: PortPos -> PortPos -> Bool
<= :: PortPos -> PortPos -> Bool
$c<= :: PortPos -> PortPos -> Bool
< :: PortPos -> PortPos -> Bool
$c< :: PortPos -> PortPos -> Bool
compare :: PortPos -> PortPos -> Ordering
$ccompare :: PortPos -> PortPos -> Ordering
$cp1Ord :: Eq PortPos
Ord, Int -> PortPos -> ShowS
[PortPos] -> ShowS
PortPos -> String
(Int -> PortPos -> ShowS)
-> (PortPos -> String) -> ([PortPos] -> ShowS) -> Show PortPos
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PortPos] -> ShowS
$cshowList :: [PortPos] -> ShowS
show :: PortPos -> String
$cshow :: PortPos -> String
showsPrec :: Int -> PortPos -> ShowS
$cshowsPrec :: Int -> PortPos -> ShowS
Show, ReadPrec [PortPos]
ReadPrec PortPos
Int -> ReadS PortPos
ReadS [PortPos]
(Int -> ReadS PortPos)
-> ReadS [PortPos]
-> ReadPrec PortPos
-> ReadPrec [PortPos]
-> Read PortPos
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [PortPos]
$creadListPrec :: ReadPrec [PortPos]
readPrec :: ReadPrec PortPos
$creadPrec :: ReadPrec PortPos
readList :: ReadS [PortPos]
$creadList :: ReadS [PortPos]
readsPrec :: Int -> ReadS PortPos
$creadsPrec :: Int -> ReadS PortPos
Read)
instance PrintDot PortPos where
unqtDot :: PortPos -> DotCode
unqtDot (LabelledPort n :: PortName
n mc :: Maybe CompassPoint
mc) = PortName -> DotCode
forall a. PrintDot a => a -> DotCode
unqtDot PortName
n
DotCode -> DotCode -> DotCode
forall a. Semigroup a => a -> a -> a
<> DotCode -> (DotCode -> DotCode) -> Maybe DotCode -> DotCode
forall b a. b -> (a -> b) -> Maybe a -> b
maybe DotCode
forall (m :: * -> *). Applicative m => m Doc
empty (DotCode
forall (m :: * -> *). Applicative m => m Doc
colon DotCode -> DotCode -> DotCode
forall a. Semigroup a => a -> a -> a
<>) ((CompassPoint -> DotCode) -> Maybe CompassPoint -> Maybe DotCode
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CompassPoint -> DotCode
forall a. PrintDot a => a -> DotCode
unqtDot Maybe CompassPoint
mc)
unqtDot (CompassPoint cp :: CompassPoint
cp) = CompassPoint -> DotCode
forall a. PrintDot a => a -> DotCode
unqtDot CompassPoint
cp
toDot :: PortPos -> DotCode
toDot (LabelledPort n :: PortName
n Nothing) = PortName -> DotCode
forall a. PrintDot a => a -> DotCode
toDot PortName
n
toDot lp :: PortPos
lp@LabelledPort{} = DotCode -> DotCode
forall (m :: * -> *). Functor m => m Doc -> m Doc
dquotes (DotCode -> DotCode) -> DotCode -> DotCode
forall a b. (a -> b) -> a -> b
$ PortPos -> DotCode
forall a. PrintDot a => a -> DotCode
unqtDot PortPos
lp
toDot cp :: PortPos
cp = PortPos -> DotCode
forall a. PrintDot a => a -> DotCode
unqtDot PortPos
cp
instance ParseDot PortPos where
parseUnqt :: Parse PortPos
parseUnqt = do PortName
n <- Parse PortName
forall a. ParseDot a => Parse a
parseUnqt
Maybe CompassPoint
mc <- Parser GraphvizState CompassPoint
-> Parser GraphvizState (Maybe CompassPoint)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser GraphvizState CompassPoint
-> Parser GraphvizState (Maybe CompassPoint))
-> Parser GraphvizState CompassPoint
-> Parser GraphvizState (Maybe CompassPoint)
forall a b. (a -> b) -> a -> b
$ Char -> Parse Char
character ':' Parse Char
-> Parser GraphvizState CompassPoint
-> Parser GraphvizState CompassPoint
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Parser GraphvizState CompassPoint
forall a. ParseDot a => Parse a
parseUnqt
PortPos -> Parse PortPos
forall (m :: * -> *) a. Monad m => a -> m a
return (PortPos -> Parse PortPos) -> PortPos -> Parse PortPos
forall a b. (a -> b) -> a -> b
$ if Maybe CompassPoint -> Bool
forall a. Maybe a -> Bool
isNothing Maybe CompassPoint
mc
then PortName -> PortPos
checkPortName PortName
n
else PortName -> Maybe CompassPoint -> PortPos
LabelledPort PortName
n Maybe CompassPoint
mc
parse :: Parse PortPos
parse = Parse PortPos -> Parse PortPos
forall a. Parse a -> Parse a
quotedParse Parse PortPos
forall a. ParseDot a => Parse a
parseUnqt
Parse PortPos -> Parse PortPos -> Parse PortPos
forall s a. Parser s a -> Parser s a -> Parser s a
`onFail`
(PortName -> PortPos) -> Parse PortName -> Parse PortPos
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap PortName -> PortPos
checkPortName Parse PortName
unqtPortName
checkPortName :: PortName -> PortPos
checkPortName :: PortName -> PortPos
checkPortName pn :: PortName
pn = PortPos
-> (CompassPoint -> PortPos) -> Maybe CompassPoint -> PortPos
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (PortName -> Maybe CompassPoint -> PortPos
LabelledPort PortName
pn Maybe CompassPoint
forall a. Maybe a
Nothing) CompassPoint -> PortPos
CompassPoint
(Maybe CompassPoint -> PortPos)
-> (Text -> Maybe CompassPoint) -> Text -> PortPos
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Text -> Map Text CompassPoint -> Maybe CompassPoint
forall k a. Ord k => k -> Map k a -> Maybe a
`Map.lookup` Map Text CompassPoint
compassLookup)
(Text -> PortPos) -> Text -> PortPos
forall a b. (a -> b) -> a -> b
$ PortName -> Text
portName PortName
pn
parseEdgeBasedPP :: Parse PortPos
parseEdgeBasedPP :: Parse PortPos
parseEdgeBasedPP = (PortName -> Maybe CompassPoint -> PortPos)
-> Parse PortName
-> Parser GraphvizState (Maybe CompassPoint)
-> Parse PortPos
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 PortName -> Maybe CompassPoint -> PortPos
LabelledPort Parse PortName
forall a. ParseDot a => Parse a
parse ((CompassPoint -> Maybe CompassPoint)
-> Parser GraphvizState CompassPoint
-> Parser GraphvizState (Maybe CompassPoint)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CompassPoint -> Maybe CompassPoint
forall a. a -> Maybe a
Just (Parser GraphvizState CompassPoint
-> Parser GraphvizState (Maybe CompassPoint))
-> Parser GraphvizState CompassPoint
-> Parser GraphvizState (Maybe CompassPoint)
forall a b. (a -> b) -> a -> b
$ Char -> Parse Char
character ':' Parse Char
-> Parser GraphvizState CompassPoint
-> Parser GraphvizState CompassPoint
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser GraphvizState CompassPoint
forall a. ParseDot a => Parse a
parse)
Parse PortPos -> Parse PortPos -> Parse PortPos
forall s a. Parser s a -> Parser s a -> Parser s a
`onFail`
Parse PortPos
forall a. ParseDot a => Parse a
parse
data CompassPoint = North
| NorthEast
| East
| SouthEast
| South
| SouthWest
| West
| NorthWest
| CenterPoint
| NoCP
deriving (CompassPoint -> CompassPoint -> Bool
(CompassPoint -> CompassPoint -> Bool)
-> (CompassPoint -> CompassPoint -> Bool) -> Eq CompassPoint
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CompassPoint -> CompassPoint -> Bool
$c/= :: CompassPoint -> CompassPoint -> Bool
== :: CompassPoint -> CompassPoint -> Bool
$c== :: CompassPoint -> CompassPoint -> Bool
Eq, Eq CompassPoint
Eq CompassPoint =>
(CompassPoint -> CompassPoint -> Ordering)
-> (CompassPoint -> CompassPoint -> Bool)
-> (CompassPoint -> CompassPoint -> Bool)
-> (CompassPoint -> CompassPoint -> Bool)
-> (CompassPoint -> CompassPoint -> Bool)
-> (CompassPoint -> CompassPoint -> CompassPoint)
-> (CompassPoint -> CompassPoint -> CompassPoint)
-> Ord CompassPoint
CompassPoint -> CompassPoint -> Bool
CompassPoint -> CompassPoint -> Ordering
CompassPoint -> CompassPoint -> CompassPoint
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: CompassPoint -> CompassPoint -> CompassPoint
$cmin :: CompassPoint -> CompassPoint -> CompassPoint
max :: CompassPoint -> CompassPoint -> CompassPoint
$cmax :: CompassPoint -> CompassPoint -> CompassPoint
>= :: CompassPoint -> CompassPoint -> Bool
$c>= :: CompassPoint -> CompassPoint -> Bool
> :: CompassPoint -> CompassPoint -> Bool
$c> :: CompassPoint -> CompassPoint -> Bool
<= :: CompassPoint -> CompassPoint -> Bool
$c<= :: CompassPoint -> CompassPoint -> Bool
< :: CompassPoint -> CompassPoint -> Bool
$c< :: CompassPoint -> CompassPoint -> Bool
compare :: CompassPoint -> CompassPoint -> Ordering
$ccompare :: CompassPoint -> CompassPoint -> Ordering
$cp1Ord :: Eq CompassPoint
Ord, CompassPoint
CompassPoint -> CompassPoint -> Bounded CompassPoint
forall a. a -> a -> Bounded a
maxBound :: CompassPoint
$cmaxBound :: CompassPoint
minBound :: CompassPoint
$cminBound :: CompassPoint
Bounded, Int -> CompassPoint
CompassPoint -> Int
CompassPoint -> [CompassPoint]
CompassPoint -> CompassPoint
CompassPoint -> CompassPoint -> [CompassPoint]
CompassPoint -> CompassPoint -> CompassPoint -> [CompassPoint]
(CompassPoint -> CompassPoint)
-> (CompassPoint -> CompassPoint)
-> (Int -> CompassPoint)
-> (CompassPoint -> Int)
-> (CompassPoint -> [CompassPoint])
-> (CompassPoint -> CompassPoint -> [CompassPoint])
-> (CompassPoint -> CompassPoint -> [CompassPoint])
-> (CompassPoint -> CompassPoint -> CompassPoint -> [CompassPoint])
-> Enum CompassPoint
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: CompassPoint -> CompassPoint -> CompassPoint -> [CompassPoint]
$cenumFromThenTo :: CompassPoint -> CompassPoint -> CompassPoint -> [CompassPoint]
enumFromTo :: CompassPoint -> CompassPoint -> [CompassPoint]
$cenumFromTo :: CompassPoint -> CompassPoint -> [CompassPoint]
enumFromThen :: CompassPoint -> CompassPoint -> [CompassPoint]
$cenumFromThen :: CompassPoint -> CompassPoint -> [CompassPoint]
enumFrom :: CompassPoint -> [CompassPoint]
$cenumFrom :: CompassPoint -> [CompassPoint]
fromEnum :: CompassPoint -> Int
$cfromEnum :: CompassPoint -> Int
toEnum :: Int -> CompassPoint
$ctoEnum :: Int -> CompassPoint
pred :: CompassPoint -> CompassPoint
$cpred :: CompassPoint -> CompassPoint
succ :: CompassPoint -> CompassPoint
$csucc :: CompassPoint -> CompassPoint
Enum, Int -> CompassPoint -> ShowS
[CompassPoint] -> ShowS
CompassPoint -> String
(Int -> CompassPoint -> ShowS)
-> (CompassPoint -> String)
-> ([CompassPoint] -> ShowS)
-> Show CompassPoint
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CompassPoint] -> ShowS
$cshowList :: [CompassPoint] -> ShowS
show :: CompassPoint -> String
$cshow :: CompassPoint -> String
showsPrec :: Int -> CompassPoint -> ShowS
$cshowsPrec :: Int -> CompassPoint -> ShowS
Show, ReadPrec [CompassPoint]
ReadPrec CompassPoint
Int -> ReadS CompassPoint
ReadS [CompassPoint]
(Int -> ReadS CompassPoint)
-> ReadS [CompassPoint]
-> ReadPrec CompassPoint
-> ReadPrec [CompassPoint]
-> Read CompassPoint
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CompassPoint]
$creadListPrec :: ReadPrec [CompassPoint]
readPrec :: ReadPrec CompassPoint
$creadPrec :: ReadPrec CompassPoint
readList :: ReadS [CompassPoint]
$creadList :: ReadS [CompassPoint]
readsPrec :: Int -> ReadS CompassPoint
$creadsPrec :: Int -> ReadS CompassPoint
Read)
instance PrintDot CompassPoint where
unqtDot :: CompassPoint -> DotCode
unqtDot NorthEast = Text -> DotCode
forall (m :: * -> *). Applicative m => Text -> m Doc
text "ne"
unqtDot NorthWest = Text -> DotCode
forall (m :: * -> *). Applicative m => Text -> m Doc
text "nw"
unqtDot North = Text -> DotCode
forall (m :: * -> *). Applicative m => Text -> m Doc
text "n"
unqtDot East = Text -> DotCode
forall (m :: * -> *). Applicative m => Text -> m Doc
text "e"
unqtDot SouthEast = Text -> DotCode
forall (m :: * -> *). Applicative m => Text -> m Doc
text "se"
unqtDot SouthWest = Text -> DotCode
forall (m :: * -> *). Applicative m => Text -> m Doc
text "sw"
unqtDot South = Text -> DotCode
forall (m :: * -> *). Applicative m => Text -> m Doc
text "s"
unqtDot West = Text -> DotCode
forall (m :: * -> *). Applicative m => Text -> m Doc
text "w"
unqtDot CenterPoint = Text -> DotCode
forall (m :: * -> *). Applicative m => Text -> m Doc
text "c"
unqtDot NoCP = Text -> DotCode
forall (m :: * -> *). Applicative m => Text -> m Doc
text "_"
instance ParseDot CompassPoint where
parseUnqt :: Parser GraphvizState CompassPoint
parseUnqt = [Parser GraphvizState CompassPoint]
-> Parser GraphvizState CompassPoint
forall (p :: * -> *) a. PolyParse p => [p a] -> p a
oneOf [ CompassPoint -> String -> Parser GraphvizState CompassPoint
forall a. a -> String -> Parse a
stringRep CompassPoint
NorthEast "ne"
, CompassPoint -> String -> Parser GraphvizState CompassPoint
forall a. a -> String -> Parse a
stringRep CompassPoint
NorthWest "nw"
, CompassPoint -> String -> Parser GraphvizState CompassPoint
forall a. a -> String -> Parse a
stringRep CompassPoint
North "n"
, CompassPoint -> String -> Parser GraphvizState CompassPoint
forall a. a -> String -> Parse a
stringRep CompassPoint
SouthEast "se"
, CompassPoint -> String -> Parser GraphvizState CompassPoint
forall a. a -> String -> Parse a
stringRep CompassPoint
SouthWest "sw"
, CompassPoint -> String -> Parser GraphvizState CompassPoint
forall a. a -> String -> Parse a
stringRep CompassPoint
South "s"
, CompassPoint -> String -> Parser GraphvizState CompassPoint
forall a. a -> String -> Parse a
stringRep CompassPoint
East "e"
, CompassPoint -> String -> Parser GraphvizState CompassPoint
forall a. a -> String -> Parse a
stringRep CompassPoint
West "w"
, CompassPoint -> String -> Parser GraphvizState CompassPoint
forall a. a -> String -> Parse a
stringRep CompassPoint
CenterPoint "c"
, CompassPoint -> String -> Parser GraphvizState CompassPoint
forall a. a -> String -> Parse a
stringRep CompassPoint
NoCP "_"
]
compassLookup :: Map Text CompassPoint
compassLookup :: Map Text CompassPoint
compassLookup = [(Text, CompassPoint)] -> Map Text CompassPoint
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList [ ("ne", CompassPoint
NorthEast)
, ("nw", CompassPoint
NorthWest)
, ("n", CompassPoint
North)
, ("e", CompassPoint
East)
, ("se", CompassPoint
SouthEast)
, ("sw", CompassPoint
SouthWest)
, ("s", CompassPoint
South)
, ("w", CompassPoint
West)
, ("c", CompassPoint
CenterPoint)
, ("_", CompassPoint
NoCP)
]