Copyright | (c) William Yao 2017-2024 |
---|---|
License | BSD-3 |
Maintainer | williamyaoh@gmail.com |
Stability | experimental |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
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
Instances
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 #
Instances
IsString TagOpenSelector Source # | |
Defined in Text.HTML.Onama fromString :: String -> TagOpenSelector # |
data TagCloseSelector Source #
Instances
IsString TagCloseSelector Source # | |
Defined in Text.HTML.Onama fromString :: String -> TagCloseSelector # |
Instances
IsString AttrName Source # | |
Defined in Text.HTML.Onama fromString :: String -> AttrName # |
Instances
IsString AttrValue Source # | |
Defined in Text.HTML.Onama fromString :: String -> AttrValue # |
data AttrSelector Source #
Instances
IsString AttrSelector Source # | |
Defined in Text.HTML.Onama 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 #