Copyright | (c) William Yao 2017-2024 |
---|---|
License | BSD-3 |
Maintainer | williamyaoh@gmail.com |
Stability | experimental |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Text.HTML.Onama
Description
Some extra primitives to parse HTMl with Parsec.
You'll still need to import Text.Parsec along with this library. These
primitives will work with all the combinators from Parsec. Note that you'll
need to override Parsec's satisfies
, since that one only works on
character streams (for some reason).
testParser = dp tagOpen "b" bolded <- text tagClose "b"
testParser2 = do tagClose "div" tagOpen "p" inner <- text tagClose "p"
Synopsis
- data Tag str
- type Position = (Row, Column)
- parseTags :: StringLike str => str -> [Tag str]
- tag :: (Monad m, Show str) => ParsecT [Tag str] u m (Tag str)
- satisfy :: (Monad m, Show str) => (Tag str -> Bool) -> ParsecT [Tag str] u m (Tag str)
- data TagOpenSelector
- data TagCloseSelector
- newtype AttrName = AttrName String
- data AttrValue
- data AttrSelector = AttrSelector AttrName AttrValue
- (@:) :: TagOpenSelector -> [AttrSelector] -> TagOpenSelector
- (@=) :: AttrName -> AttrValue -> AttrSelector
- tagOpen_ :: (Monad m, StringLike str, Show str) => TagOpenSelector -> ParsecT [Tag str] u m (Tag str)
- tagOpen :: (Monad m, StringLike str, Show str) => TagOpenSelector -> ParsecT [Tag str] u m (Tag str)
- tagClose_ :: (Monad m, StringLike str, Show str) => TagCloseSelector -> ParsecT [Tag str] u m (Tag str)
- tagClose :: (Monad m, StringLike str, Show str) => TagCloseSelector -> ParsecT [Tag str] u m (Tag str)
- tagText :: (Monad m, Show str) => ParsecT [Tag str] u m str
- voidElement :: (Monad m, StringLike str, Show str) => ParsecT [Tag str] u m (Tag str)
- balancedTags :: (Monad m, StringLike str, Show str) => TagOpenSelector -> ParsecT [Tag str] u m [Tag str]
- anyOpenTag :: TagOpenSelector
- anyCloseTag :: TagCloseSelector
- anyValue :: AttrValue
- innerText :: StringLike str => [Tag str] -> str
- skip :: Stream s m t => ParsecT s u m a -> ParsecT s u m ()
Documentation
parseTags :: StringLike str => str -> [Tag str] Source #
Return a list of tags parsed from some sort of string. This list should then get fed into an Onama parser.
tag :: (Monad m, Show str) => ParsecT [Tag str] u m (Tag str) Source #
Primitive. Return the next input tag. All other primitive parsers should be implemented in terms of this.
satisfy :: (Monad m, Show str) => (Tag str -> Bool) -> ParsecT [Tag str] u m (Tag str) Source #
Create a parser which parses a single HTML tag if it passes the given predicate. Return the parsed tag.
data TagOpenSelector Source #
Constructors
AnyOpenTag [AttrSelector] | |
TagOpenSelector String [AttrSelector] |
Instances
IsString TagOpenSelector Source # | |
Defined in Text.HTML.Onama Methods fromString :: String -> TagOpenSelector # |
data TagCloseSelector Source #
Constructors
AnyCloseTag | |
TagCloseSelector String |
Instances
IsString TagCloseSelector Source # | |
Defined in Text.HTML.Onama Methods fromString :: String -> TagCloseSelector # |
Instances
IsString AttrName Source # | |
Defined in Text.HTML.Onama Methods fromString :: String -> AttrName # |
Instances
IsString AttrValue Source # | |
Defined in Text.HTML.Onama Methods fromString :: String -> AttrValue # |
data AttrSelector Source #
Constructors
AttrSelector AttrName AttrValue |
Instances
IsString AttrSelector Source # | |
Defined in Text.HTML.Onama Methods fromString :: String -> AttrSelector # |
(@:) :: TagOpenSelector -> [AttrSelector] -> TagOpenSelector Source #
tagOpen_ :: (Monad m, StringLike str, Show str) => TagOpenSelector -> ParsecT [Tag str] u m (Tag str) Source #
tagOpen :: (Monad m, StringLike str, Show str) => TagOpenSelector -> ParsecT [Tag str] u m (Tag str) Source #
tagClose_ :: (Monad m, StringLike str, Show str) => TagCloseSelector -> ParsecT [Tag str] u m (Tag str) Source #
tagClose :: (Monad m, StringLike str, Show str) => TagCloseSelector -> ParsecT [Tag str] u m (Tag str) Source #
voidElement :: (Monad m, StringLike str, Show str) => ParsecT [Tag str] u m (Tag str) Source #
Certain HTML elements are self closing. In addition, they can show up without their closing slash. For these, we just want to go over their opening tag. These elements are void, according to the W3C spec: https://www.w3.org/TR/2012/WD-html-markup-20121025/syntax.html#syntax-elements
- area
- base
- br
- col
- command
- embed
- hr
- img
- input
- keygen
- link
- meta
- param
- source
- track
- wbr
balancedTags :: (Monad m, StringLike str, Show str) => TagOpenSelector -> ParsecT [Tag str] u m [Tag str] Source #
innerText :: StringLike str => [Tag str] -> str Source #