packages feed

language-webidl 0.1.4.0 → 0.2.0.0

raw patch · 4 files changed

+53/−82 lines, 4 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Language.WebIDL.AST: ArgLegacycaller :: ArgumentNameKeyword
- Language.WebIDL.AST: Ccreator :: Special
- Language.WebIDL.AST: DefException :: (Exception a) -> Definition a
- Language.WebIDL.AST: Legacycaller :: Special
- Language.WebIDL.AST: TypeSuffixArray :: TypeSuffix
- Language.WebIDL.AST: TypeSuffixNone :: TypeSuffix
- Language.WebIDL.AST: TypeSuffixNullable :: TypeSuffix
- Language.WebIDL.AST: UnionTyAny :: TypeSuffix -> UnionMemberType
- Language.WebIDL.AST: data TypeSuffix
- Language.WebIDL.AST: instance GHC.Classes.Eq Language.WebIDL.AST.TypeSuffix
- Language.WebIDL.AST: instance GHC.Show.Show Language.WebIDL.AST.TypeSuffix
- Language.WebIDL.PPrint: instance Text.PrettyPrint.Leijen.Pretty (Language.WebIDL.AST.Exception a)
- Language.WebIDL.PPrint: instance Text.PrettyPrint.Leijen.Pretty Language.WebIDL.AST.TypeSuffix
- Language.WebIDL.Parser: [_comment] :: Tag -> [String]
- Language.WebIDL.Parser: pException :: MyParser (Exception Tag)
- Language.WebIDL.Parser: pExceptionMember :: MyParser (ExceptionMember Tag)
- Language.WebIDL.Parser: pTypeSuffix :: MyParser TypeSuffix
+ Language.WebIDL.AST: ArgLegacyCaller :: ArgumentNameKeyword
+ Language.WebIDL.AST: LegacyCaller :: Special
+ Language.WebIDL.Parser: BlockComment :: String -> Comment
+ Language.WebIDL.Parser: LineComment :: String -> Comment
+ Language.WebIDL.Parser: [_comments] :: Tag -> [Comment]
+ Language.WebIDL.Parser: data Comment
+ Language.WebIDL.Parser: instance GHC.Show.Show Language.WebIDL.Parser.Comment
+ Language.WebIDL.Parser: pIdent :: ParsecT String u Identity Ident
+ Language.WebIDL.Parser: pParenComma :: MyParser a -> MyParser [a]
+ Language.WebIDL.Parser: pString :: MyParser String
+ Language.WebIDL.Parser: pStringEnds :: String -> MyParser String
+ Language.WebIDL.Parser: parens :: ParsecT String u Identity a -> ParsecT String u Identity a
+ Language.WebIDL.Parser: spaces :: Stream s m Char => ParsecT s u m ()
+ Language.WebIDL.Parser: string :: Stream s m Char => String -> ParsecT s u m String
- Language.WebIDL.AST: STyAny :: TypeSuffix -> SingleType
+ Language.WebIDL.AST: STyAny :: (Maybe Null) -> SingleType
- Language.WebIDL.AST: TyDOMString :: TypeSuffix -> NonAnyType
+ Language.WebIDL.AST: TyDOMString :: (Maybe Null) -> NonAnyType
- Language.WebIDL.AST: TyDate :: TypeSuffix -> NonAnyType
+ Language.WebIDL.AST: TyDate :: (Maybe Null) -> NonAnyType
- Language.WebIDL.AST: TyIdent :: Ident -> TypeSuffix -> NonAnyType
+ Language.WebIDL.AST: TyIdent :: Ident -> (Maybe Null) -> NonAnyType
- Language.WebIDL.AST: TyObject :: TypeSuffix -> NonAnyType
+ Language.WebIDL.AST: TyObject :: (Maybe Null) -> NonAnyType
- Language.WebIDL.AST: TyPrim :: PrimitiveType -> TypeSuffix -> NonAnyType
+ Language.WebIDL.AST: TyPrim :: PrimitiveType -> (Maybe Null) -> NonAnyType
- Language.WebIDL.AST: TyUnionType :: UnionType -> TypeSuffix -> Type
+ Language.WebIDL.AST: TyUnionType :: UnionType -> (Maybe Null) -> Type
- Language.WebIDL.AST: UnionTy :: UnionType -> TypeSuffix -> UnionMemberType
+ Language.WebIDL.AST: UnionTy :: UnionType -> (Maybe Null) -> UnionMemberType
- Language.WebIDL.Parser: Tag :: [String] -> SourcePos -> Tag
+ Language.WebIDL.Parser: Tag :: [Comment] -> SourcePos -> Tag

