Skip to content

Commit 96b6d69

Browse files
committed
format and added function to get vertex names
1 parent 867196b commit 96b6d69

File tree

1 file changed

+40
-13
lines changed

1 file changed

+40
-13
lines changed

src/Transformation.hs

Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,12 @@ module Transformation (
55
import Control.Arrow ((&&&))
66
import Control.Monad (guard)
77
import Core.Node
8-
import Core.Node (Node (..), isCommentNode)
98
import Data.Char (isDigit)
109
import Data.Foldable1 (maximumBy)
1110
import Data.Function (on)
1211
import Data.List.NonEmpty (NonEmpty, (<|))
1312
import Data.Map (Map)
14-
import Data.Maybe (fromJust, fromMaybe, isJust, isNothing)
13+
import Data.Maybe (fromJust, fromMaybe, isJust, isNothing, mapMaybe)
1514
import Data.Scientific (Scientific)
1615
import Data.Sequence (Seq (..))
1716
import Data.Text (Text)
@@ -71,7 +70,7 @@ hasVerticePrefix verticePrefix node =
7170
in verticeName == Just verticePrefix
7271

7372
getFirstVerticeName :: [Node] -> Text
74-
getFirstVerticeName (node:_) = vName . fromJust . newVertice $ node
73+
getFirstVerticeName (node : _) = vName . fromJust . newVertice $ node
7574

7675
breakVertices :: Text -> [Node] -> ([Node], [Node])
7776
breakVertices verticePrefix = f []
@@ -100,7 +99,7 @@ typeForNodes = undefined
10099
nodesListToTree :: NonEmpty Node -> VertexTree
101100
nodesListToTree nodes =
102101
let (nonVertices, rest) = NE.break isNonVertice nodes
103-
verticePrefix = getFirstVerticeName rest
102+
verticePrefix = T.dropWhileEnd isDigit $ getFirstVerticeName rest
104103
(vertices, rest') = breakVertices verticePrefix rest
105104
in VertexTree
106105
{ tNodes =
@@ -110,12 +109,40 @@ nodesListToTree nodes =
110109
, tType = typeForNodes vertices
111110
}
112111

113-
getVertexTree :: Node -> Either Node VertexTree
114-
getVertexTree node =
115-
case node of
116-
Array ns
117-
| null ns -> Left node
118-
| otherwise -> Right . nodesListToTree . NE.fromList . V.toList $ ns
119-
bad -> Left bad
120-
121-
transform = undefined
112+
getVertexTree :: Node -> VertexTree
113+
getVertexTree topNode =
114+
case NP.queryNodes verticeQuery topNode of
115+
Just node -> f node
116+
Nothing -> error ("could not find vertices at path " ++ show verticeQuery)
117+
where
118+
f node =
119+
case node of
120+
Array ns
121+
| null ns -> error $ show node
122+
| otherwise -> nodesListToTree . NE.fromList . V.toList $ ns
123+
bad -> error $ show bad
124+
125+
updateVertices = undefined
126+
127+
verticeQuery :: NP.NodePath
128+
verticeQuery = fromList [NP.ObjectIndex 0, NP.ObjectKey "nodes"]
129+
130+
possiblyVertice (VertexEntry v) = Just v
131+
possiblyVertice _ = Nothing
132+
133+
getVertexNamesInTree vertexTree@(VertexTree {tNodes = vs}) =
134+
let verticeCordNamePair vertice = ((vX vertice, vY vertice, vZ vertice), vName vertice)
135+
getVertexNames =
136+
M.fromList . mapMaybe (fmap verticeCordNamePair . possiblyVertice) . NE.toList
137+
restNames =
138+
case vertexTree of
139+
VertexTree {tRest = Just r} -> getVertexNamesInTree r
140+
VertexTree {tRest = Nothing} -> M.empty
141+
in M.union (getVertexNames vs) restNames
142+
143+
transform topNode =
144+
let vertexTree = getVertexTree topNode
145+
vertexNames = getVertexNamesInTree vertexTree
146+
updatedVertexTree = updateVertices vertexTree
147+
updatedVertexNames = getVertexNamesInTree vertexTree
148+
in undefined

0 commit comments

Comments
 (0)