content: module DrawDoc(drawDoc,toDrawing) where
  import FudDraw
  import PrettyDoc
  import PrettyEnv
  import MUtils
  import PfeBrowserColors
  
  drawDoc = toDrawing . runEnv defaultMode
  
  toDrawing = conv . trim
    where
      conv d =
        case d of
  	Empty -> blankD 0
  	Char c -> g c
  	Text s -> g s
  	Attr t d -> fgD (defaultColor t) (conv d) -- a quick hack
  	Nest n d -> indentD (n,conv d) -- hmm
  	Group l ds -> group l (map conv' ds)
  	  where
  	    group l ds =
  	      case l of
  		Horiz Cat -> hboxcaD' 0 (map snd ds)
  		Horiz Sep -> hboxcaD' sep (map snd ds)
  		Vert -> vboxlD' 0 (map indentD ds)
  		HorizOrVert Cat -> catD ds
  		HorizOrVert Sep -> sepD ds
  		Fill Cat -> fcatD ds
  		Fill Sep -> fsepD ds
  
      conv' = apSnd conv . splitNest
  
      noNest = snd . splitNest
  
      splitNest = splitNest' 0
      splitNest' n (Nest n' d) = splitNest' (n+n') d
      splitNest' n d = (n,d)
  
      trim d =
        case d of
  	Nest n d -> case trim d of
  		      Empty -> Empty
  		      d -> Nest n d
  	Group l ds -> case [ d | d<-map trim ds,nonEmpty d] of
  		        [] -> Empty
  			[d] -> d
  			ds -> Group l ds
  	Attr a d -> Attr a (trim d)
          _ -> d
  
  catD = wideOrTallD 0
  sepD = wideOrTallD sep
  
  fcatD = paraD 0
  fsepD = paraD sep
  
  --paraD = hboxcaD'
  --paraD = wideOrTallD
  paraD sep = placedD (paragraphP' (Point sep 0)) . boxD . map snd
  
  --rframeD = frameD "red"
  --bframeD = frameD "blue"
  --frameD c d = stackD [fgD c (g frame),padD 2 d]
  