-- ------------------------------------------------------------

{- |
   Module     : Text.XML.HXT.DOM.FormatXmlTree
   Copyright  : Copyright (C) 2008 Uwe Schmidt
   License    : MIT

   Maintainer : Uwe Schmidt (uwe@fh-wedel.de)
   Stability  : stable
   Portability: portable

   Format a xml tree in tree representation

-}

-- ------------------------------------------------------------

module Text.XML.HXT.DOM.FormatXmlTree
    ( formatXmlTree
    , formatXmlContents
    )
where

import Data.Maybe

import Text.XML.HXT.DOM.Interface
import Text.XML.HXT.DOM.ShowXml
import Text.XML.HXT.DOM.XmlNode

-- ------------------------------------------------------------


formatXmlContents       :: XmlTree -> XmlTrees
formatXmlContents :: XmlTree -> XmlTrees
formatXmlContents XmlTree
t
    = [forall a. XmlNode a => String -> a
mkText (XmlTree -> String
formatXmlTree XmlTree
t)]

formatXmlTree           :: XmlTree  -> String
formatXmlTree :: XmlTree -> String
formatXmlTree
    = forall (t :: * -> *) a. Tree t => (a -> String) -> t a -> String
formatTree XNode -> String
xnode2String

xnode2String    :: XNode -> String
xnode2String :: XNode -> String
xnode2String XNode
n
    | forall a. XmlNode a => a -> Bool
isElem XNode
n
        = String
"XTag " forall a. [a] -> [a] -> [a]
++ XNode -> String
showName XNode
n forall a. [a] -> [a] -> [a]
++ XNode -> String
showAtts XNode
n
    | forall a. XmlNode a => a -> Bool
isPi XNode
n
        = String
"XPi "  forall a. [a] -> [a] -> [a]
++ XNode -> String
showName XNode
n forall a. [a] -> [a] -> [a]
++ XNode -> String
showAtts XNode
n
    | Bool
otherwise
        = forall a. Show a => a -> String
show XNode
n
    where

showName        :: XNode -> String
showName :: XNode -> String
showName        = forall b a. b -> (a -> b) -> Maybe a -> b
maybe String
"" forall a. Show a => a -> String
show forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. XmlNode a => a -> Maybe QName
getName

showAtts        :: XNode -> String
showAtts :: XNode -> String
showAtts        = forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap XmlTree -> String
showAl forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. a -> Maybe a -> a
fromMaybe [] forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. XmlNode a => a -> Maybe XmlTrees
getAttrl

showAl          :: XmlTree -> String
showAl :: XmlTree -> String
showAl XmlTree
t        -- (NTree (XAttr an) av)
    | forall a. XmlNode a => a -> Bool
isAttr XmlTree
t
        = String
"\n|   " forall a. [a] -> [a] -> [a]
++ (forall b a. b -> (a -> b) -> Maybe a -> b
maybe String
"" forall a. Show a => a -> String
show forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. XmlNode a => a -> Maybe QName
getName forall a b. (a -> b) -> a -> b
$ XmlTree
t) forall a. [a] -> [a] -> [a]
++ String
"=" forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show (XmlTrees -> String
xshow forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (t :: * -> *) a. Tree t => t a -> [t a]
getChildren forall a b. (a -> b) -> a -> b
$ XmlTree
t)
    | Bool
otherwise
        = forall a. Show a => a -> String
show XmlTree
t

-- ------------------------------------------------------------