-- for information see: -- http://www.haskell.org/ghc/docs/6.4.2/html/users_guide/using-ghc.html#source-file-options module Parse.Pragma(parsePragmas) where import Data.Char import Util.Text -- | Takes the source file -- Returns a list of the pragma's that are YHC specific parsePragmas :: String -> [String] parsePragmas src = f $ lines src where f (x:xs) = case parsePragma x of Nothing -> [] Just (a,b) -> [b | a == "OPTIONS_YHC"] ++ f xs -- Example: -- {-# OPTIONS_GHC -fglasgow-exts #-} -- either a line isn't a pragma (Nothing) -- or it is, with a pragma type and value Just (OPTIONS_YHC, -cpp) parsePragma :: String -> Maybe (String, String) parsePragma x = p1 x where p1 ('>':xs) = p2 xs p1 xs = p2 xs p2 xs = p3 $ trimLeft xs p3 ('{':'-':'#':xs) = p4 xs p3 _ = Nothing p4 xs | end == "#-}" = p5 $ trim body where (body,end) = splitAt (length xs2 - 3) xs2 xs2 = trimRight xs p4 _ = Nothing p5 xs = Just (a, trimLeft b) where (a,b) = break isSpace xs