-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | JavaScript analysis tools -- -- WebBits is a collection of libraries for working with JavaScript -- embeded in HTML files. Highlights include: -- -- @package WebBits @version 0.15 module BrownPLT.JavaScript.Lexer lexeme :: CharParser st a -> CharParser st a identifier :: CharParser st String reserved :: String -> CharParser st () operator :: CharParser st String reservedOp :: String -> CharParser st () charLiteral :: CharParser st Char stringLiteral :: CharParser st String natural :: CharParser st Integer integer :: CharParser st Integer float :: CharParser st Double naturalOrFloat :: CharParser st (Either Integer Double) decimal :: CharParser st Integer hexadecimal :: CharParser st Integer octal :: CharParser st Integer symbol :: String -> CharParser st String whiteSpace :: CharParser st () parens :: CharParser st a -> CharParser st a braces :: CharParser st a -> CharParser st a brackets :: CharParser st a -> CharParser st a squares :: CharParser st a -> CharParser st a semi :: CharParser st String comma :: CharParser st String colon :: CharParser st String dot :: CharParser st String identifierStart :: GenParser Char st Char -- | JavaScript's syntax. module BrownPLT.JavaScript.Syntax data Expression a StringLit :: a -> String -> Expression a RegexpLit :: a -> String -> Bool -> Bool -> Expression a NumLit :: a -> Double -> Expression a IntLit :: a -> Int -> Expression a BoolLit :: a -> Bool -> Expression a NullLit :: a -> Expression a ArrayLit :: a -> [Expression a] -> Expression a ObjectLit :: a -> [(Prop a, Expression a)] -> Expression a ThisRef :: a -> Expression a VarRef :: a -> (Id a) -> Expression a DotRef :: a -> (Expression a) -> (Id a) -> Expression a BracketRef :: a -> (Expression a) -> (Expression a) -> Expression a NewExpr :: a -> (Expression a) -> [Expression a] -> Expression a PostfixExpr :: a -> PostfixOp -> (Expression a) -> Expression a PrefixExpr :: a -> PrefixOp -> (Expression a) -> Expression a InfixExpr :: a -> InfixOp -> (Expression a) -> (Expression a) -> Expression a CondExpr :: a -> (Expression a) -> (Expression a) -> (Expression a) -> Expression a AssignExpr :: a -> AssignOp -> (Expression a) -> (Expression a) -> Expression a ParenExpr :: a -> (Expression a) -> Expression a ListExpr :: a -> [Expression a] -> Expression a CallExpr :: a -> (Expression a) -> [Expression a] -> Expression a FuncExpr :: a -> [(Id a)] -> (Statement a) -> Expression a data CaseClause a CaseClause :: a -> (Expression a) -> [Statement a] -> CaseClause a CaseDefault :: a -> [Statement a] -> CaseClause a data Statement a BlockStmt :: a -> [Statement a] -> Statement a EmptyStmt :: a -> Statement a ExprStmt :: a -> (Expression a) -> Statement a IfStmt :: a -> (Expression a) -> (Statement a) -> (Statement a) -> Statement a IfSingleStmt :: a -> (Expression a) -> (Statement a) -> Statement a SwitchStmt :: a -> (Expression a) -> [CaseClause a] -> Statement a WhileStmt :: a -> (Expression a) -> (Statement a) -> Statement a DoWhileStmt :: a -> (Statement a) -> (Expression a) -> Statement a BreakStmt :: a -> (Maybe (Id a)) -> Statement a ContinueStmt :: a -> (Maybe (Id a)) -> Statement a LabelledStmt :: a -> (Id a) -> (Statement a) -> Statement a ForInStmt :: a -> (ForInInit a) -> (Expression a) -> (Statement a) -> Statement a ForStmt :: a -> (ForInit a) -> (Maybe (Expression a)) -> (Maybe (Expression a)) -> (Statement a) -> Statement a TryStmt :: a -> (Statement a) -> [CatchClause a] -> (Maybe (Statement a)) -> Statement a ThrowStmt :: a -> (Expression a) -> Statement a ReturnStmt :: a -> (Maybe (Expression a)) -> Statement a WithStmt :: a -> (Expression a) -> (Statement a) -> Statement a VarDeclStmt :: a -> [VarDecl a] -> Statement a FunctionStmt :: a -> (Id a) -> [(Id a)] -> (Statement a) -> Statement a data InfixOp OpLT :: InfixOp OpLEq :: InfixOp OpGT :: InfixOp OpGEq :: InfixOp OpIn :: InfixOp OpInstanceof :: InfixOp OpEq :: InfixOp OpNEq :: InfixOp OpStrictEq :: InfixOp OpStrictNEq :: InfixOp OpLAnd :: InfixOp OpLOr :: InfixOp OpMul :: InfixOp OpDiv :: InfixOp OpMod :: InfixOp OpSub :: InfixOp OpLShift :: InfixOp OpSpRShift :: InfixOp OpZfRShift :: InfixOp OpBAnd :: InfixOp OpBXor :: InfixOp OpBOr :: InfixOp OpAdd :: InfixOp data CatchClause a CatchClause :: a -> (Id a) -> (Statement a) -> CatchClause a data VarDecl a VarDecl :: a -> (Id a) -> (Maybe (Expression a)) -> VarDecl a data JavaScript a -- | A script in script ... /script tags. This may seem a -- little silly, but the Flapjax analogue has an inline variant and -- attribute-inline variant. Script :: a -> [Statement a] -> JavaScript a data AssignOp OpAssign :: AssignOp OpAssignAdd :: AssignOp OpAssignSub :: AssignOp OpAssignMul :: AssignOp OpAssignDiv :: AssignOp OpAssignMod :: AssignOp OpAssignLShift :: AssignOp OpAssignSpRShift :: AssignOp OpAssignZfRShift :: AssignOp OpAssignBAnd :: AssignOp OpAssignBXor :: AssignOp OpAssignBOr :: AssignOp data Id a Id :: a -> String -> Id a data PrefixOp PrefixInc :: PrefixOp PrefixDec :: PrefixOp PrefixLNot :: PrefixOp PrefixBNot :: PrefixOp PrefixPlus :: PrefixOp PrefixMinus :: PrefixOp PrefixTypeof :: PrefixOp PrefixVoid :: PrefixOp PrefixDelete :: PrefixOp data PostfixOp PostfixInc :: PostfixOp PostfixDec :: PostfixOp data Prop a PropId :: a -> (Id a) -> Prop a PropString :: a -> String -> Prop a PropNum :: a -> Integer -> Prop a data ForInit a NoInit :: ForInit a VarInit :: [VarDecl a] -> ForInit a ExprInit :: (Expression a) -> ForInit a data ForInInit a ForInVar :: (Id a) -> ForInInit a ForInNoVar :: (Id a) -> ForInInit a unId :: Id a -> String instance Typeable1 Statement instance Typeable1 ForInInit instance Typeable1 ForInit instance Typeable1 VarDecl instance Typeable1 CatchClause instance Typeable1 CaseClause instance Typeable1 Expression instance Typeable1 Prop instance Typeable PostfixOp instance Typeable PrefixOp instance Typeable AssignOp instance Typeable InfixOp instance Typeable1 Id instance Typeable1 JavaScript instance Show a => Show (Statement a) instance Data a => Data (Statement a) instance Eq a => Eq (Statement a) instance Ord a => Ord (Statement a) instance Show a => Show (ForInInit a) instance Data a => Data (ForInInit a) instance Eq a => Eq (ForInInit a) instance Ord a => Ord (ForInInit a) instance Show a => Show (ForInit a) instance Data a => Data (ForInit a) instance Eq a => Eq (ForInit a) instance Ord a => Ord (ForInit a) instance Show a => Show (VarDecl a) instance Data a => Data (VarDecl a) instance Eq a => Eq (VarDecl a) instance Ord a => Ord (VarDecl a) instance Show a => Show (CatchClause a) instance Data a => Data (CatchClause a) instance Eq a => Eq (CatchClause a) instance Ord a => Ord (CatchClause a) instance Show a => Show (CaseClause a) instance Data a => Data (CaseClause a) instance Eq a => Eq (CaseClause a) instance Ord a => Ord (CaseClause a) instance Show a => Show (Expression a) instance Data a => Data (Expression a) instance Eq a => Eq (Expression a) instance Ord a => Ord (Expression a) instance Show a => Show (Prop a) instance Data a => Data (Prop a) instance Eq a => Eq (Prop a) instance Ord a => Ord (Prop a) instance Show PostfixOp instance Data PostfixOp instance Eq PostfixOp instance Ord PostfixOp instance Show PrefixOp instance Data PrefixOp instance Eq PrefixOp instance Ord PrefixOp instance Show AssignOp instance Data AssignOp instance Eq AssignOp instance Ord AssignOp instance Show InfixOp instance Data InfixOp instance Eq InfixOp instance Ord InfixOp instance Enum InfixOp instance Show a => Show (Id a) instance Eq a => Eq (Id a) instance Ord a => Ord (Id a) instance Data a => Data (Id a) instance Show a => Show (JavaScript a) instance Data a => Data (JavaScript a) instance Eq a => Eq (JavaScript a) instance Ord a => Ord (JavaScript a) module BrownPLT.JavaScript.Parser parseScript :: CharParser state (JavaScript SourcePos) parseExpression :: ExpressionParser st parseString :: String -> [Statement SourcePos] parseScriptFromString :: String -> String -> Either ParseError (JavaScript SourcePos) emptyParsedJavaScript :: JavaScript a type ParsedStatement = Statement SourcePos type ParsedExpression = Expression SourcePos parseJavaScriptFromFile :: MonadIO m => String -> m [Statement SourcePos] parseSimpleExpr' :: GenParser Char st ParsedExpression parseBlockStmt :: StatementParser st parseStatement :: StatementParser st type StatementParser state = CharParser state ParsedStatement type ExpressionParser state = CharParser state ParsedExpression parseAssignExpr :: ExpressionParser st -- | Pretty-printing JavaScript. module BrownPLT.JavaScript.PrettyPrint stmt :: Statement a -> Doc expr :: Expression a -> Doc javaScript :: JavaScript a -> Doc renderStatements :: [Statement a] -> String renderExpression :: Expression a -> String -- | Instances of Foldable and Traversable for JavaScript's -- syntax. module BrownPLT.JavaScript.Instances instance Traversable Statement instance Traversable ForInInit instance Traversable ForInit instance Traversable VarDecl instance Traversable CatchClause instance Traversable CaseClause instance Traversable Expression instance Traversable Prop instance Traversable Id instance Foldable Statement instance Foldable ForInInit instance Foldable ForInit instance Foldable VarDecl instance Foldable CatchClause instance Foldable CaseClause instance Foldable Expression instance Foldable Prop instance Foldable Id instance Functor Statement instance Functor ForInInit instance Functor ForInit instance Functor VarDecl instance Functor CatchClause instance Functor CaseClause instance Functor Expression instance Functor Prop instance Functor JavaScript instance Functor Id module BrownPLT.JavaScript.Environment env :: Map String SourcePos -> [Statement SourcePos] -> (EnvTree, Map String SourcePos) localVars :: [Statement SourcePos] -> [(String, SourcePos)] -- | The statically-determinate lexical structure of a JavaScript program. data EnvTree EnvTree :: (Map String SourcePos) -> [EnvTree] -> EnvTree -- | Datatypes for HTML parameterized over an annotation type and a script -- type. module BrownPLT.Html.Syntax type HtmlId = String type AttributeValue = String data Attribute a s Attribute :: HtmlId -> AttributeValue -> a -> Attribute a s AttributeExpr :: a -> HtmlId -> s -> String -> Attribute a s data Html a sc Element :: HtmlId -> [Attribute a sc] -> [Html a sc] -> a -> Html a sc Text :: String -> a -> Html a sc Comment :: String -> a -> Html a sc -- | must be a non-empty list HtmlSeq :: [Html a sc] -> Html a sc ProcessingInstruction :: String -> a -> Html a sc InlineScript :: sc -> a -> String -> Html a sc Script :: sc -> a -> Html a sc -- | A type t of the Script class can be parsed using -- Parsec. t is of kind '* -> *', as the parsed AST -- should be annotated with souce locations (see SourcePos). -- -- The big deal here is that we can embed a parser for some scripting -- language, (e.g. Javascript) into this HTML parser with ease, while -- preserving source locations. The Html datatype is parameterized over a -- script parser (an instance of Script). class Script t prettyPrintScript :: Script t => t -> Doc parseScriptBlock :: Script t => [Attribute SourcePos t] -> CharParser a t parseInlineScript :: Script t => Maybe (CharParser a t) parseAttributeScript :: Script t => Maybe (CharParser a t) -- | Returns the value of the attribute in the list, or Nothing if -- it doesn't exist of the value is an inline-expression. attributeValue :: HtmlId -> [Attribute a s] -> Maybe String attributeUpdate :: HtmlId -> (String -> String) -> [Attribute a s] -> [Attribute a s] attributeSet :: HtmlId -> String -> [Attribute a s] -> [Attribute a s] isAttributeExpr :: Attribute t t1 -> Bool instance Typeable2 Html instance Typeable2 Attribute instance (Show a, Show sc) => Show (Html a sc) instance (Eq a, Eq sc) => Eq (Html a sc) instance (Data a, Data sc) => Data (Html a sc) instance (Show a, Show s) => Show (Attribute a s) instance (Eq a, Eq s) => Eq (Attribute a s) instance (Data a, Data s) => Data (Attribute a s) -- | A structure-recovering parser for malformed documents. -- -- Copyright 2007-2008 Arjun Guha. Based on HtmlPrag 0.16 Copyright (C) -- 2003 - 2005 Neil W. Van Dyke. -- -- This program is Free Software; you can redistribute it and/or modify -- it under the terms of the GNU Lesser General Public License as -- published by the Free Software Foundation; either version 2.1 of the -- License, or (at your option) any later version. This program is -- distributed in the hope that it will be useful, but without any -- warranty; without even the implied warranty of merchantability or -- fitness for a particular purpose. See -- http://www.gnu.org/copyleft/lesser.html for details. For other -- license options and consulting, contact the author. module BrownPLT.Html.PermissiveParser html :: Script s => CharParser [Warning] (Html SourcePos s) parseHtmlFromFile :: Script s => String -> IO (Either ParseError (Html SourcePos s, [Warning])) parseHtmlFromString :: Script s => String -> String -> Either ParseError (Html SourcePos s, [Warning]) tokens :: Script s => CharParser [Warning] [Token s] data Script s => Token s instance Script s => Show (Token s) instance Show Warning -- | Pretty-printer for HTML. This modules exports no names. It only -- defines instances of PrettyPrintable for HTML. module BrownPLT.Html.PrettyPrint html :: Script s => Html a s -> Doc renderHtml :: Script s => Html a s -> String module BrownPLT.Html.Instances instance Traversable (Html a) instance Traversable (Attribute a) instance Foldable (Html a) instance Foldable (Attribute a) instance Functor (Html a) instance Functor (Attribute a) module BrownPLT.Html.RawScript data RawScript RawScript :: String -> RawScript parseFromFile :: Parser a -> SourceName -> IO (Either ParseError a) parseFromString :: String -> RawHtml type RawHtml = Html SourcePos RawScript instance Typeable RawScript instance Show RawScript instance Eq RawScript instance Data RawScript instance Script RawScript module BrownPLT.JavaScript.HtmlEmbedding type JsHtml a = Html SourcePos (JavaScript a) type ParsedJavaScript = JavaScript SourcePos type ParsedJsHtml = JsHtml SourcePos instance Script ParsedJavaScript -- | Re-exports commonly used modules. module BrownPLT.JavaScript renderStatements :: [Statement a] -> String renderExpression :: Expression a -> String -- | Crawls an HTML page for JavaScript module BrownPLT.JavaScript.Crawl getPageJavaScript :: ParsedJsHtml -> IO [ParsedStatement] instance Data SourcePos instance Typeable SourcePos -- | Rexports various modules of the HTML library. It's best to use this in -- lieu of selectively importing the following libraries. module BrownPLT.Html renderHtml :: Script s => Html a s -> String parseHtmlFromFile :: Script s => String -> IO (Either ParseError (Html SourcePos s, [Warning])) parseHtmlFromString :: Script s => String -> String -> Either ParseError (Html SourcePos s, [Warning])