module Text.PrettyPrint.MPPPC.OneDim.Combinators.Fill where

import Text.PrettyPrint.MPPPC.OneDim.Combinators.Layout
import Text.PrettyPrint.MPPPC.OneDim.Combinators.Prim
import Text.PrettyPrint.MPPPC.OneDim.Combinators.Seq
import Text.PrettyPrint.MPPPC.OneDim.Pretty
import Text.PrettyPrint.MPPPC.Printable

width :: Pretty s t -> (Int -> Pretty s t) -> Pretty s t
width d f = column (\ i1 -> d <> column (\ i2 -> f (i2 - i1)))

fill :: Printable s t => Int -> Pretty s t -> Pretty s t
fill f d = width d $ \ w ->
  if w >= f
  then empty
  else spaces (f - w)

fillBreak :: Printable s t => Int -> Pretty s t -> Pretty s t
fillBreak f x = width x $ \ w ->
  if w >  f
  then nest f lineBreak
  else spaces (f - w)

fillCat :: Printable s t => [Pretty s t] -> Pretty s t
fillCat = fold (<//>)

fillSep :: Printable s t => [Pretty s t] -> Pretty s t
fillSep = fold (</>)