@@ -5,13 +5,12 @@ module Transformation (
5
5
import Control.Arrow ((&&&) )
6
6
import Control.Monad (guard )
7
7
import Core.Node
8
- import Core.Node (Node (.. ), isCommentNode )
9
8
import Data.Char (isDigit )
10
9
import Data.Foldable1 (maximumBy )
11
10
import Data.Function (on )
12
11
import Data.List.NonEmpty (NonEmpty , (<|) )
13
12
import Data.Map (Map )
14
- import Data.Maybe (fromJust , fromMaybe , isJust , isNothing )
13
+ import Data.Maybe (fromJust , fromMaybe , isJust , isNothing , mapMaybe )
15
14
import Data.Scientific (Scientific )
16
15
import Data.Sequence (Seq (.. ))
17
16
import Data.Text (Text )
@@ -71,7 +70,7 @@ hasVerticePrefix verticePrefix node =
71
70
in verticeName == Just verticePrefix
72
71
73
72
getFirstVerticeName :: [Node ] -> Text
74
- getFirstVerticeName (node: _) = vName . fromJust . newVertice $ node
73
+ getFirstVerticeName (node : _) = vName . fromJust . newVertice $ node
75
74
76
75
breakVertices :: Text -> [Node ] -> ([Node ], [Node ])
77
76
breakVertices verticePrefix = f []
@@ -100,7 +99,7 @@ typeForNodes = undefined
100
99
nodesListToTree :: NonEmpty Node -> VertexTree
101
100
nodesListToTree nodes =
102
101
let (nonVertices, rest) = NE. break isNonVertice nodes
103
- verticePrefix = getFirstVerticeName rest
102
+ verticePrefix = T. dropWhileEnd isDigit $ getFirstVerticeName rest
104
103
(vertices, rest') = breakVertices verticePrefix rest
105
104
in VertexTree
106
105
{ tNodes =
@@ -110,12 +109,40 @@ nodesListToTree nodes =
110
109
, tType = typeForNodes vertices
111
110
}
112
111
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