packages feed

language-glsl-0.0.0: bin/glsl-pprint.hs

module Main where

import System.Environment (getArgs)
import Text.PrettyPrint.HughesPJClass

import Language.GLSL
import Language.GLSL.Tests (parsePrettyId, tests)

info :: [String]
info = 
  [ "This is glsl-pprint."
  ]

usage :: [String]
usage = info ++
  ["usage:\n  glsl-pprint [-p] filename\n  glsl-pprint --run-tests"]

main :: IO ()
main = do
  args <- getArgs
  case args of
    ["--run-tests"] -> tests
    [fn] -> do
      content <- readFile fn
      putStrLn . show . parse $ content
    ["--check", fn] -> do
      content <- readFile fn
      case parse content of
        Left err -> putStrLn $ "parse error:\n" ++ show err
        Right ast ->
          if parsePrettyId ast
            then putStrLn "parse . pretty == id"
            else putStrLn "parse . pretty /= id"
    ["-p", fn] -> do
      content <- readFile fn
      case parse content of
        Left err -> putStrLn $ "parse error:\n" ++ show err
        Right ast -> print . pPrint $ ast
    _ -> putStrLn $ unlines usage