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

{- |
   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 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 "" show . getName

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

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

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