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

    {- |
       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 Text.XML.HXT.DOM.Interface
    import Text.XML.HXT.DOM.ShowXml
    import Text.XML.HXT.DOM.XmlNode

    import Data.Maybe

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

    formatXmlContents       :: XmlTree -> XmlTrees
    formatXmlContents t
        = [mkText (formatXmlTree t)]

    formatXmlTree           :: XmlTree  -> String
    formatXmlTree
        = formatTree xnode2String

    xnode2String    :: XNode -> String
    xnode2String n
        | isElem n
            = "XTag " ++ showName n ++ showAtts n
        | isPi n
            = "XPi "  ++ showName n ++ showAtts n
        | otherwise
            = show n
        where

    showName        :: XNode -> String
    showName        = maybe "" showQn . getName

    showAtts        :: XNode -> String
    showAtts        = concatMap showAl . fromMaybe [] . getAttrl

    showAl          :: XmlTree -> String
    showAl t        -- (NTree (XAttr an) av)
        | isAttr t
            = "\n|   " ++ (maybe "" showQn . getName $ t) ++ "=" ++ show (xshow . getChildren $ t)
        | otherwise
            = show t

    showQn          :: QName -> String
    showQn n
        | null ns
            = show $ qualifiedName n
        | otherwise
            = show $ "{" ++ ns ++ "}" ++ qualifiedName n
        where
        ns = namespaceUri n

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