summaryrefslogtreecommitdiff
path: root/src/Codec/Wavefront/Token.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Codec/Wavefront/Token.hs')
-rw-r--r--src/Codec/Wavefront/Token.hs15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/Codec/Wavefront/Token.hs b/src/Codec/Wavefront/Token.hs
index 31e62e7..71691a8 100644
--- a/src/Codec/Wavefront/Token.hs
+++ b/src/Codec/Wavefront/Token.hs
@@ -34,6 +34,7 @@ data Token
34 = TknV Location 34 = TknV Location
35 | TknVN Normal 35 | TknVN Normal
36 | TknVT TexCoord 36 | TknVT TexCoord
37 | TknVP ParamCoord
37 | TknP [Point] 38 | TknP [Point]
38 | TknL [Line] 39 | TknL [Line]
39 | TknF Face 40 | TknF Face
@@ -55,6 +56,7 @@ tokenize = fmap cleanupTokens . analyseResult False . parse (untilEnd tokenizer)
55 fmap (Just . TknV) location 56 fmap (Just . TknV) location
56 , fmap (Just . TknVN) normal 57 , fmap (Just . TknVN) normal
57 , fmap (Just . TknVT) texCoord 58 , fmap (Just . TknVT) texCoord
59 , fmap (Just . TknVP) paramCoord
58 , fmap (Just . TknP) points 60 , fmap (Just . TknP) points
59 , fmap (Just . TknL) lines 61 , fmap (Just . TknL) lines
60 , fmap (Just . TknF) face 62 , fmap (Just . TknF) face
@@ -116,6 +118,19 @@ texCoord = skipSpace *> string "vt " *> skipHSpace *> parseUVW <* eol
116 _ -> fail "wrong number of u, v and w arguments for texture coordinates" 118 _ -> fail "wrong number of u, v and w arguments for texture coordinates"
117 119
118---------------------------------------------------------------------------------------------------- 120----------------------------------------------------------------------------------------------------
121-- Parameter-space coordinates -----------------------------------------------------------------------------
122
123paramCoord :: Parser ParamCoord
124paramCoord = skipSpace *> string "vp " *> skipHSpace *> parseUVW <* eol
125 where
126 parseUVW = do
127 uvw <- float `sepBy1` skipHSpace
128 case uvw of
129 [u,v] -> pure (ParamCoord u v 0)
130 [u,v,w] -> pure (ParamCoord u v w)
131 _ -> fail "wrong number of u, v and w arguments for parameter-space coordinates"
132
133----------------------------------------------------------------------------------------------------
119-- Points ------------------------------------------------------------------------------------------ 134-- Points ------------------------------------------------------------------------------------------
120 135
121points :: Parser [Point] 136points :: Parser [Point]