diff options
Diffstat (limited to 'src/Codec/Wavefront/Token.hs')
-rw-r--r-- | src/Codec/Wavefront/Token.hs | 15 |
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 | |||
123 | paramCoord :: Parser ParamCoord | ||
124 | paramCoord = 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 | ||
121 | points :: Parser [Point] | 136 | points :: Parser [Point] |