A tree of Tag values.
Moduletagsoup-0.14.8Haskell2010
Text.HTML.TagSoup.Tree
NOTE: This module is preliminary and may change at a future date.
This module is intended to help converting a list of tags into a tree of tags.
- 3 types
- 8 values
- Packagetagsoup-0.14.8
- Exports11
- LanguageHaskell2010
- LicenceBSD-3-Clause
- SourceTree.hs
Convert a list of tags into a tree. This version is not lazy at all, that is saved for version 2.
Build a TagTree from a string.
Build a TagTree from a string, specifying the ParseOptions.
These options control how parseTags works. The ParseOptions type is usually generated by one of
parseOptions, parseOptionsFast or parseOptionsEntities, then selected fields may be overriden.
The options optTagPosition and optTagWarning specify whether to generate
TagPosition or TagWarning elements respectively. Usually these options should be set to False
to simplify future stages, unless you rely on position information or want to give malformed HTML
messages to the end user.
The options optEntityData and optEntityAttrib control how entities, for example are handled.
Both take a string, and a boolean, where True indicates that the entity ended with a semi-colon ;.
Inside normal text optEntityData will be called, and the results will be inserted in the tag stream.
Inside a tag attribute optEntityAttrib will be called, and the first component of the result will be used
in the attribute, and the second component will be appended after the TagOpen value (usually the second
component is []). As an example, to not decode any entities, pass:
parseOptions
{optEntityData=\(str,b) -> [TagText $ "&" ++ str ++ [';' | b]]
,optEntityAttrib\(str,b) -> ("&" ++ str ++ [';' | b], [])Constructors
ParseOptionsoptTagPosition :: BoolShould TagPosition values be given before some items (default=False,fast=False).
optTagWarning :: BoolShould TagWarning values be given (default=False,fast=False)
optEntityData :: (str, Bool) -> [Tag str]How to lookup an entity (Bool = has ending
';')optEntityAttrib :: (str, Bool) -> (str, [Tag str])How to lookup an entity in an attribute (Bool = has ending
';'?)optTagTextMerge :: BoolRequire no adjacent TagText values (default=True,fast=False)
Render a TagTree.
Render a TagTree with some RenderOptions.
These options control how renderTags works.
The strange quirk of only minimizing <br> tags is due to Internet Explorer treating
<br></br> as <br><br>.
Constructors
RenderOptionsoptEscape :: str -> strEscape a piece of text (default = escape the four characters
&"<>)optMinimize :: str -> BoolMinimise <b></b> -> <b/> (default = minimise only
<br>tags)optRawTag :: str -> BoolShould a tag be output with no escaping (default = true only for
script)
This operation is based on the Uniplate transform function. Given a
list of trees, it applies the function to every tree in a bottom-up
manner. This operation is useful for manipulating a tree - for example
to make all tag names upper case:
upperCase = transformTree f
where f (TagBranch name atts inner) = [TagBranch (map toUpper name) atts inner]
f x = [x]This operation is based on the Uniplate universe function. Given a
list of trees, it returns those trees, and all the children trees at
any level. For example:
universeTree
[TagBranch "a" [("href","url")] [TagBranch "b" [] [TagLeaf (TagText "text")]]]
== [TagBranch "a" [("href","url")] [TagBranch "b" [] [TagLeaf (TagText "text")]]]
,TagBranch "b" [] [TagLeaf (TagText "text")]]This operation is particularly useful for queries. To collect all "a"
tags in a tree, simply do:
[x | x@(TagBranch "a" _ _) <- universeTree tree]