6
6
7
7
module VkXml.Sections.Extensions
8
8
( parseExtensions
9
- , VkExtensions , VkExtension (.. ), VkExtAttrs (.. )
9
+ , VkExtensions , VkExtension (.. ), VkExtAttrs (.. ), VkSpecialUse ( .. )
10
10
) where
11
11
12
12
import Control.Monad.Except
@@ -15,6 +15,7 @@ import Data.Conduit
15
15
import Data.Map (Map )
16
16
import qualified Data.Map as Map
17
17
import Data.Text (Text )
18
+ import qualified Data.Text as T
18
19
import Data.XML.Types
19
20
import Text.XML.Stream.Parse
20
21
@@ -29,6 +30,13 @@ import VkXml.Sections.Feature
29
30
30
31
type VkExtensions = Map VkExtensionName VkExtension
31
32
33
+ data VkSpecialUse
34
+ = Cadsupport
35
+ | D3demulation
36
+ | Debugging
37
+ | Devtools
38
+ | Glemulation
39
+ deriving (Eq , Show )
32
40
33
41
data VkExtension
34
42
= VkExtension
@@ -50,6 +58,12 @@ data VkExtAttrs
50
58
, extPlatform :: Maybe VkPlatformName
51
59
-- ^ seems to be used in a similar way as extProtect
52
60
, extComment :: Maybe Text
61
+ , extDeprecatedby :: Maybe VkExtensionName
62
+ , extSpecialuse :: Maybe VkSpecialUse
63
+ , extPromotedto :: Maybe VkExtensionName
64
+ , extObsoletedby :: Maybe VkExtensionName
65
+ , extSortorder :: Maybe Int
66
+ , extProvisional :: Bool
53
67
} deriving Show
54
68
55
69
@@ -73,6 +87,38 @@ parseVkExtension =
73
87
(extReqExts extAttributes)
74
88
pure VkExtension {.. }
75
89
90
+ parseAttrVkExtensionName :: Name -> ReaderT ParseLoc AttrParser (Maybe VkExtensionName )
91
+ parseAttrVkExtensionName name = do
92
+ mdb <- lift $ attr name
93
+ case mdb of
94
+ Nothing -> pure Nothing
95
+ Just " " -> pure Nothing
96
+ Just db -> Just <$> toHaskellExt db
97
+
98
+ parseAttrVkExtensionSpeciause :: ReaderT ParseLoc AttrParser (Maybe VkSpecialUse )
99
+ parseAttrVkExtensionSpeciause = do
100
+ su <- lift $ attr " specialuse"
101
+ pure $ case su of
102
+ Just " cadsupport" -> Just Cadsupport
103
+ Just " d3demulation" -> Just D3demulation
104
+ Just " debugging" -> Just Debugging
105
+ Just " devtools" -> Just Devtools
106
+ Just " glemulation" -> Just Glemulation
107
+ _ -> Nothing
108
+
109
+ parseAttrVkExtensionSortorder :: ReaderT ParseLoc AttrParser (Maybe Int )
110
+ parseAttrVkExtensionSortorder = do
111
+ x <- lift $ attr " sortorder"
112
+ pure $ case decOrHex <$> x of
113
+ Just (Right (i, _)) -> Just (fromInteger i)
114
+ _ -> Nothing
115
+
116
+ parseAttrVkExtensionProvisional :: ReaderT ParseLoc AttrParser Bool
117
+ parseAttrVkExtensionProvisional = do
118
+ mr <- lift $ attr " provisional"
119
+ case T. toLower <$> mr of
120
+ Just " true" -> pure True
121
+ _ -> pure False
76
122
77
123
parseVkExtAttrs :: ReaderT ParseLoc AttrParser VkExtAttrs
78
124
parseVkExtAttrs = do
@@ -88,6 +134,12 @@ parseVkExtAttrs = do
88
134
extReqCore <- lift (attr " requiresCore" )
89
135
eextNumber <- decOrHex <$> forceAttr " number"
90
136
extComment <- lift $ attr " comment"
137
+ extDeprecatedby <- parseAttrVkExtensionName " deprecatedby"
138
+ extSpecialuse <- parseAttrVkExtensionSpeciause
139
+ extPromotedto <- parseAttrVkExtensionName " promotedto"
140
+ extObsoletedby <- parseAttrVkExtensionName " obsoletedby"
141
+ extSortorder <- parseAttrVkExtensionSortorder
142
+ extProvisional <- parseAttrVkExtensionProvisional
91
143
case eextNumber of
92
144
Left err -> parseFailed $ " Could not parse extension.number: " ++ err
93
145
Right (extNumber,_) -> pure VkExtAttrs {.. }
0 commit comments