module Vulkan.Utils.ShaderQQ.Backend.Glslang ( GlslangError , GlslangWarning , processGlslangMessages ) where import qualified Data.ByteString.Lazy.Char8 as BSL import Data.List.Extra import System.FilePath type GlslangError = String type GlslangWarning = String processGlslangMessages :: BSL.ByteString -> ([GlslangWarning], [GlslangError]) processGlslangMessages :: ByteString -> ([GlslangWarning], [GlslangWarning]) processGlslangMessages = forall (t :: * -> *) a b. Foldable t => (a -> b -> b) -> b -> t a -> b foldr GlslangWarning -> ([GlslangWarning], [GlslangWarning]) -> ([GlslangWarning], [GlslangWarning]) grep ([], []) forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a. (a -> Bool) -> [a] -> [a] filter (Bool -> Bool not forall b c a. (b -> c) -> (a -> b) -> a -> c . forall (t :: * -> *) a. Foldable t => t a -> Bool null) forall b c a. (b -> c) -> (a -> b) -> a -> c . GlslangWarning -> [GlslangWarning] lines forall b c a. (b -> c) -> (a -> b) -> a -> c . ByteString -> GlslangWarning BSL.unpack where grep :: GlslangWarning -> ([GlslangWarning], [GlslangWarning]) -> ([GlslangWarning], [GlslangWarning]) grep GlslangWarning line ([GlslangWarning] ws, [GlslangWarning] es) | GlslangWarning "WARNING: " forall a. Eq a => [a] -> [a] -> Bool `isPrefixOf` GlslangWarning line = (GlslangWarning -> GlslangWarning cut GlslangWarning line forall a. a -> [a] -> [a] : [GlslangWarning] ws, [GlslangWarning] es) | GlslangWarning "ERROR: " forall a. Eq a => [a] -> [a] -> Bool `isPrefixOf` GlslangWarning line = ([GlslangWarning] ws, GlslangWarning -> GlslangWarning cut GlslangWarning line forall a. a -> [a] -> [a] : [GlslangWarning] es) | Bool otherwise = ([GlslangWarning] ws, [GlslangWarning] es) cut :: GlslangWarning -> GlslangWarning cut GlslangWarning line = GlslangWarning -> GlslangWarning takeFileName GlslangWarning path forall a. Semigroup a => a -> a -> a <> GlslangWarning msg where (GlslangWarning path, GlslangWarning msg) = forall a. (a -> Bool) -> [a] -> ([a], [a]) break (forall a. Eq a => a -> a -> Bool == Char ':') forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a. Int -> [a] -> [a] drop Int 1 forall a b. (a -> b) -> a -> b $ forall a. (a -> Bool) -> [a] -> [a] dropWhile (forall a. Eq a => a -> a -> Bool /= Char ' ') GlslangWarning line