module GraphRewriting.Layout.PortSpec
(module GraphRewriting.Layout.PortSpec,
module GraphRewriting.Layout.Position,
module Data.View)
where
import Prelude.Unicode
import GraphRewriting.Graph
import GraphRewriting.Layout.Position
import Data.View
import Data.Maybe (catMaybes)
class PortSpec n where portSpec ∷ n → [(Vector2, Vector2)]
sameDir ∷ Vector2 → (Vector2, Vector2)
sameDir r = (r,r)
portDir ∷ PortSpec n ⇒ n → [Vector2]
portDir = map snd . portSpec
relPortPos ∷ PortSpec n ⇒ n → [Vector2]
relPortPos = map fst . portSpec
absPortPos ∷ (PortSpec n, View Position n) ⇒ n → [Vector2]
absPortPos n = map (examine position n +) (relPortPos n)
propOfPort ∷ View [Port] n ⇒ (n → [a]) → Edge → n → [a]
propOfPort portProps e n = catMaybes $ zipWith filterE (inspect n) (portProps n)
where filterE edge portPos = if edge ≡ e then Just portPos else Nothing