-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Lazy wrapper to HaXML, HXT, TagSoup via custom XML tree structure
--
-- This is a wrapper to HaXML and HXT (Haskell XML Toolbox). It's my
-- work-around for the unfortunate situation that both toolboxes have
-- different functionality, none is the superset of the other. Both of
-- them rely on data structures, which look unnatural to me. Additionally
-- they provide combinator functions that are actually weakly typed, they
-- are all of type (a -> [a]), instead of being
-- differentiated into (a -> Bool), (a -> a) and
-- (a -> [a]). HXT is even weaker in type safety than HaXML
-- since it allows complete XML trees even in attribute values. I didn't
-- want to write another XML toolbox with parsers, HTML support and so
-- on, however in the meantime I came close to it.
--
-- I decided to do some wrapping in order to use as much as possible
-- functionality from HaXML and HXT. I provide my own XML tree data
-- structure with according operations. Conversions between HaXML or HXT
-- trees and my own ones are implemented. So I can use the parser and
-- pretty printer of both HaXML and HXT while processing trees the way I
-- find more natural. TagSoups can also be converted to XML trees. All
-- conversions are lazy.
--
-- I have a special XML string structure. (Text.XML.WraXML.String)
-- XML strings consist of ASCII characters and XML references. My XML
-- tree is built on top of a very general tree structure, which
-- distinguishs between leafs and inner branches.
-- (Data.Tree.BranchLeafLabel) Each element of a tree is labeled
-- with some information. Branches are then used for tags, leafs for XML
-- strings and special tags, and the labels for pointers to positions in
-- the source file. (Text.XML.WraXML.Tree)
@package wraxml
@version 0.4.2
-- | Conversion from HaXml position to our Position type. We cannot convert
-- back efficiently, since we would have to increment the line number
-- repeatedly. Thus such a conversion is missing.
module Text.XML.WraXML.Position.HaXml
toPosition :: Posn -> T
module Text.HTML.WraXML.Entity
type Name = String
mapNameToChar :: Map Name Char
mapCharToName :: Map Char Name
module Text.XML.WraXML.String
type T = [Atom]
type EmbeddedExceptions = [Exceptional String Char]
type Atom = T
-- | Literal translation from pure strings. This can only work, if the
-- string does not contain special characters.
fromString :: String -> T
diffFromString :: String -> T -> T
-- | default routine
fromUnicodeString :: String -> T
toUnicodeStringOrFormat :: T -> String
toUnicodeStringEmbedMessage :: T -> String
-- | Errors in on resolution of references yield undefined elements.
toUnicodeString :: T -> String
toUnicodeStringEmbedException :: T -> EmbeddedExceptions
-- | Interpret the XML string as mixture of ISO-Latin-1 characters and XML
-- entities and convert that to a Unicode string.
isoLatin1ToUnicodeString :: T -> String
-- | Interpret the XML string as mixture of UTF-8 characters and XML
-- entities and convert that to a Unicode string.
utf8ToUnicodeString :: T -> String
readHex :: (Num a) => String -> a
-- | Caution: There is a memory leak for the case that entity references
-- are huge.
parse :: String -> T
parseAux :: (Char -> Bool) -> (String -> T) -> String -> String -> T
reduceRefs :: T -> T
-- | Consider the XmlString as a mixture of XML entities and UTF-8
-- characters. Replace UTF-8 characters by Unicode representations.
replaceUTF8ByUnicode :: T -> T
mapUnicodeRuns :: (String -> String) -> T -> T
uStringWithErrorsMergePlainChars :: EmbeddedExceptions -> [Exceptional String String]
liftFromUnicode :: (String -> String) -> (T -> T)
liftFromUnicodeA :: (Applicative m) => (String -> m String) -> (T -> m T)
module Text.HTML.WraXML.String
type T = [Atom]
type Atom = T
-- | Literal translation from pure strings. This can only work, if the
-- string does not contain special characters.
fromString :: String -> T
-- | default routine
fromUnicodeString :: String -> T
fromUnicodeStringInternetExploder :: String -> T
toUnicodeStringOrFormat :: T -> String
toUnicodeString :: T -> String
-- | Decode plain characters using the given decoder, and decode entities
-- by HXT's XML entity table. Decoding errors for both conversions are
-- embedded where they occur.
toUnicodeStringDecodingEmbedError :: DecodingFctEmbedErrors -> T -> EmbeddedExceptions
-- | Convert characters to lower case. This uses ISO latin encoding and may
-- fail for exotic characters.
toLower :: T -> T
toUpper :: T -> T
toCanonicalUnicodeString :: T -> String
equalIgnoreCase :: T -> T -> Bool
elemIgnoreCase :: T -> [T] -> Bool
module Text.XML.WraXML.String.HaXml
toXmlString :: AttValue -> T
fromXmlString :: T -> AttValue
lift :: (T -> T) -> (AttValue -> AttValue)
refToXmlAtom :: Reference -> Atom
charFromXmlAtom' :: T -> Either Char Reference
charFromXmlAtom :: T -> Either Char Reference
module Text.XML.WraXML.String.HXT
toXmlString :: XmlTrees -> T
toXmlString' :: XmlTree -> T
fromXmlString :: T -> XmlTrees
module Text.XML.WraXML.Element
data T name str
Cons :: Name name -> [T name str] -> T name str
name_ :: T name str -> Name name
attributes_ :: T name str -> [T name str]
type Filter name str = T name str -> T name str
cons :: (Tag name, Attribute name) => Name name -> [T name str] -> T name str
name :: T (T name str) (Name name)
attributes :: T (T name str) [T name str]
checkName :: (Name name -> Bool) -> (T name str -> Bool)
checkAttributes :: ([T name str] -> Bool) -> (T name str -> Bool)
lift :: (Name name -> [T name str] -> (Name name, [T name str])) -> (Filter name str)
-- | process the attribute list of a specific tag
processAttrs :: (Tag name, Attribute name) => (Name name -> Bool) -> ([T name str] -> [T name str]) -> (Filter name str)
processAttrValue :: (Tag name, Attribute name) => (Name name, Name name) -> (str -> str) -> (Filter name str)
processAttrValueCond :: (Tag name, Attribute name) => (Name name, Name name) -> ([T name str] -> Bool) -> (str -> str) -> (Filter name str)
-- | process the attribute list of a specific tag
processAttrsA :: (Tag name, Attribute name, Applicative m) => (Name name -> Bool) -> ([T name str] -> m [T name str]) -> (T name str -> m (T name str))
processAttrValueA :: (Tag name, Attribute name, Applicative m) => (Name name, Name name) -> (str -> m str) -> (T name str -> m (T name str))
processAttrValueCondA :: (Tag name, Attribute name, Applicative m) => (Name name, Name name) -> ([T name str] -> Bool) -> (str -> m str) -> (T name str -> m (T name str))
liftA :: (Tag name, Attribute name, Applicative m) => (Name name -> [T name str] -> m (Name name, [T name str])) -> (T name str -> m (T name str))
format :: (Tag name, Attribute name, C string) => (Name name -> Bool) -> ShowS -> T name string -> [ShowS] -> ShowS
instance (Show name, Show str, Attribute name) => Show (T name str)
instance Traversable (T name)
instance Foldable (T name)
instance Functor (T name)
module Data.Tree.BranchLeaf
data T branch leaf
Branch :: branch -> [T branch leaf] -> T branch leaf
Leaf :: leaf -> T branch leaf
map :: (branch0 -> branch1) -> (leaf0 -> leaf1) -> (T branch0 leaf0 -> T branch1 leaf1)
mapCond :: (branch -> Bool) -> (branch -> branch) -> (leaf -> leaf) -> (T branch leaf -> T branch leaf)
fold :: (branch -> [a] -> a) -> (leaf -> a) -> (T branch leaf -> a)
switch :: (branch -> [T branch leaf] -> a) -> (leaf -> a) -> (T branch leaf -> a)
allSubTrees :: T branch leaf -> [T branch leaf]
mapA :: (Applicative m) => (branch0 -> m branch1) -> (leaf0 -> m leaf1) -> (T branch0 leaf0 -> m (T branch1 leaf1))
foldA :: (Applicative m) => (branch -> m ([a] -> a)) -> (leaf -> m a) -> (T branch leaf -> m a)
foldM :: (Monad m) => (branch -> [a] -> m a) -> (leaf -> m a) -> (T branch leaf -> m a)
instance (Show branch, Show leaf) => Show (T branch leaf)
module Data.Tree.BranchLeafLabel
type T i branch leaf = (i, Elem i branch leaf)
data Elem i branch leaf
Branch :: branch -> [T i branch leaf] -> Elem i branch leaf
Leaf :: leaf -> Elem i branch leaf
map :: (branch0 -> branch1) -> (leaf0 -> leaf1) -> (T i branch0 leaf0 -> T i branch1 leaf1)
mapLabel :: (i -> j) -> (T i branch leaf -> T j branch leaf)
mapCond :: (branch -> Bool) -> (branch -> branch) -> (leaf -> leaf) -> (T i branch leaf -> T i branch leaf)
-- | Process the subtrees for which the predicate holds. If the predicate
-- matches subtrees of a matching subtree, the sub-subtrees are not
-- mapped.
mapSubTrees :: (branch -> Bool) -> ((branch, [T i branch leaf]) -> (branch, [T i branch leaf])) -> (T i branch leaf -> T i branch leaf)
filterBranch :: (branch -> Bool) -> (T i branch leaf -> [T i branch leaf])
fold :: (i -> a -> b) -> (branch -> [b] -> a) -> (leaf -> a) -> (T i branch leaf -> b)
switch :: (i -> a -> b) -> (branch -> [T i branch leaf] -> a) -> (leaf -> a) -> (T i branch leaf -> b)
foldLabel :: (i -> branch -> [b] -> b) -> (i -> leaf -> b) -> (T i branch leaf -> b)
switchLabel :: (i -> branch -> [T i branch leaf] -> b) -> (i -> leaf -> b) -> (T i branch leaf -> b)
switchElem :: (branch -> [T i branch leaf] -> a) -> (leaf -> a) -> (Elem i branch leaf -> a)
allSubTrees :: T i branch leaf -> [T i branch leaf]
mapA :: (Applicative m) => (branch0 -> m branch1) -> (leaf0 -> m leaf1) -> (T i branch0 leaf0 -> m (T i branch1 leaf1))
mapCondA :: (Applicative m) => (branch -> Bool) -> (branch -> m branch) -> (leaf -> m leaf) -> (T i branch leaf -> m (T i branch leaf))
foldA :: (Applicative m) => (i -> m (a -> b)) -> (branch -> m ([b] -> a)) -> (leaf -> m a) -> (T i branch leaf -> m b)
foldM :: (Monad m) => (i -> a -> m b) -> (branch -> [b] -> m a) -> (leaf -> m a) -> (T i branch leaf -> m b)
instance (Show i, Show branch, Show leaf) => Show (Elem i branch leaf)
module Text.XML.WraXML.Tree
newtype T i name str
Cons :: T i (Branch name str) (Leaf name str) -> T i name str
unwrap :: T i name str -> T i (Branch name str) (Leaf name str)
data Branch name str
Tag :: T name str -> Branch name str
getElement :: Branch name str -> T name str
data Leaf name str
Text :: Bool -> str -> Leaf name str
Comment :: String -> Leaf name str
CData :: String -> Leaf name str
PI :: (Name name) -> (T name str) -> Leaf name str
Warning :: String -> Leaf name str
type AttributePlain = (String, String)
wrap :: T i (Branch name str) (Leaf name str) -> T i name str
wrap2 :: i -> Elem i (Branch name str) (Leaf name str) -> T i name str
lift :: (T i (Branch name str0) (Leaf name str0) -> T j (Branch name str1) (Leaf name str1)) -> (T i name str0 -> T j name str1)
liftA :: (Applicative m) => (T i (Branch name str0) (Leaf name str0) -> m (T i (Branch name str1) (Leaf name str1))) -> (T i name str0 -> m (T i name str1))
-- | Build some textual content.
literal :: str -> T i name str
literalIndex :: i -> str -> T i name str
comment :: String -> T i name str
commentIndex :: i -> String -> T i name str
warning :: String -> T i name str
warningIndex :: i -> String -> T i name str
cdata :: String -> T i name str
cdataIndex :: i -> String -> T i name str
processing :: Name name -> T name str -> T i name str
processingIndex :: i -> Name name -> T name str -> T i name str
tag :: Name name -> [T i name str] -> T i name str
tagAttr :: Name name -> [T name str] -> [T i name str] -> T i name str
tagIndexAttr :: i -> Name name -> [T name str] -> [T i name str] -> T i name str
liftTrans :: (a -> b) -> (a -> [b])
liftText :: (String -> String) -> (Leaf name String -> Leaf name String)
liftTextA :: (Applicative m) => (String -> m String) -> (Leaf name String -> m (Leaf name String))
liftElement :: (T name str0 -> T name str1) -> (Branch name str0 -> Branch name str1)
liftElementA :: (Applicative m) => (T name str0 -> m (T name str1)) -> (Branch name str0 -> m (Branch name str1))
-- | If the Tree is a Leaf, then return False. Otherwise return the result
-- of the predicate.
checkTag :: (T name str -> Bool) -> (T i name str -> Bool)
maybeTag :: T i name str -> Maybe (T name str, [T i name str])
maybeText :: T i name str -> Maybe str
maybeTextLeaf :: Leaf name str -> Maybe str
type Filter i name str = T i name str -> T i name str
type FilterA m i name str = T i name str -> m (T i name str)
mapText :: (String -> String) -> (T i name String -> T i name String)
mapIndex :: (i -> j) -> T i name str -> T j name str
mapTag :: (Filter name str) -> (Filter i name str)
-- | You can e.g. filter text1 b> text2 </b text3 to
-- text1 text2 text3 by filterTag (checkTagName
-- (b/=)).
filterTag :: (T name str -> Bool) -> (T i name str -> [T i name str])
mapCond :: (T name str -> Bool) -> (Filter name str) -> (Leaf name str -> Leaf name str) -> (Filter i name str)
-- | Find all branches where the predicate applies and return a list of
-- matching sub-trees in depth-first order.
--
-- Example: filterTagsFlatten (checkTagName (meta==))
filterTagsFlatten :: (T name str -> Bool) -> T i name str -> [(T name str, [T i name str])]
filterElementsFlatten :: (T name str -> Bool) -> T i name str -> [T name str]
allSubTrees :: T i name str -> [T i name str]
-- | merge subsequent string leafs
mergeStrings :: (Monoid str) => Filter i name str
mergeTopStrings :: (Monoid str) => [T i name str] -> [T i name str]
-- | Process all sub-tree lists in bottom-up order.
processAllSubTrees :: ([T i name str] -> [T i name str]) -> Filter i name str
processSubTrees :: (Name name -> Bool) -> ([T i name str] -> [T i name str]) -> Filter i name str
processSubTreesAttrs :: (Name name -> Bool) -> (([T name str], [T i name str]) -> ([T name str], [T i name str])) -> Filter i name str
mapTextA :: (Applicative m) => (String -> m String) -> (T i name String -> m (T i name String))
mapCondA :: (Applicative m) => (T name str -> Bool) -> (T name str -> m (T name str)) -> (Leaf name str -> m (Leaf name str)) -> (FilterA m i name str)
unescape :: T i name T -> T i name String
-- | Use ASCII characters, XML entity references and character references
-- for representing strings. That's not human readable, but portable.
escape :: T i name String -> T i name T
-- | Decode characters like those from UTF-8 scheme.
decodeSpecialChars :: (Tag name, Attribute name) => String -> T i name T -> [T i name String]
maybeDecodeSpecialChars :: (Tag name, Attribute name) => String -> T i name T -> Maybe [T i name String]
-- | Conversion errors are appended as warnings to the tree.
decodeSpecialCharsDecoder :: (Tag name, Attribute name) => DecodingFctEmbedErrors -> T i name T -> [T i name String]
decodeAttrs :: (Tag name, Attribute name) => (T -> EmbeddedExceptions) -> [T name T] -> Writer [String] [T name String]
decodeAttr :: (Tag name, Attribute name) => (T -> EmbeddedExceptions) -> Name name -> T -> Writer [String] String
maybeDecodeUTF8Chars :: String -> T i name T -> Maybe (T i name String)
formatMany :: (Tag name, Attribute name, C string) => [T i name string] -> ShowS
format :: (Tag name, Attribute name, C string) => T i name string -> ShowS
formatBranch :: (Tag name, Attribute name, C string) => Branch name string -> [ShowS] -> ShowS
formatLeaf :: (Tag name, Attribute name, C string) => Leaf name string -> ShowS
instance (Show name, Show str, Attribute name) => Show (Branch name str)
instance (Show i, Show name, Show str, Attribute name) => Show (T i name str)
instance (Tag name, Attribute name, C string) => C (Leaf name string)
instance (Tag name, Attribute name, C string) => C (T i name string)
instance Traversable (T i name)
instance Foldable (T i name)
instance Functor (T i name)
instance Traversable (Leaf name)
instance Foldable (Leaf name)
instance Functor (Leaf name)
instance (Attribute name, Show name, Show str) => Show (Leaf name str)
module Text.HTML.WraXML.Tree
findMetaEncoding :: (Tag name, Attribute name) => T i name String -> Maybe String
-- | Extract META tags which contain HTTP-EQUIV attribute and present these
-- values like HTTP headers.
getMetaHTTPHeaders :: (Tag name, Attribute name) => T i name String -> [(String, String)]
-- | Convert special characters of XmlString into Unicode according to the
-- encoding given in a META HTTP-EQUIV tag.
decodeSpecialCharsMetaEncoding :: (Tag name, Attribute name) => T i name T -> [T i name String]
formatMany :: (Tag name, Attribute name, C string) => [T i name string] -> ShowS
format :: (Tag name, Attribute name, C string) => T i name string -> ShowS
formatBranch :: (Tag name, Attribute name, C string) => Branch name string -> [ShowS] -> ShowS
formatManyXHTML :: (Tag name, Attribute name, C string) => [T i name string] -> ShowS
formatXHTML :: (Tag name, Attribute name, C string) => T i name string -> ShowS
formatBranchXHTML :: (Tag name, Attribute name, C string) => Branch name string -> [ShowS] -> ShowS
-- | not xhtml: show br xhtml: show
-- br/ Unfortunately we cannot generally merge
-- tag></tag>@ to @<tag/ since browsers
-- expect e.g. separated div></div.
formatBranchGen :: (Tag name, Attribute name, C string) => Bool -> Branch name string -> [ShowS] -> ShowS
module Text.XML.WraXML.Document
data T i name str
Cons :: Maybe [T name str] -> Maybe String -> [T i name str] -> T i name str
xmlDeclaration :: T i name str -> Maybe [T name str]
docType :: T i name str -> Maybe String
content :: T i name str -> [T i name str]
lift :: (Tag name, Attribute name) => (str0 -> str1) -> ([T i name str0] -> [T i name str1]) -> T i name str0 -> T i name str1
formatXMLDeclaration :: (Tag name, Attribute name, C string) => [T name string] -> ShowS
formatDocType :: String -> ShowS
format :: (Tag name, Attribute name, C string) => T i name string -> ShowS
instance (Show i, Show name, Show str, Attribute name) => Show (T i name str)
instance (Tag name, Attribute name, C string) => C (T i name string)
instance (Tag name, Attribute name) => Functor (T i name)
module Text.HTML.WraXML.Document
data T i name str
Cons :: Maybe [T name str] -> Maybe String -> [T i name str] -> T i name str
xmlDeclaration :: T i name str -> Maybe [T name str]
docType :: T i name str -> Maybe String
content :: T i name str -> [T i name str]
lift :: (Tag name, Attribute name) => (str0 -> str1) -> ([T i name str0] -> [T i name str1]) -> T i name str0 -> T i name str1
format :: (Tag name, Attribute name, C string) => T i name string -> ShowS
module Text.HTML.WraXML.Table
type T i name str = [[[T i name str]]]
-- | Ignores all non-table-row-tags and all non-table-cell-tags.
simpleFromRows :: (Tag name) => [T i name str] -> T i name str
simpleFromRow :: (Tag name) => [T i name str] -> [[T i name str]]
-- | This module allows construction of XML trees using String literals
-- instead of names.
module Text.XML.WraXML.Tree.Literal
data T i name str
processing :: (Tag name, Attribute name) => String -> T name str -> T i name str
processingIndex :: (Tag name, Attribute name) => i -> String -> T name str -> T i name str
tag :: (Tag name, Attribute name) => String -> [T i name str] -> T i name str
tagAttr :: (Tag name, Attribute name) => String -> [(String, str)] -> [T i name str] -> T i name str
tagIndexAttr :: (Tag name, Attribute name) => i -> String -> [(String, str)] -> [T i name str] -> T i name str
-- | Build some textual content.
literal :: str -> T i name str
literalIndex :: i -> str -> T i name str
comment :: String -> T i name str
commentIndex :: i -> String -> T i name str
warning :: String -> T i name str
warningIndex :: i -> String -> T i name str
cdata :: String -> T i name str
cdataIndex :: i -> String -> T i name str
-- | Very lazy HTML tree parser using TagSoup as lexer.
module Text.XML.WraXML.Tree.TagSoup
type PosTag = (T, Tag)
defaultFilename :: String
attachPos :: [Tag] -> [PosTag]
removeMetaPos :: [PosTag] -> [PosTag]
type XmlTree name string = T T name string
-- | A TagSoup could represent multiple HTML trees, e.g. with some
-- introducing comments.
toXmlTreesString :: (Tag name, Attribute name) => [Tag] -> [XmlTree name String]
toXmlTreesAux :: (Tag name, Attribute name) => [PosTag] -> [XmlTree name String]
type Parser i a = Parser (i, Tag) a
parseBranch :: (Tag name, Attribute name) => Parser i (T i name String)
parseSubTrees :: (Tag name, Attribute name) => T i name String -> Name name -> Parser i [T i name String]
parseTerminator :: (Tag name, Attribute name) => Name name -> Parser i [T i name String]
parseOptions :: ParseOptions
example :: [XmlTree T String]
module Text.XML.WraXML.Document.TagSoup
dropSpace :: [PosTag] -> [PosTag]
withoutLeadingSpace :: ([PosTag] -> (a, [PosTag])) -> State [PosTag] a
toXmlDocument :: (Tag name, Attribute name) => [Tag] -> T T name String
toXmlDocumentString :: (Tag name, Attribute name) => [Tag] -> T T name String
example :: IO ()
module Text.XML.WraXML.Tree.HXT
fromXmlTree :: (Tag name, Attribute name) => T i name T -> XmlTree
toXmlTree :: (Tag name, Attribute name) => XmlTree -> T () name T
lift :: (Tag name, Attribute name) => Filter () name T -> (XmlTree -> XmlTree)
-- | Lift our XML filters to HXT document processors.
liftFilterToDocument :: (Tag name, Attribute name) => String -> Filter () name T -> (XmlTree -> XmlTree)
checkTagName :: String -> XNode -> Bool
module Text.HTML.WraXML.Tree.HXT
-- | Tidy a piece of HTML code. & -> & - <
-- unquoted tag attribute values: size=-1 -> size=-1 insert
-- omitted closing tags
tidy :: String -> IO String
-- | Like Text.XML.HXT.DOM.XmlTreeFunctions.xshow but it shows empty tags
-- the HTML way. E.g. it emits br>@ instead of
-- @<br\/, noscript><\/noscript>@ instead of
-- @<noscript\/. Many browsers prefer that.
format :: XmlTree -> String
fromHTMLString :: String -> IO XmlTree
-- | Guess the encoding from the META-HTTP-EQUIV attribute, if available.
-- Otherwise fall back to ISO-Latin-1.
fromHTMLStringMetaEncoding :: String -> IO XmlTree
errorAnnFromHTMLStringMetaEncoding :: String -> IO (XmlTree, [ErrorMsg], Int)
-- | Adaption of Text.XML.HXT.Parser.MainFunctions.getXmlDocument
errorAnnFromHTMLStringOpt :: Attributes -> String -> IO (XmlTree, [ErrorMsg], Int)
type ErrorMsg = (Int, String)
getMetaHTTPHeaders :: String -> IO [(String, String)]
module Text.XML.WraXML.Tree.HaXml
fromXmlTree :: (Tag name, Attribute name) => T i name T -> Content i
multiFromXmlTree :: (Tag name, Attribute name) => T i name T -> [Content i]
toXmlTree' :: (Tag name, Attribute name) => Content i -> T i name T
toXmlTree :: (Tag name, Attribute name) => Content i -> T i name T
lift :: (Tag name, Attribute name) => Filter i name T -> (Content i -> Content i)
-- | Lift a filter of HaXml trees to a processor of a HaXml document.
--
-- cf. Text.XML.HaXml.Wrappers.onContent
onContent :: FilePath -> (Content Posn -> Content Posn) -> (Document Posn -> Document Posn)
liftFilterToDocument :: (Tag name, Attribute name) => FilePath -> Filter Posn name T -> (Document Posn -> Document Posn)
processWith :: (Tag name, Attribute name) => Filter Posn name T -> IO ()
-- | Very lazy HTML tree parser using TagSoup as lexer.
module Text.XML.WraXML.Tree.Tagchup
-- | A TagSoup could represent multiple HTML trees, e.g. with some
-- introducing comments.
toXmlTrees :: (Tag name, Attribute name) => [T name string] -> [T T name string]
fromXmlTree :: (Tag name, Attribute name) => T T name string -> [T name string]
fromElement :: (Tag name, Attribute name) => T name string -> T name string
fromLeaf :: (Tag name, Attribute name) => Leaf name string -> T name string
liftElementFilter :: (Tag name, Attribute name) => (T name str -> T name str) -> T name str -> T name str
liftElementCheck :: (T name string -> Bool) -> (T name string -> Bool)
example :: [XmlTree T String]
module Text.XML.WraXML.Document.Tagchup
type XmlDoc = T T
class (CharType char) => CharSpace char
isSpace :: (CharSpace char) => char -> Bool
class StringSpace string
isAllSpace :: (StringSpace string) => string -> Bool
dropSpace :: (StringSpace string) => [T name string] -> [T name string]
withoutLeadingSpace :: (StringSpace string) => ([T name string] -> (a, [T name string])) -> State [T name string] a
toXmlDocument :: (Tag name, Attribute name, StringSpace string) => [T name string] -> XmlDoc name string
example :: IO ()
instance (CharSpace char) => StringSpace [char]
instance CharSpace T
instance CharSpace Char