{-# LANGUAGE LambdaCase #-}
-- | provide phrasing functions for different languages
module Modelling.CdOd.Phrasing (
  phraseChange,
  phraseRelationship,
  trailingCommaGerman,
  ) where

import qualified Modelling.CdOd.Phrasing.German    as German
import qualified Modelling.CdOd.Phrasing.English   as English

import Control.OutputCapable.Blocks (
  ArticleToUse,
  Language (English, German),
  )

import Modelling.Types (
  Change,
  )
import Modelling.CdOd.Types (
  AnyRelationship,
  OmittedDefaultMultiplicities,
  PhrasingKind,
  )

phraseChange
  :: Language
  -> OmittedDefaultMultiplicities
  -> ArticleToUse
  -> Bool
  -> Bool
  -> Change (AnyRelationship String String)
  -> String
phraseChange :: Language
-> OmittedDefaultMultiplicities
-> ArticleToUse
-> Bool
-> Bool
-> Change (AnyRelationship String String)
-> String
phraseChange = \case
  Language
English -> OmittedDefaultMultiplicities
-> ArticleToUse
-> Bool
-> Bool
-> Change (AnyRelationship String String)
-> String
English.phraseChange
  Language
German -> OmittedDefaultMultiplicities
-> ArticleToUse
-> Bool
-> Bool
-> Change (AnyRelationship String String)
-> String
German.phraseChange

phraseRelationship
  :: Language
  -> OmittedDefaultMultiplicities
  -> ArticleToUse
  -> PhrasingKind
  -> Bool
  -> Bool
  -> AnyRelationship String String -> String
phraseRelationship :: Language
-> OmittedDefaultMultiplicities
-> ArticleToUse
-> PhrasingKind
-> Bool
-> Bool
-> AnyRelationship String String
-> String
phraseRelationship = \case
  Language
English -> OmittedDefaultMultiplicities
-> ArticleToUse
-> PhrasingKind
-> Bool
-> Bool
-> AnyRelationship String String
-> String
English.phraseRelationship
  Language
German -> OmittedDefaultMultiplicities
-> ArticleToUse
-> PhrasingKind
-> Bool
-> Bool
-> AnyRelationship String String
-> String
German.phraseRelationship

trailingCommaGerman :: String -> String
trailingCommaGerman :: String -> String
trailingCommaGerman = String -> String
German.trailingComma