packages feed

ansiform-0.7.8.5: src/Ansiform/Page.hs

-- | Page builders and runners.
module Ansiform.Page ( module Ansiform.Page, Internal.Page, Internal.runPage
                , Internal.runPageDefault, Internal.runPageDefault'
                ) where

--------------------------------------------------------------------------------
import           Ansiform.Internal.Page as Internal
import           Ansiform.Internal.Number
import           Ansiform.Internal.Section

-- Page Builders
--------------------------------------------------------------------------------

-- | Builds a page from a list of sections.
page :: [Section] -> Page
page = formPage

-- | Replaces one section at the given index.
amendPage :: Page -> Section -> Number -> Page
amendPage p s n = amendPage' p [s] n

-- | Replaces the sections from the given index onwards.
amendPage' :: Page -> [Section] -> Number -> Page
amendPage' p ss n = formPage $ starter ++ remainder
    where p' = unPage p; n' = unn n
          remainder = ss ++ drop (n' + length ss) p'
          starter = take n' p'