{-# LANGUAGE OverloadedStrings #-}

module Media.Subtitles.SRT.Formatting
  ( linef,
    srtf,
  )
where

import Formatting
import Media.Subtitles.SRT
import Media.Timestamp.Formatting

-- | Formats a `Line` to SRT format.
--
-- @since 0.1.0.0
linef :: Format r (Line -> r)
linef :: Format r (Line -> r)
linef = (Line -> Int) -> Format r (Int -> r) -> Format r (Line -> r)
forall s a r. (s -> a) -> Format r (a -> r) -> Format r (s -> r)
accessed Line -> Int
index Format r (Int -> r)
forall a r. Integral a => Format r (a -> r)
int Format r (Line -> r) -> Format r r -> Format r (Line -> r)
forall r a r'. Format r a -> Format r' r -> Format r' a
% Format r r
"\n" Format r (Line -> r)
-> Format r (Line -> r) -> Format r (Line -> r)
forall a. Semigroup a => a -> a -> a
<> (Line -> Range) -> Format r (Range -> r) -> Format r (Line -> r)
forall s a r. (s -> a) -> Format r (a -> r) -> Format r (s -> r)
accessed Line -> Range
range (Format r (Time -> r) -> Format r (Range -> r)
forall r. Format r (Time -> r) -> Format r (Range -> r)
rangeaf Format r (Time -> r)
forall r. Format r (Time -> r)
timecf) Format r (Line -> r) -> Format r r -> Format r (Line -> r)
forall r a r'. Format r a -> Format r' r -> Format r' a
% Format r r
"\n" Format r (Line -> r)
-> Format r (Line -> r) -> Format r (Line -> r)
forall a. Semigroup a => a -> a -> a
<> (Line -> Text) -> Format r (Text -> r) -> Format r (Line -> r)
forall s a r. (s -> a) -> Format r (a -> r) -> Format r (s -> r)
accessed Line -> Text
dialog Format r (Text -> r)
forall r. Format r (Text -> r)
stext Format r (Line -> r) -> Format r r -> Format r (Line -> r)
forall r a r'. Format r a -> Format r' r -> Format r' a
% Format r r
"\n"

-- | Formats an entire collection of lines to SRT format.
--
-- @since 0.1.0.0
srtf :: Format r (SRT -> r)
srtf :: Format r (SRT -> r)
srtf = (SRT -> [Line]) -> Format r ([Line] -> r) -> Format r (SRT -> r)
forall s a r. (s -> a) -> Format r (a -> r) -> Format r (s -> r)
accessed SRT -> [Line]
unSRT (Text -> Format Builder (Line -> Builder) -> Format r ([Line] -> r)
forall (t :: * -> *) a r.
Foldable t =>
Text -> Format Builder (a -> Builder) -> Format r (t a -> r)
intercalated Text
"\n" Format Builder (Line -> Builder)
forall r. Format r (Line -> r)
linef)