module PLY.Ascii where
import Control.Applicative
import Data.Attoparsec.Char8
import Data.Vector (Vector)
import qualified Data.Vector as V
import qualified Data.Vector.Storable as VS
import Linear.V3 (V3(..))
import PLY.Internal.Parsers
import PLY.Internal.StrictReplicate
import PLY.Types
parseASCII :: Element -> Parser (Vector (Vector Scalar))
parseASCII e = replicateM' (elNum e)
(skip *> (V.fromList <$> multiProps (elProps e)))
parseASCIIv3 :: forall a. PLYType a => Element -> Parser (VS.Vector (V3 a))
parseASCIIv3 (Element _ n ps@[_,_,_])
| all samePropType ps = replicateM' n (skip *> (V3 <$> p <*> p <*> p))
| otherwise = empty
where t = plyType (undefined::a)
p = unsafeUnwrap <$> (parseScalar t <* skipSpace)
samePropType (ScalarProperty t' _) = t == t'
samePropType (ListProperty _ _) = False
parseASCIIv3 _ = empty