content: {-# LANGUAGE CPP, TypeFamilies, DeriveDataTypeable #-}
  
  module PGIP.Output.Translations
    ( formatTranslations
    ) where
  
  import PGIP.Output.Formatting
  import PGIP.Output.Mime
  
  import Logic.Comorphism (AnyComorphism)
  import Proofs.AbstractState (G_prover)
  
  import Common.Json (ppJson, asJson)
  import Common.ToXml (asXml)
  import Common.Utils
  
  import Text.XML.Light (ppTopElement)
  
  import Data.Data
  
  type TranslationsFormatter = [(G_prover, AnyComorphism)] -> (String, String)
  
  formatTranslations :: Maybe String -> TranslationsFormatter
  formatTranslations format comorphisms = case format of
    Just "json" -> formatAsJSON
    _ -> formatAsXML
    where
    convertedTranslations :: Translations
    convertedTranslations = Translations
      { translations = nubOrd $ map (showComorph . snd) comorphisms }
  
    formatAsJSON :: (String, String)
    formatAsJSON = (jsonC, ppJson $ asJson convertedTranslations)
  
    formatAsXML :: (String, String)
    formatAsXML = (xmlC, ppTopElement $ asXml convertedTranslations)
  
  data Translations = Translations
    { translations :: [String]
    } deriving (Show, Typeable, Data)
  