Files

language-webidl.cabal view
@@ -1,8 +1,9 @@ name:               language-webidl-version:            0.1.4.0+version:            0.2.0.0 synopsis:           Parser and Pretty Printer for WebIDL description:-    Written with parsec and wl-pprint.+    Written with parsec and wl-pprint. Functor AST.+    Reusable node parser.     See <http://www.w3.org/TR/WebIDL/> for reference. license:             MIT license-file:        LICENSE
src/Language/WebIDL/AST.hs view
@@ -13,7 +13,6 @@ data Definition a = DefInterface (Interface a)                   | DefPartial (Partial a)                   | DefDictionary (Dictionary a)-                  | DefException (Exception a)                   | DefEnum (Enum a)                   | DefTypedef (Typedef a)                   | DefCallback (Callback a)@@ -111,34 +110,33 @@ -- | Special qualifier data Special = Getter               | Setter -             | Ccreator               | Deleter -             | Legacycaller+             | LegacyCaller              deriving (Show, Eq)  -- | Argument name keyword data ArgumentNameKeyword = ArgAttribute    | ArgCallback    | ArgConst        | ArgCreator                          | ArgDeleter      | ArgDictionary  | ArgEnum         | ArgException                          | ArgGetter       | ArgImplements  | ArgInherit      | ArgInterface-                         | ArgLegacycaller | ArgPartial     | ArgSetter       | ArgStatic+                         | ArgLegacyCaller | ArgPartial     | ArgSetter       | ArgStatic                          | ArgStringifier  | ArgTypedef     | ArgUnrestricted                          deriving (Show, Eq)  -- | Types-data Type = TySingleType SingleType | TyUnionType UnionType TypeSuffix deriving (Show, Eq)+data Type = TySingleType SingleType | TyUnionType UnionType (Maybe Null) deriving (Show, Eq)  -- | Single type data SingleType = STyNonAny NonAnyType-                | STyAny TypeSuffix+                | STyAny (Maybe Null)                 deriving (Show, Eq)  -- | Types that is not @any@-data NonAnyType = TyPrim PrimitiveType TypeSuffix-                | TyDOMString TypeSuffix-                | TyIdent Ident TypeSuffix+data NonAnyType = TyPrim PrimitiveType (Maybe Null)+                | TyDOMString (Maybe Null)+                | TyIdent Ident (Maybe Null)                 | TySequence Type (Maybe Null)-                | TyObject TypeSuffix-                | TyDate TypeSuffix+                | TyObject (Maybe Null)+                | TyDate (Maybe Null)                 deriving (Show, Eq)  -- | Primitive type@@ -158,12 +156,6 @@ -- | @unsigned@ modifier data Unsigned = Unsigned deriving (Show, Eq) --- | Suffix of type-data TypeSuffix = TypeSuffixArray-                | TypeSuffixNullable-                | TypeSuffixNone-                deriving (Show, Eq)- -- | Float type data FloatType = TyFloat (Maybe Unrestricted)                | TyDouble (Maybe Unrestricted)@@ -173,9 +165,8 @@ type UnionType = [UnionMemberType]  -- | Union member type-data UnionMemberType = UnionTy UnionType TypeSuffix +data UnionMemberType = UnionTy UnionType (Maybe Null)                      | UnionTyNonAny NonAnyType-                     | UnionTyAny TypeSuffix                      deriving (Show, Eq)  -- | Return value's type
src/Language/WebIDL/PPrint.hs view
@@ -19,7 +19,6 @@     pretty (DefInterface x) = pretty x     pretty (DefPartial x) = pretty x     pretty (DefDictionary x) = pretty x-    pretty (DefException x) = pretty x     pretty (DefEnum x) = pretty x     pretty (DefTypedef x) = pretty x     pretty (DefImplementsStatement x) = pretty x@@ -31,7 +30,7 @@  instance Pretty (Callback a) where     pretty (Callback _ f retty args) = text "callback" <+> pretty f <+>-                                       equals <+> pretty retty <+> prettyParenList args+                                       equals <+> pretty retty <+> prettyParenList args <> semi  prettyExtAttrs :: [ExtendedAttribute a] -> Doc -> Doc prettyExtAttrs [] _ = empty@@ -49,10 +48,6 @@  prettyInherit x = prettyMaybe x (\e -> colon <+> pretty e) -instance Pretty (Exception a) where-    pretty (Exception _ x mInherit members) =-        text "exception" <+> pretty x <+> prettyInherit mInherit <+> scope members <> semi- instance Pretty (Partial a) where     pretty (PartialInterface _ x members) =         text "interface" <+> pretty x <+> scope members <> semi@@ -80,21 +75,21 @@  instance Pretty Type where     pretty (TySingleType s) = pretty s-    pretty (TyUnionType ut suffix) = prettyUnionType ut <> pretty suffix+    pretty (TyUnionType ut mNull) = prettyUnionType ut <> prettyMaybe mNull pretty  prettyUnionType ut = parens (hcat (punctuate (space <> text "or" <> space) (map pretty ut)))  instance Pretty SingleType where     pretty (STyNonAny t) = pretty t-    pretty (STyAny suffix) = text "any" <> pretty suffix+    pretty (STyAny mNull) = text "any" <> prettyMaybe mNull pretty  instance Pretty NonAnyType where-    pretty (TyPrim t suffix) = pretty t <> pretty suffix-    pretty (TyDOMString suffix) = text "DOMString" <> pretty suffix-    pretty (TyIdent ident suffix) = pretty ident <> pretty suffix+    pretty (TyPrim t mNull) = pretty t <> prettyMaybe mNull pretty+    pretty (TyDOMString mNull) = text "DOMString" <> prettyMaybe mNull pretty+    pretty (TyIdent ident mNull) = pretty ident <> prettyMaybe mNull pretty     pretty (TySequence t mNull) = text "sequence" <> angles (pretty t) <> prettyMaybe mNull pretty-    pretty (TyObject suffix) = text "object" <> pretty suffix-    pretty (TyDate suffix) = text "Date" <> pretty suffix+    pretty (TyObject mNull) = text "object" <> prettyMaybe mNull pretty+    pretty (TyDate mNull) = text "Date" <> prettyMaybe mNull pretty   instance Pretty (DictionaryMember a) where@@ -114,11 +109,6 @@ instance Pretty Null where     pretty Null = text "?" -instance Pretty TypeSuffix where-    pretty TypeSuffixArray = text "[]"-    pretty TypeSuffixNullable = text "?"-    pretty TypeSuffixNone = empty- instance Pretty PrimitiveType where     pretty (PrimIntegerType t) = pretty t     pretty (PrimFloatType t)   = pretty t@@ -144,9 +134,8 @@     pretty Unsigned = text "unsigned"  instance Pretty UnionMemberType where-    pretty (UnionTy ut suffix) = pretty ut <> pretty suffix+    pretty (UnionTy ut mNull) = pretty ut <> prettyMaybe mNull pretty     pretty (UnionTyNonAny t) = pretty t-    pretty (UnionTyAny suffix) = text "any" <> pretty suffix  instance Pretty EnumValue where     pretty (EnumValue s) = text s@@ -189,7 +178,7 @@     pretty ArgImplements = text "implements"     pretty ArgInherit = text "inherit"     pretty ArgInterface   = text "interface"-    pretty ArgLegacycaller = text "legacycaller"+    pretty ArgLegacyCaller = text "legacycaller"     pretty ArgPartial = text "partial"     pretty ArgSetter = text "setter"     pretty ArgStatic  = text "static"@@ -209,9 +198,8 @@ instance Pretty Special where     pretty Getter = text "getter"     pretty Setter = text "setter"-    pretty Ccreator = text "ccreator"     pretty Deleter = text "deleter"-    pretty Legacycaller = text "legacycaller"+    pretty LegacyCaller = text "legacycaller"   instance Pretty (Attribute a) where
src/Language/WebIDL/Parser.hs view
@@ -4,12 +4,13 @@ -}  module Language.WebIDL.Parser (-  Tag(..), MyParser, ParserState, parseIDL, tryParse, pDef, pExtAttrs, pExtAttr, pPartial, pDictionary,-  pInterface, pException, pInheritance, pEnum, pEnumValues, pTypedef, pImplementsStatement,-  pDictionaryMember, pExceptionMember, pMaybeIdent, pInterfaceMember, pConst, pConstType,+  Tag(..), MyParser, ParserState, Comment(..), parseIDL, tryParse, pDef, pExtAttrs, pExtAttr, pPartial, pDictionary,+  pInterface, pInheritance, pEnum, pEnumValues, pTypedef, pImplementsStatement,+  pDictionaryMember, pMaybeIdent, pInterfaceMember, pConst, pConstType,   pAttribute, pOperation, pArg, pArgumentName, pArgumentNameKeyword, pDefault, pQualifier,   pSpecial, pReturnType, pConstValue, pBool, pNull, pPrimTy, pIntegerType, pUnsigned, pFloatType,-  pType, pSingleType, pNonAnyType, pTypeSuffix, pUnionType, pUnionMemberType ) where+  pType, pSingleType, pNonAnyType, pUnionType, pUnionMemberType,+  pIdent, spaces, pParenComma, pString, pStringEnds, string, parens) where  import Language.WebIDL.AST import Prelude hiding (Enum)@@ -18,13 +19,15 @@ import Text.Parsec (modifyState, SourcePos, getPosition, getState, putState, sourceLine) import qualified Text.Parsec.Token as Tok +data Comment = LineComment String | BlockComment String deriving Show+ data ParserState = ParserState {-  _comments :: [String]+  _comments' :: [Comment] }  -- | Tag of source data Tag = Tag {-  _comment :: [String],+  _comments  :: [Comment],   _sourcePos :: SourcePos } @@ -32,9 +35,7 @@   (==) _ _ = True  instance Show Tag where-    show (Tag comments pos) =-      let line = if length comments > 0 then take 5 (head comments) ++ "..., " else ""-      in  "(" ++ line ++ show (sourceLine pos) ++ ")"+    show (Tag comment pos) = show comment ++ "(" ++ show (sourceLine pos) ++ ")"  initState :: ParserState initState = ParserState []@@ -53,7 +54,6 @@    <|> DefCallback <$> pCallback    <|> DefPartial <$> pPartial    <|> DefDictionary <$> pDictionary-   <|> DefException <$> pException    <|> DefEnum <$> pEnum    <|> DefTypedef <$> pTypedef    <|> DefImplementsStatement <$> pImplementsStatement@@ -62,7 +62,7 @@ pCallback = Callback <$> (string "callback" *> pSpaces *> getTag)                      <*> pIdent                      <*> (pEq *> pReturnType <* pSpaces)-                     <*> pParenComma pArg+                     <*> pParenComma pArg <* semi  pExtAttrs :: MyParser [ExtendedAttribute Tag] pExtAttrs = try (brackets (pSpaces *> sepBy (pExtAttr <* pSpaces) (char ',' <* pSpaces)))@@ -91,10 +91,6 @@ pInterface = Interface <$> getTag <*> pExtAttrs <*> (string "interface" *> pSpaces *> pIdent)                        <*> pInheritance <*> braces (pSpaces *> many (pInterfaceMember <* pSpaces)) <* semi -pException :: MyParser (Exception Tag)-pException = Exception <$> getTag <*> (string "exception" *> pSpaces *> pIdent)-                          <*> pInheritance <*> braces (many pExceptionMember)- pInheritance :: MyParser (Maybe Ident) pInheritance = optionMaybe (spaces *> char ':'  *> spaces *> pIdent) @@ -123,10 +119,6 @@ pDictionaryMember = DictionaryMember <$> getTag <*> pType <* pSpaces                                      <*> pIdent <*> pDefault <* semi -pExceptionMember :: MyParser (ExceptionMember Tag)-pExceptionMember =  ExConst <$> getTag <*> pConst-                <|> ExField <$> getTag <*> pType <*> pIdent <* semi- pMaybeIdent :: MyParser (Maybe Ident) pMaybeIdent = optionMaybe pIdent @@ -179,7 +171,7 @@                     <|> string "implements" *> return ArgImplements                     <|> string "inherit" *> return ArgInherit                     <|> string "interface" *> return ArgInterface  -                    <|> string "legacycaller" *> return ArgLegacycaller+                    <|> string "legacycaller" *> return ArgLegacyCaller                     <|> string "partial" *> return ArgPartial                     <|> string "setter" *> return ArgSetter                     <|> string "static" *> return ArgStatic @@ -203,9 +195,8 @@ pSpecial :: MyParser Special pSpecial = string "getter" *> return Getter        <|> string "setter" *> return Setter-       <|> string "ccreator" *> return Ccreator        <|> string "deleter" *> return Deleter-       <|> string "legacycaller" *> return Legacycaller+       <|> string "legacycaller" *> return LegacyCaller  pReturnType :: MyParser ReturnType pReturnType = string "void" *> return RetVoid@@ -248,33 +239,27 @@  pType :: MyParser Type pType =  TySingleType <$> pSingleType-     <|> TyUnionType <$> pUnionType <*> pTypeSuffix+     <|> TyUnionType <$> pUnionType <*> pNull  pSingleType :: MyParser SingleType-pSingleType =  STyAny <$> (string "any" *> pTypeSuffix)+pSingleType =  STyAny <$> (string "any" *> pNull)            <|> STyNonAny <$> pNonAnyType  pNonAnyType :: MyParser NonAnyType-pNonAnyType =  try (TyPrim <$> pPrimTy <*> pTypeSuffix)+pNonAnyType =  try (TyPrim <$> pPrimTy <*> pNull)            <|> TySequence <$> (string "sequence" *> pSpaces *> angles pType) <*> pNull-           <|> TyObject <$> (string "object" *> pTypeSuffix)-           <|> try (TyDOMString <$> (string "DOMString" *> pTypeSuffix))-           <|> try (TyDate <$> (string "Date" *> pTypeSuffix))-           <|> TyIdent <$> pIdent <*> pTypeSuffix--pTypeSuffix :: MyParser TypeSuffix-pTypeSuffix =  try (string "[]" *> return TypeSuffixArray)-           <|> try (char '?' *> return TypeSuffixNullable)-           <|> return TypeSuffixNone+           <|> TyObject <$> (string "object" *> pNull)+           <|> try (TyDOMString <$> (string "DOMString" *> pNull))+           <|> try (TyDate <$> (string "Date" *> pNull))+           <|> TyIdent <$> pIdent <*> pNull  -- FIXME: Not working correctly currently pUnionType :: MyParser UnionType pUnionType = parens (sepBy1 pUnionMemberType (spaces *> string "or" <* spaces))  pUnionMemberType :: MyParser UnionMemberType-pUnionMemberType =  UnionTy <$> pUnionType <*> pTypeSuffix+pUnionMemberType =  UnionTy <$> pUnionType <*> pNull                 <|> UnionTyNonAny <$> pNonAnyType-                <|> UnionTyAny <$> (string "any []" *> pTypeSuffix)  lexer = Tok.makeTokenParser emptyDef @@ -297,12 +282,12 @@ pLineComment = do   _ <- string "//"   comment <- manyTill anyChar (try newline)-  modifyState (\ps -> ParserState { _comments = _comments ps ++ [comment]})+  modifyState (\ps -> ParserState { _comments' = _comments' ps ++ [LineComment comment]})  pBlockComment = do   _ <- string "/*"   comment <- manyTill anyChar (try (string "*/"))-  modifyState (\ps -> ParserState { _comments = _comments ps ++ lines comment})+  modifyState (\ps -> ParserState { _comments' = _comments' ps ++ [BlockComment comment]})  getTag :: MyParser Tag getTag = do@@ -313,3 +298,9 @@  pParenComma :: MyParser a -> MyParser [a] pParenComma p = parens (pSpaces *> sepBy (p <* pSpaces) (char ',' <* pSpaces))++pString :: MyParser String+pString = many anyChar++pStringEnds :: String -> MyParser String+pStringEnds s = manyTill anyChar (try (string s))