{-# OPTIONS_HADDOCK ignore-exports #-}

module Parser.Meshparser (meshToArr) where

import Algebra.VectorTypes
import Control.Applicative
import Diagrams.TwoD.Types
import Parser.Core


-- | Convert a text String with multiple vertices into
-- an array of float tuples.
meshToArr :: String   -- ^ the string to convert
          -> [PT]     -- ^ the resulting vertice table
meshToArr =
  fmap p2                         .
    fmap (\(Just (x, _)) -> x)    .
    filter (/= Nothing)           .
    fmap (runParser parseVertice) .
    lines


-- | Creates a Parser that accepts a single vertice, such as 'v 1.0 2.0'.
parseVertice :: Parser (Double, Double)
parseVertice =
  (,)                                 <$>
    (char 'v' *> spaces *> allDouble) <*>
    (spaces *> allDouble)
