content: -- ------------------------------------------------------------
  
  {- |
     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
  
  -- ------------------------------------------------------------
  
  