lambdacube-engine-0.1.1: Graphics/LambdaCube/Loader/ResourceScript.hs
module Graphics.LambdaCube.Loader.ResourceScript (loadResourcesCfg,PathType(..),ResourcePath,ResourceGroup) where
-- import the the library functions from uulib
import UU.Parsing
import UU.Scanner
-- import our custom made Alex-scanner
import Graphics.LambdaCube.Loader.Generated.ResourceScriptScanner
import Graphics.LambdaCube.Loader.ParserUtil
import System.Log.Logger
data PathType = PathDir | PathZip
type ResourcePath = (PathType,String)
type ResourceGroup = (String,[ResourcePath])
loadResourcesCfg file = do
txt <- readFile file
parseResourcesCfg file txt
parseResourcesCfg file txt
= let res = parseTokens pResourceScript (tokenize file txt)
in case res of
Left errs -> do
mapM_ (errorM "ResourceScript") errs
return Nothing
Right tree -> return (Just tree)
type TokenParser a = Parser Token a
parseTokens :: TokenParser a -> [Token] -> Either [String] a
parseTokens p tks = if null msgs then final `seq` Right v else Left (map show msgs)
where
steps = parse p tks
msgs = getMsgs steps
(Pair v final) = evalSteps steps
pResourceScript = pList pResourceGroup
pResourceGroup = (,) <$= "[" <*> pVarid <*= "]" <*> pList pResourceGroupContent
pResourceGroupContent = pFileSystem <|> pZip
pFileSystem = (,) PathDir <$= "FileSystem" <*= "=" <*> pVarid
pZip = (,) PathZip <$= "Zip" <*= "=" <*> pVarid