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