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]